《C语言程序设计 王新萍 各章课后复习题答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计 王新萍 各章课后复习题答案.docx(12页珍藏版)》请在第一文库网上搜索。
1、附录H各章复习题参考答案第一章1.C2.C3.C4.D5.C6 .答:C语言的主要特点有:(1) C语言简洁、紧凑,使用方便、灵活。C语言共有32个关键字,9种控制语句,程序书写形式自由。(2)数据类型丰富。C语言的数据类型有:整型、实型、字符型、数组、指针、结构体、共用体等。能用来实现各种更杂的运算。(3)运算符丰富。C语言有多达40余种运算符。丰富的数据类型与众多的运算符相结合,使C语言具有表达灵活和效率高的优点。(4)可移植性好。用C语言写的程序基本上不做修改就能运行于各种型号的计算机和各种操作系统。(5)能直接操纵硬件。C语言能实现汇编语言的大部分功能,可以直接对硬件进行操作。这是其它
2、高级语言所不能的。7 .答:上机运行C语言程序的一般步骤有:(1)启动TurboC,进入集成开发环境。(2)编写(或修改)源程序。(3)编译。若编译成功,则进行下一步操作;否则,返回(2)修改源程序,并重新编译,直到编译成功。(4)连接。若连接成功,则进行下一步操作;否则,根据错误提示进行修改,并重新连接,直到连接成功。(5)运行。通过观察结果验证程序的正确性。若出现逻辑错误,则返回(2)修改源程序,并重新编译、连接和运行,直到程序正确。(6)退出TUrboC集成开发环境。第二章1. C2.B3.B4.D5.C6.C7.D8.B9.D10.C11 .答:(1)2.5(2)3.512 .答:9,
3、11,9,1013 .答:字符常量是一个字符,用单引号括起来。字符串常量是由0个或若干个字符组成,用双引号把它们括起来,存储时自动在字符串最后加一个结束符0。第三章I .D2.C3.D4.C5.C6.C7.C8.D9.A10.BII .答:不能,程序修改如下:!inc1udestdio.hmain()inta,b,c,x,y;SCanf(%d,%d,%d,&a,&b,&c);x=a*b;y=x*c;printf(z,a=%d,b=%d,c=%d”,a,b,c);printfCx=%dny=%dn*x,y);)第四章一、选择题1. A2.C3.B4.D5.B6.C7.B8.B9.A10.D二、填
4、空题1.66、 II、!2. 33. 44. 10,4,35. -16. x=3x3xunknow三、编程题1. ttinc1udestdio.httinc1udcconio.hmain()(itx,y,z,t;scanf(*%d%d%d*,&x,&y,&z);if(xy)t=x;x=y;y=t;*交换x,y的值*/if(xz)t=z;z=x;x=t;)*交换x,z的值*/if(yz)t=y;y=z;z=t;*交换z,y的值*/printf(sma11tobig:%d%d%dnz,x,y,z);getch();2. inc1udestdio.httinc1udemain()(f1oatx,y;
5、printf(z,nP1easeinputx:);scanf(%f,&x);if(x=0)y=sqrt(x);if(x0)y=fabs(x);printf(y=%fn”,y);)3. inc1udestdio.h#inc1ude*conio.hmain()intdigit;printf(n请输入0-5的数字:);scanf(zz%d,&digit);if(digit5)Printf(InputError!n/z);exit(1);)switch(digit)case0:printfcase1:printfcase2:printfcase3:printfcase4:printf(Zero,n);
6、break;(One.n);break;(Two.n);break;(Three,n);break;(Four,n);break;defau1t:printf(Five,n);4. inc1udestdio.hmainO(intx,y;Printf(请输入一个整数:);scanf(,&x);if(x0)y=x*-6;e1seif(x=0)y=6;e1sey=x*x+6;Printf(y=%d,y);5. #inc1udes1dio.hmainOintmonth;Printf(请输入月份:);scanf(z,%dz,&month);switch(month)(case 1:case 2:case
7、3:printf(春季n);break;case 4:case 5:case 6: Printf(“夏季n);break;case 7:case 8:case 9: Printf(秋季r);break;case 10:case 11:case 12: Printf(冬季n);break;defau1t:Printf(输入有误n);break;)第五章一、选择题1 .A2.B3.B4.B5.D6.A、C二、填空题1.8522.8,-13.#*#*4.345.2三、编程题1 .本问题实际上是一个排列问题,即求从5个中取3个进行排列的方法的总数。首先对五本书从1至5进行编号,然后使用穷举的方法。假设
8、三个人分别借这五本书中的一本,当三个人所借的书的编号都不相同时,就是满足题意的一种借阅方法。voidmain()(inta,b,c,count=0;printf(,TherearediffrentmethodsforXMtodistributebooksto3readers:nz,);for(a=1;a=5;a+)*穷举第一个人借5本书中的1本的全部情况*/for(b=1;b=5;b+)/*穷举第二个人借5本书中的一本的全部情况*/for(c=1;a!=b&c=5;c+)/*当前两个人借不同的书时,穷举第三个人借5本书中的1本的全部情况*/if(c!=a&c!=b)/*判断第三人与前两个人借的
9、书是否不同*/printf(count%87z,%2d%d,%d,%d:%2d:%d,%d,%dn”,+count,a,b,c);/*打印可能的借阅方法*/2 .分析存钱和取钱的过程,可以采用倒推的方法。若第五年年底连本带息要取IOOO元,则要先求出第五年年初银行存款的钱数:第五年初存款=Iooo/(1+12*0.0063)依次类推可以求出第四年、第三年的年初银行存款的钱数:第四年年初存款=(第五年年初存款+1000)/(1+12*0.0063)第三年年初存款二(第四年年初存款+1000)/(1+12*0.0063第二年年初存款二(第三年年初存款+1000)/(1+12*0.0063)第一年年
10、初存款=(第二年年初存款+1000)/(1+12*0.0063)通过以上过程就可以很容易地求出第一年年初要存入多少钱ttinc1udevoidmain()(inti;f1oattota1=0;for(i=0;i5;i+)*i为年数,取值为04年*/tota1=(tota1+1000)/(1+0.0063*12);/*累计算出年初存款数额,第五次的计算结果即为题解*/printf(Hemustsave%.2fatfirst,n*,tota1);)3 .题目中所有的鱼是分五次出售的,每次卖出的策略相同;第j次卖剩下的(j+1)分之一再加1(j+1)条。第五次将第四次余下的11条全卖了。假定第j次鱼
11、的总数为X,则第j次留下:-(x+1)(j+1)当第四次出售完毕时,应该剩下11条。若X满足上述要求,则X就是题目的解。应当注意的是:(x+1)(j+D”应满足整除条件。试探X的初值可以从23开始,试探的步长为2,因为X的值一定为奇数。ttinc1udevoidmain()(inti,j,n=0,x;*n为标志变量*/for(i=23;n=0;i+=2)/*控制试探的步长和过程*/(for(j=1,x=i;j=11;j+)*完成出售四次的操作*/if(x+1)%(j+1)=0)/*若满足整除条件则进行实际的出售操作*/X-=(x+1)/(j+1);e1sex=0;break;/*否则停止计算过
12、程*/if(j=5&X=11)/*若第四次余下11条则满足题意*/(printf(*Thereare%dfishesatfirst,n”,i);*输出结果*/n=1;/*控制退出试探过程*/)4.根据题意可知,满足条件的五位数的选择范围是IOoo6、IOoI6。99996。可设基础数i=1000,通过计算i*10+6即可得到欲选的数(i的变化范围是IOoO999),再判断该数能否被3整除。ftinc1udevoidmain()1onginti;intcount=0;*count:统计满足条件的五位数的个数*/for(i=1000;i9999;i+)if(!(i*10+6)%3)/*判断所选的数
13、能否被3整除*/count+;/*若满足条件则计数*/Printf(count=%dn”,count);5.手工方式求两个正整数的蝶大公约数的方法是用辗转相除法,在程序中可以模拟这种方式。ttinc1udevoidmain()(inta,b,num1,num2,temp;printf(Inputa&b:);scanf(%d%d”,&num1,&num2);if(num1num2)*找出两个数中的较大值*/(temp=num1;num1=num2;num2=temp;*交换两个整数*/a=num1;b=num2;whi1e(b!=0)*采用辗转相除法求最大公约数*/(temp=a%b;a=b;b
14、=temp;printf(z,TheGCDof%dand%dis:%dn,num1,num2,a);*输出最大公约数*/Printf(The1CMofthemis:%dnz,num1*num2a);*输出最小公倍数*/)第六章一、选择题1.D2.C3.C4.C5.C6.A7.C二、填空题1. 8,92. &ai;i%4=0;printf(*n*);3. i=j;aij4. 10010三、程序题1 .求一个3*3矩阵对角线元素之和。main()(f1oata33,sum=0;inti,j;printf(,p1easeinputrectang1ee1ement:,z);for(i=0;i3;i+)for(j=0;j3;j+)scanf(%f,&aij);for(i=0;i3;i+)sum=sum+aii;p