《网教C语言习题集.docx》由会员分享,可在线阅读,更多相关《网教C语言习题集.docx(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、*输入:边长n输出:边长为n的菱形1. #includestdio.hH2. main()3. int ijn;4. scanf(%d,&n);5. for(i=l;i=n;i+)6. for(j=l;j=n-l+i;j+)7. if(j=n+l-i)8. printf(H*M);9. else printf(M M);10. 11. printf(Hn);12. )13. for(i=l;i=n-l;i+)14. for(j=l;j=2*n-i-l;j+)15.if(ji)16. printf(H*M);17. else printf(M H);18. )19. printf(n);20.
2、21. 输入图形的高n和首字符c ,输出如下例(c=7V , n=5)所示的图形.ABCDEBCDEFCDEFGDEFGHEFGHI输入:高n和首字符c输出:高为n和首字符为c的平行四边形1. #includestdio.h2. main()3. int4. char a,b;5. scanf(%d,%cn”,&n,&b);6. a=b;7. for(i=l;i=n;i+)8. for(j=l;j=i)10. b=a+j-l;11. putchar(b);12. )13. else printf( H);14. )15. printf(Hn);16. system(pause);17.)输入整
3、数m和正整数n,按下列公式计算s:s=m-(m+1)+m+2-(m+3)+(-1)n(m+n).输入:m和n输出:s11.#includestdio.h2. main()3. int4. scanf(%d %dn”,&m,&n);5. s=0;j=0;i=l;6. do s=s+i*(m+j);7.8. while(j=48&a=65&a=97&a180)13 .c=360-c j14 . printf(At %d:%02d the angle is %.If degrees.Xnic);15 . system(pause);16 .若正整数A的全部约数(包括1,不包括A本身)之和等于B ;且
4、整数B的全部约数(包括1,不包括B本身)之和等于A,则A、B为亲密数。编程,输入正整数A ,输出亲密数A, B(A22、44、55、110,约数之和是284;284的约数是:1、2、4、71、142,约数之和是220。#includestdio.h1. main()2. int a,b,c,s,i;3. scanf(%d,&a);4. s=0;5. for(b=l;ba;b+)6. c=a%b;7. if(c=0)8. s=s+b;9. 9.1 i=0;11 .for(b=l;bs;b+)12 .c=s%b;13 . if(c=0)14.i=i+b;15.16.if(i=a)17.printf
5、(%d-%dn,a,s);18.else printf(No outputn);19.system(pause);20.4-1打印空心等腰梯形成绩:10/折扣:0.8输入n值,输出如下例(n=4)所示的高和上底均为n的等腰梯形:*输入:高n输出:高和上底均为n的等腰梯形11.#includestdio.h2. main()3. int ijn;4. scanf(%dn,&n);5. for(i=l;i=n;i+)6. for(j=l;j=n&j=2*n-l)|i=n|j=n-i+l|j=2*n+i-2)8. printf(H*M);9. else printf(M M);10. 11. pri
6、ntf(nn);12. 13. system(pause);14.4-2.反序输出整数成绩:10/折扣:0.8输入一个整数N,要求以相反的顺序输出该数,例如,N=-1234,输出-4321。输入:整数N 输出:N的反序数1.#includestdio.hMI2.#includemath.h3. main()4. int n;5. scanf(%d,&n);6. if(n0) printf(H-n);|7. n=fabs(n);8 . while(n!=0)9 . printf(H%dn,n%10);10 .n=n/10;11 .)12 .printf(Mn);13 .system(pause)
7、;14.4-3.求最大、次大、最/坏口次小值成绩:10/折扣:0.8输入n和n个整数及其序号(如:15,145,2.),依次输出n个整数的最大值、次大值、最小值、次小值及其原始序号。输入:n和n个整数及其序号输出:n个整数的最大值、次大值、最小值、次小值及其原始序号11.#define N 502. #includestdio.h3. main()4. int n,aNN,b,c,5. scanf(H%d&n);6. for(i=0;in;i+)7. scanf(M%dJ%dMJ&a0iJ&ali);8. c=a00;j=0;9. for(d=l;d=c)11. c=a0d;j=d;12. e
8、lse c=c;13. printf(%d,%d ,c,alj);1.1 if(j=0)h=l;else h=0;15 .c=a0h;b=0;16 .for(d=0;d=c&d!=j)18 .c=a0d;b=d;19 .else c=c;20.printf(,%d,%dncJalb);21.c=a00;j=0;22 .for(d=l;dn;d+)23 . if(a0d=c)24 .c=a0d;j=d;25 .else c=c;26 .printf(,%dJ%d M,c,alj);27.if(j=0)h=l;else h=0;28 .c=a0h;b=0;29 .for(d=0;dn;d+)30
9、. if(a0d=c&d!=j)31 .c=a0d;b=d;32 .else c=c;printfb);33 . system(t*pauseM);34 .4-4.10进制数转换为16位二进制数成绩:10/折扣:0.8将任一正整数(=l);10. for(j=l;j=0;f-)14.printf(HnH);15. . system(pause);16. )4-5.打印实心正方形成绩:10/折扣:0.8上次你已经打印了一行*号,这次在屏幕上输出一个由星号组成的n行n列的正方形。程序输入n值,输出如下例(n=4)所示的高和上底均为n的正方形:*输入:高n输出:n行n列的正方形I1.#include
10、stdio.h2. main()3. int a,b,n;4. scanf(%d,&n);5. for(a=l;a=n;a+)6. for(b=l;b=n;b+)7. printf(M*M);89. printf(MnM);10. 11. system(pause);12 .)学生的学习成绩是百分制,成绩的归类标准是:90=成绩 v=100为super;80=成绩90为good;70=成绩80为,ok,;60=成绩70为“pass”成绩100)printf(H%d,Jn);printf(M input errorn);6. else if(n=90)printf(%d,n);7. printf
11、(M MsuperMn);8. else if(n=80)printf(%d,n);9. printf(M MgoodMnM);10.else if(n=70)printf(%dJn);ll.printf(M ok“n”);12.else if(n=60)printf(%d,n);13 .printf(M MpassMn);14 .else if(n=0)printf(%dJn);15 .printf(H Mno good”n);16 .while(n=0);17 .system(pause);18.4-7.输出星期几的英文表示成绩:10/折扣:0.8输入用数字(1-7)表示的星期几,输出星期
12、几的英文表示,输入的数字有误,输出单词“Error(回车11.#includestdio.h2. main()3. int n;4. scanf(%d,&n);5. switch(n)6. case 1: printf(Mondayn);break;|7. case 2: printf(MTusedaynH);break;8 . case 3: printf(Wednesdayn);break;9 . case 4: printf(MThursdaynM);break;10 .case 5: printf(nFridayn);break;11 .case 6: printf(Staurdayn
13、);break;12 .case 7: printf(SundaynH);break;13 .default: printf(Errorn);14 .)15 .system(pause);16.4-8.求最大数和最小数的算数运算结果成绩:10/折扣:0.8输入若干个整数,及其要进行的算术运算(+HV)符号,输出最大整数与最小整数进行给定的算术运算的结果。输入的整数范围是(0-65535),输入等号作为输入的结束,输出格式见例题。输入:整数序列及其运算序号输出:最大数与最小数的算术运算式1 .#include 2 .#include 3 . main()4 .int a,max=-l,min=6
14、5535Ji=-lJd=0Je=0Jf=0,g=0;5 . char c;6 . for(55)7 .c=getchar();8 . if (c!=44)9 .i+;if(i=0)a=c-48;10 .else if (i=l)11 .d=c-48;12 .else if (i=2)13 .e=c-48;14 .else if (i=3)15 .f=c-48;16 .else if (i=4)17 .g=c-48;18 .else if (c=44)19 .a=a*pow(10j i)+d*pow(10j i-l)+e*pow(10J i-2)+f*pow(10,i-3)+g*pow(10j
15、i-4);20 .max=maxa?max:a;21 . min=mina?min:a;22.i=-l;23.continue;1.1 if(c=42|c=43|c=45|c=47)25 .break;26 . if (c=42)27.printf(%d*%d=%dnjmaximin,max*min);)28.else if(c=43)29.printf(%d+%d=%dn,max,minmax+min);30.else if(c=45)31.printf(H%d-%d=%dnjmaximin,max-min);32.else if(c=47)33 .if (min=0)34 .printf
16、(Error!n);135.elseprintf (%d/%d=%dnJmaxJminJmax/min);)36.system(pause);4-9.黑色星期五成绩:10/折扣:0.8在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的13日又恰逢星期五就叫“黑色星期五”。输入某年年号和该年的元旦是星期儿(1-7),输出该年所有的“黑色星期五”的日期(年/月/日)。输入:4位年号和该年元旦是星期几输出:所有的“黑色星期五”的日期(年/月/日)1. #includestdio.h2. main()3. int a,b,c,d,i,j,h;4. sca
17、nf(%d %d”,&a,&b);5. if(a%400=0)6. c=l;7. else if(a%100=0)8. c=0;9. else if(a%4=0)10. c=l;11. else c=0;12. j=(b+43)%7;13. h=(b+12)%7;14.if(j=5)printf(“%d/”,a);15.printf(M2/13nM);16.if(h=5)printf(%d/H,a);17.printf(l/13n);18. for(d=3;d=7;d+)19. i=(b+10+31*(d-l)-(d-l)/2+c)%7;1.1 if(i=5)printfCWa);21.pri
18、ntf(%d/13nJd);22 .)23 .for(d=8;d=12;d+)24.i=(b+195+c-2+(d-7)*31-(d-8)/2)%7;25.if(i=5)printf(”d/”,a);26.printf(%d/13n,d);27.28.system(pause);29.)51.打印空心菱形成绩:10/折扣:0.8输入图形的高n和顶行字符c o输出如下例(c=A, n=5)所示的图形。AB BC CD DEEB BA输入:高n和顶行字符c输出:空心菱形11.#includestdio.h2. main()3. int4. char b;15. scanf(%d,%c”,&a,&b
19、);6. c=(double)b;7. for(d=l;d=a;d+4-)8. for(e=l;e0;d-)14 .for(e=l;e=a+d-l;e+)15.if(e=a+l-d|e=a+d-l)16.printf(%c,c+d-l);17. else printf(*);18.printf(MnH);19.system(pause);20.5-2.求各位数字之和等于5且能被5整除的裁成绩:10/折扣:0.8输入正整数M和N(M,N均小于10000),输出M和N之间所有满足下列条件的所有整数:整数的各位数字之和等于5且能被5整除。若没有满足条件的整数,则输出:N。output 输入:整数区间
20、m,n输出:各位数字之和等于5且能被5整除的所有整数11.#includestdio.h2. main()3. int a,b,c,d,i,4. scanf(%d%d5. for(c=a;cc);f=c;12.if(f=0)printf(No outputn);13.system(pause);5-3.学近编非序成绩:10/折扣:0.8按学生的序号输入n名学生的成绩,按照分数由高到低的顺序输出学生的名次、序号和成绩,要求成绩相同的学生具有相同的名次。输入:学生人数和n名学生的成绩输出:按分数由高到低的顺序输出学生的名次、序号和成绩11.#define N 502. #includestdio.
21、h3. main()4. int aNNb,c,d,%i;5. scanf(%d,&b);6. for(c=0;cb;c+)7. (scanf(%d&a0c);8. alc=c+l;|9.for(c=0;cb;c+)10.for(d=0;db-l;d+)ll.if(a0da0d+l)12.m=a0d+1113.a0d+l=a0d;14 .a0d=m;m=ald+1;15 .ald+l=ald;16 .ald=m;i=l;17 .for(c=0;cb-l;C+)18.(a2c=i;19.if(a0c=a0c+l)1 0.i=i;else i=i+l;21.if(a0b-2=a0b-l)a2b-l
22、=i;22 .else a2b-l=i;23 .for(c=0;cb;c+)24 .printf(%d:%d,%dn,a2c,alc,a0c);25 .system(pause);26.5-4.打印x空心菱形成绩:10/折扣:0.8输入图形的高,输出如下例(n=5时)所示的图形。输入:高n输出:空心菱形友情提示:第一步,先输出由*号组成的n行的实心正三角形和n-1行的实心倒三角形;第二步,通过判断原每行的第一个和最后一个输出*号,其余位置输出空格。11.#includestdio.h2. main()3. int a,c,d,e;4. scanf(%dSa);5. for(d=l;d=a;d+
23、)6. for(e=l;e0;d-)12 .for(e=l;e=a+d-l;e+)1.1 if(e=a+l-d|e=a+d-l)14 .printf15 .else printf( H);16 .printf(Mn);17 .system(pause);5-5.马戏团观众人数成绩:10/折扣:0.8一个马戏团表演,n个座位全满,全部门票收入是120元,现在知道,男人每人5元,女人每人2元,小孩每人1角。编程,输入总人数n,输出满足要求的男人、女人和小孩人数的全部方案。若n人无法满足条件,则输出“No output”。输入:人数n输出:男人、女人和小孩人数1. #includestdio.hM2
24、. main()3. int a,b,c,d,i=l;4. scanf(%d,&a);5. for(b=0;b=24;b+)6. for(c=0;c=60;c+)7. for(d=0;d=1200;d+)8. if(b*50+c*20+d=1200&b+c+d=a)9. printf(M%d,%dJ%dnMJbJcJd);10. else i+;11. if(i=1201*61*25+l)12 .printf(No outputn);13 .system(pause);5-6.求各位数字组成的最大数成绩:10/折扣:0.8任意输入一个自然数(不大于99999999),输出该自然数的各位数字组成
25、的最大数。例如,输入1593,则输出为9531 o输入:自然数n输出:各位数字组成的最大数11.#define N 10|2.#includestdio.h3. main()4. int n,b,c=10,aNj,m;5. scanf(%d,&n);6. for(b=0;bN;b+)7. a0b=(n%c-n%(c/10)/(c/10);8. c=10*c;if(n/(c/100)=0)break;9. for(i=0;ib;i+)10. for(j=0;jb-l;j+)ll.if(a0ja0j+l)12.m=a0j+1;13.a0j+l=a0j;14.a0j=m;|15.for(i=0;ib
26、;i+)17.printf(n);5-7.寻找特殊整数成绩:5/折扣:0.8请编写一个程序寻找一种特殊整数:一个n位的正整数等于其各位数字的n次方之和。例如:407=4x4x4+0x0x0+7x7x7。所以407就是一个特殊数。输入:正整数的位数n (n=6)输出:所有此n位特殊数。每个数占一行。若不存在符合条件的特殊数,则输出提示:“N。 output.;若存在,则从小到大进行输出。说明:假设输入为4,在4位整数中,有3个4位的特殊数,则输出格式为(输出中的1111、2222和9999并不是4位特殊数,只是格式样例):1111222299991. #define N 62. #include
27、stdio.hn3. main()4. int aNj,d,n,m,k,f=0;5. scanf(M%dM,&n);6. if(n=l)7. for(b=l;b=9;b+)8. printf(%dn,b);9. else10. b=l;i=l;11. dob=b*10;i+;12. while(i!=n);13. for(c=b;cb*10;c+)14.d=10;k=0;15.for(j=0;jn;j+)16.a0j=(c%d-c%(d/10)/(d/10);17.d=d*10;18.for(j=0;jn;j+)19.alj=l;m=a0j20.for(i=l;i=n;i+)21.alj=al
28、j*m;22.for(i=0;in;i+)23.k=ali+k;24.if(k=c)printf(%dn,c);f=l;|25.if(f=0)printf(No output.n);26.system(pause);5-8:计算通用产品代码(UPC)的校验位成绩:10/折扣:0.8背景许多年来,货物生产商都会把超市售卖的每件商品上放置一个条码。这种被称为通用产品代码(Universal Product Code,缩写UPC)的条码可以识别生产商和产品。超市可以通过扫描产品上的条码来确定支付此项商品的费用。每一个条码由十二位数字构成,通常这些数字会显示在条码下面。例如,包装为26盎司的Morto
29、n牌碘化盐所用条码下的数字是:024600010030第一个数字表示商品的种类(0表示大部分的食品杂货,2表示需要称量的货品,3表示药品或和健康相关的商品,而5表示优惠券)。接下来的一组五位数字用来识别生产商。而第二组五位数字则用来区分产品类型(其中包括包装尺寸)。最后一位数字是“校验位”,它可以帮助鉴别先前数字中的错误。如果条码扫描出现错误,那么前十一位数字和最后一位数字可能会不一致,而超市扫描机也会拒绝整个条码。下面是一种计算校验位的方法:首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。然后把第二位、第四位、第六位、第八位和第十位数字相加。接着把第一次加法结果乘以3后再加上
30、第二次加法的结果。随后,再把上述结果减去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的校验位提示本题有隐藏测试用例。如果想多找不同的实例验证你的算法,可以拿身边书或食品背后的条码测试一下。1
31、.#define N 13p.#includestdio.h3. main()4. int n,b,c,d,e,aN;5. scanf(%d&n);6. scanf(”%d”,&b);7. scanf(%d,&c);8. e=10;9. for(d=0;d5;d+)10.ad=(b%e-b%(e/10)/(e/10);11.ad+5=(c%e-c%(e/10)/(e/10);12.e=e*10;13.a10=al+a3+a5+a7+a9+n;14.all=a0+a2+a4+a6+a8;15.a12=9-(a10*3+all-l)%10;16.printf(%dnja12);17.system(
32、pause);6-1.求满足条件的等差数列前4项成绩:10/折扣:0.8有一正整数等差数列,其前四项之和是m,前四项之积是n,编程,输入m和n,输出此数列的前四项,若不存在这样的等差数列,则输出N。output输入:m,n输出:满足条件数列的前四项I1.#includestdio.hM2. main()3. int i=0,m,n,a,b,c;4. scanf(%d %d”,&m,&n);5. for(a=0;a=m/4;a+)6. b=(m-a*4)/6;7. if(m=a*4+6*b&n=a*(a+b)*(a+b*2)*(a+b*3)8. printf(M%d,%d,%d,%dnM,a,a
33、+b,a+b*2,a+b*3);9 i=l;10.if(i=0) printf(No outputn);11.system(pause);6-2.求整数平方的回文数成绩:10/折扣:0.8输入正整数m和n,输出m, n闭区间中满足下列条件的正整数及其平方:正整数的平方具有对称性质(也称为回文数),如:11的平方是121。若该区间不存在这样的正整数,则输出:No output输入:m,n输出:满足条件的正整数及其平方1.#define N 10I2.#includestdio.h3. main()4. int aN,b,c,d,e,i,5. scanf(%d %d”,&n,&b);6. g=0;
34、7. for(c=n;cb;c+)8. d=c*c;e=10;f=-l;9. do(e=e*10;10. while(d/e!=0);11. for(i=0;iN;i+)12.ai=(d%e-d%(e/10)/(e/10);13. e=e/10;13.1 f(e=l)break;15.for(j=0;j=i;j+)16.if(aj=ai-j)17.f=f+l;18.if(f=i)19.printf(H%d,%dn,Jc,d);g=l;20.if(g=0)printf(No outputn);21. systemCpause);6-3,打印数字菱形成绩:10/折扣:0.8输入n值,输出如下例(n
35、=4)所示的数字菱形。4434432344321234432344344输入:n输出:数字菱形友情提示:同学们总结一下打印星号组成的实心图形程序的编程思路:第一步,打印星号组成的正方形;第二步,改变每行星号的个数,打印每行星号数量不一样的图形;如果是空心图形,每行第一个和最后一个位置输出星号,其他位置输出空格。现在我们练习输出变化的字符,在打印星号图形的基础上,原来输出*号的位置,将 printf);改为printf(”2d”,x);当然,原来输出一个号的地方只占一个字符的位置,现在都要改为2个字符的位置,如果输出的是数字且多于2个,则要是3(1或4d 了。x是多少呢?则要寻找其规律,就是该输出位置与所在行列的关系。I1.#include,stdio.h,2. main()3. int a,b,c;4. scanf(%dj&a);|5. for(b=l;b=a;b+)6. for(c=l;c=a-l+b;c+)7
限制150内