c语言程序设计课后习题答案2.pdf
《c语言程序设计课后习题答案2.pdf》由会员分享,可在线阅读,更多相关《c语言程序设计课后习题答案2.pdf(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C 语言程序设计(第2 版)课后习题答案第一章1.请参照本章例题,编写一个C 程序,输出以下信息:Very good!解:#includevoid main()(*)printf(“n”);printf(44Very good!n,);printf(“n”);printf(*)2.编写一个C 程序,输入a、b、c 三个值,输出其中最大值。解:#includevoid main()(int a,b,c,max;printf(“请输入三个数 a,b,c:rT);scanf(“d,%d,%d”,&a,&b,&c);max=a;if(maxb)max=b;if(maxc)max=c;printf(最大
2、数为:%d,max);第二章1 .假如我国国民生产总值的年增长率为10%,计 算 10年后我国国民生产总值与现在相比增长多少百分比。计算公式为P=(l+r)八 n,r 为年增长率;n 为年数;P 为与现在相比的百分比。解:#include#includevoid main()(double P,r=0.1,n=10;P=pow(1 +r),n);printf(64%lfW P);)3.请编程序将“China”译成密码,译码规律是用原来字母后面的第4 个字母代替原来的字母。例如,字母“A”后面第4 个字母是“E”,“E”代替“A”。因此,“China”应译为“Glmre”。请编一程序,用赋初值的
3、方法使cl、c2、c3、c4、c5五个变量的值分别为C、h,、T、,n,、a经过运算,使c l、c2、c3、c4、c5分别变为,G,、T、,m,、T、并输出。解:#include void main()(charcl=,C,c2=,h,c3=,ic4=,n,c5=,a,;cl+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf(“密码是 c%c%c%c%cn”,c 1 ,c2,c3,c4,c5);第三章3.用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,cl=A c2=,a 问在键盘上如何输入?解:#includevoid main()(int a
4、,b;float x,y;char c 1,c2;scanf(4ta=%d,b=%d,&a,&b);scanf(4t x=%f,y=%e“,&x,&y);scanf(t4 cl=%c,c2=%c,&cl,&c2);)a=3,b=7x=8.5,y=71,82cl=A,c2=a5.设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用 scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后2 位数字。请编程序。解:#includevoid main()(float r,h,Cl,Sa,Sb,Va,Vb;scanf(tu%f,%f&r,&h);Cl=2*3.
5、14%;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;printf(Cl=%.2fn,Cl);printf(4iSa=%,2fnSb=%.2AnVa=%.2fnVb=%.2An,Sa,Sb,Va,Vb);6.输 入 个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9,输出要求有文字说明,取位 2 小数。解:#includevoid main()(float F,c;scanf(F,&F);c=5*(F-32)/9;printf(c=%.2f,c);)7.编程序,用 getchar函数读入两个字符给c l、c 2,然后分别用putchar函数
6、和printf函数输出这两个字符。思考以下问题:变量c l、c2应定义为字符型或整形?或二者皆可?(2)要求输Hi c l 和 c2值的ASCII码,应如何处理?用 putchar函数还是printf函数?整形变量与字符变量是否在任何情况下都可以互相代替?如:char cl,c2;与 int cl,c2;是否无条件地等价?解:#includevoid main()(char cl,c2;cl=getchar();c2=getchar();putchar(c I);putchar();putchar(c2);putchar(4n,);)#includevoid main()(char cl,c2
7、;cl=getchar();c2=getchai*();printf(44c l=%d c2=%dn,c 1 ,c2);printfCc 1 =%c c2=%cn,cl,c2);)第四章3.写出下面各逻辑表达式的值。设 a=3,b=4,c=5o(1)a+bc&b=c(2)allb+c&b-c(3)!(ab)&!clll(4)!(x=a)&(y=b)&0(5)!(a+b)+c-1&b+c/2解:)/7lzlz12345z(xz1xz(xz(xz(x011015.有 3 个整数a、b、c,由键盘输入,输出其中最大的数,请编程序。解:#includevoid main()(int a,b,c,tem
8、p,max;printf(“请输入3 个整数:”);scanf(“%d,%d,%d”,&a,&b,&c);temp=(ab)?a:b;max=(tempc)?temp:c;printf(3个整数的最大数是dn”,max);)6.给一个百分制成绩,要求输出等级,A9 0 分以上为,A,80-90分为B,为 79分为C,60分以下为D。解:#includevoid main()(float score;char grade;printf(“请输入学生成绩:”);scanf(u%f&score);while(score 100llscore0)printf(4n 输入有误,请重新输入:”);scan
9、f(4%f&score);)switch(int)(score/l 0)(case 10:case 9:grade=,A,;break;case 8:grade=,B,;break;case 7:grade=,C,;break;case 6:grade=,D,;break;case 5:case 4:case 3:case 2:case 1:case 0:grade=,E,;break;printf(“成绩是5.1f,相应的等级是c.n”,score,grade);)7.给定一个不多于5 位的正整数,要求:求出它是几位数;分别输出每一位数字;(3)按逆序输出各位数字。例如原数为3 2 1,应输
10、出123。解:#include void main()(long int num;int indiv,ten,hundred,thousand,ten_thousand,place;/*分 别 代 表 个 位、十 位、百 位、千 位、万 位 和 位 数 号printf(“请输入一个整数(099999):);scanf(%ld”,&num);if(num9999)place=5;else if(num999)place=4;else if(num99)place=3;else if(num9)place=2;else place=l;printf(44place=%dn,place);ten_t
11、housand=num/l 0000;thousand=num/1000%10;hundred=num/l 00%10;ten=num%100/10;indiv=num%10;switch(place)case 5:printf(d,%d,%d,%d,%d,ten_thousand,thousand,hundred,ten,indiv);printf(lln 反序数字为:);printfCt%d%d%d%d%dn,indiv,ten,hundred,thousand,ten_thousand);break;case 4:printf(d,%d,%d,%d”,thousand,hundred,t
12、en,indiv);printf(n反序数字为:);printf(t4%d%d%d%dn,indiv,ten,hundred,thousand);break;case 3:printf(%d,%d,%d”,hundred,ten,indiv);printf(un 反序数字为:);printf(6%d%d%dn,indiv,ten,hundred);break;case 2:printf(d,%d”,ten,indiv);printf(un 反序数字为:);printfC4%d%dnM,indiv,ten);break;case 1:printf(%d”,indiv);printf(n反序数字为
13、:);printf(%dn,indiv);break;)8.企业发放的奖金根据企业的当年利润决定。当利润I 低于或等于100000元时,奖金可提成 10%;利润大于100000元,小于200000元(1000001200000)时,低 于 100000元的部分按10%提成,高 于 100000元的部分,可提成7.5%;利润大于200000元,小于400000元(200000lW400000)时,低于200000元的部分仍按上述办法提成(下同),高于200000元的部分按5%提成。利润大于400000元,小于600000元(400000IW600000)时,高于400000元的部分按3%提成。利
14、润大于600000元,小 于 1000000元(600000K 1000000)时,高于600000的部分按1.5%提成;利润大于1000000元(D1000000)时,超 过 1000000元的部分按1%提成。从键盘输入当年利润I,求应发放奖金总数。要求:(1)用 if语句编程序;(2)用 switch语句编程序。解:(1)用 if语句编程序。#include void main()(long i;float bonus,bon 1 ,bon2,bon4,bon6,bon 10;bonl=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0
15、.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015;/*利润为10万元时的奖金*/*利润为20万元时的奖金*/*利润为40万元时的奖金*/*利润为60万元时的奖金*/*利润为100万元时的奖金*/printf(“请输入利润i:);scanf(t%ld,&i);if(i=100000)bonus=i*0.1;else if(i=200000)bonus=bon l+(i-l 00000)*0.075;else if(i=400000)bonus=bon2+(i-200000)*0.05;else if(i=600000)bonus=bon4+(i-
16、400000)*0.03;else if(i=1000000)bonus=bon6+(i-600000)*0.015;elsebonus=bon 10+(i-1000000)*0.01;printf(奖金是 10.2fn”,bonus);/*利润在10万元以内按0.1提成奖金*/*利润在10万至20万元时的奖金*/*利润在20万至40万元时的奖金*/*利润在40万至60万元时的奖金*/*利润在60万 至 100万元时的奖金9/*利润在100万元以上时的奖金*/(2)用 switch语句编程序。#include void main()long i;float bonus,bonl,bon2,bo
17、n4,bon6,bon 10;int c;bonl=100000*0.1;bon2=bon1 +100000*0.075;bon4=bon2+200000*0.05;bon6=bon4-1-200000*0.03;bon 10=bon6+400000*0.015;printf(“请输入利润i:);scanf(%ld”,&i);c=i/l 00000;if(c10)c=10;switch(c)(case 0:bonus=i*0.1;break;case 1:bonus=bonl+(i-100000)*0.075;break;case 2:case 3:bonus=bon2+(i-200000)*
18、0.05;break;case 4:case 5:bonus=bon4+(i-400000)*0.03;break;case 6:case 7:case 8:case 9:bonus=bon6+(i-600000)*0.015;break;case 10:bonus=bon 10+(i-1000000)*0.01;)printf(奖金是 10.2F,bonus);)9.输入4 个整数,要求按由小到大的顺序输出。解:#include void main()(int t,a,b,c,d;printf(“请输入4 个整数scanf(%d,%d,%d,%d”,&a,&b,&c,&d);printf(4
19、tn a=%d,b=%d,c=%d,d=%dnM,a,b,c,d);if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(ad)t=a;a=d;d=t;if(bc)t=a;b=c;c=t;if(bd)t=b;b=d;d=t;if(cd)t=c;c=d;d=t;pr i nt f(排序结果如下:n);pr i nt f(4 t%d,%d,%d,%d n”,a,b,c,d);)1 0 .有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1。这4个塔的高度分别为1 0 m。塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零
20、)。解:#i n c l u d e v o i d m a i n()(i n t h=1 0;f l o a t x l=2,y I=2,x 2=-2,y 2=2,x 3=-2,y 3=-2,x 4=-2,y 4=-2,x,y,d 1 ,d 2,d 3,d 4;p ri n t f(“请输入一个点(x,y):);s c a n f(4t%f,%f;&x,&y);d l=(x-x l)*(x-x l)+(y-y l)*(y-y l);/*求该点到各中心点的距离*/d 2=(x-x 2)*(x-x 2)+(y+y 2)*(y+y 2);d 3=(x+x 3)*(x+x 3)+(y-y 3)*(
21、y-y 3);d 4=(x+x 4)*(x-x 4)+(y+y 4)*(y+y 4);i f(d 1 1&d2 1&d3 1&d4 1)h=0;/*判断该点是否在塔外*/p ri n t f(“该点高度为%d n”,h);)1 1 .求+6 x +c =0方程的解。根据代数知识,应该有以卜几种可能:(l)a=0,不是二次方程,而是一次方程。(2)/_ 4 =0,有两个相等的实根。(3)6 -4 a c 0 ,有两个不等的实根。(4)&2-4 ac 0,有两个共物复根。编写程序,运行时,分别给出不同的a,b,c值,相应于上面4种情况,分析输出结果。解:#i n c l u d e#i n c l
22、 u d e#i n c l u d e v o i d m a i n()(f l o a t a,b,c,d i s c,x 1 ,x 2,re a l p a rt,i m a g p a rt;s c a n f(t 4%f,%f,%f&a,&b,&c);p ri n t f(t 4T h e e q u a t i o n );i f(f a b s(a)=1 e-6)p ri n t f(4 i s n o t a q u a d ra t i c n);e l s edisc=b*b4*a*c;if(fabs(disc)1 e-6)x l=(-b+sqrt(disc)/(2*a)
23、;x2=(-b-sqrt(disc)/(2*a);printf(4thas distinct real roots:%8.4f and%8.4fn”,xl,x2);)else(realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf(4thas complex roots:n);printfCt%8.4f+%8.4fin,realpart4magpart);printfC4%8.4f-%8.4fin,realpart,imagpart);)第五章1.求 100-200间的全部素数。解:#include#includevoid main()(int
24、m,i,n=0;double k;for(m=101;m=200;m=m+2)(k=sqrt(m);for(i=2;i=k+l)(printf(%d”,m);n=n+l;)if(n%10=0)printf(“n”);)2.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。解:#includevoid main()char c;int i=O,j=O,k=O,l=O;while(c=getchar()!=,n,)(if(c=A&c=a&c=,0,&c=,9,)j+;else if(c=?)k+;else 1+;)printf(i=%d,j=%d,k=%d,l=%dn,ij,k,l
25、);)3.输出所有“水仙花数”,所 谓“水仙花数”是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因 为 153=1八 3+5八 3+3八 3。解:#include#includevoid main()(int i,j,k,n;printf(“水仙花”数是巧;for(n=100;n 1000;n+)(i=n/100;j=n/10-i*10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf(%4d,n);)printf(44nM);4.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课后 习题 答案
限制150内