《c程序设计第三版习题参考解答(全)》由会员分享,可在线阅读,更多相关《c程序设计第三版习题参考解答(全)(115页珍藏版)》请在金锄头文库上搜索。
1、1C 程序设计(第三版)课后习题参考解答程序设计(第三版)课后习题参考解答 第 1 章 C 语言概述 1.5 参照本章例题,编写一个 C 程序,输出以下信息: * Very Good! * 解: main ( ) printf(“* n”);printf(“n”);printf(“ Very Good! n”); printf(“n”); printf(“* n”); 1.6 写一个程序,输入 a,b,c 三个值,输出其中最大者。 解: main ( ) int a,b,c,max; printf(“请输入三个数 a,b,c: n”); scanf(“%d,%d,%d”, max=a; if
2、(max void main() int a , b; float x , y; char c1 ,c2; scanf(“a=%d b=%d”,6scanf(“ %f %e”, scanf(“ %c %c”, 解:a=3b=7 8.571.82 Aa4.7 下面的 scanf 函数输入数据,使 a=10,b=20,c1=A,c2=a,x=1.5,y=- 3.75,z=67.8,请问在键盘上如何输入数据? scanf(“%5d%5d%c%c%f%f%*f,%f”, 解: main ( ) int a,b;float x,y,z;char c1,c2;scanf(“%5d%5d%c%c%f%f%*
3、f,%f”,printf(“a=%d, b=%d, c1=5c, c2=%c, x=%6.2f, y=6.2f, z=6.2fn”),a,b,c1,c2,x,y,z); 运行情况如下:1020Aa1.5 3.751.5,67.8 (此行为输入的数据,其中为空格) a=10, b=20, c1=A, c2=a, x=1.50, y=-3.75, z=67.80 (此行为输出) 说明:按%5d 格式的要求输入 a 和 b 时,要先键入三个空格,然后再键入 10 与 20。%*f 是用来禁止赋值的。在输入时,对应于%*f 的地方,随意打入了一个数 1.5,该值不会赋给 任何变量。4.8 圆半径 r=
4、1.5,圆柱高 h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。 用 scanf 输入数据,输出计算结果,输出时要求有文字说明,取小数点后 2 位数字。请编 程序。 解: main ( ) float pi,h,r,l,s,sq,vq,vz;pi=3.1415926;printf(“请输入圆半径 r,圆柱高 h:n”);scanf(“%f,%f”,l=2*pi*r;s=r*r*pi;sq=4*pi*r*r;vq=3.0/4.0*pi*r*r*r;vz=pi*r*r*h;printf(“圆周长为: l=%6.2fn”,l);printf(“圆面积为: s=%6.2fn”,s);prin
5、tf(“圆球表面积为: sq=%6.2fn”,sq);7printf(“圆球体积为: sv=%6.2fn”,vq);printf(“圆柱体积为: sz=%6.2fn”,vz); 运行结果: 请输入圆半径 r,圆柱高 h: 1.5,3 圆周长为: l=9.42 圆面积为: s=7.07 圆球表面积为: sq=28.27 圆球体积为: sv=7.95 圆柱体积为: sz=21.214.9 输入一个华氏温度,要求输出摄氏温度,公式为 C=(5/9)(F-32) 输出要有文字说明,取 2 位小数。 解: main ( ) float c,f;printf(“请输入一个华氏温度:n”); scanf(“
6、%f”,c=(5.0/9.0)*(f-32); /*注意 5 和 9 要用实型表示,否则 5/9 的值为 0*/printf(“摄氏温度为:%5.2fn”,c);运行结果: 请输入一个华氏温度:78 摄氏温度为:25.56第 5 章 选择结构程序设计 5.2 语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”? 解:设有一个逻辑表达式,若其结果为“真” ,则以 1 表示;若其结果为“假” ,则以 0 表 示。但是判断一个逻辑量的值时,以 0 代表“真” ,以非 0 代表“假” 。例如 3printf(“请输入 3 个整数:”);scanf(“%d,%d,%d”,if (ab)?
7、a:b; /* 将 a 和 b 中的大者存入 temp 中 */max=(tempc)? temp:c; /* 将 a 和 b 中的大者与 c 比较,取最大者 */printf(“3 个整数中最大数是%dn”,max); 方法三:ab?(ac?a:c):(bc?b:c)运行结果: 请输入 3 个整数:12,34,9 3 个整数的最大数是 34。5.5 有一函数: 9 10113101121xxxxxx y写一程序,输入 x 值,输出 y 值。 解:程序如下 main ( ) int x,y;printf(“输入 x:”);scanf(“%d”,if (x100 | score9999) pla
8、ce=5;else if (num999) place=4;else if (num99) place=3; else if (num9) place=2; else place=1; printf(“place=%dn”,place); printf(“每位数字为:”); ten_thousand=num/10000; thousand=(int)(num-ten_thousand*10000)/1000; hundred=(int)(num-ten_thousand*10000-thousand*1000)/100; ten=(int)(num-ten_thousand*10000-tho
9、usand*1000-hundred*100)/10;11indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10); switch(place) case 5:printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv); printf(“n 反序数字为:”); printf(“%d%d%d%d%dn”,indiv,ten,hundred,thousand,ten_thousand); break; case 4:printf(“%d,%d,%d,
10、%d”,thousand,hundred,ten,indiv);printf(“n 反序数字为:”); printf(“%d%d%d%d n”,indiv,ten,hundred,thousand); break; case 3:printf(“%d,%d,%d”,hundred,ten,indiv);printf(“n 反序数字为:”); printf(“%d%d%d n”,indiv,ten,hundred); break; case 2:printf(“%d,%d”, ten,indiv);printf(“n 反序数字为:”); printf(“%d%d n”,indiv,ten); b
11、reak; case 1:printf(“%d”, indiv);printf(“n 反序数字为:”); printf(“%dn”,indiv); break; 运行结果: 请输入一个整数(099999):98765 位数5 每位数字为:9,8,7,6,5 反序数字为:567895.8 企业发放的奖金根据利润提成。利润 I 低于或等于 10 万元时,奖金可提 10;利润高 于 10 万元,低于 20 万元(1000001000000 时,超过 100 万的部分 按 1提成。从键盘输入当月利润 I,求应发放奖金总数。 要求:(1)用 if 语句编程序;(2)用 switch 语句编程序。 解:计
12、算利润时,要特别注意不同利润的不同提成比例。例如,利润为 15 万元,其中由 10 万元按 10的比例提成,另外 5 万元则按 7.5%提成。 用 if 语句编程序, main ( ) long i;float bonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1; /*利润为 10 万元时的奖金*/12bon2=bon1+100000*0.075 /*利润为 20 万元时的奖金*/bon4=bon2+100000*0.05 /*利润为 40 万元时的奖金*/bon6=bon4+100000*0.03 /*利润为 60 万元时的奖金*/bon10=bo
13、n6+400000*0.015; /*利润为 100 万元时的奖金*/printf(“请输入利润 i:”);scanf(“%ld”,if (i10) then c=10;switch (c) case 0: bonus=i*0.1; break;case 1: bonus=bon1+(i-100000)*0.075; break;case 2:case 3: bonus=bon2+(i-200000)*0.05; break;case 4:case 5: bonus=bon4+(i-400000)*0.03; break;13case 6:case 7:case 8:case 9: bonus
14、=bon6+(i-600000)*0.015; break;case 10: bonus=bon10+(i-1000000)*0.01;printf(“奖金是%10.2f”,bonus); 运行结果: 请输入利润 i:234000 奖金是:19200.005.9 输入 4 个整数,要求按由小到大的顺序输出。 解:程序如下 #include “stdio.h“ void main() int t,a,b,c,d;printf(“请输入 4 个整数:“);scanf(“%d,%d,%d,%d“,printf(“a=%d,b=%d,c=%d,d=%d“,a,b,c,d);if(ab)t=a;a=b;
15、b=t;if(ac)t=a;a=c;c=t;if(ad)t=a;a=d;d=t;if(bc)t=b;b=c;c=t;if(bd)t=b;b=d;d=t;if(cd)t=c;c=d;d=t;printf(“排序结果如下:n“);printf(“%d %d %d %dn“,a,b,c,d); 5.10 有 4 个圆塔,圆心分别为(2,2) , (2,2) , (2,2) , (2,2) ,圆半径为 1。 见图 4.4。这 4 个塔的高度分别为 10m。塔以外无建筑物。今输入任一点的坐标,求该点的 建筑高度(塔外的高度为 0) 。 解:程序如下 main ( ) int h=10;float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;14printf(“