《C语言程序设计教程》 各章习题与参考解答 《C语言程序设计教程》(以下简称主教材)中每章的最后都有习题,学生在学完主教材内容后,有一些习题他们可以独立完成。另外,有一些习题需要深入学习后才能完成。教师可以根据学生的基础和学习情况,指定恰当的习题作为课后作业要求学生完成。有的读者反映,如果能独立完成全部习题,可以说C语言就过关了。 本书给出了主教材中全部程序题的参考解答供大家参考。这些习题内容丰富,涵盖范围广,实际上是对例题很好的补充。即使在初学阶段不可能完成全部的习题,但是在以后进行程序设计工作时,这些习题也是很有价值的参考资料。这些程序都在VC++ 6.0环境下运行通过。相信大多数学生是能够看懂大部分程序的。俗话说: “熟读唐诗三百首,不会作诗也会吟。”相信这些程序对于读者会有很大的启迪作用。 需要说明的是,本书提供的只是参考解答,而不是唯一的正确解答。对同一问题,不同的人可能编写出不同的程序,都能得到正确的结果。读者可以不受参考答案的约束,仍然可以编写出更好的程序,这样才能达到理想的学习效果。 我们只对稍难的程序作必要的分析与说明,对其他多数程序只提供参考程序和运行结果,不提供对程序的解释说明,给大家留下思考的空间。读者自己可以多思考分析。C语言程序设计教程学习辅导第1章主教材第1章的习题与参考解答第1章主教材第1章的 习题与参考解答 1.1上机运行本章3个例题,熟悉所用系统的上机方法与步骤。 解: 略。 1.2请参照本章例题编写一个C语言程序,输出以下信息:  Very good! 解: #include int main() { printf("\\n\\n"); printf("VeryGood!\\n\\n"); printf("\\n"); return 0; }运行结果:  Very good! 1.3编写一个C语言程序,输入a、b、c 3个值,输出其中最大的值。 解: #include int main() { int a,b,c,max; printf("Please input a,b,c:\\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if(max int main( ) { int i,num,score; i=1; while(i<=50) { scanf("%d,%d",&num,&score); if(score>=80) printf("%d,%d\\n",num,score); i=i+1; } return 0; }1.9请尝试根据习题1.5的算法,用C语言编写出程序,并上机运行。 解: #include int main() { int n; float sum,term; sum=0; n=1; while(n<=100) { term=1.0/n;//term代表多项式中某一项的值 sum=sum+t//把各项累加到sum中 n=n+1;//使n的值加1,准备求下一项 } printf("%f\\n",sum);//输出总和 return 0; }运行结果: 5.187378说明: 第10行“term=1.0/n;”中的分子是1.0,表示是实数。如果写成“term=1/n;”,由于在C语言中规定两个整数相除,结果是整数,因此当n>1时,1/n的值总是等于0,最后结果显然不正确。读者可以上机试验一下。关于这个问题,在学习了第2章后会进一步理解。1.10请尝试根据习题1.6的算法,用C语言编写出程序,并上机运行。 解: #include int main() { int year; scanf("%d",&year); if(year%4==0)//若year能被4整除 { if(year%100==0)//还能被100整除 if(year%400==0)//还能被400整除 printf("%d is a leap year.\\n",year);//是闰年 else printf("%d is not a leap year.\\n",year);//不能被400整除的不是闰年 else printf("%d is a leap year.\\n",year);//能被4整除而不能被100整除的是 闰年 } else printf("%d is not a leap year.\\n",year);//不能被4整除的不是闰年 return 0; }运行结果: 2100↙ 2100 is not a leap year.1.11请尝试根据习题1.7的算法,用C语言编写出程序,并上机运行。 解: #include int main( ) { int m,i,flag; scanf("%d",&m);//输入要检测的整数 i=2; while(i<=m-1) { if(m%i==0) flag=1; i=i+1; } if(flag==1)printf("%d is not a prime number.\\n",m); else printf("%d is a prime number.\\n",m); return 0; }运行结果: 17↙ 17 is a prime number.程序分析: 实际上,m不必被2~m-1的全部整数去除,只要被2~m的全部整数去除即可。例如,为了判别17是否为素数,只要把17被2、3、4除即可。请读者思考是什么原因。 程序第7行可改为: while(i<=sqrt(m))//sqrt是求平方根的函数如果程序中使用了C语言函数库中的数学函数(包括sqrt),应在程序开头写预处理指令: #include 说明: 第1章是学习C语言程序设计的预备知识,并未系统介绍C语言的语法知识以及算法和编程的知识。本章的习题,目的是使读者尽早接触算法、接触程序。习题1.8~习题1.11是编程题,可能许多读者感到有些困难,我们希望读者能尝试一下,即使编写的程序有些问题也没关系,尝试可以提高对程序的兴趣,培养主动学习、善于发展知识的创造精神。如果确实编程有困难,也可以直接阅读上面的程序,能大体看懂程序就会有收获,可以为后面的学习打下较好的基础。