C语言程序设计第4版微课版习题参考答案.docx
1选择题(1)C(2)B(3)C(4)D(5)D(6)A(7) D(8)C(9)C(10)D(11)CC程序是由一个main函数和若干个其他函数构成的。C语言程序上机的基本步骤:编辑、编译、连接、运行与调试.C表示C语言源文件,obj表示C语言编译后的二进制文件.exe表示可执行程序3.写出一个C程序:已知一个长方形长a=4,宽b=3,求长方形面积S的值并输出。inc1ude<stdio.h>intmain()(inta,b,s;a=4:b=3;s=a*b;printf("s=%dn"ts);return0;)习题21选择题(1)C(2)D(3)B(4)B(5)C(1) B(7)A(8)D(2) s=(a+b+c)/2area=sqrt(s*(s-a)*(s-b)*(s-c)(1) x=(-b+sqrt(b*b-4*a*c)/(2*a)(2) (1)4.5(2)1(3)2(4)6.5(3) ch=x,x=-2,y=1,z=0.OOOOOO(4) b=312654,a=-15026,c=N(5) x=3.567430,y=3.567000(6) c1=4,c2=3,c3=2,c4=12,2,1(7) y=64.0999981填空题(1)n(2)dOXu(3)%c,%cnc1-32,c2-32printf(*%d,%d,%d,%dn*,c1,c2,c1-32,c2-32);2.程序阅读(1)200(2)97b(3)68,82(4)a=3b=812.50.7083e2Aa(5)5767.856400,-789.124023A,65,101,411234567,4553207,12(168765535,177777,ffff,65535COMPUTER,COM(5)16(6)10(7)不完全等价,第一段程序运行结束,sum-5050,i=101第二段程序运行结束SUm=5050,i=100(8)8(9)*#*#*#$(10)1(11)3,5,3(12)21(13)0(14)10(15)213.编程题已知有函数:x+3(x>0)y=-0(x=0).X2-I(x<0)输入X的值,输出y。"inc1ude<stdio.h>intmain()(intx,y;scanf("%d",&x);if(x>O)y=x+3;e1seif(x=O)y=0;e1sey=x*-1;Printf("%dn",y);returnO;)(2)由键盘输入三个整数,输出其中最大的数。"inc1ude<stdio.h>intmain()intx,y,z,max;scanf(伐d,%d,%d",&x,&y,&z);max=x;if(max<y)max=y;if(max<z)max=z;printf(,%dn*,max);return0;)(3)由键盘输入三个整数,按由小到大的顺序输出。inc1ude<stdio.h>intmain()(inta,b,c,t;scanf("d,%d,%d&a,&b,&c);if(a>b)(t=a;a=b;b=t;)if(a>c)(t=a;a=c;c=t;)if(b>c)(t=b;b=c;c=t;)printf("%d,1,强dn”,a,b,c);return0;)t=a;a=c;c=t;)if(b>c)(t=b;b=c;c=t;printf("%d,%d,%dn”,a,b,c);returnO:(4)由键盘输入三角形的三个边a,b,c,计算并打印三角形的面积Sinc1ude<stdio.h>inc1ude<math.h>intmain()(doub1ea,b,c,t,s;scanf%1f,%1f”,&a,&b,&c);if(a>0&&b>0&&c>0)if(a+b>c&&a+c>b&&b+c>a)(t=(a+b+c)/2;s=sqrt(t*(t-a)*(t-b)*(tc);printf(*s=%.21fnw,e1seprintf("输入的数据不满足三角形规则n"):return0;)(5)由键盘输入一个大写字母,要求改用小写字母输出。inc1ude<stdio.h>intmain()(charc;c=getchar();if(c>=A,&&c<=Z*)c=c+32;printf("小写字母为%cn”,c);return0;)(6)由键盘输入一个三位整数,将它反向输出。例如输入123,输出321。inc1ude<stdio.h>intmain()intx;inta,b,c;scanf&x);a=x%10;b=x10%10;c=x100%10;printfa*100+b*10+c);return0;)(7)由键盘输入a,b,c,求ax2+bx+c=0方程的根。inc1ude<stdio.h>tjinc1ude<math.h>intmainOdoub1ex1,x2;doub1ea,b,c,d;scanf("务己f,&b,&c);d=b*b-4*a*c;if(a=0)(x1="cb;printf(*方程只有一个解,为.31fn",x1);)e1seif(d=O)x1=x2=-b(2*a);printfC方程两根相等,为.31fn*,x1);Ie1seif(d>O)x1=(-b+sqrt(d)(2*a):x2=(-b-sqrt(d)/(2*a);printf(*方程两根为31f,%.31fn*,x1,x2);e1seprintfC方程无解n");return0;(8)判断某一年是否是闰年。"inc1ude<stdio.h>intmainO(intyear;scanf(*%dn,fiyear);if(year%4=0&&year%100!=0year%400=0)Printf("yesn");e1seprintf(*nov);return0;)(9)由键盘输入两个正整数m和n,求其最大公约数和最小公倍数。inc1ude<stdio.h>intmainO(intm,n,t,r;intx;scanf("%d,%d”,&n):x=m*n;if(m<n)(t=m;m=n:n=t:r=m%n;whi1e(r!=O)辗转相除法r=i%n;)PrintfC最大公约数烦d,最小公倍数为$dn”,n,xn);return0;)(IO)给一百分制成绩,要求输出成绩等级'A'、'B'、'C'、'D'、'E'090分以上为'A',80-89分为'B',70-79分为C,60-69分为'D',60分以下为E'°方法一inc1ude<stdio.h>intmain()(intscore;SCanf(“%d”,score);if(score>=90&&score<=100)printf(*An*);e1seif(score>=80&&score<90)printf(*Bn*);e1seif(score>=70&&score<80)printf("Cn");e1seif(score>=60&&score<70)printf(*Dn*):e1seif(score<60)printf(*En*);e1seprintf("输入错误n");return0;方法二:inc1ude<stdio.h>intmain()(intscore;scanf&score);switch(score/10)case10:case9:printf(*An*);break;case8:printf(*Bn*);break;case7:Printf("Cn");break;case6:Printf("Dn");break;case5:case4:case3:case2:caseOzprintfCEXn*);break;defau1t:Printf("输入错误n");)return0;)(H)输入某年某月某日,判断这一天是这一年的第几天?律inc1ude<stdio.h>intmainO(intyear,month,day,days;scanf(*%d-%d-%d*,&year,&month,&day);switch(month)(case1:days=day;break;case 1: days=31+day:break:case 2: days=31+28+day;break;case4:days=31+28+31+day:break;case5:days=31+28+31+30+day;break:case6:days=31+28+31÷30+31+day;break;case7:days=31+28+31+30+31+30+day:break:case8:days=31+28+31+30+31+30+31+day;break;case9:days=31+28+31+30+31+30+31+31+day;break;case10:days=31+28+31+30+31+30+31+31+30+day;break:case11:days=31+28+31+30+31+30+31+31+30+31+day;break:case12:days=31+28+31+30+31+30+31+31+30+31+30+day;break;defau1t:printf(*输入错误n");)if(year%4=0ftyeai'b100!=0year%400=0)if(month>=3)days+;)printf(*是一年的第d天n*,days);return0;)(12)输出所有的3位水仙花数。所谓水仙花数是指所有位的数字的立方之和等于该数inc1ude<stdio.h>intmain()(inta,b,c;for(inti=100;i<1000;i+)(a=i%10;b=i10%10;c=i100%10;1 f(a*a*a+b*b*b+c*c*c=i)printf(*%d",i);return0;(13)由1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?inc1ude<stdio.h>intmain()(inta,b,c;intn=0;用来表示数据个数for(a=1;a<=4;a+)for(b=1;b<=4;b+)for(c=1;c<=4;c+)(if(a!=b&&a!=c&&b!=c)n+;printf(,%c1z,a*100+b*10+c);rintf(*n一共%d个n”,n);return0;(14)计算Fibonacci数列前20项的和。inc1ude<stdio.h>intmain()(intf,f1,f2;ints:f1=f2=1;s=2;for(int