首页 北理乐学C语言答案,最新

北理乐学C语言答案,最新

举报
开通vip

北理乐学C语言答案,最新7.入门计算圆柱的侧面积及体积#include<stdio.h>voidmain(){doublea,b;scanf("%lf\n%lf",&a,&b);printf("s=%.2lf,v=%.2lf\n",2*3.14*a*b,3.14*a*a*b);}1.Helloworld.输入:无输出:Helloworld.程序:#include<stdio.h>intmain(){printf("Helloworld.\n"...

北理乐学C语言答案,最新
7.入门计算圆柱的侧面积及体积#include<stdio.h>voidmain(){doublea,b;scanf("%lf\n%lf",&a,&b);printf("s=%.2lf,v=%.2lf\n",2*3.14*a*b,3.14*a*a*b);}1.Helloworld.输入:无输出:Helloworld.程序:#include<stdio.h>intmain(){printf("Helloworld.\n");return0;}2.WelcometoBeijing.程序:#include<stdio.h>intmain(){printf("Welcome\n");printf("to\n");printf("Beijing.\n");return0;}3.求A+B输入:整数1整数2输出:整数1+整数2=和程序:#include<stdio.h>intmain(){inta,b;scanf("%d",&a);scanf("%d",&b);printf("%d+%d=%d\n",a,b,a+b);return0;}4.求x的3次方输入:一个整数。输出:该整数的3次方值。程序:#include<stdio.h>intmain(){intx;scanf("%d",&x);printf("%d\n",x*x*x);return0;}5.学习打印你的第一个图形编写一个小程序,要求输出的是4行由*号组成的等腰三角形。程序:#include<stdio.h>intmain(){printf("*\n");printf("***\n");printf("*****\n");printf("*******\n");return0;}6.一年级的算术题输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123444输出:分别输出按照整型数据进行+、-、*、/、*之后的运行结果。程序:#include<stdio.h>intmain(){inta,b;scanf("%d%d",&a,&b);printf("%d+%d=%d\n",a,b,a+b);printf("%d-%d=%d\n",a,b,a-b);printf("%d*%d=%d\n",a,b,a*b);printf("%d/%d=%d\n",a,b,a/b);printf("%d%%%d=%d\n",a,b,a%b);return0;}7.求两个变量的最小值输入:两个整型数输出:两个整型值中的最小值程序:#include<stdio.h>intmain(){inta,b;scanf("%d%d",&a,&b);printf("min=%d\n",a<b?a:b);return0;}8.判断三角形的形状输入:三角型的3条边的长度(int型)。输出:等边三角形:equilateraltriangle等腰三角形:isocelestriangle不构成三角形:non-triangle一般三角形:triangle程序:#include<stdio.h>intmain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){if(a==b&&b==c&&a==c)printf("equilateraltriangle.\n");elseif(a==b||a==c||b==c)printf("isocelestriangle.\n");elseprintf("triangle.\n");}elseprintf("non-triangle.\n");return0;}9.计算圆柱的侧面积及体积输入:第一行输入圆柱的底面半径r第二行输入圆柱的高h输出:s=<圆柱的侧面积>,v=<圆柱的体积>要求1.所有变量都定义为双精度类型2.结果精确到小数点后两位程序:#include<stdio.h>#definePI3.1415926intmain(){doubler,h,s,v;scanf("%lf",&r);scanf("%lf",&h);s=2*PI*r*h;v=PI*r*r*h;printf("s=%.2f,v=%.2f\n",s,v);return0;}10.计算时钟的夹角背景:钟面上的时针和分针之间的夹角总是在0~180之间(包括0和180)。举例来说,在十二点的时候两针之间的夹角为0,而在六点的时候夹角为180,在三点的时候为90。本题要解决的是计算12:00到11:59之间任意一个时间的夹角。输入:每组测试数据包含两个数字:第一个数字代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 小时(大于0小于等于12),第二个数字代表分(在区间[0,59]上)。输出:对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。程序:#include<stdio.h>#include<math.h>intmain(){inth,m;floatd1,d2,d;scanf("%d%d",&h,&m);d1=30*(h+m/60.0);d2=m*360/60.0;d=fabs(d1-d2);if(d>180)d=360-d;printf("At%d:%dtheangleis%.1fdegrees.\n",h,m,d);return0;}11.找出最大素数素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。输入:取值范围输出:该范围内的最大素数程序:#include<stdio.h>intmain(){intn,i,j;scanf("%d",&n);for(i=n;i>=1;i--){for(j=2;j<i;j++)if(i%j==0)break;if(j==i){printf("Themaxprimenumberis%d.\n",i);break;}}}12.求最后3位数值输入:a和n的值。假设a<=150。输出:求a的n次方的最后3位数。程序:#include<stdio.h>intmain(){longints=1;inta,n,i=1,t=1;scanf("%d%d",&a,&n);if(n==0)printf("Thelast3numbersis1.\n");else{for(i=1;i<=n;i++){s=(s*a)%1000;}t=s%1000;if(t>=0&&t<10)printf("Thelast3numbersis00%d.\n",t);if(t>=10&&t<100)printf("Thelast3numbersis0%d.\n",t);if(t>=100&&t<1000)printf("Thelast3numbersis%d.\n",t);}return0;}13.贪吃的猴子有一只猴子,第一天摘了若干个桃子,当即吃了一半,但还觉得不过瘾,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一般加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。输入:天数n输出:第一天的桃子个数程序:#include<stdio.h>intmain(){inti,n,amount=1;scanf("%d",&n);for(i=n-1;i>=1;i--)amount=2*(amount+i);printf("Themonkeygot%dpeachsinfirstday.\n",amount);}14.黑色星期五在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”。输入:年份输出:判断该年是否包含黑色星期五,如包含,给出具体日期程序:#include<stdio.h>intmain(){inti,n=0,year,month[12]={0};inta[13]={0,13,44,73,104,134,165,195,226,257,287,318,348};intb[13]={0,13,44,72,103,133,164,194,225,256,286,317,347};scanf("%d",&year);for(i=1;i<13;i++){if((year%4==0&&year%100!=0)||year%400==0){if((year-1+((year-1)/4)-((year-1)/100)+((year-1)/400)+a[i])%7==5){n++;month[n]=i;}}elseif((year-1+((year-1)/4)-((year-1)/100)+((year-1)/400)+b[i])%7==5){n++;month[n]=i;}}if(n==1){printf("Thereis%dBlackFridayinyear%d.\n",n,year);printf("Itis:\n");printf("%d/%d/13\n",year,month[1]);}else{printf("Thereare%dBlackFridaysinyear%d.\n",n,year);printf("Theyare:\n");for(i=1;i<=n;i++){printf("%d/%d/13\n",year,month[i]);}}return0;}15.你会输出一行星号?我们才开始上机,现在需要我们用最简单得办法,在一行中输出N个星号。输入:N值输出:一行中N个星号。程序:#include<stdio.h>intmain(){inti,n;scanf("%d",&n);for(i=1;i<=n;i++)printf("*");printf("\n");}16.计算SUM的值已知公式:SUM=1+1/2+1/3+1/4+...+1/n输入:n输出:表达式sum的值。结果保留6位小数。程序:#include<stdio.h>intmain(){inti,n;doublesum=0;scanf("%d",&n);for(i=1;i<=n;i++)sum+=1.0/i;printf("sum=%.6lf\n",sum);return0;}17.寻找特殊整数请编写一个程序寻找一种特殊整数:一个n位的正整数等于其各位数字的n次方之和。例如:407=4×4×4+0×0×0+7×7×7。所以407就是一个特殊数。输入:正整数的位数n(n<=6)。输出:所有此n位特殊数。每个数占一行。若不存在符合条件的特殊数,则输出提示:“Nooutput.”;若存在,则从小到大进行输出。说明:假设输入为4,在4位整数中,有3个4位的特殊数,则输出格式为(输出中的1111、2222和9999并不是4位特殊数,只是格式样例):111122229999程序:#include<stdio.h>#include<math.h>intmain(){intn,i,j,num,t,s=0,t1,flag=0;scanf("%d",&n);t=pow(10,n-1);for(i=t;i<t*10;i++){t1=i;s=0;for(j=1;t1!=0;j++){num=t1%10;s+=pow(num,n);t1=t1/10;}if(s==i){flag=1;printf("%d\n",i);}}if(flag==0)printf("Nooutput.\n");return0;}18.空心的倒三角型输入:输入三角形的高度(h>=0)。输出:打印相应的空心倒三角形。图样参见测试用例。程序:#include<stdio.h>#include<math.h>intmain(){inti,j,h;scanf("%d",&h);for(i=1;i<=h;i++){for(j=1;j<i;j++)printf("");if(i==1||i==h){for(j=1;j<=2*(h-i)+1;j++)printf("*");printf("\n");}else{printf("*");for(j=1;j<=2*(h-i)-1;j++)printf("");printf("*\n");}}return0;}19.空心字符菱形输入:菱型起始字母和菱形的高度。输出:参看测试用例,打印空心的由字符组成的菱形。程序:#include<stdio.h>#include<math.h>intmain(){inti,j,h;charch;scanf("%c%d",&ch,&h);for(i=1;i<=h;i++){for(j=1;j<=h-i;j++)printf("");printf("%c",ch+i-1);for(j=1;j<=2*i-3;j++)printf("");if(i==1){printf("\n");continue;}printf("%c\n",ch+i-1);}for(i=h+1;i<=2*h-1;i++){for(j=1;j<=i-h;j++)printf("");printf("%c",ch+(2*h-1)-i);for(j=1;j<=(2*h-1-i)*2-1;j++)printf("");if(i==2*h-1){printf("\n");continue;}printf("%c\n",ch+(2*h-1)-i);}return0;}20.空心梯形输入行数n和首数字字符,在屏幕上输出由数字围起的高和下底宽度均n的空心梯形。要求:输出的数字是循环的,即输出数字9后再输出的数字是0。输入:行数n和首字符输出:空心梯形程序:#include<stdio.h>#include<math.h>intmain(){inti,j,n,f,t=0;scanf("%d%d",&n,&f);t=f;for(j=1;j<=3*n-2;j++){if(j==3*n-2)printf("%d",t);elseprintf("%d",t);if(j<(3*n-1)/2){if(t==9)t=0;elset++;}elseif(j==(3*n-1)/2&&n%2==0)continue;else{if(t==0)t=9;elset--;}}printf("\n");t=f;for(i=2;i<=n;i++){for(j=1;j<=2*(i-1);j++)printf("");if(i==n){for(j=1;j<=(n+1)/2;j++){if(t==9){t=0;printf("%d",t);}elseprintf("%d",++t);}for(j=1;j<=n/2;j++){if(t==0&&n%2!=0)t=9;elseif(j==1&&n%2==0){if(j==n/2)printf("%d\n",t);elseprintf("%d",t);continue;}elset--;if(j==n/2)printf("%d\n",t);elseprintf("%d",t);}}else{if(t==9){printf("0");for(j=1;j<=6*n-4*i-3;j++)printf("");printf("0\n");t=0;}else{t++;printf("%d",t);for(j=1;j<=6*n-4*i-3;j++)printf("");printf("%d\n",t);}}}return0;}H1:计算通用产品代码(UPC)的校验位(选作)下面是一种计算校验位的方法:首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。然后把第二位、第四位、第六位、第八位和第十位数字相加。接着把第一次加法结果乘以3后再加上第二次加法的结果。随后,再把上述结果减去1。减法后的结果除以10取余数。最后,用9减去上一步骤中得到的余数。现在以Morton碘盐为例,第一组数字的加法是0+4+0+0+0+3=7,而第二组数字的加法是2+6+0+1+0=9。把第一组加法值乘以3后再加上第二组加法值得到的结果是30。再减去1,结果变为29。再把这个值除以10取余数为9。9在减去余数结果9,最终值为0。输入:每次输入三行数据,第一行是UPC的第一位数字,第二行是UPC的第一组五位数字,第三行是UPC的第二组五位数字。输出:UPC的校验位程序:#include<stdio.h>#include<math.h>intmain(){inti,j,s1=0,s2=0,t;inta[11];charb[6],c[6];scanf("%d",&a[0]);scanf("%s",b);scanf("%s",c);for(i=0,j=1;i<5;i++,j++)a[j]=b[i]-48;for(i=0,j=6;i<5;i++,j++)a[j]=c[i]-48;for(i=0;i<11;i++){if(i%2==0)s1+=a[i];elses2+=a[i];}t=9-(s1*3+s2-1)%10;printf("%d\n",t);return0;}H2:数制转换(选作)这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如12和5,在十进制下它们是不等的,但若12使用3进制而5使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制,12和5就可以是相等的。程序的输入是两个数字M和N(其十进制的值不超过1000000000),它们的进制在2~36之间。对于十以下的数字,用0~9表示,而十以上的数字,则使用大写的A~Z表示。求出分别在2~36哪种进制下M和N相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。程序:#include<stdio.h>intmain(){longintpm=0,pn=0,s=0,t=0,w=1,e=1,p=0,q=0;inta[30],b[30];charm[30],n[30];inti,j,g,k,max1=0,max2=0,flag=0;scanf("%s%s",m,n);for(i=0;m[i]!='\0';i++){if(m[i]>='A'&&m[i]<='Z')a[i]=m[i]-55;if(m[i]>='0'&&m[i]<='9')a[i]=m[i]-48;max1=max1<(a[i]+1)?(a[i]+1):max1;max1=max1<2?2:max1;}pm=i;for(j=0;n[j]!=0;j++){if(n[j]>='A'&&n[j]<='Z')b[j]=n[j]-55;if(n[j]>='0'&&n[j]<='9')b[j]=n[j]-48;max2=max2<(b[j]+1)?(b[j]+1):max2;max2=max2<2?2:max2;}pn=j;for(i=max1,j=max2;i<=36&&j<=36;){p=0;q=0;w=1;e=1;for(g=pm-1;g>=0;g--){p+=a[g]*w;w=w*i;}for(k=pn-1;k>=0;k--){q+=b[k]*e;e=e*j;}if(p<q)i++;elseif(p>q)j++;else{flag=1;printf("%s(base%d)=%s(base%d)\n",m,i,n,j);break;}}if(flag==0)printf("%sisnotequalto%sinanybase2..36\n",m,n);return0;}21.零钱换整钱小明手中有一堆硬币,小红手中有若干张10元的整钱。已知1角的硬币厚度为1.8mm,5角的硬币厚1.5mm,1元的硬币为2.0mm。小明和小红一起玩游戏,小红拿出若干张10元的纸币,小明要将1角的硬币放成一摞,将5角的硬币硬币放成一摞,将1元的硬币放成一摞,如果3摞硬币一样高,并且金额能够正好小红要求的面值,则双方可以进行交换,否则没有办法交换。输入:小红希望交换几张10元的纸币输出:1角的数量,5角的数量,1元的数量程序:三种硬币厚度公倍数:18mm(1角10个共1元,5角12个共6元,1元9个共9元,要想3摞硬币一样高总钱数必须是16元(1+6+9)的公倍数)#include<stdio.h>intmain(){intn,t,x,y,z;scanf("%d",&n);t=n*10;if(t%16!=0)printf("Nochange.\n");else{t=t/16;x=t*10;y=t*12;z=t*9;printf("%d,%d,%d\n",x,y,z);}return0;}22.买东西.某商品有A、B、C三种品牌,各品牌的价格各不相同,其中A品牌的价格为每个5元,B品牌为每个3元,而C品牌为每3个1元。如果要用M元钱买N个该商品,要求每个商品至少买一个,编程求各种品牌各能买多少个。输入:先后输入M(钱数)及N(商品个数)的实际数值输出:所有可能情况下可以购买的3种商品的个数,按A、B、C品牌的顺序输出,用逗号分隔。例如:2,30,68;表示A品牌商品2个、B品牌商品30个、C品牌商品68个。要求:因为有多个结果,结果的排序按照A品牌的个数从少到多的顺序输出。程序:#include<stdio.h>intmain(){inti,j,k;floatm,n;scanf("%f%f",&m,&n);for(i=1;i<n-1;i++){for(j=1;j<=n-1-i;j++){for(k=1;k<=n-i-j;k++)if((i*5+j*3+k*1.0/3)==m&&i+j+k==n)printf("%d,%d,%d\n",i,j,k);}}return0;}23.谁能出线电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。输入:按顺序给出一个小组10个人的最后得分(int)。输出:能够出线的学生序号(0~9)。程序:#include<stdio.h>intmain(){inti,s[10]={0},max=0;for(i=0;i<10;i++){scanf("%d",&s[i]);if(max<s[i])max=s[i];}for(i=0;i<10;i++){if(s[i]==max)printf("%d\n",i);}return0;}24.寻找特殊偶数有一种特殊偶数,它每一位上的数字都两两不相同。我们现在需要找出四位数中某一区间内的这类偶数。输入所要寻找的四位偶数的范围。每组输入有两个数字:第一个数字是最小范围;第二个数字是最大范围。如果输入遇到0,输入结束。输出列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。程序:#include<stdio.h>#include<math.h>main(){inti,j,k,a,b,c,d,m=0,e;for(e=0;e>=0;e++){scanf("%d%d",&i,&j);if((i==0)||(j==0))break;elseif((i>9999||i<1000)||(j>9999||j<1000))printf("Error\n");else{for(k=i;k<=j;k++){if(k%2==1)continue;a=k/1000;b=(k%1000)/100;c=(k%100)/10;d=k%10;if((((a==b)||(b==c))||(c==d))||((d==a)||((a==c)||(d==b))))continue;printf("%d",k);m+=1;}printf("\ncounter=%d\n",m);m=0;}}}25.输出字母围起的正方形输入N*N图形正方形的边长N,图形左上角的字母,输出由字母围成的空心正方形。输出的字母是顺时针连续的,且是循环的,即输出字母'Z'后输出字母"A"。注意在两个字母之间有一个空格。程序:#include<stdio.h>intmain(){intn,i,j,t;charm;scanf("%d%c",&n,&m);for(i=0;i<n;i++){if(i==0){for(j=0;j<n;j++){t=m+j;if((m<=90&&t>90)||(m>96&&t>122))t=t-26;if(j==n-1)printf("%c\n",t);elseprintf("%c",t);}}elseif(i==n-1){for(j=0;j<n;j++){t=m+3*n-3-j;if((m<=90&&t>90)||(m>96&&t>122))t=t-26;if(j==n-1)printf("%c\n",t);elseprintf("%c",t);}}else{for(j=0;j<2*n-1;j++){if(j==0){t=m+4*n-4-i;if((m<=90&&t>90)||(m>96&&t>122))t=t-26;printf("%c",t);}elseif(j==2*n-2){t=m+n-1+i;if((m<=90&&t>90)||(m>96&&t>122))t=t-26;printf("%c\n",t);}elseprintf("");}}}return0;}H3:猜数字(选作)有如下一组数字,其中每个数字都在1~63之间,135791113151719212325272931333537394143454749515355575961632367101114151819222326273031343538394243464750515455585962634567121314152021222328293031363738394445464752535455606162638910111213141524252627282930314041424344454647565758596061626316171819202122232425262728293031484950515253545556575859606162633233343536373839404142434445464748495051525354555657585960616263现在需要编写一个程序,当从键盘输入某数字在且仅在哪几行出现了,该程序可以“猜”出这个数字是几。输入:程序的输入是一串以空白符分开的数字,当输入0时表示输入结束。输出:输出猜到的数字。程序:#include<stdio.h>intmain(){inta[7],m,n=0,i,p=0;for(i=0;i<7;i++){scanf("%d",&a[i]);n++;if(a[i]==0){break;}scanf("");}for(m=1;m<64;m++){p=0;for(i=0;i<(n-1);i++){if(a[i]==1){if(m==m/2*2){p=1;break;}}if(a[i]==2){if(m%4!=3&&m%4!=2){p=1;break;}}if(a[i]==3){if(m%8!=4&&m%8!=5&&m%8!=6&&m%8!=7){p=1;break;}}if(a[i]==4){if(m%16!=8&&m%16!=9&&m%16!=10&&m%16!=11&&m%16!=12&&m%16!=13&&m%16!=14&&m%16!=15){p=1;break;}}if(a[i]==5){if(m>31&&m<48||m<16){p=1;break;}}if(a[i]==6){if(m<32){p=1;break;}}}if(p==0){printf("%d\n",m);break;}}return0;}H4:小蜜蜂(选作)一只小蜜蜂在如下图所示的蜂窝上爬行。它爬行时,只能从一个格爬到相邻的大号格子中。例如,从1号格子可以爬到2号或者3号格子,从2号则可以爬到3号或者4号格子。请问从一个格子a爬到一个格子b一共有多少种可行的路线。输入:分别是起始点a和终止点b的编号。(a和b在1~100之间,且a<b。)输出:程序:#include"stdio.h"#defineN50intmain(){intb[N]={0};intc[N]={0};inti,j,k,n,a1,a2,t,l;b[1]=c[1]=1;scanf("%d%d",&a1,&a2);n=a2-a1+1;for(j=3;j<=n;j++){for(i=1;i<N;i++){t=b[i]+c[i];if(l==1){c[i]=b[i]-1;l=0;}elsec[i]=b[i];b[i]=t;if(b[i]>=10){l=1;b[i+1]=b[i+1]+1;b[i]=b[i]%10;}}}k=N;while(b[--k]==0){}for(i=k;i>=1;i--)printf("%d",b[i]);printf("\n");return0;}#include<stdio.h>intmain(){longdoublenum1,num2,num3=0;inta=0,b=0,i;scanf("%d%d",&a,&b);num1=1;num2=2;if(b-a==1)printf("1\n");elseif(b-a==2)printf("2\n");else{for(i=3;i<=b-a;i++){num3=num1+num2;num1=num2;num2=num3;}printf("%.0lf\n",num3);}return0;}H5.铺地板(选作)背景:你是一名室内装潢工程队的配料员。你的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案如下: 1 2 6 7 15 3 5 8 14 16 4 9 13 17 22 10 12 18 21 23 11 19 20 24 25学了C语言以后,你决定编写一个程序,帮助你的同伴生成这样的图形。输入:方阵N的大小。输出方阵。程序:#include<stdio.h>intmain(){inti=0,j=0,g,n,t=1;inta[100][100];scanf("%d",&n);for(g=0;g<n;g++){if(g%2!=0){for(i=0,j=g;i<=g&&j>=0;i++,j--){a[i][j]=t;t++;}}else{for(i=g,j=0;i>=0&&j<=g;i--,j++){a[i][j]=t;t++;}}}for(g=1;g<n;g++){if(g%2!=0){for(i=g,j=n-1;i<n&&j>=g;i++,j--){a[i][j]=t;t++;}}else{for(i=n-1,j=g;i>=g&&j<n;i--,j++){a[i][j]=t;t++;}}}for(i=0;i<n;i++){for(j=0;j<n;j++){if(j==n-1)printf("%2d",a[i][j]);elseprintf("%2d",a[i][j]);}printf("\n");}return0;}H6晕(选作)看着这样的“回”形图案你晕吗?让我们不用数组,来做出它。输入:n。正方形的边长输出:边长为n的数字回形方阵。程序:#include<stdio.h>intmain(){inta[20][20],i,j,n,m=1,l,k=0;scanf("%d",&n);l=n;for(i=1;i<=(n+1)/2;i++){for(j=0;j<l;j++){a[k][j+k]=j+m;a[n-1-k][j+k]=3*l-3+m-j;}for(j=1;j<=l-1;j++){a[j+k][k]=4*l-4-j+m;a[j+k][n-1-k]=l+j+m-1;}m=m+4*l-4;l=l-2;k=k+1;}for(i=0;i<=n-1;i++){for(j=0;j<=n-1;j++)printf("%3d",a[i][j]);printf("\n");}}H7子数整除(选作)对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:sub1=a1a2a3sub2=a2a3a4sub3=a3a4a5例如,五位数20207可以拆分成:sub1=202sub2=020(=20)sub3=207现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1、sub2、sub3都可被K整除。输出时请按照由小到大的顺序排列(每行输出一个数)。程序:#include<stdio.h>intmain(void){inti,j,k,l,m,n;scanf("%d",&n);for(i=1;i<=3;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)for(l=0;l<=9;l++)for(m=0;m<=9;m++){if((i*100+j*10+k)%n==0&&(j*100+k*10+l)%n==0&&(k*100+l*10+m)%n==0)printf("%d%d%d%d%d\n",i,j,k,l,m);if(i==3)return0;}return0;}H8邮票组合(选作)背景:我们寄信都要贴邮票,在邮局有一些小面值的邮票,通过这些小面值邮票中的一张或几张的组合,可以满足不同邮件的不同的邮资。现在,邮局有4种不同面值的邮票。在每个信封上最多能贴5张邮票,面值可相同,可不同。输入:四种邮票的面值。输出:用这四种面值组成的邮资最大的从1开始的一个连续的区间。说明:如结果为10,则表明使用4张邮票可组合出1、2、3、4、5、6、7、8、9、10这些邮资。名词解释:邮资:就是你寄东西需要花多少钱。邮票面额:是由国家发行的具有固定价格的花纸片,被称为邮票。如果你寄东西,邮局称了重量,告诉你要240分。这样你就要贴邮票了。如果现在邮局的邮票有面值为80分、50分、20分和10分的四种,你就可以采用不同的组合得到240的邮资,例如:采用3张80分的可以凑出240分;或者24张10分的凑起来240分也可以。显然不同邮票的组合都可以得到同样一种邮资。程序:#include<stdio.h>main(){inti,j,k,p,a1,a2,a3,a4,m=1,flag;scanf("%d%d%d%d",&a1,&a2,&a3,&a4);A:for(i=0;i<=5;i++){for(j=0;j<=5-i;j++){for(k=0;k<=5-i-j;k++){for(p=0;p<=5-i-j-k;p++){flag=1;if(a1*p+a2*k+a3*j+a4*i==m){flag=0;m++;gotoA;}}}}}if(flag==1)printf("Themaxis%d.\n",m-1);}H9撞球(选做)一天,丁俊晖编一整天的程序,突然觉得累了,于是便决定在房间内四处走走。他的房间是矩形的,他从电脑开始随便选了一个角度开始行走。由于职业习惯,丁俊晖走路始终是直线,而且碰到墙以后会反弹,入射角度与出射角度完全相同。丁俊晖会一直行走,直到灵感再次迸发。假设他的行走速度是匀速的,现在,丁俊晖的母亲想知道他一共休息了多长时间以便提醒他继续工作。丁俊晖想考考他的母亲,于是他记录了自己碰到墙壁的序列并且告诉了她,你有没有办法能够帮助她计算出小丁所走的路程?输入输入包括多个测试用例,每个测试用例如下:第一行包含两个数字w,l(0<w,l<=1000),分别代表房间的宽度和长度;第二行包括两个数字x0,y0,代表电脑的位置坐标(x0,y0);第三行包含两个数字x1,y1,代表丁俊晖的位置坐标(x1,y1);最后一行是一个包含'F','B','L','R'四种字符的字符串,分别代表墙在前面、后面、左边或是右边,字符串的长度小于等于1000;我们约定,左上角的坐标为0,0,所有的坐标都是浮点型数字。输出一个浮点型数字,代表总路程,结果精确到小数点后4位。程序:#include"stdio.h"#include"string.h"#include"math.h"voidmain(){chara[2000];intw,l,x0,y0,x1,y1,i,k,r=0,f=0,n=0,m=0;doublec,d,s;scanf("%d%d",&w,&l);scanf("%d%d",&x0,&y0);scanf("%d%d",&x1,&y1);scanf("%s",a);k=strlen(a);for(i=0;i<k;i++){if(a[i]=='R'||a[i]=='L')m++;if(a[i]=='F'||a[i]=='B')n++;}for(i=0;i<k;i++){if(a[i]=='R')r=1;if(a[i]=='L')r=2;if(r>0)break;}for(i=0;i<k;i++){if(a[i]=='F')f=1;if(a[i]=='B')f=2;if(f>0)break;}if(m%2==0)d=m*w+(x0-x1)*pow(-1,r);elsed=m*w+w-x0-x1;if(n%2==0)c=n*l+(-y0+y1)*pow(-1,f);elsec=n*l-l+y0+y1;s=sqrt(pow(d,2)+pow(c,2));printf("%.4f\n",s);}H10.整数问题(选做)请求输出满足以下条件的n位正整数的个数:要求该n位整数的从高位开始前1位可以被1整除,该n位整数前2位可以被2*2整除,该整数前3位可以被3*3整除,该整数前4位可以被4*4整除……。即该整数前k位都可被k平方整除。例如:n=1,则符合条件的1位正整数为1~9,输出答案9。n=2,符合条件的正整数为:12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,则输出答案22。当n=4时,2432就是一个符合题意的整数。第一位2可以被1整除;前2为24可以被4整除;前3位243可以被9整除;整个4位2432可以被16整除。输入:  n(0<=n<9)输出:符合该条件的n位正整数的数量(本题目为软件学院2007年保研学生初试上机试题。本题可以不用数组)程序:#include<stdio.h>#include<math.h>main(){staticinta[30],b[30],n,t,temp,i,j,k;scanf("%d",&n);for(i=1;i<=n;i++){t=1;for(j=1;j<30;j++){for(k=0;k<=9;k++){b[t]=a[j]*10+k;if(b[t]%(i*i)==0&&b[t]>b[t-1])t++;}}for(j=1;j<30;j++){a[j]=b[j];b[j]=0;}t--;}printf("%d\n",t);}26.二年级 小学 小学生如何制作手抄报课件柳垭小学关于三违自查自纠报告小学英语获奖优质说课课件小学足球课教案全集小学语文新课程标准测试题 生的题目两个二年级小朋友在一起玩游戏,小明给出一堆不超过两位的正整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。输入:用逗号分隔的不超过两位的正整数序列,及其运算符和等号输出:最大数op最小数=结果程序:#include<stdio.h>intmain(){inti,a,max=0,min=100,s;charl[100]={0},op;gets(l);for(i=0;;i=i+2){if(l[i]=='=')break;else{if(l[i]==43||l[i]==45||l[i]==42||l[i]==37||l[i]==47)op=l[i];else{if(l[i+2]==44){a=(l[i]-48)*10+l[i+1]-48;i++;}elsea=l[i]-48;if(a>=max){max=a;}if(a<=min){min=a;}}}}switch(op){case43:s=max+min;printf("%d+%d=%d\n",max,min,s);break;case45:s=max-min;printf("%d-%d=%d\n",max,min,s);break;case42:s=max*min;printf("%d*%d=%d\n",max,min,s);break;case37:{if(min==0){printf("Error!\n");break;}else{s=max%min;printf("%d%%d=%d\n",max,min,s);break;}}case47:{if(min==0){printf("Error!\n");break;}else{s=max/min;printf("%d/%d=%d\n",max,min,s);break;}}}}27.等值数列段如果一个数列中的某一段(至少有两个元素)的各元素值均相同,则称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。输入:由N个元素组成的整数数列A(其中N<=50)输出:A中长度最大的所有等值数列段的始末位置,如果没有等值数列段,则输出Noequalnumberlist.说明:始末位置是指数组下标,即0表示第一个元素。如果有多个同等长度的等值数列,只输出第一个等值数列的起始位置。当在一个LIST中出现两个等长的连续串的时候,我们的答案应该是第一个等长串。程序:#include<stdio.h>#include<string.h>#defineN50#defineM50intmain(){chara[N],t;inti,j=0,n,b[M]={0},max=0,min=0,temp;scanf("%d",&n);k:{gets(a);if((strlen(a)+1)/2!=n)gotok;}t=a[0];b[0]=0;for(i=2;i<strlen(a);i+=2){if(t!=a[i]){t=a[i];j++;b[j]=(i+1)/2;}}j++;b[j]=(i+1)/2;temp=b[1]-b[0];max=b[1]-1;min=b[0];for(i=1;i<=j;i++){if(temp<b[i+1]-b[i]){temp=b[i+1]-b[i];max=b[i+1]-1;min=b[i];}}if(temp==1)printf("Noequalnumberlist.\n");elseprintf("Thelongestequalnumberlistisfrom%dto%d.\n",min,max);return0;}28.大家一起做游戏输入:小朋友的个数(<=50)要被练习的数字输出:最终被留下的小朋友的序号说明:如“要被练习的数字”是5,则每次数到5的同学要退出该游戏程序:#include<stdio.h>voidmain(){longintleft,p,i,j,k,q,flag[100],n,m;scanf("%d%d",&n,&m);left=n;p=1;for(i=1;i<=n;i++)flag[i]=1;for(i=1;i<=n;i++){q=(m-1)%left+1;j=0;k=p;while(j!=q){if(flag[k]==1)j++;if(j==q)break;k++;if(k==n+1)k=1;}flag[k]=0;p=k;left--;}printf("TheleftchildisNO%d.\n",k);}29.组成最大数任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入1593,则输出为9531。输入:自然数n输出:各位数字组成的最大数程序:#include<stdio.h>#include<string.h>intmain(){chara[10000];intx[10]={0};scanf("%s",a);intn=strlen(a);for(inti=0;i<n;i++)x[a[i]-'0']++;for(inti=9;i>=0;i--)for(intj=0;j<x[i];j++)printf("%d",i);printf("\n");}30.删除重复字符背景:输入一个长度不超过100的字符串,删除串中的重复字符。输入:输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。输出:删除重复字符后的字符串。例如:abced。程序:#include<stdio.h>#include<string.h>#defineN100intmain(){chara[N],t;inti,j,k;scanf("%s",a);for(i=0;i<strlen(a);i++){for(j=i+1;j<strlen(a);j++){if(a[i]==a[j]){for(k=j;k<strlen(a);k++)a[k]=a[k+1];j--;}}}printf("%s\n",a);return0;}H11:五年级小学生的题目(选做)那两个小朋友在不断进步,他们已经学会了负数和多位数,于是他们又开始进行游戏了。小明给出一堆整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。输入:用逗号分隔的整数序列,及其运算符和等号输出:最大数op最小数=结果说明:本题目应该可以不使用数组就可以完成,关键是如何处理负数和减法程序:#include<stdio.h>#include<string.h>intintpow(inta,intb)//a^b{intresult=1;for(inti=0;i<b;i++)result=result*a;returnresult;}structdate{intmax;intmin;charop;intr;};structdatefunction(charp[],intn){structdateresult;n=n-4;intmax=-10000;intmin=10000;intcount=0;//needbackto0intx[10]={0};//needbackto0inttemp=0;//needbackto0intsign=1;//needbackto1for(inti=0;i<=n;i++){if(p[i]==',')//meet,meansendcaculatethevalueandcomparewithmaxandmin{for(intk=0;k<count;k++)temp=temp+x[k]*intpow(10,count-1-k);temp=temp*sign;if(temp>max)max=temp;if(temp<min)min=temp;count=0;temp=0;sign=1;continue;}if(p[i]=='-'){sign=-1;continue;}else{x[count]=p[i]-'0';count++;}}charopp;opp=p[n+1];if(opp=='+'){result.r=max+min;result.op='+';}elseif(opp=='-'){result.r=max-min;result.op='-';}elseif(opp=='*'){result.r=max*min;result.op='*';}elseif(opp=='/'){if(min==0)result.r=0;else{result.r=max/min;}result.op='/';}elseif(opp=='%'){result.r=max%min;result.op='%';}result.max=max;result.min=min;returnresult;}intmain(){charw[100];gets(w);intl=strlen(w);structdatecc=function(w,l);if(cc.op=='/'&&cc.min==0)printf("Error!");else{if(cc.max<0)printf("(%d)",cc.max);elseprintf("%d",cc.max);printf("%c",cc.op);if(cc.min<0)printf("(%d)",cc.min);elseprintf("%d",cc.min);printf("=");printf("%d",cc.r);printf("\n");}}H12:扫雷(选做)输入输入中将包括一系列的地图,每个地图的第一行有两个整数n和m(0<n,m<=100),它们表示了地图的行数和列数。下面的n行每行都有m个字符,其中"."表示安全而"*"表示地雷。如果地图的n和m都为0,则表示输入结束。输出针对每一个地图,首先输出一行:Field#x:其中x是当前地图的编号(从1开始)。下面的n行则将地图中的"."以数字表示,该数字表示该方格周围有多少颗地雷。程序:#include<stdio.h>#defineN110voidmain(){chara[N][N];intn,m,t,i,j,k=1;staticintb[N][N];for(n=m=1;n!=0&&m!=0;){for(i=0;i<N;i++){for(j=0;j<N;j++)b[i][j]=0;}scanf("%d%d",&n,&m);for(t=n;t>0;t--)scanf("%s",a[n-t]);for(i=0;i<n;i++){for(j=0;j<m;j++){if(a[i][j]=='*'){b[i][j]++;b[i+1][j]++;b[i+2][j]++;b[i][j+1]++;b[i+2][j+1]++;b[i][j+2]++;b[i+1][j+2]++;b[i+2][j+2]++;}}}if(n!=0&&k>1){printf("\nField#%d:\n",k);k++;}elseif(n!=0){printf("Field#%d:\n",k);k++;}for(i=0;i<n;i++,printf("\n")){for(j=0;j<m;j++){if(a[i][j]=='*')printf("*");elseprintf("%d",b[i+1][j+1]);}}}}31.合并字符串输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。输入:两个已经排好顺序(升序)的两个字符串输出:一个合并在一起的有序(升序)的字符串要求: 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。如果采用先进行串连接,然后再进行排序的算法,则效率太低了。程序:#include<stdio.h>intmain(){chara[100],b[100],c[200];inti=0,j=0,k=0;gets(a);gets(b);while(i<strlen(a)&&j<strlen(b)){if(a[i]<b[j]){c[k++]=a[i++];}else{c[k++]=b[j++];}}while(i<strlen(a)){c[k++]=a[i++];}while(j<strlen(b)){c[k++]=b[j++];}c[k]='\0';printf("%s\n",c);return0;}32.串的减法输入字符串s和t(串长不超过80个字符),将在字符串s中出现,但未在字符串t中出现的字符组成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符,输出u。例如:当s="112345",t="2467"时,u="1135"。输入:  第一行为串s  第二行为串t输出:串u程序:#include<stdio.h>#include<string.h>main(){chars[800],t[800];staticinta[500]={0};inti,k,m,n;gets(s);gets(t);m=strlen(s);n=strlen(t);for(i=0;i<=n-1;i++){k=t[i];a[k]=1;}for(i=0;i<=m-1;i++){k=s[i];if(a[k]==0)printf("%c",s[i]);}printf("\n");return0;}33.单词排序输入5个单词,将它们按从大到小的顺序排列后输出。输入:5个单词输出:排序后的顺序程序:#include<stdio.h>#include<string.h>main(){chara[5][25],b[5][25];inti,j,k;for(i=0;i<5;i++)scanf("%s",&a[i]);for(i=0;i<5;i++){for(k=0,j=0;j<5;j++)if(strcmp(a[i],a[j])<0)k++;strcpy(b[k],a[i]);}for(i=0;i<5;i++)printf("%s\n",b[i]);}34.北理工的恶龙背景:最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟,于是,校长下令召集全校所有勇士杀死这只恶龙。要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。校长想花最少的学分数杀死恶龙,于是找到你寻求帮助。输入:第一行龙头数n,勇士人数m(1<=n,m<=100)接下来n行,每行包含一个整数,表示龙头的直径接下来m行,每行包含一个整数,表示勇士的身高l输出:如果勇士们能完成任务,输出校长需要花的最小费用;否则输出“bitisdoomed!”程序:#include<stdio.h>intmain(){intn,m,i,j,t,k,c,d;scanf("%d%d",&n,&m);inta[100]={0};intb[100]={0};for(i=0;i<n;i++)scanf("%d",&a[i]);for(j=0;j<m;j++)scanf("%d",&b[j]);for(i=0;i<n;i++){for(j=0;j<n-1;j++){if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}}for(i=0;i<m;i++){for(j=0;j<m-1;j++){if(b[j]>b[j+1]){t=b[j];b[j]=b[j+1];b[j+1]=t;}}}k=0;for(i=0;i<n;i++){for(j=k;j<m;j++){if(b[j]>=a[i]){a[i]=0;k++;break;}else{b[j]=0;k++;}}if(k>m)break;}for(i=k;i<m;i++)b[i]=0;c=0;d=0;for(i=0;i<n;i++)c=c+a[i];for(i=0;i<m;i++)d=d+b[i];if(c==0)printf("%d\n",d);elseprintf("bitisdoomed!\n");}35.杀鸡用牛刀——要用递归啊!背景:哈哈!我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔”问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。功能:求整数n到m区间的累加和,其中n<=m。输入:区间的起始点n区间的终止点m输出:累加和要求:使用递归算法完成。如此简单的题目当然要有隐含的测试用例啦,就3个,看看谁能猜出来。程序:#include<stdio.h>voidmain(){intsum(intn,intm);intn,m;scanf("%d%d",&n,&m);printf("Thesumfrom%dto%dis%d.\n",n,m,sum(n,m));}intsum(intn,intm){ints;if(m==n)s=n;elses=m+sum(n,m-1);return(s);}H13:安全的密码(选做)随着电子设备的广泛运用,密码也渐渐融入每个人的生活。保护好密码,不仅关系到个人隐私,更关系到个人的财产和安全。一个安全的密码,最好由大小写字母、数字或符号组成。包含越多种类的字符,其安全性就越高。同时密码还需要有一定的长度,通常至少要由六个以上的字符组成。并不是每个人都喜欢这样复杂的密码,很多人在设置密码的时候,喜欢使用自己的名字或者生日,但这是很大的安全隐患。任务林晓炜正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。现在他向你求助,请你帮忙设计一个程序来解决这个问题。应当按照以下的规则来判断密码是否安全:如果密码长度小于6位,则不安全如果组成密码的字符只有一类,则不安全如果组成密码的字符有两类,则为中度安全如果组成密码的字符有三类或以上,则为安全通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。输入输入的第一行是一个整数N,表明后面有多少组密码。随后的N行输入包括N个密码,每个密码的长度均小于20个字符。输出针对每一个密码判断并输出它是否安全。对于不安全的密码输出"NotSafe",对于中度安全的密码输出"MediumSafe",对于安全的密码输出"Safe"输入样例41234AbcdefABC1231#c3Gh输出样例NotSafeNotSafeMediumSafeSafe程序:#include<stdio.h>#include<string.h>intmain(void){intn,i,j,x,m,b[4];chara[100];scanf("%d",&n);for(i=1;i<=n;i++){gets(a);if(i==1)gets(a);x=strlen(a);if(x<6){printf("NotSafe\n");continue;}b[0]=0;b[1]=0;b[2]=0;b[3]=0;for(j=0;j<=x-1;j++){if(48<=a[j]&&a[j]<=57)b[0]=1;elseif(65<=a[j]&&a[j]<=91)b[1]=1;elseif(97<=a[j]&&a[j]<=123)b[2]=1;elseb[3]=1;if(a[0]+a[1]+a[2]+a[3]==4)break;}m=b[0]+b[1]+b[2]+b[3];switch(m){case1:printf("NotSafe\n");break;case2:printf("MediumSafe\n");break;case3:printf("Safe\n");break;case4:printf("Safe\n");}}return0;}H14:身份证的奥秘(选做)输入输入n组身份证号码,第一行为个数,以后每行为身份证号码。输出如果输入的身份证号码为15位,则将其升级为18位后显示输出;否则判断其是否为合法身份证号,并逐行输出。程序:#include<stdio.h>#include<string.h>charans(charx[20]){inti,y;intd[20]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,0,0,0};chare[11]={'1','0','X','9','8','7','6','5','4','3','2'};y=0;for(i=0;i<=16;i++){y=y+(x[i]-48)*d[i];y=y%11;}y=y%11;returne[y];}intmain(void){inti,n,m,j;chara[1000],b[20];scanf("%d",&m);for(i=1;i<=m;i++){scanf("%s",&a);n=strlen(a);if((n!=15)&&(n!=18)){printf("Invalid\n");continue;}if(n==15){for(j=0;j<=5;j++)b[j]=a[j];if(a[12]=='9'&&a[13]=='9'&&(a[14]=='6'||a[14]=='7'||a[14]=='8'||a[14]=='9')){b[6]='1';b[7]='8';}else{b[6]='1';b[7]='9';}for(j=8;j<=16;j++)b[j]=a[j-2];b[17]=ans(b);b[18]='\0';printf("%s\n",b);}elseif(a[17]==ans(a))printf("Valid\n");elseprintf("Invalid\n");}return0;}36.科学记数法对于非常大或者非常小的数据,我们通常用科学记数法来表示。例如在科技文献和电脑中经常遇到的2.3×106(计算机中的科学记数法表示为:2.3E6),或者9.18×10-5(科学记树法表示:9.18E-5)这种类型的数据。输入:用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。输出:该数据的双精度表示说明:输入数据的精度不高于小数点后50位。输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。结果保留到小数点后8位,如不足8位用0补足,超过8位则截断,不进行四舍五入的处理。程序:#include<stdio.h>#include<string.h>#defineN100voidmain(){chara[N],b[N];inti,j,s,q,x;gets(a);x=strlen(a);for(s=0,q=1,x--;'0'<=a[x]&&a[x]<='9';x--,q*=10)s=s+(a[x]-'0')*q;if(a[x]=='-')s=-s;for(i=j=0;a[i]!='';i++){if(a[i]<='9'&&a[i]>='0'){b[j]=a[i];j++;}}if(s<=0){for(i=s;i<=s+8;i++){if(i<0)printf("0");if(i>=0&&i<j)printf("%c",b[i]);if(i==s)printf(".");if(i>=j)printf("0");}printf("\n");}if(s>0){for(i=0;i<=s+8;i++){if(i<j)printf("%c",b[i]);if(i>=j)printf("0");if(i==s)printf(".");}printf("\n");}}37.大数分解从键盘输入的一个大于1的整数,通过算法将该整数分解为若干因子的乘积。输入:一个正整数。输出:分解后的各个因子。程序:#include<stdio.h>#include<math.h>intsu(intshu){inti=0;for(i=2;i<=sqrt(shu);i++)if(shu%i==0)return(1);elsecontinue;return(0);}intmain(){intshu,i=0;inta[16]={2,3,5,7,11,13,17,19,23,29,31,34,37,41,43,47};scanf("%d",&shu);loop:if(su(shu)==0){printf("%d\n",shu);return0;}else{for(i=0;i<16;){if(shu%a[i]==0){printf("%d\n",a[i]);shu/=a[i];gotoloop;}elseif(shu%a[i]!=0){i++;continue;}elseif(shu==1)break;}}return0;}38.回文字符串——递归有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。例如LeveL就是一个回文字符串。输入:字符串输出:Yes或者No说明:如输出Yes,说明输入的字符串是一个回文字符串输出No,说明输入的字符串不是一个回文字符串请使用递归算法实现。程序:#include<stdio.h>#include<string.h>charstr[1000];intHUI(charstr[],intmin,intmax){if(min>max)return1;if(str[min]!=str[max])return0;returnHUI(str,min+1,max-1);}voidmain(){intflog,max;gets(str);max=strlen(str)-1;flog=HUI(str,0,max);if(flog==1)printf("Yes\n");elseprintf("No\n");}39.求最大公约数——递归输入:n和m输出:n和m的最大公约数程序:#include<stdio.h>#include<stdlib.h>intGCD(intm,intn){ints,t;s=m%n;if(s==0)t=n;elset=GCD(n,s);returnt;}intmain(){intm,n;scanf("%d%d",&m,&n);printf("%d\n",GCD(m,n));return0;}40.求序列之和——递归请使用递归算法求下列序列的前n项之和。1+1/2-1/3+1/4-1/5......输入:n输出:序列的前n项和(精确到小数点之后第6位)程序:#include<stdio.h>floatsum(intn){floats1;if(n==1)return1.0;if(n%2==0)s1=sum(n-1)+1.0/n;elses1=sum(n-1)-1.0/n;returns1;}intmain(){intn;floats=0;scanf("%d",&n);s=sum(n);if(n==1)printf("1\n");elseprintf("%.6f\n",s);}H15:编码问题(选作)设有一个整形数组A[0..N-1];存放的元素为0~N-1(1<N<=10)之间的整数,且A[i]≠A[j](i≠j)。例如,当N=6时,有:A=(4,3,0,5,1,2)。此时,数组A的编码定义如下:A[0]编码为0;A[i]编码为:在A[0],A[1],…,A[i-1]中比A[i]的值小的个数(i=1,2,…,N-1)例如上面数组A的编码为:B=(0,0,0,3,1,2)若给出数组A,则可求出其编码。同理,若给出数组A的编码,可求出A中的原数据。输入:推导方向(取值为1或2,如为1,则表示根据数组求数组编码;如为2,则表示根据编码反求数组)数组个数数组或数组编码元素输出:数组编码、或数组本身(元素之间以空格分隔)程序:#include<stdio.h>#defineN100voidmain(){intmode,n,i,j,s,a[N],b[N];staticintc[N];scanf("%d",&mode);scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);if(mode==1){for(i=1,b[0]=0;i<n;i++)for(j=0,b[i]=0;j<i;j++)if(a[i]>a[j])b[i]++;}else{for(i=n-1;i>=0;i--){for(j=0,s=0;s<a[i]+1;j++)if(c[j]==0)s++;b[i]=j-1;c[b[i]]=1;}}for(i=0;i<n-1;i++)printf("%d",b[i]);printf("%d\n",b[n-1]);}H16:洗牌(选作)假设我们有2n张牌,它们以1,2,...,n,n+1,...,2n编号并在开始时保持着这种顺序。一次洗牌就是将牌原来的次序变为n+1,1,n+2,2,...,2n,n,也就是将原来的前n张牌放到位置2,4,...,2n,并且将余下的n张牌按照他们原来的次序放到奇数位置1,3,...,2n-1。已经 证明 住所证明下载场所使用证明下载诊断证明下载住所证明下载爱问住所证明下载爱问 对于任何一个自然数n,这2n张牌经过一定次数的洗牌就回到原来的次序。但我们不知道对于一个特定的n,需要几次洗牌才能将牌洗回原来的次序。输入:牌张数的一半n,即初始情况下一共有2n张牌,n为int型整数输出:将牌洗回原来的次序所需要的洗牌次数程序:#include<stdio.h>intmain(void){intn,x,total;total=1;scanf("%d",&n);x=2;while(x!=1){if(x<=n)x=x*2;elsex=2*(x-n)-1;total=total+1;}printf("%d\n",total);return0;}41.输出字符回形阵输入图形行数N和中心字符,输出如图所示回形方阵。例如,输入:5Z输出如下图形:XXXXXXYYYXXYZYXXYYYXXXXXX注:N<24,且N是奇数。程序:#include<stdio.h>intmain(){charch,a[1000][1000]={0};inti,j,k,n,mid;scanf("%d%c",&n,&ch);if(n%2==0)printf("%disnotaoddnumber!\n",n);else{mid=(n-1)/2;a[mid][mid]=ch;if(ch>='a'&&ch<='z'){for(k=1;k<=mid;k++){for(i=mid-k;i<=mid+k;i++)for(j=mid-k;j<=mid+k;j++){if(i==mid-k||i==mid+k)a[i][j]=ch-k+(26*(k>(ch-'a')?1:0));elseif(j==mid-k||j==mid+k)a[i][j]=ch-k+(26*(k>(ch-'a')?1:0));}}}elseif(ch>='A'&&ch<='Z'){for(k=1;k<=mid;k++){for(i=mid-k;i<=mid+k;i++)for(j=mid-k;j<=mid+k;j++){if(i==mid-k||i==mid+k)a[i][j]=ch-k+(26*(k>(ch-'A')?1:0));elseif(j==mid-k||j==mid+k)a[i][j]=ch-k+(26*(k>(ch-'A')?1:0));}}}for(i=0;i<n;i++)for(j=0;j<n;j++){if(j==n-1)printf("%c\n",a[i][j]);elseprintf("%c",a[i][j]);}}}42.子串反向——递归请编写一个递归函数reverse(charstr[],intstart,intend),该函数的功能是将串str中下标从start开始到end结束的字符颠倒顺序。假设start和end都在合理的取值范围。例如:执行前:str[]="0123456";start=1;end=4执行后:strr[]="0432156"要求在该函数中不使用新的数组,没有循环。注意:只需要编写递归函数reverse,系统中已经设置好了main函数。预设代码前置代码1.#include<stdio.h>2.intmain()3.{charstr[100];4.intstart,end;5.gets(str);6.scanf("%d%d",&start,&end);7.reverse(str,start,end);8.printf("%s\n",str);9.return0;10.}程序:#include<string.h>voidreverse(charstr[],intstart,intend){chart;if(end>=strlen(str))reverse(str,start,end-1);elseif(start<end){reverse(str,start+1,end-1);t=str[start];str[start]=str[end];str[end]=t;}}H17:高精度加减法(选作)背景:计算机所能完成的一个基本功能就是完成数据的计算,譬如加法、减法等等。但是在任何一种计算机上,计算中能够使用的数字都是有一定范围的,超过了范围,就没法得到精确的结果。你现在接受了一个任务,要编写一个高精度计算器的核心部分。所谓高精度计算器,就是可以计算很大很大的数据的计算器。输入:输入的第一行是一个正整数,表示下面有几组数据需要计算。之后的每一行是两个十进制的正整数和一个运算符,每个整数可以由最多500个数字组成。运算符可以是加号或者减号。输出:对应着输入的每一行数据,输出计算的结果,每个结果占一行。程序:#include<stdio.h>#include<string.h>#defineN1010voidmain(){charz,sign,a[N];intn,i,j,f,x,b[N],c[N];//b为数字1,c为数字2voidadd(intb[N],intc[N],intf);voidsub(intb[N],intc[N],intf);scanf("%d%c",&n,&z);for(;n>0;n--,printf("\n")){gets(a);x=strlen(a);for(i=0;i<N;i++)b[i]=c[i]=0;for(i=x-1,j=0;'0'<=a[i]&&a[i]<='9';i--,j++)c[j]=a[i]-'0';f=j;//f为较长数字的长度sign=a[i];//sign为运算符for(i--,j=0;i>=0;i--,j++)b[j]=a[i]-'0';if(f<j)f=j;//f为较长数字的长度if(sign=='+')add(b,c,f);elsesub(b,c,f);}}voidadd(intb[N],intc[N],intf){inti,r,d[N];//r为进位数,d为运算结果for(i=0,r=0;i<f;i++){d[i]=(b[i]+c[i]+r)%10;r=(b[i]+c[i]+r)/10;}if(r==1)printf("1");for(i--;i>=0;i--)printf("%d",d[i]);}voidsub(intb[N],intc[N],intf){inti,r,flag,d[N];//r为进位数,d为运算结果for(i=f-1,flag=1;i>=0;i--){if(b[i]>c[i]){flag=1;break;}elseif(b[i]<c[i]){flag=-1;break;}}if(flag==1){for(i=0,r=0;i<f;i++){d[i]=b[i]-c[i]+r;if(d[i]<0){d[i]=d[i]+10;r=-1;}elser=0;}}if(flag==-1){printf("-");for(i=0,r=0;i<f;i++){d[i]=c[i]-b[i]+r;if(d[i]<0){d[i]=d[i]+10;r=-1;}elser=0;}}for(i--;d[i]==0&&i>0;i--);for(;i>=0;i--)printf("%d",d[i]);}43.缩写展开在保存字符串时,对出现在连续位置的若干个字符,如这些字符在ASCII表中也是连续出现,则可以将这些字符使用缩写形式进行保存,以节省保存空间。例如用A-Z表示ABCD...XYZ,1-5表示12345,c-f表示cdef。输入:包含缩写形式的字符串输出:将缩写形式进行还原后的字符串说明:只分别对大写字母、小写字母和数字进行压缩,对于形如9-A,a-C这样的缩写不进行处理。程序:#include<stdio.h>#include<string.h>intisBigLetter(chars){if('A'<=s&&s<='Z'){return1;}elsereturn0;}intisSmallLetter(chars){if('a'<=s&&s<='z'){return1;}elsereturn0;}intisNumber(chars){if('0'<=s&&s<='9'){return1;}elsereturn0;}voidmain(){charstr[100];gets(str);intlength,i,j;length=strlen(str);j=0;charnewstr[200];chartemp;for(i=0;i<length;i++){if(str[i]=='-'){if(isBigLetter(str[i-1])&&isBigLetter(str[i+1])){if(str[i+1]>str[i-1]){for(temp=str[i-1]+1;temp<str[i+1];temp++){newstr[j]=temp;j++;}}else{newstr[j]=str[i];j++;}}elseif(isSmallLetter(str[i-1])&&isSmallLetter(str[i+1])){if(str[i+1]>str[i-1]){for(temp=str[i-1]+1;temp<str[i+1];temp++){newstr[j]=temp;j++;}}else{newstr[j]=str[i];j++;}}elseif(isNumber(str[i-1])&&isNumber(str[i+1])){if(str[i+1]>str[i-1]){for(temp=str[i-1]+1;temp<str[i+1];temp++){newstr[j]=temp;j++;}}else{newstr[j]=str[i];j++;}}else{newstr[j]=str[i];j++;}}else{newstr[j]=str[i];j++;}}newstr[j]='\0';printf("%s\n",newstr);}44.函数递归编写一个函数,使用递归算法求满足下述定义的整数序列的第n项。 1 当n>=0且n<=4时 f(n)= f(n-1)+f(n-3) 当n>4且n为偶数时 f(n-2)+f(n-4) 当n>4且n为奇数时 -1 其他函数原型如下:intfindf(intn); 参数 转速和进给参数表a氧化沟运行参数高温蒸汽处理医疗废物pid参数自整定算法口腔医院集中消毒供应 说明:n项数;返回值是第n项值。例如输入:10,输出:8预设代码前置代码1.#include<stdio.h>2.intmain()3.{intn,s,findf(int);4.scanf("%d",&n);5.s=findf(n);6.printf("%d\n",s);7.return0;8.}程序:intfindf(intn){intr;if(n<0){r=-1;}elseif(n<=4&&n>=0){r=1;}else{if(n%2==0){r=findf(n-1)+findf(n-3);}else{r=findf(n-2)+findf(n-4);}}returnr;}45.大家再来做游戏还是那个大家做游戏的问题:幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。规则如下:所有的小朋友绕成一圈,顺序排号,给出开始报数的小孩的编号后,从这个小朋友开始报数,凡是报到固定数字(例如5)的,都退出该游戏,接着从下一个小朋友在从1开始报数,直到只剩下一位小朋友游戏才中止。输入:小朋友的个数(<=50)开始报数的小孩的编号要被练习的数字输出:最终被留下的小朋友的序号例如输入:413输出:TheleftchildisNO1.说明:这次,以函数的方式实现上述问题。主函数已经给出,仅需提交自己编写的函数。这个问题是著名的约瑟夫问题,基于著名犹太历史学家Josephus讲述的一个,所以函数的名字是josephus。函数原型:intjosephus(int*boy,intn,intm,intr)参数说明:int*boy:保存参加游戏的小孩编号的整型数组的首地址。小孩的编号从1开始。intn:开始参加游戏的小孩总数。intm:开始时第一次报数的小孩的编号。intr:要被练习的数字。预设代码josephus.c1.#include"stdio.h"2.intjosephus(int*boy,intn,intm,intr);3.intmain()4.{inti,boy[50]={0},n,m,r;5.scanf("%d%d%d",&n,&m,&r);6.if(n<=0||n>50||m<=0||m>50||r<=0)7.printf("Thenumberiswrong!\n");8.else9.{10.for(i=0;i<n;i++)11.boy[i]=i+1;12.printf("TheleftchildisNO%d.\n",josephus(boy,n,m,r));13.}14.return0;15.}程序:josephus(int*boy,intn,intm,intr){intj;if(n>1){if((m+r-1)%n!=0){for(j=(m+r-1)%n-1;j<n-1;j++)boy[j]=boy[j+1];returnjosephus(boy,n-1,(m+r-1)%n,r);}else{returnjosephus(boy,n-1,1,r);}}if(n=1){returnboy[0];}}H18:拱猪计分(选作)输入:每个输入文件由多组测试数据构成,每组测试数据有四行,每一行第一个数为该玩家所持有计分牌总数,而后列出其所持有之所有计分牌,牌数与各计分牌均以一个以上的空格分开。相邻两组测试数据之间不会有空白行,读到四家持牌数都为0表示文件结束。输出:每一行输出一组测试数据对应的结果,依次输出各家所得分数,共四个整数(含正负号,0除外),相邻两个整数之间以一个空格分开,符号和数字间不可以有空格。每组输出间不需要有空白行。程序:#include"stdio.h"intmyinput(intcard[],intnumber[]){inti,n;chars[5];for(i=0;i<4;i++){scanf("%d",&n);number[i]=n;while(n--){scanf("%s",s);switch(s[0]){case'S':card[13]=i;break;case'D':card[14]=i;break;case'C':card[15]=i;break;case'H':s[2]=='\0'?(card[s[1]-'1']=i):(card[s[2]-'1'+10]=i);}}}returnnumber[0]+number[1]+number[2]+number[3];}intmain(){intvalue[15]={-50,-2,-3,-4,-5,-6,-7,-8,-9,-10,-20,-30,-40,-100,100},card[16],score[4]={0,0,0,0},number[4],i,s,input();while(myinput(card,number)){for(i=0,s=0;i<13;i++)s+=card[i];if(s%13){for(i=0;i<15;i++)score[card[i]]+=value[i];}else{if(card[0]==card[13]&&card[13]==card[14])score[card[0]]+=500;else{score[card[0]]+=200;score[card[14]]+=value[14];score[card[13]]+=value[13];}}score[card[15]]+=number[card[15]]==1?50:score[card[15]];for(i=0;i<4;i++)printf("%s%d%s",score[i]>0?"+":"",score[i],i==3?"\n":"");for(i=0;i<4;i++)score[i]=0;}return0;}46求表示方法设m、n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目。例如,f(5,3)=5,有5种表示方法:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1。请编写程序,计算f(m,n)的值。输入:mn输出:f(m,n)的值程序:#include<stdio.h>intf(inty,intx){if(y==1)return1;if(x==1)return1;if(y<x)returnf(y,y);if(x==y)return1+f(y,x-1);returnf(y,x-1)+f(y-x,x);}main(){intm,n;scanf("%d%d",&m,&n);printf("%d\n",f(m,n));}47.查找子字符串编写一个函数,该函数的功能是在给定的字符串中查找可能的子字符串,该子字符串是由给定的同一字符组成的最长的字符串。例如:给定字符串是“asddrrddddds”,给定的字符是‘d’,获得的子字符串是“ddddd”。函数原型:char*search(char*str,charch)。参数说明:str保存给定的字符串的首地址(字符串长度不大于100),ch保存给定的字符。函数返回值:找到的符合要求的子字符串的首地址。如果没有符合要求的子字符串,返回一个空指针。预设代码search_46.c1.#include<stdio.h>2.char*search(char*str,charch);3.main()4.{5.chars[100]={0},ch,*p;6.gets(s);7.ch=getchar();8.p=search(s,ch);9.if(p==NULL)10.printf("Thereisnotthesub-string.");11.else12.while(*p==ch)13.putchar(*p++);14.printf("\n");15.}程序:#include<stdio.h>char*search(char*str,charch){inti,j=0,max=0,x,length=0,tag=0;char*p;for(i=0;*(str+i)!='\0';i++){while(*(str+i)==ch){tag=1;j++;if(j==1)x=i;i++;}if(length<j){length=j;max=x;}j=0;}if(tag==0)p=NULL;if(tag==1)p=str+max;returnp;}48.元素值之和编写函数,计算给定的整型数组的奇数元素值之和、偶数元素值之和。例如数组元素的值依次为:1,8,2,3,11,6;则奇数值之和15、偶数值之和16。函数原型:voidfindsum(int*pa,intn,int*podd,int*peven)。参数说明:pa是整型数组的首地址,n是数组元素个数(元素个数不大于100),指针podd、peven保存奇数之和、偶数之和的整型变量的地址。返回值:无返回值。预设代码findsum_48.c1.#include<stdio.h>2.voidfindsum(int*pa,intn,int*podd,int*peven);3.main()4.{5.inti,n,a[100],odd,even;6.scanf("%d",&n);7.for(i=0;i<n;i++)8.scanf("%d",&a[i]);9.findsum(a,n,&odd,&even);10.printf("odd=%d,even=%d\n",odd,even);11.}程序:voidfindsum(int*pa,intn,int*podd,int*peven){inti;*podd=0;*peven=0;for(i=0;i<n;i++){if(*(pa+i)%2==0)*peven=*peven+*(pa+i);else*podd=*podd+*(pa+i);}}H19:逆波兰算术表达式(选作)传统的算术表达式是由操作数(又叫运算对象或运算量)和运算符以及改变运算次序的圆括号连接而成的式子。其运算规则如下:(1)先计算括号内,后计算括号外;(2)在无括号或同层括号内,先进行乘除运算,后进行加减运算,即乘除运算的优先级高于加减运算的优先级;(3)同一优先级运算,从左向右依次进行。在这种表达式的计算过程中,既要考虑括号的作用,又要考虑运算符的优先级,还要考虑运算符出现的先后次序。波兰科学家卢卡谢维奇(Lukasiewicz)提出了算术表达式的另一种表示,即后缀表示,又称逆波兰式,其定义是把运算符放在两个运算对象的后面。在后缀表达式中,不存在括号,也不存在优先级的差别,计算过程完全按照运算符出现的先后次序进行,整个计算过程仅需一遍扫描便可完成。例如:3/5+6的逆波兰表达式为35/6+2*(3+4)的逆波兰表达式为234+*输入:一个只包含加、减、乘、除和数字的逆波兰表达式输出:该表达式的值程序:#include<stdio.h>#include<stdlib.h>#defineN50intoperation(charch,int*k){switch(ch){case'+':return(*k+*(k+1));case'-':return(*k-*(k+1));case'*':return(*k**(k+1));case'/':return(*k/*(k+1));default:return0;}}intmain(){intoperation(char,int*);staticintnumber[N];inti=0;charsign[N],*p=sign;gets(sign);while(*p){if(*p<='9'&&*p>='0')number[i++]=atoi(p);else{number[i-2]=operation(*p,&number[i-2]);i--;}for(p++;!(*p!=''&&*(p-1)=='')&&*p;p++);}printf("%d\n",number[0]);return0;}H20.计算子字符串个数字符串匹配问题:输入一个字符串,计算其中包含的连续给定的子字符串的个数。例如输入字符串“EFABCABCABCDABCDD”,给定子字符串“ABC”,输出是3。函数原型:intcountsub(char*str,char*subs)。参数说明:str保存输入的字符串的首地址,subs保存需要统计的子字符串的首地址。返回值:包含的连续子字符串的个数。预设代码countsub_H20.c1.#include<stdio.h>2.intcountsub(char*str,char*ss);3.main()4.{5.chars1[1000]={0},s2[100]={0};6.gets(s1);7.gets(s2);8.printf("%d\n",countsub(s1,s2));9.}程序:intcountsub(char*str,char*ss){inti,j,q,k=0,r,max=0,flag=1,h;for(r=0;str[r]!='\0';r++);for(i=0;i<=r;){for(j=i,q=0;j<=r;j++){if(ss[q]=='\0'){h=q;k++;flag=0;break;}if(str[j]==ss[q])q++;else{if(k>max)max=k;k=0;flag=1;break;}}if(flag)i++;elsei=i+h;}returnmax;}49.为整数编号使用以下结构structnn{intno;intnum;};建立一个结构数组,从键盘输入若干个整数,保存在数组元素的num成员中,并根据输入的数按从小到大进行编号,将编号保存在no成员中。按整数的输入顺序输出整数及其编号。输入的整数不超过100个,每个整数的绝对值不大于1000,输入时以空格分隔整数。例如输入:4368239输出:44326586213397要求:当两个整数相等时,整数的排列顺序由输入的先后次序决定。例如:输入的第2个整数为3,第6个整数也为3,则将先输入的整数3的编号在前,后输入的整数3的编号在后。编写函数完成为整数编号。函数原型:intnumber(char*str,structnna[]);其中:str:保存以字符串方式接收的键盘输入,a:保存整数及编号的结构数组的首地址,函数返回值:已输入的整数的个数。预设代码前置代码1.#include<stdio.h>2.structnn3.{intno;4.intnum;5.};6.typedefstructnnDATA;7.intnumber(char*,DATA[]);8.intmain()9.{10.DATAb[100];11.charsa[500];12.inti,n;13.gets(sa);14.n=number(sa,b);15.for(i=0;i<n;i++)16.printf("%d%d\n",b[i].num,b[i].no);17.return0;18.}19./*Hereiswaitingforyou20.intnumber(char*str,DATAa[])21.{22.....23.}24.*/程序:intnumber(char*str,DATAa[]){intn,i,j;for(i=0;*(str+i)!='\0';i++)n=(i+2)/2;for(i=0;i<n;i++){a[i].num=(int)*(str+2*i)-48;a[i].no=1;}for(i=0;i<n;i++)for(j=0;j<n;j++){if(a[i].num>a[j].num)a[i].no++;elseif(a[i].num==a[j].num&&(i>j))a[i].no++;else;}return(n);}50.学生成绩排序大家参加了期末考试,成绩出来后老师要对n个学生进行成绩汇总和排序。要求程序按成绩降序进行排序。在排序过程中对于成绩相同的学生,要按照输入数据的顺序进行排列。例如:有5名学生的成绩:zhang1,90zhang2,91zhang3,99zhang4,91zhang5,98则排序结果应该为:zhang3,99zhang5,98zhang2,91zhang4,91zhang1,90请注意例题中“zhang2”和“zhang4”的排列顺序。输入:第一行为将要输入的学生数量n从第二行起后面连续n行数据,每行为一名学生的姓名(长度不超过20个字符,不包括空格),考试成绩(int)输出:排序后的结果。每行为一名学生的姓名和成绩。程序:#include<stdio.h>structnn{charno[30];intnum;};typedefstructnnDATA;intmain(){charstr[30];inti,j,n,k;scanf("%d\n",&n);DATAb[n];for(i=0;i<n;i++){scanf("%s",&str);k=strlen(str)-1;if(str[k-2]==',')b[i].num=(str[k]-'0')+(str[k-1]-'0')*10;elseb[i].num=(str[k]-'0')+(str[k-1]-'0')*10+(str[k-2]-'0')*100;strcpy(b[i].no,str);}for(i=1;i<n;i++)for(j=0;j<n-i;j++)if(b[j].num<b[j+1].num){strcpy(str,b[j].no);strcpy(b[j].no,b[j+1].no);strcpy(b[j+1].no,str);k=b[j].num;b[j].num=b[j+1].num;b[j+1].num=k;}for(i=0;i<n;i++)printf("%s\n",b[i].no);}H21:数码管(选作)背景数码管是一种廉价的十进制数字显示装置,它的基本工作原理是:一个数码管有7段,我们将它对应成八位二进制的8位。这8位的编号从左向右分别是7、6、5、4、3、2、1、0。数码管的一段对应二进制的一位,如果要点亮某一段,则需要将相应的二进制位置1,其余不亮的段要将对应的位置0。下图表示了7个二进制在数码管上对应的位置: 2+---+3| |4|1|+---+5| |6|0|+---+例如,我们要显示出数字“1”,则应该点亮数码管的第4和6段。这样对应的8位二进制数就是:01010000。如果用十六进方式表示出来就是50。同理,要显示出“3”,应该点亮:0、1、2、4、6;对应的二进表示为:01010111,用十六进制表示就是57。请编写一个程序,用5个数码管显示一个16位(bit)的正整数。说明:如果需要显示的数据不足5位,则在数据前面补0。例如120要显示为00120。输入程序的输入是一系列16位(bit)的正整数(10进制形式),数与数之间允许用空白符隔开,当数字为0时程序结束。输出针对每个正整数,输出5个字节的十六进制数,它们可以表示5个数码管的状态。其中右侧第1个数表示输入数字的个位,第2个数表示十位,以此类推。程序:#include<stdio.h>#include<string.h>intmain(){charw[100];intnum[10]={125,80,55,87,90,79,111,84,127,95};ints=4,l=0;intn[9]={0,0,0,0,0,0,0,0,0};for(;1;){s=4;gets(w);if(w[0]=='0')break;l=strlen(w);for(inti=0;i<=l;i++){if(w[i]==''&&s==4)continue;elseif(w[i]==''||s==9){for(intq=s-4;q<s+1;q++){printf("%X",num[n[q-1]]);if(q!=s)printf("");}printf("\n");for(intx=0;x<9;x++)n[x]=0;s=4;}elseif(w[i]=='\0'&&s==4)continue;elseif(w[i]=='\0'){for(intq=s-4;q<s+1;q++){printf("%X",num[n[q-1]]);if(q!=s)printf("");}printf("\n");for(intx=0;x<9;x++)n[x]=0;s=4;continue;}else{n[s]=w[i]-'0';s++;}}}}51.建立链表请按照输入整数的顺序建立一个倒序的带表头节点的链表。已知程序的基本结构如下,请你编写ins_list函数。预设代码前置代码1.#include"stdio.h"2.structnode3.{intdata;4.structnode*next;5.};6.typedefstructnodeNODE;7.typedefstructnode*PNODE;8.intmain()9.{intnum=1;10.PNODEhead;11.head=(PNODE)malloc(sizeof(NODE));12.head->next=NULL;13.head->data=-1;14.while(num!=0)15.{scanf("%d",&num);16.if(num!=0)17.ins_list(head,num);18.}19.outlist(head);20.return0;21.}22.outlist(PNODEhead)23.{PNODEp;24.p=head->next;25.while(p!=NULL)26.{printf("%d\n",p->data);27.p=p->next;28.}29.}程序:voidins_list(PNODEh,intnum){PNODEp;p=(PNODE)malloc(sizeof(NODE));p->data=num;p->next=h->next;h->next=p;}52.链表处理*编写一个函数,给定的带有头结点的单向链表head,给定某结点的数据域值m,将该结点移到链首。结构的定义:typedefstructnode{intnum;structnode*next;}SNODE;函数的原型:SNODE*movenode(SNODE*head,intm);其中:参数head是单向链表的头指针;参数m是某结点的num成员的值。例如输入结点数n=7,则将结点数值域值m=5的结点移动到链首。函数运行前后链表的情况如下图所示。预设代码前置代码1.#include<stdio.h>2.#include<stdlib.h>3.typedefstructsdata4.{intnum;5.structsdata*next;6.}SNODE;7.voidmovenode(SNODE*,int);8.voidsetlink(SNODE*head,intn)9.{10.SNODE*p;11.while(n>0)12.{p=(SNODE*)malloc(sizeof(SNODE));13.p->num=n;14.p->next=head->next;15.head->next=p;16.n--;17.}18.}19.voidoutlink(SNODE*head)20.{21.while(head->next!=NULL)22.{23.head=head->next;24.printf("%d,",head->num);25.}26.return;27.}28.intmain()29.{intn,m;30.SNODE*head=NULL;31.scanf("%d%d",&n,&m);32.head=(SNODE*)malloc(sizeof(SNODE));33.head->num=-1;34.head->next=NULL;35.setlink(head,n);36.movenode(head,m);/*Thisiswaitingforyou.*/37.outlink(head);38.printf("\n");39.return0;40.}程序:voidmovenode(SNODE*head,intm){SNODE*p,*q,*k;q=(SNODE*)malloc(sizeof(SNODE));p=head;k=head;intc=0;while(k->next!=NULL){c++;k=k->next;}while(p->next->num!=m){if(m==0||m>c)break;p=p->next;}q->num=p->next->num;p->next=p->next->next;q->next=head->next;head->next=q;}53.猜数字看人品描述Tom和Jerry做猜数字的游戏,Tom想一个数字然后让Jerry去猜,数字的范围在1到10之间。对于Jerry每讲的一个数,Tom都要讲这个数是toohigh或者toolow或者righton,直到righton结束。为了防止Tom作弊,Jerry把每一次的对话记录下来,现在让你去判断Tom有没有作弊。输入游戏可能做很多次,直到Jerry猜0的时候游戏结束,每一次猜测由一个正整数和一行回答组成。输出对每一次游戏如果Tom的回答有自相矛盾的地方,就输出Tomisdishonest,否则输出Tommaybehonest。程序:#include<stdio.h>intbacktobase(int*p)//初始化1到10数组{for(inti=1;i<=10;i++){*p=i;p++;}return0;}intcleanright(int*right,intn){for(inti=n;i<=10;i++){*right=0;right++;}return0;}intcleanleft(int*left,intn){for(inti=n;i>=1;i--){*left=0;left--;}return0;}intmain(){intbase10[11]={0,0,0,0,0,0,0,0,0,0,0};int*p;int*right;right=NULL;int*left;left=NULL;p=&base10[1];backtobase(p);charcmd[20];intn=0;intc=0;//switchcasefor(intq=0;q<1;){chartemp;scanf("%d",&n);temp=getchar();gets(cmd);if(n==0){break;}if(cmd[4]=='h')c=1;//1highelseif(cmd[4]=='l')c=2;//2lowelseif(cmd[4]=='t')c=3;//3rightelsec=0;//0errorswitch(c){case1:{right=&base10[n];cleanright(right,n);break;}case2:{left=&base10[n];cleanleft(left,n);break;}case3:{if(base10[n]==0)printf("Tomisdishonest\n");elseprintf("Tommaybehonest\n");backtobase(p);c=0;break;}case0:{break;}}}}H22恭喜发财利是窦来(选做)在中国,过春节时人们有给孩子压岁钱(粤语称为利是)的习俗。最早的压岁钱出现于汉代,又叫压胜钱,并不在市面上流通,而是铸成钱币形式的玩赏物,有避邪的功能。钱币正面一般铸有“万岁千秋”、“去殃除凶”等吉祥话和龙凤、龟蛇、双鱼等吉祥图案。据说嘉兴府有一户姓管的人家,夫妻老年得子,十分珍爱。在年三十晚上,为防止“祟”来侵扰一直逗孩子玩,小孩用红纸包了八枚铜钱,包了又拆,拆了又包,睡下以后,包着的八枚铜钱就放在枕边。半夜里,一阵阴风吹过,黑矮的小人正要用他的白手摸孩子的头,突然孩子枕边迸出一道金光,祟尖叫着逃跑了。于是这件事传扬开来,大家纷纷效仿,在大年夜用红纸包上钱给孩子,祟就不敢再来侵扰了。因而人们把这种钱叫“压祟钱”,“祟”与“岁”发音相同,日久天长,就被称为“压岁钱”了。现在有N个人,他们都有小孩,春节来了,他们要发压岁钱给朋友的小孩,而他们自己的小孩也会收到压岁钱。为了简单,他们在发压岁钱的时候,使用以下的计算方法,譬如某甲有100块,它要给另外三个人的小孩发压岁钱,则每个小孩会分到100/3=33块,剩余的1块就不发了。给你这N个人的信息,以及他们把压岁钱发给了谁的小孩,请你计算他们每个人的小孩收到的压岁钱和他们发出去的压岁钱的差额是多少。输入第1行:一个整数N(2<=N<=10)第2..N+1行:每行是一个人名,每个名字不超过14个字符第N+2..结束:N组按照以下规则组织的数据:组中的第一行为送出压岁钱的人名。第二行包括两个数字,第一个是该人有多少钱(0~2000),第二个是它要把钱发给几个人的小孩,用NGi表示(0≤NGi≤N-1).如果NGi为非零,则下面的NGi行会列出接受压岁钱的人的名字。程序:#include<stdio.h>#include<string.h>#include<stdlib.h>structdate{charname[15];intmoney;intget;intnum;intres;};intmain(){structdatepeople[10];for(intx=0;x<10;x++){people[x].get=0;}intn,itemp,ktemp,ntemp,moneytemp;chartemp[20];scanf("%d",&n);for(inti=0;i<n;i++){scanf("%s",people[i].name);}for(inta=0;a<n;a++){scanf("%s",temp);for(itemp=0;strcmp(temp,people[itemp].name);itemp++){;}scanf("%d%d",&people[itemp].money,&ntemp);if(ntemp!=0)moneytemp=people[itemp].money/ntemp;people[itemp].num=ntemp;while(ntemp--){scanf("%s",temp);for(ktemp=0;strcmp(temp,people[ktemp].name);ktemp++){;}people[ktemp].get+=moneytemp;}}for(inta=0;a<n;a++){if(people[a].num){people[a].res=people[a].get-people[a].money+people[a].money%people[a].num;}else{people[a].res=people[a].get;}}for(inta=0;a<n;a++){printf("%s%d\n",people[a].name,people[a].res);}}54.链表排序对于输入的n个数据num进行排序,要求将输入的数据按num升序建立带有表头结点的链表,且链表中不能有重复的数据。  现在已经给出结点定义和程序框架,包括main函数和链表输出函数outlist,请编写函数sortlist完成链表排序功能。函数原型sortlist(PNODEh,intnum)的参数含义如下:h:单链表的头指针num:新输入的需要插入链表中的数据预设代码前置代码1.#include"stdio.h"2.structnode3.{intdata;4.structnode*next;5.};6.typedefstructnodeNODE;7.typedefstructnode*PNODE;8.intmain()9.{intnum=1;10.PNODEhead;11.head=(PNODE)malloc(sizeof(NODE));12.head->next=NULL;13.head->data=-1;14.while(num!=0)15.{scanf("%d",&num);16.if(num!=0)17.sortlist(head,num);18.}19.outlist(head);20.return0;21.}22.outlist(PNODEhead)23.{PNODEp;24.p=head->next;25.while(p!=NULL)26.{printf("%d\n",p->data);27.p=p->next;28.}29.}30./*Thisisanexampleforlist.Pleaseprogrammeyourcodelikeit.31.sortlist(PNODEh,intnum)32.{PNODEp;33.p=(PNODE)malloc(sizeof(NODE));34.p->data=num;35.p->next=h->next;36.h->next=p;37.}程序:voidsortlist(PNODEh,intnum){PNODEp,ptemp;p=(PNODE)malloc(sizeof(NODE));p->data=num;ptemp=h;while((ptemp->next)!=NULL)//findthefirstbiggerthannum{if(num<=ptemp->data){break;}ptemp=ptemp->next;}if(num==ptemp->data){free(p);}elseif(num>ptemp->data){p->next=ptemp->next;ptemp->next=p;}elseif(num<ptemp->data){inttemp;temp=ptemp->data;ptemp->data=num;p->data=temp;p->next=ptemp->next;ptemp->next=p;}}55.链表节点排序请编写函数sortlist,按照成员data的数值从大到小的顺序建立带有表头结点的链表,且链表中不能有重复的数据。已知定义如下:structnode{intdata;structnode*next;};typedefstructnodeNODE;typedefstructnode*PNODE;函数原型sortlist(PNODEh,intnum)的参数含义如下:h:单链表的头指针num:新输入的需要插入链表中的数据注意:仅提交自编的sortlist函数,不提交main函数。预设代码2012_56.c1.#include"stdio.h"2.#include"stdlib.h"3.structnode4.{intdata;5.structnode*next;6.};7.typedefstructnodeNODE;8.typedefstructnode*PNODE;9.intmain()10.{intnum=1;11.PNODEhead;12.voidsortlist(),outlist();13.head=(PNODE)malloc(sizeof(NODE));14.head->next=NULL;15.head->data=-1;16.while(num!=0)17.{scanf("%d",&num);18.if(num!=0)19.sortlist(head,num);20.}21.outlist(head);22.return0;23.}24.voidoutlist(PNODEhead)25.{PNODEp;26.p=head->next;27.while(p!=NULL)28.{printf("%d\n",p->data);29.p=p->next;30.}31.}程序:#include"stdio.h"#include"stdlib.h"structnode{intdata;structnode*next;};typedefstructnodeNODE;typedefstructnode*PNODE;sortlist(PNODEh,intnum){PNODEp;p=(PNODE)malloc(sizeof(NODE));p->data=num;while(h->next!=NULL){if(p->data>h->next->data)break;elseif(p->data==h->next->data)return0;elseh=h->next;}p->next=h->next;h->next=p;}56.猜猜我是谁在指定的文本文件中包含了我需要的信息,请从指定文件中读取指定的行。如果文件中没有指定的行,则显示“LineNoError.”。如果文件不存在,则显示“FileNameError.”。输入:第一行为要以只读方式打开的文本文件名第二行要读取的行号(从1开始)输出:文件中指定行号的内容(完整一行的内容)数据文件:data1.txt程序:#include<stdio.h>voidmain(){FILE*p;intl,i,flag=0;charfile[30],ch,s[20];scanf("%s",file);if((p=fopen(file,"r"))==NULL){printf("FileNameError.\n");exit(0);}scanf("%d",&l);if(l>4){flag=1;printf("LineNoError.\n");}if(flag==0){for(i=0;i<l;i++){fgets(s,17,p);}printf("%s",s);}fclose(p);}
本文档为【北理乐学C语言答案,最新】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
百里登峰
暂无简介~
格式:doc
大小:1010KB
软件:Word
页数:0
分类:
上传时间:2020-10-29
浏览量:127