C语言程序设计(第2版)课后习题答案第一章1.请参照本章例题,编写一个C程序,输出以下信息:**************************Verygood!**************************解:#includestdio.hvoidmain(){printf(**************************);printf(\n);printf(Verygood!\n);printf(\n);printf(**************************);}2.编写一个C程序,输入a、b、c三个值,输出其中最大值。解:#includestdio.hvoidmain(){inta,b,c,max;printf(请输入三个数a,b,c:\n);scanf(%d,%d,%d,&a,&b,&c);max=a;if(maxb)max=b;if(maxc)max=c;printf(最大数为:%d,max);}第二章1.假如我国国民生产总值的年增长率为10%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为P=(1+r)^n,r为年增长率;n为年数;P为与现在相比的百分比。解:#includestdio.h#includemath.hvoidmain(){doubleP,r=0.1,n=10;P=pow((1+r),n);printf(%lf\n,P);}3.请编程序将China译成密码,译码规律是用原来字母后面的第4个字母代替原来的字母。例如,字母A后面第4个字母是E,E代替A。因此,China应译为Glmre。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为'C'、'h'、'i'、'n'、'a',经过运算,使c1、c2、c3、c4、c5分别变为'G'、'l'、'm'、'r'、'e',并输出。解:#includestdio.hvoidmain(){charc1='C',c2='h',c3='i',c4='n',c5='a';c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf(密码是%c%c%c%c%c\n,c1,c2,c3,c4,c5);}第三章3.用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1='A',c2='a'。问在键盘上如何输入?解:#includestdio.hvoidmain(){inta,b;floatx,y;charc1,c2;scanf(a=%d,b=%d,&a,&b);scanf(x=%f,y=%e,&x,&y);scanf(c1=%c,c2=%c,&c1,&c2);}a=3,b=7x=8.5,y=71.82c1=A,c2=a5.设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后2位数字。请编程序。解:#includestdio.hvoidmain(){floatr,h,C1,Sa,Sb,Va,Vb;scanf(%f,%f,&r,&h);C1=2*3.14*r;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;printf(C1=%.2f\n,C1);printf(Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n,Sa,Sb,Va,Vb);}6.输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9,输出要求有文字说明,取位2小数。解:#includestdio.hvoidmain(){floatF,c;scanf(%f,&F);c=5*(F-32)/9;printf(c=%.2f,c);}7.编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输出这两个字符。思考以下问题:(1)变量c1、c2应定义为字符型或整形?或二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整形变量与字符变量是否在任何情况下都可以互相代替?如:charc1,c2;与intc1,c2;是否无条件地等价?解:#includestdio.hvoidmain(){charc1,c2;c1=getchar();c2=getchar();putchar(c1);putchar(‘\n');putchar(c2);putchar(‘\n');}#includestdio.hvoidmain(){charc1,c2;c1=getchar();c2=getchar();printf(c1=%dc2=%d\n,c1,c2);printf(c1=%cc2=%c\n,c1,c2);}第四章3.写出下面各逻辑表达式的值。设a=3,b=4,c=5。(1)a+bc&&b==c(2)a||b+c&&b-c(3)!(ab)&&!c||1(4)!(x=a)&&(y=b)&&0(5)!(a+b)+c-1&&b+c/2解:(1)0(2)1(3)1(4)0(5)15.有3个整数a、b、c,由键盘输入,输出其中最大的数,请编程序。解:#includestdio.hvoidmain(){inta,b,c,temp,max;printf(请输入3个整数:);scanf(%d,%d,%d,&a,&b,&c);temp=(ab)?a:b;max=(tempc)?temp:c;printf(3个整数的最大数是%d\n,max);}6.给一个百分制成绩,要求输出等级'A'、'B'、'C'、'D'、'E'。90分以上为'A',80~90分为'B',70~79分为'C',60分以下为'D'。解:#includestdio.hvoidmain(){floatscore;chargrade;printf(请输入学生成绩:);scanf(%f,&score);while(score100||score0){printf(\n输入有误,请重新输入:);scanf(%f,&score);}switch((int)(score/10)){case10:case9:grade='A';break;case8:grade='B';break;case7:grade='C';break;case6:grade='D';break;case5:case4:case3:case2:case1:case0:grade='E';break;}printf(成绩是%5.1f,相应的等级是%c.\n,score,grade);}7.给定一个不多于5位的正整数,要求:(1)求出它是几位数;(2)分别输出每一位数字;(3)按逆序输出各位数字。例如原数为321,应输出123。解:#includestdio.hvoidmain(){longintnum;intindiv,ten,hundred,thousand,ten_thousand,place;/*分别代表个位、十位、百位、千位、万位和位数*/printf(请输入一个整数(0~99999):);scanf(%ld,&num);if(num9999)place=5;elseif(num999)place=4;elseif(num99)place=3;elseif(num9)place=2;elseplace=1;printf(place=%d\n,place);ten_thousand=num/10000;thousand=num/1000%10;hundred=num/100%10;ten=num%100/10;indiv=num%10;switch(place){case5:printf(%d,%d,%d,%d,%d,ten_thousand,thousand,hundred,ten,indiv);printf(\n反序数字为:);printf(%d%d%d%d%d\n,indiv,ten,hundred,thousand,ten_thousand);break;case4:printf(%d,%d,%d,%d,thousand,hundred,ten,indiv);printf(\n反序数字为:);printf(%d%d%d%d\n,indiv,ten,hundred,thousand);break;case3:printf(%d,%d,%d,hundred,ten,indiv);printf(\n反序数字为:);printf(%d%d%d\n,indiv,ten,hundred);break;case2:printf(%d,%d,ten,indiv);printf(\n反序数字为:);printf(%d%d\n,indiv,ten);break;case1:printf(%d,indiv);printf(\n反序数字为:);printf(%d\n,indiv);break;}}8.企业发放的奖金根据企业的当年利润决定。当利润I低于或等于100000元时,奖金可提成10%;利润大于100000元,小于200000元(100000I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成7.5%;利润大于200000元,小于400000元(200000I≤400000)时,低于200000元的部分仍按上述办法提成(下同),高于200000元的部分按5%提成。利润大于400000元,小于600000元(400000I≤600000)时,高于400000元的部分按3%提成。利润大于600000元,小于1000000元(600000I≤1000000)时,高于600000的部分按1.5%提成;利润大于1000000元(I1000000)时,超过1000000元的部分按1%提成。从键盘输入当年利润I,求应发放奖金总数。要求:(1)用if语句编程序;(2)用switch语句编程序。解:(1)用if语句编程序。#includestdio.hvoidmain(){longi;floatbonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1;/*利润为10万元时的奖金*/bon2=bon1+100000*0.075;/*利润为20万元时的奖金*/bon4=bon2+200000*0.05;/*利润为40万元时的奖金*/bon6=bon4+200000*0.03;/*利润为60万元时的奖金*/bon10=bon6+400000*0.015;/*利润为100万元时的奖金*/printf(请输入利润i:);scanf(%ld,&i);if(i=100000)bonus=i*0.1;/*利润在10万元以内按0.1提成奖金*/elseif(i=200000)bonus=bon1+(i-100000)*0.075;/*利润在10万至20万元时的奖金*/elseif(i=400000)bonus=bon2+(i-200000)*0.05;/*利润在20万至40万元时的奖金*/elseif(i=600000)bonus=bon4+(i-400000)*0.03;/*利润在40万至60万元时的奖金*/elseif(i=1000000)bonus=bon6+(i-600000)*0.015;/*利润在60万至100万元时的奖金*/elsebonus=bon10+(i-1000000)*0.01;/*利润在100万元以上时的奖金*/printf(奖金是%10.2f\n,bonus);}(2)用switch语句编程序。#includestdio.hvoidmain(){longi;floatbonus,bon1,bon2,bon4,bon6,bon10;intc;bon1=100000*0.1;bon2=bon1+1