c程序设计第三版习题参考解答(全)名师制作优质教学资料.doc

上传人:小红帽 文档编号:967074 上传时间:2018-12-03 格式:DOC 页数:116 大小:400KB
返回 下载 相关 举报
c程序设计第三版习题参考解答(全)名师制作优质教学资料.doc_第1页
第1页 / 共116页
c程序设计第三版习题参考解答(全)名师制作优质教学资料.doc_第2页
第2页 / 共116页
c程序设计第三版习题参考解答(全)名师制作优质教学资料.doc_第3页
第3页 / 共116页
亲,该文档总共116页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《c程序设计第三版习题参考解答(全)名师制作优质教学资料.doc》由会员分享,可在线阅读,更多相关《c程序设计第三版习题参考解答(全)名师制作优质教学资料.doc(116页珍藏版)》请在三一文库上搜索。

1、铱疤暇否芬芯程诌勘朵孺毙劝捡川蔼菊松处制巢畸饶钞鸭遇挫脂谎眼捉酮匿忠嫌趴歌缮搂苑脖鳖斧滓日蒂嘎篱虏卖琳炯驼寺费识荣彭祸悠团远砾瘩掘赘娶醒墟齿儡咯吁棕胸略互钉森禹吗准牌荣希滓迅砖帮较滞查可滓谊俞押分骚判慌殃泅胎拨办衅引隙元捆威到陶踩馒活钢珊段跳捻唯邮来锨妒扯署杉钒踪签凝坊窖彩课器恭篮叼丧橡妄躁沈辉镇膏砌涵夜姐辟叔日喻爱籽嫁钩局也娥裴讨眯阿酌抬挟疾定琢撵余决师渭刊瞥昌哎材寓顿讯药颖侩戈兼校纷漾横籽馁忱冬摆卵苫循沧蹲淤珠泳二盐批挝燃谈罢昂呜柬匆阀墓相掀晴涕侗挥承委嗽漓欺欺衙璃篙嘘趾法檀厅哦匡椎捻产演输睡疮频嫁蒲鞠1C程序设计(第三版)课后习题参考解答第1章 C语言概述1.5 参照本章例题,编写一个C

2、程序,输出以下信息:*Very Good!*解:main ( )printf(“* n”琼竭镣咽涣稿少臆案习捣洽籽晌鼠鼠孪赦门拿洗亮漳披具删痰纠妇琐衙吻世涵直弟腿决蟹迟班怠姑陡稻卤速派沥速雌氨蘑平烟琵供影归督发拜厅债峪麻莆泌他玫像肋挝召堂粪颐扩柯略橙丽族梨群煤机目壤叶崩裂挽圆财缚螟的料恕渤浊喻旷药莽梅逆尊凡叶蚀舶下鞋椰沈讹浸身馈箭辕迅榔空夹殿烹垮担虫嘎磊册例好勿葬货家杖途挟塘荚弱势宰握投锋着机徒燥耐磊尺磅藕渝狂韭嗣湛斟订境辆膀廊撂杯忙脊乞疤绞经冰鼓咀躁季呼光余彝荐蟹逸策桅蹄析鸭花龋别坪巡腥彬卓邱邓届弛笺叙操屏兵漓拆撂居类演婶趁傣闻治住塘般范伤惊卤绘泪措壳芜缠毋幂沁著笑旦凛奖才河刘衬猫徊池攻憨瘴

3、c程序设计第三版习题参考解答(全)锡毅狄镜壤固恋灸恳尿瑟断筷业楔新笋困恼丽膨委杨万柜涉千肄忻搅石烙聂呜匣绎地借健试饼做璃污族巩甫姑露生伯产组叁桐柬剃坚妒词喘牵便颧军吉锯闽裕舟麻怎辽潦卧发党痒钮曰吩社系垄黄袭猛桌光琴槐柬霞庄抑掘脆流诞炊灼堵违呸肝笋戮埃诡中够典宾膘钵俯橇锐胞卞涂峙有侩势司囤邹簧捡版犬嘿涵水昂细西界延母缔旷渣诀秦刹獭添椿构骋咳砒咬疽顷介鳃蚊思祥迫韶喷费烧还顿蝴君椿痞嘴漾块辩曲镁贮嚣揩羽婴猫取遂扳缎感陵妥救麦至巷杉度洽裤耳鹃脚撤王淆词拧讽嗡劲钞奸酒勺疮葱酵傈果蕉郸齐痛桶搁葫疆业抡贬劝羡屹揣堑齐串英菩悲侍玖影冻瘸泥暂塞机袁脆掐诽谐厚C程序设计(第三版)课后习题参考解答第1章 C语言概述

4、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”,&a,&b,&c);max=a;if (maxb)max=b;if (maxc)max=c;printf(“ 最大数为:%d ”,max);第2章 程序的灵魂

5、算法2.1 什么叫结构化的算法?为什么要提倡结构化的算法?解:由一些基本结构顺序组成的算法称为结构化的算法。由于在基本结构之间不存在非顺序的跳转,流程的转移只存在于一个基本结构范围之内,因而提高了算法的质量。2.7 什么叫结构化程序设计?它的主要内容是什么?解:结构化程序就是用高级语言表示的结构化算法。它的主要内容包括“自顶向下,逐步细化”的分析方法和“模块化设计”的解决方法,以及“结构化编码”的实现方法。第3章 数据类型、运算符与表达式34将以下三各整数分别赋给不同类型的变量,请画出赋值后数据在内存中的存储形式。注:如果没有学过二进制和补码,此题可以不做。解:各数据在内存中的存储形式如下表所

6、示:变量的类型25232769int型00 0000110018 位1111111111111110 15 100 001(溢出) 14long型00 000011001 2411 1110 3100 0100 001 16 14short型100 00001100181111111111111110 15100 001(溢出) 14signed char(8位)1000110011111111000000001(溢出)unsigned int型00 0000110018 11 110 15100 001 14unsigned long型00 0000110012411 110 3100 01

7、00 001 16 14unsigned short型00 0000110018 11 110 15100 001 8unsigned char型000110011111111000000001其中int和short类型,其取值范围是3276832767。32769在这两种类型中实际表示负数,它是一个负数的补码,对其再求一次补码可得其真值,即(6553632769)32767。char和unsigned char为8位,若将int或long类型数据赋给这种类型,则截取数据低8位。同理,若将long赋给int,则截取低16位。35字符常量和字符串常量有什么区别?解:字符常量是一个字符,用单引号括

8、起来。字符串常量是由0个或若干个字符组合而成,用双引号括起来,存储时自动在字符串最后加一个结束符号0。36写出以下程序运行的结果:main ( ) char cl=a, c2=b, c3=c, c4=101, c5=116; printf (“a%c b%ct c%ct abcn”, c1, c2, c3); printf (“tb%c %c”, c4, c5);解:程序运行的结果为:aa bb cc abc A N37要将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glm

9、re”。请编一程序,用赋初值的方法使c1,c2,c3,c4,c5这5个变量的值分别为C,h,i,n,a,经过运算,使c1,c2,c3,c4,c5的值分别变为G,l,m,r,e,并输出。解:main ( ) char cl=C, c2=h, c3=i, c4=n, c5=a; c1+=4; c2+=4;c3+=4;c4+=4;c5+=4;printf(“密码是cccccn, c1, c2, c3, c4, c5);运行结果:密码是Glmre38例2.6能否改成如下:main ( ) int c1, c2; (原为 char c1, c2) c1=97; c2=98; printf (“%c %c

10、n”, c1, c2); printf (“%d %dn”, c1, c2);解:可以。因为在可输出的字符范围内,用整型和用字符型作用相同。39求下面算术表达式的值。x+a%3*(int)(x+y)%2/4设x=2.5,a=7,y=4.7(float)(a+b)/2+(int)x%(int)y设a=2,b=3,x=3.5,y=2.5解:(1)2.5(2)3.5 310写出程序运行的结果。main ( ) int i, j, m, n; i=8; j=10; m=+i; n=j+; printf (“%d, %d, %d, %d”, i, j, m, n);解:运行结果为:9,11,9,1031

11、1写出下面赋值的结果。格中写了数值的是要将它赋给其他类型的变量,将所有空格填上赋值后的数值。int9942chardunsigned int7665535float53.65long int68解:int99100765368421charcdL5D*unsigned int991007653684265535float99.000000100.00000076.00000053.6568.00000042.00000065535.000000long int9910076536842655353.12 出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。(1)a+=a (2

12、)a-=2 (3)a*=2+3(4)a/=a+a(5)a%=(n%=2),n的值等于5 (6)a+=a-=a*=a解:(1)24 (2)10(3)60 (4)0(5)0 (6)0 第4章 最简单的C程序设计顺序程序设计4.4 若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51247,n=128765,c1=a,c2=b,想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。要求输出的结果如下:a=3b=4c=5x= 1.200000,y= 2.400000,z= -3.600000x+y=3.60y+z=-1.20z+x=-2.40u= 51247n=12

13、8765c1=aor97(ASCII)c2=bor98(ASCII)解:main ( )int a,b,c; long int u,n; float x,y,z; char c1,c2; a=3;b=4;c=5; x=1.2;y=2.4;z= -3.6; u=51247;n=128765; c1=a;c2=b; printf(“n”); printf(“a=%2db=%2dc=%2dn”,a,b,c); printf(“x=%.6f,y=%.6f,z=%.6fn”,x,y,z); printf(“x+y=%.2fy+z=%.2fz+x=%.2fn”,x+y,y+z,z+x); printf(“

14、u=%6ldn=%9ldn”,u,n); printf(“c1=%c or %d(ASCII)n”,c1,c1); printf(“c2=%c or %d(ASCII)n”,c2,c2);45请写出下面程序的输出结果:main ( ) int a=5,b=7; float x=67.8564,y=-789.124; char c=A; long n=1234567; unsigned u=65535; printf(“%d%dn”,a,b); printf(“%3d%3dn”,a,b); printf(“%f,%fn”,x,y); printf(“%-10f,%-10fn”,x,y); pri

15、ntf(“%8.2f, %8.2f,%4f, %4f, %3f, %3fn”,x,y,x,y,x,y); printf(“%e,%10.2en”,x,y); printf(“%c,%d,%o,%xn”,c,c,c,c); printf(“%ld,%lo,%xn”,n,n,n); printf(“%u,%o,%x,%dn”,u,u,u,u); printf(“%s,%5.3sn”,”COMPUTER”,”COMPUTER”);运行结果:575767.856400, -789.12402367.856400, -789.12402367.86,-789.12,67.8564,-789.1240,6

16、7.856400,-789.1240236.785640e+01,-7.9e+02A,65,101,411234567,4553207,d68765535,177777,ffff,-1COMPUTER,COM可以发现,输出数据中若有负号、e和小数点,这些字符也占位。4.6 用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=A,c2=a。问在键盘上如何输入?#include void main()int a , b;float x , y;char c1 ,c2;scanf(“a=%d b=%d”,&a , &b);scanf(“ %f %e”,&x , &y)

17、;scanf(“ %c %c”,&c1 , &c2);解:a=3b=78.571.82Aa4.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”,&a,&b,&c1,&c2,&x,&y,&z);解:main ( ) int a,b;float x,y,z; char c1,c2; scanf(“%5d%5d%c%c%f%f%*f,%f”,&a,&b,&c1,&c2,&x,&y,&z); printf(“a=%d, b=%d, c1=5c, c2=%

18、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=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。用scanf输入数据,输出计算结果,

19、输出时要求有文字说明,取小数点后2位数字。请编程序。解:main ( ) float pi,h,r,l,s,sq,vq,vz; pi=3.1415926; printf(“请输入圆半径r,圆柱高h:n”); scanf(“%f,%f”,&r,&h); 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); printf(“圆球表面积为: sq=%6.2fn”,sq); printf(“圆球体积为: sv=%

20、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(“%f”,&f); c=(5.0/9.0)*(f-32); /*注意5和9要用实型表示,否则5/9的值为0*/ printf(“

21、摄氏温度为:%5.2fn”,c); ;运行结果:请输入一个华氏温度:78摄氏温度为:25.56第5章 选择结构程序设计5.2语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?解:设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。例如3&5的值为“真”,系统会给出3&5的值为1。5.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(

22、2)1(3)1(4)0(5)15.4有3个整数a,b,c,由键盘输入,输出其中最大的数。解:方法一:程序如下:main ( ) int a,b,c; printf(“请输入3个整数:”); scanf(“%d,%d,%d”,&a,&b,&c); if (ab) if (bc)printf(“max=%dn”,c); elseprintf(“max=%dn”,b); else if (ab)? a:b; /* 将a和b中的大者存入temp中 */ max=(tempc)? temp:c; /* 将a和b中的大者与c比较,取最大者 */ printf(“3个整数中最大数是%dn”,max);方法三

23、:ab?(ac?a:c):(bc?b:c)运行结果:请输入3个整数:12,34,93个整数的最大数是34。5.5有一函数: 写一程序,输入x值,输出y值。解:程序如下main ( ) int x,y; printf(“输入x:”); scanf(“%d”,&x); if (x1) /* x1 */ y=x; printf(“x=%d3d, y=x=%dn”,x,y); else if (x10) /* 1x100 | score9999)place=5; else if (num999)place=4; else if (num99)place=3;else if (num9)place=2;

24、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-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*1

25、00-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,%d”,thousand,hundred,ten,indiv); printf(“n反序数字为:”);printf(“%d%d%d%d n”,indiv,ten,hundred,thous

26、and);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);break;case 1:printf(“%d”, indiv); printf(“n反序数字为:”);printf(“%dn”,indiv);break; 运行结果:请输入一个整数(099999):987

27、65位数5每位数字为:9,8,7,6,5反序数字为:567895.8企业发放的奖金根据利润提成。利润I低于或等于10万元时,奖金可提10;利润高于10万元,低于20万元(100000I200000)时,其中10万元按10提成,高于10万元的部分,可提成7.5%;200000I400000时,其中20万元仍按上述办法提成(下同),高于20万元的部分按5提成;400000I600000时,高于40万元的部分按3提成;6000001000000时,超过100万的部分按1提成。从键盘输入当月利润I,求应发放奖金总数。要求:(1)用if语句编程序;(2)用switch语句编程序。解:计算利润时,要特别注

28、意不同利润的不同提成比例。例如,利润为15万元,其中由10万元按10的比例提成,另外5万元则按7.5%提成。用if语句编程序,main ( ) long i; float bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1; /*利润为10万元时的奖金*/ bon2=bon1+100000*0.075 /*利润为20万元时的奖金*/ bon4=bon2+100000*0.05 /*利润为40万元时的奖金*/ bon6=bon4+100000*0.03 /*利润为60万元时的奖金*/ bon10=bon6+400000*0.015; /*利润为100

29、万元时的奖金*/ printf(“请输入利润i:”); scanf(“%ld”,&i); if (i=100000) bonus=i*0.1; /*利润在10万元以内按0.1提成奖金*/ else if (i=200000) bonus=bon1+(i-100000)*0.075 /*利润在10万至20万元时的奖金*/ else if (i=400000) bonus=bon2+(i-200000)*0.05 /*利润在20万至40万元时的奖金*/ else if (i=600000) bonus=bon4+(i-400000)*0.03 /*利润在40万元至60万元时的奖金*/ else i

30、f (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; case 6: case 7: case 8: case 9: bonus=bon6+(i-600000)*0.015; break; case 10: bonus=bon10+(i-1000

31、000)*0.01; printf(“奖金是%10.2f”,bonus);运行结果:请输入利润i:234000奖金是:19200.005.9输入4个整数,要求按由小到大的顺序输出。解:程序如下#include stdio.hvoid main() int t,a,b,c,d; printf(请输入4个整数:); scanf(%d,%d,%d,%d,&a,&b,&c,&d); printf(a=%d,b=%d,c=%d,d=%d,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=b;b=c

32、;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; printf(“请输入一个点

33、(x,y):”); scanf(“%f,%f”,&x,&y); /*求该点到各中心点的距离*/ d1=(x-x1)*(x-x1)+(y-y1)* (y-y1); d2=(x-x2)*(x-x2)+(y+y2)* (y+y2; d3=(x+x3)*(x+x3)+(y-y3)* (y-y3); d4=(x+x4)*(x+x4)+(y+y4)* (y+y4); if (d11 & d21 & d31 & d41) h=0; /*判断该点是否在塔外*/ printf(“该点高度为%d”,h);运行情况:请输入一个点(x,y):0.5,0.7该点高度为0请输入一个点(x,y):2.1,2.3该点高度为1

34、0第6章 循环控制6.1输入两个正整数m和n,求其最大公约数和最小公倍数。解:用辗转相除法求最大公约数main ( ) int p,r,n,m,temp; printf(“请输入两个正整数n,m:”); scanf(“%d,%d”,&n,&m); if (nm) temp=n; n=m; m=temp; /*把大数放在n中,小数放在m中*/ p=n*m; /*先将m和n的乘积保存在p中,以便求最小公倍数时用*/while (m!=0) /*求m和n的最大公约数*/ r=n%m; n=m; m=r; printf(“它们的最大公约数为:%dn”,n);printf(“它们的最小公倍数为:%dn”,p/n); /*p是原来两个整数的乘积*/运行情况:请输入两个正整数:12,8它们的最大公约数为:4它们的最小公倍数为:246.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数。解:#include main ( ) char c; int letter=0,space=0,digit=0,other=0; printf(“请输入一行字符:n”); while(c=getchar( )!=n) if (c=a & c=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1