1、新编C语言程序设计教程习题及实验题部分答案第1章 C 语言概述1 习题一、选择题 ADCDB CCBBA二、简答题1、什么是语言?语言分几类?各有什么特点?语言:语言是思维的载体。人和计算机打交道,必须要解决一个“语言”沟通的问题。如今人与计算机之间有许多种类的“语言”的。语言分类:机器二进制语言、汇编语言(低级)和高级语言(第三代、第四代、)各自特点:1)机器二进制语言:用0、1两个数字编写的计算机能直接运行的程序的语言,机器语言执行效率高,但难编写、难懂、难移植。2)汇编语言(低级):汇编语言的特点是使用一些“助记符号”来替代那些难懂难记的二进制代码,所以汇编语言相对于机器指令便于理解和记
2、忆,但它和机器语言的指令基本上是一一对应,两者都是针对特定的计算机硬件系统的,可移植性差,因此称它们都是“面向机器的低级语言”。3)高级语言:高级语言类似自然语言(主要是英语),由专门的符号根据词汇规则构成单词,由单词根据句法规则构成语句,每种语句有确切的语义并能由计算机解释。高级语言包含许多英语单词,有“自然化”的特点;高级语言书写计算式子接近于熟知的数学公式的规则。高级语言与机器指令完全分离,具有通用性,一条高级语言语句常常相当于几条或几十条机器指令。2、汇编语言与高级语言有何区别?高级语言程序要比汇编语言要易懂、明了、简短得多;高级语言与机器指令完全分离,具有通用性,一条高级语言语句常常
3、相当于几条或几十条机汇编语言指令;高级语言要经过解释或编译来执行的,而汇编语言程序通过汇编程序来生成机器程序来执行的。3、什么是程序?完成某一特定任务的一组指令序列,或者说,为实现某一算法的指令序列称为“程序”。不同计算机语言有不同的计算机程序。4、C语言中为何要加注释语句?注释部分,起到说明语句或程序的作用。程序中应添加必要的注释,来增强程序的阅读与理解。注释用来向用户提示或解释程序的意义。在调试程序中对暂不使用的语句也可用注释符标注起来,使翻译跳过这些不作处理,待调试结束后再按需去掉注释符。为此,注释也有调试的辅助作用。5、说说C语言程序的组成?C语言程序包括由哪些部分?一个C语言函数一般
4、又由哪几部分组成的?C语言程序的组成:一个语言源程序可以由一个或多个源程序文件组成。C语言程序的组成部分:1.一个C语言源程序可以由一个或多个源文件组成;2.每个源文件可由一个或多个函数组成;3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数;4.源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面;5.每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“”之后不能加分号;6.标识符,关键字之间必须至少加一个空格以示间隔。C语言函数:一个C语言函数通常由函数首部(如int max(int a,i
5、nt b))、函数体组成。函数体一般又由局部变量定义与函数声明等组成的定义与声明部分、程序执行语句等组成的执行部分这两部分组成的(如min函数所示)。第2章 结构化程序设计与算法2 习题一、选择题BCDCD CBCAD二、简答题1、什么是算法?算法的特点是什么?什么是算法:算法就是解决某个问题或处理某件事的方法和步骤,在这里所讲的算法是专指用计算机解决某一问题的方法和步骤。算法的特点:1)有穷性人们编制算法的目的就是要解决问题,若该算法无法在一个有限合理的时间内完成问题的求解,那么算法也就失去了其原有的目的,人们就会摒弃它。而且人们研究算法,其目的还在于它的高效率,即解决同一个问题的两个算法,
6、人们往往选择其中那个运行效率高的。2)确定性所谓算法的确定性是指算法的每一个步骤都应该确切无误,没有歧义性。3)有零个或多个输入执行算法时,有时需要外界提供某些数据,帮助算法的执行。一个算法可以没有输入,也可以有多个输入。例如,求解N!,该算法就需要输入一个数据N;而求解两数之和,该算法就需要输入两个数据4)有一个或多个输出算法的目的是求解,解就是结果,就是输出,否则就毫无意义。5)有效性算法中的每一步都应该能有效地执行、可以实现,执行算法最后应该能得到确定的结果。2、结构化程序设计的三种基本结构是什么?其共同特点是什么?结构化程序设计的三种基本结构:顺序、选择、循环三种基本控制结构其共同特点
7、:1)只有单一的入口和单一的出口;2)结构中的每个部分都有执行到的可能;3)结构内不存在永不终止的死循环。3、尝试用自然语言、流程图、N-S流程图或伪代码写出下面问题的求解算法。1)根据三边,求三角形的周长和面积2)判断用户输入的一个整数是奇数还是偶数3)求解一元二次方程ax2+bx+c=0根4)找出10个数据的最大数5)将20个考生成绩中不及格者的分数打印出来6)求S=1+2+3+4+100解:略实验2 熟悉VC+ 6.0环境及算法二、实验内容1、改错题#include main() int x=2,y=3,a; a=x-y; printf(a=%d,a); printf(n); /* 换行
8、 */2、程序填空题#include main() int a,b,m; printf(Input a,b please!n); scanf(%d%d,&a,&b); m=a*b; /*赋值语句,将a和b之积值赋给m*/ printf(a*b=%dn,m); /*输出a和b积的结果值并换行 */3、设计与表示算法判断一个数n能否同时被3和5整除。1)用伪代码表示begin (算法开始) input n if (n/3*3)=n if (n/5*5)=n print “数n能同时被3和5整除” end (算法结束)2)用N-S图表示输入nn除以3的余数为0n除以5的余数为0是 否是 否n能同时被
9、3和5整除n不能同时被3和5整除n不能同时被3和5整除3)用流程图表示n被3整除开始n不能同时被3和5整除结束NYn被5整除n能同时被3和5整除NY输入n4、编程题1)#include void main() printf(How are you!n);2)#include main() int a,b,c,sum; printf(Input a,b,c please!n); scanf(%d%d%d,&a,&b,&c); sum=a*a*a+b*b*b+c*c*c; /*赋值语句,将a和b之积值赋给m*/ printf(a*a*a+b*b*b+c*c*c=%dn,sum); /*输出a和b积
10、的结果值并换行 */第3章 数据类型及其运算3 习题一、选择题BADCD DCBCA二、阅读程序,给出运行结果1、7,8,102、1,33、4、 461579112三、编程题1. (sin(sqrt(x*x)/(a*b)2. 5.53. 3 34. 35. #include void main() char c; c = getchar(); printf(%cn,c); printf(%dn,c); 6. #include int main() float C,F; printf(请输入一个华氏温度:); scanf(%f,&F); C = (5.0/9)*(F-32); printf(摄氏
11、温度C=%5.2fn,C); return 0; 7. #include #include int main() float a; a = exp(3.1415926); printf(%fn,a); return 0; 实验3 数据类型及其运算二、实验内容1改错题#include main() int x,y; printf(请输入两个整数n); scanf(%d%d,&x,&y); printf(互换前的x:%d y:%dn,x,y); x=x+y; y=x-y; x=x-y; printf(互换前的x:%d y:%dn,x,y);2. 程序填空题#include main() int i
12、1,i2,i3,i; printf(Please input i1,i2,i3: ); scanf(%d%d%d,&i1,&i2,&i3); i=i3; /i=i1; /i=i2; i3=i2; /i1=i3; /i2=i1; i2=i1; /i3=i2; /i1=i3; i1=i; /i2=i; /i3=i2; printf(i1=%dni2=%dni3=%dn,i1,i2,i3);3编程题(1)从键盘输入3个大写英文字母,把它们转换成小写字母后输出。该程序的运行结果:ABCabc#include main()char c1,c2,c3;scanf(%c%c%c,&c1,&c2,&c3);c
13、1=c1+32;c2=c2+32;c3=c3+32;printf(%c%c%cn,c1,c2,c3);(2)从键盘输入3个整数,输出它们的平均值与积。该程序的运行结果:请输入3个整数2 4 6ave=4.000000,ji=48#include main()int a,b,c,ji;float ave;printf(请输入3个整数n);scanf(%d%d%d,&a,&b,&c); ave=(a+b+c)/3.0;ji=a*b*c; printf(ave=%f,ji=%dn,ave,ji);第4章 顺序结构程序设计4 习题一、选择题BBCBC DCBDD二、阅读程序,给出运行结果1、 x=34
14、5 2、 a=1,b=3y=3.460000 a=3,b=13、a=123,f=457三、编程题1.2. 法一:#includeInt main() float x,xf;Int xi;Printf (“请输入一个实数:”);Scanf(“%f”,&x);Xi=(int)x;Xi=x-xi;Printf(“该数的整数部分为:%dn”,xi);Printf(“该数的小数部分为:5fn”,xf);Return 0;法二:#includedouble a,b;scanf(%lf,&a);b = a;long int p;p = (long int)a;printf(整数部分:%dn,p);print
15、f(小数部分:%lf,(b - p);3.4.5. #include void main( ) float a, b ,h; float area; scanf(%f,%f,%f,&a,&b,&h); area=(a+b)*h/2; printf(梯形的面积为:%5.2fn,area);实验4 顺序结构程序设计二、实验内容1改错题下列程序的功能为:按下列公式计算并输出x的值。其中a和b的值由键盘输入。纠正程序中存在的错误,以实现其功能。该程序的运行结果:4,6x=0.480000 #include main() int a,b; float x; scanf(%d,%d,a,b); scanf
16、(%d,%d,&a,&b); x=2ab/(ab)(ab); x=2.0*a*b/(ab)*(ab); printf(x=%dn,x); printf(x=%fn,x); 2.程序填空题下列程序的功能为:设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据r、h,输出计算结果,输出时要求有文字说明,取小数点后位数字。(周长l=2,圆面积s=,圆球表面积sq=,圆球体积vq=;圆柱体积vz=),请补充完善程序,以实现其功能。#include main()float pi,h,r,ly,sy,sq,vq,vz;pi=3.1415926;print
17、f(请输入圆半径r,圆柱高h:n);该程序的运行结果:请输入圆半径r,圆柱高h:1.5 3圆周长为:9.42圆面积为:7.07圆球表面积为:28.27圆球体积为:14.14圆柱体积为:21.21scanf(%f%f,&r,&h);ly= 2*pi*r ;sy= pi*r*r ;sq= 4*pi*r*r;vq= 4.0/3*pi*r*r*r;vz= pi*h*r*r;printf(圆周长为:%.2fn,ly);printf(圆面积为:%.2fn, sy);printf(圆球表面积为:%.2fn, sq);printf(圆球体积为:%.2fn, vq);printf(圆柱体积为:%.2fn, vz
18、);3.编程题(1)编写一个程序实现如下功能:从键盘输入3个字符,然后在屏幕上分3行输出该3个字符。该程序的运行结果:ABCABC#include main() char c1,c2,c3; c1=getchar(); c2=getchar(); c3=getchar(); putchar(c1); putchar(n); putchar(c2); putchar(n); putchar(c3); putchar(n);(2)编写一个程序实现如下功能:输入一元二次方程ax2+bx+c=0的系数a、b、c,求方程的根。要求:运行该程序时,输入a、b、c的值,分别使b2-4ac的值大于、等于和小于
19、零,观察并分析运行结果。求根公式如下: 该程序的运行结果:a=1,b=3,c=2x1=-1.00x2=-2.00.法一:#include #include void main() float a,b,c,disc,x1,x2,p,q; scanf(a=%f,b=%f,c=%f,&a,&b,&c); disc=b*b-4*a*c; p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(x1=%5.2fnx2=%5.2fn,x1,x2);法二:#include #include void main() float a,b,c,disc
20、,x1,x2,p,q; scanf(a=%f,b=%f,c=%f,&a,&b,&c); if (a=0) printf(不是二次方程n); else disc=b*b-4*a*c; if (disc0) printf(无实根n); else if (disc=0) p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(有两个相同的实根n); printf(x1=%5.2fnx2=%5.2fn,x1,x2); else p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; print
21、f(有两个不同的实根n); printf(x1=%5.2fnx2=%5.2fn,x1,x2); 第5章 选择结构程序设计5 习题一、选择题BBCBB CBACB二、阅读程序写出运行结果1、-2 2、Yes3、(1)2(2)3CCA=2,b=2,c=44、*& 5、5 3 2三、编程题1. #includeintmain()inta,b;/先判断a是否大于等于0,如果是的话a=bif(a=0) b=a; /如果不是的话,先对a按位取反,然后再加一else b=a;b=b+1;coutbendl;getchar();2.略3. #include intmain(void) intn; intsta
22、tus=1; while(status)printf(输入:);scanf(%d,&n);switch(n)case0:printf(舞蹈n);break;case1:case3:printf(乒乓球n);break;case 2case4:printf(篮球n);break;case5:printf(保龄球n);break;case6:printf(吉他n);break;default:status=0;return0;实验5 选择结构程序设计二、实验内容1改错题下列程序的功能为:输入3个整数后,输出其中最大值。请纠正程序中存在错误,使程序实现其功能。该程序的运行结果:请输入3个整数:5 2
23、 73个数中最大者为:7#include stdio.hmain()int a,b,c,max;printf (请输入3个整数:n);scanf (%d%d%d,&a,&b,&c);max=a;if (cb) if (ba) max=c; /* cba */else /* bc */if (ca) max=b; /* bca */printf(3个数中最大者为:%dn,max);改正后的程序:#include stdio.hmain()int a,b,c,max;printf (请输入3个整数:n);scanf (%d%d%d,&a,&b,&c);max=a;if (cb) if (ca) m
24、ax=c; else if (ba) max=b; printf(3个数中最大者为:%dn,max);2. 程序填空题#include main() int a,b,d; char ch; printf(Please input a expression:); scanf(%d%c%d,&a,&ch,&b); /*输入数学表达式*/ switch(ch) case +: d=a+b; printf(%d+%d=%dn,a,b,d); break; case -: d=a-b; printf(%d-%d=%dn,a,b,d); break; case *: d=a*b;printf(%d*%d=
25、%dn,a,b,d); break; case /: if (b=0) printf(Divisor is zeron); else printf(%d/%d=%fn,a,b,(float)a/b); /* 强制类型转换*/ break; default : printf(Input Operator error!n); 3.编程题(1)#includemain()int a,b,c,max,min;float sum,d,e;printf(请输入三个数:);scanf(%d%d%d,&a,&b,&c);sum=a+b+c;d=sum/3;e=a*b*c;if(ab)max=a;min=b;e
26、lsemax=b;min=b;if(maxc)min=c;printf(三个数的和%.1fn,sum);printf(三个数的平均值%.2fn,d);printf(三个数的积%.1fn,e);printf(三个数中最大值是%dn,max);printf(三个数中最小值是%dn,min);(2)#includevoid main()float x,y;scanf(%f,&x);if(x5) y=1-x*x*x; else if(x=5) y=x-1; else y=2*x*x-1;printf(x=%0f,y=%0fn,x,y);(3)#includevoid main() int a; pri
27、ntf(input integer number:); scanf(%d,&a); switch(a) case 0:printf(Sundayn);break; case 1:printf(Mondayn);break; case 2:printf(Tuesdayn);break; case 3:printf(Wednesdayn);break; case 4:printf(Thursdayn);break; case 5:printf(Fridayn);break; case 6:printf(Saturdayn);break; default:printf(errorn); 第6章 循环
28、结构程序设计6 习题一、选择题BCDDA BDBAB BC二、阅读程序写出运行结果1、_3,4_2、_6_3、_#_4、_02_5、_18_6、_1_7、_80_8、_输出一行中含大写或小写字母个数中的大者数_9、1)5次21 22) 2次13 6 4 43)外循环2次,内2层循环累计3次,内3层循环累计5次284)外循环3次,内循环累计4次-1 -10 5三、编程题略实验6 循环结构程序设计二、实验内容1改错题下列程序的功能为:倒序打印26个英文字母。纠正程序中存在的错误,以实现其功能。#include main() char x; x=z; while(x!=a) while(x!=a-1
29、)或while(x=a) printf(%3d,x); printf(%3c,x); x+; x- -; 2. 程序填空题1)#include main() int day,x1,x2; day=0; x1=1020; while (x1) X2=x1/2-2; X1=x2; day+; printf(“day=%dn”,day);2)#include #include main() int i,left,right;char cc80; printf(输入一个算术表达式n); gets(cc); left = 0;right = 0;/left和right分别代表统计的左右括号数 for(i
30、=0;ileft ) break; if (left=right) printf(圆括号配对正确n); else printf(圆括号配对不正确n);三、编程题(1)计算1100之间所有含8的数之和。参考程序:#include main() int i, sum=0; for(i=1; i=100; i+) if(i%10=8 | i/10=8) sum+=i; printf(sum=%dn,sum);(2)编写程序,利用下列近似公式计算e值,误差应小于10-5。参考程序:#include main() int i=0 ; long n=1; float e=0, t=1; while(t1e
31、-5) e+=t;i+;n*=i;t=1.0/n; printf(e=%fn,e);(3)某学校有近千名学生,在操场上排队,若5人一行余2人,7人一行余3人,3人一行余1人。编写程序,求该校的学生总人数。参考程序:#include main() int i; for(i=900;i=1000;i+)if(i%5=2&i%7=3&i%3=1)break;printf(学生总人数=%dn,i); (4)从键盘输入N个学生的学号和每人M门课程的成绩,计算每个学生的总分及平均分。输出内容包括每个学生的学号、总分和平均分。#includevoid main()int i,j,n,m,no,score,s
32、um;float ave;printf(输入学生数和每人课程数:);scanf(%d%d,&n,&m);for(i=1;i=n;i+) sum=0;printf(输入第%d个学生的学号: ,i);scanf(%d,&no); printf(输入第%d个学生的%d门课程成绩: ,i,m); for(j=1;j=m;j+) scanf(%d,&score); sum+=score;ave=(float)sum/m; printf(n*第%d个学生的学号为:%d 总分为:%d 平均分为:%.2fnn,i,no,sum,ave);第7章 数组及其应用7 习题一、选择题DACBC ABDBD二、阅读程序
33、写出运行结果1、_4_2、_ Tony _3、_ max=85,min=5,sum=180,aver=30.0_4、_ a=2 b=2 c=2 d=2 e=1 f=2 g=2_5、_j=45_三、编程题1.略2. #includeintmain()inta10;/用来存数据inti,j,temp;for(i=0;i10;i+)/输入10个数。scanf(%d,&ai);for(j=0;j9;j+)/标准冒泡法排序for(i=0;iai+1)temp=ai;ai=ai+1;ai+1=temp;for(i=0;i10;i+)/输出。printf(%d,&ai);printf(n);return0;实验7 数组及其应用二、实验内容1改错题#include void main() char a8=wel,b=come; int i,n=0; while (an) n+; for(i=0;bi!=0;i+) an+i=bi; an+i=0; /n=0; /while (an) putchar(an);n+; printf(%sn,a);2. 程序填空题#include #include void main() char string20,str320; int i; for (i=0;i3;i+) gets(stri); if (strcm