C语言程序设计王新萍各章课后复习题答案.docx
附录H各章复习题参考答案第一章1. C 2. C 3. C 4. D 5. C6 .答:C语言的主要特点有:(1) C语言简洁、紧凑,使用方便、灵活。C语言共有32个关键字,9种控制语句,程序 书写形式自由。(2)数据类型丰富。C语言的数据类型有:整型、实型、字符型、数组、指针、结构体、 共用体等。能用来实现各种更杂的运算。(3)运算符丰富。C语言有多达40余种运算符。丰富的数据类型与众多的运算符相结合, 使C语言具有表达灵活和效率高的优点。(4)可移植性好。用C语言写的程序基本上不做修改就能运行于各种型号的计算机和各种 操作系统。(5)能直接操纵硬件。C语言能实现汇编语言的大部分功能,可以直接对硬件进行操作。 这是其它高级语言所不能的。7 .答:上机运行C语言程序的一般步骤有:(1)启动Turbo C,进入集成开发环境。(2)编写(或修改)源程序。(3)编译。若编译成功,则进行下一步操作;否则,返回(2)修改源程序,并重新编译, 直到编译成功。(4)连接。若连接成功,则进行下一步操作;否则,根据错误提示进行修改,并重新连接, 直到连接成功。(5)运行。通过观察结果验证程序的正确性。若出现逻辑错误,则返回(2)修改源程序, 并重新编译、连接和运行,直到程序正确。(6)退出TUrbo C集成开发环境。第二章1. C 2. B 3. B 4. D 5. C 6. C 7. D 8. B 9. D 10. C11 .答:(1) 2.5 (2) 3.512 .答:9, 11,9, 1013 .答:字符常量是一个字符,用单引号括起来。字符串常量是由0个或若干个字符组成, 用双引号把它们括起来,存储时自动在字符串最后加一个结束符'0'。第三章I . D 2. C 3. D 4. C 5. C 6. C 7. C 8. D 9. A 10. BII .答:不能,程序修改如下:!include "stdio. h"main()int a , 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);printfC x=%dn y=%dn* x, y);)第四章一、选择题1. A2. C 3. B 4. D 5. B 6. C 7. B 8. B 9. A 10. D二、填空题1.66、 II、!2. 33. 44. 10,4,35. -16. x=3x>3x unknow三、编程题1. ttinclude "stdio. h" ttincludc "conio. h" main()(it x, y, z, t;scanf (*%d%d%d*, &x, &y, &z );if ( x > y ) t = x; x = y; y = t; *交换 x, y 的值*/if ( x > z ) t = z; z = x; x = t; ) *交换 x, z 的值*/if ( y > z ) t = y; y = z; z = t; *交换 z, y 的值*/ printf ("small to big: %d %d %dnz, x, y, z); getch ();2. include "stdio.h" ttinclude <math. h> main ()(float x, y;printf (z,nPlease input x:"); scanf ("%f", &x);if ( x >= 0 )y = sqrt (x);if ( x < 0 )y = fabs(x); printf ("y=%fn”, y);)3. include "stdio. h"#include *conio. h"main ()int digit;printf ("n请输入0-5的数字:");scanf (zz%d, &digit);if ( digit < 0 I I digit > 5 )Printf ("Input Error!n/z); exit(l); )switch ( digit )case 0: printf case 1: printf case 2: printf case 3: printf case 4: printf("Zero, n"); break;("One. n"); break;("Two. n); break;("Three, n"); break;("Four, n"); break;default: printf ("Five, n");4. include "stdio. h"main O(int x, y;Printf (请输入一个整数:); scanf (", &x);if(x<0) y= x*-6;else if(x=0) y=6;else y=x*x+6;Printf("y=%d", y);5. #include "sldio. h"main Oint month;Printf(请输入月份:); scanf (z,%dz, &month);switch(month)(case 1:case 2:case 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;default: Printf ("输入有误n") ;break;)第五章一、选择题1 .A2. B 3. B 4. B 5. D 6. A、C二、填空题1.8 5 22.8, -13. #*#*4.3 45.2三、编程题1 .本问题实际上是一个排列问题,即求从5个中取3个进行排列的方法的总数。首先对五 本书从1至5进行编号,然后使用穷举的方法。假设三个人分别借这五本书中的一本,当三 个人所借的书的编号都不相同时,就是满足题意的一种借阅方法。void main() (int a, b, c, count = 0;printf (,There are diffrent methods for XM to distribute books to 3 readers: 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 )/*判断第三人与前两个人借的书是否不同*/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)第一年年初存款=(第二年年初存款+1000) / (1+12*0. 0063)通过以上过程就可以很容易地求出第一年年初要存入多少钱ttinclude<stdio. h>void main() (int i;float total = 0;for ( i = 0; i < 5; i+ )*i 为年数,取值为 04 年*/total = ( total + 1000 )/( 1 + 0. 0063 * 12 ); /*累计算出年初存款数额, 第五次的计算结果即为题解*/printf ("He must save %. 2f at first, n*, total);)3 .题目中所有的鱼是分五次出售的,每次卖出的策略相同;第j次卖剩下的(j+l)分之一再 加l(j+l)条。第五次将第四次余下的11条全卖了。假定第j次鱼的总数为X,则第j次留下:-(x+l)(j+l)当第四次出售完毕时,应该剩下11条。若X满足上述要求,则X就是题目的解。应当注意的是:"(x+l)(j+D”应满足整除条件。试探X的初值可以从23开始,试探的 步长为2,因为X的值一定为奇数。ttinclude<stdio. h>void main()(int i, j, n = 0, x;*n 为标志变量*/for ( i = 23; n = 0; i += 2 )/*控制试探的步长和过程*/(for ( j = 1, x = i; j <= 4 && x>= 11; j+ ) *完成出售四次的操作*/if ( (x + 1) % (j + 1) = 0 )/*若满足整除条件则进行实际的出售操作*/X -= (x + 1) / (j + 1);else x = 0;break;/*否则停止计算过程*/if (j = 5 && X = 11)/*若第四次余下11条则满足题意*/(printf (*There are %d fishes at first, n”, i);*输出结果*/n=l;/*控制退出试探过程*/)4.根据题意可知,满足条件的五位数的选择范围是IOoo6、IOoI6。99996。可设基础数 i=1000,通过计算i*10+6即可得到欲选的数(i的变化范围是IOoO999),再判断该数能否 被3整除。ftinclude<stdio. h>void main()long int i;int count = 0;*count:统计满足条件的五位数的个数*/for ( i = 1000; i < 9999; i+ )if ( !(i * 10 + 6) % 3) )/*判断所选的数能否被3整除*/count+;/*若满足条件则计数*/Printf("count=%dn”,count);5.手工方式求两个正整数的蝶大公约数的方法是用辗转相除法,在程序中可以模拟这种方 式。ttinclude<stdio. h> void main() (int a , b, numl, num2, temp;printf ("Input a & b:");scanf ("%d%d”, &numl, &num2);if