《C语言1-7章课后作业答案.doc》由会员分享,可在线阅读,更多相关《C语言1-7章课后作业答案.doc(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言1-7章课后作业答案第一章 C语言概述【习题1-1】简述C语言的特点。答:C语言的特点:C语言简洁、紧凑、使用灵活、方便;运算符丰富;数据结构丰富;C是结构式语言;C语法限制不太严格,程序设计自由度大;C语言允许直接访问物理地址;C语言程序生成代码质量高;C语言适用范围大,可移植性好。【习题1-2】请从以下的4个选项中选择一个正确答案。(1)A (2)C (3)B (4)D (5)A (6)C【习题1-3】填空。(1)英文字母、下划线、数字(2)函数(3) 函数头、函数体(4)独立(5) ;、#、/*/、 main、main【习题1-4】请指出以下哪些是合法的标识符?哪些又是合法的用户标
2、识符。 101 int 3ip x_1 x+1 count 1234 Xy x%y if while a.bc x&y _ _ 1_112 Abc name x break for x=y合法的标识符有:x_1、int、count、Xy、if、while、Abc、name、x、break、for合法的用户标识符有:x_1、count、Xy、Abc、name、x【习题1-5】简述上机调试运行C程序的操作步骤。答:上机运行C语言程序的操作步骤为:启动Visual C+ 6.0建立工程创建源程序文件输入(编辑)源程序内容保存源程序文件编译源程序文件连接目标程序执行程序开始另一个程序。【习题1-6】上
3、机运行本章的3个例题。 略【习题1-7】参照本章例题,编写一个C语言源程序,输出以下信息:*Nice to meet you!* 编写程序如下:#includevoid main() printf(*n);printf(Nice to meet you!n); printf(*n);第二章 基本数据类型和运算符【习题2.1】上机编辑并调试本章所有例题。答:略。【习题2.2】下面哪些是合法的常量?20 0.5 012 13e5.1 E-5 8e4 5. 0x6amn OK a 012 a/b 答:合法的常量有:20 0.5 012 8e4 5. 0x6a合法的常量有: OK a 012 a/b
4、【习题2.3】下面的变量名中哪些是合法的?A&b abc123 abc% AbC int long 123abcchar ab?c double abc a_bc a*bc float 答:合法的变量名有:abc123 AbC a_bc【习题2.4】指出下面的变量定义哪些是正确的,哪些是不正确的,为什么?Int i,j;float a,A;int a,b;float a,b;float a,int b;char a;答:错误,因为关键字Int应该全为小写字母 正确错,因为同一变量在程序的同一处不应该声明为不同的数据类型错,因为不同类型的变量要分别声明,其间应使用分号,而不是逗号错,a表示字符常
5、量,不能用作变量名【习题2.5】填空题。整型、实型、字符型ASCII码1、2 fj【习题2.6】把下列数学式子写成C语言表达式。(1)3.26ex+(a+b)4(2)(3)(4)2pr+pr2+cos(45)(5)对应的C语言表达式分别为:(1)3.26*exp(x)+1.0/3*pow(a+b,4)(2)2*sqrt(x)+(a+b)/(3*sin(x)(3)g*m1*m2/(r*r)(4)2*3.14*r+3.14*r*r+cos(3.14/180*45)(5)loan*rate*pow(1+ rate, month)/(pow(1+rate, month)-1)【习题2.7】C语言中为什
6、么要引入转义字符?答:在字符集中,有一类字符具有这样的特性:当从键盘上输入这个字符时,显示器上就可以显示这个字符,即输入什么就显示什么。这类字符称为可显示字符,如a、b、$等。但另一类字符却没有这种特性。它们或者在键盘上找不到对应的一个键,或者当按键以后不能显示键面上的字符,为了解决这一问题,在C语言中引入了转义字符。【习题2.8】 “&”和“”严格地执行运算符优先级的规则吗?它的规则是什么?答:逻辑运算符不按照规定的优先级计算。在逻辑表达式的求值过程中,如果从“&”或“”左边的运算对象部分已经能够确定整个逻辑表达式的值,则不再求右边运算对象的值,这样做提高了运算速度。具体地说:若“&”的左运
7、算对象值为0,则不再对右运算对象求值,因整个式子的结果必定为0。若“”的左运算对象值为非0,则不再对右运算对象求值,因整个式子的结果必定为1。以上所说的这种运算的规则是C对逻辑运算的特殊处理规则。它严格地执行从左到右运算的规则,不受运算符优先级所影响。【习题2.9】字符常量和字符串常量有什么区别?答:字符常量和字符串常量的区别主要有两点: 从形式上看,字符常量使用单引号,而字符串常量使用双引号。 从内部存储来看,编译程序在每个字符串的尾部自动加上了一个空字符NULL(即0)作为字符串的结束标志,而字符常量则不存在这种情况。 【习题2.10】将下面语句组进行简写。int i; int j;x=2
8、; y=2;x=x+y;int x,y; x=y-(y/10)*10;int x; x=x+1;y=x; -x;对应的简写语句分别为:(1)int i,j;(2)x=y=2;(3)x+=y;(4)int x,y; x=y%10;(5)int x; x+; 或 x+=1; 或 +x;(6)y=x-;【习题2.11】写出下面程序运行后的结果。程序运行结果:1程序运行结果:8,10程序运行结果:y=5.程序运行结果:b,3.,4程序运行结果:0,48程序运行结果:a=8程序运行结果:01,60,15,15程序运行结果:2,2,11,2,10,2,2-1,2,2程序运行结果:324 程序运行结果:32
9、3,343,4,401第三章 顺序和选择结构程序设计【习题3.1】单选题。1、C 2、D 3、C 4、C 5、B【习题3.2】略【习题3.3】下面哪些语句是合法的?(1) if(a=b)printf(Hello);(2) if(a=b)printf(Hello)(3) if(a=b) printf(Hello) else printf(Goodbye);(4) if a=b printf(Hello);答:(1)合法的,其余的不合法【习题3.4】读程序写结果。(1)运行结果:A=58B=58C=58(2)运行结果:20,0(3)运行结果:1(4)运行结果:5 3 4(5)运行结果:1 3 2(
10、6)运行结果:-4(7)运行结果:2 1(8)运行结果:435(9)运行结果:passwarn【习题3.5】有如下if条件语句:if(ab)if(cd)x=1;else if(ac)if(bd)x=2;else x=3;else if(cd)x=4;else x=5;试按缩进对齐的格式将以上语句改写为结构更清晰的等效if语句,并在每个条件表达式之后用逻辑表达式注释所满足的条件。改写结果如下:if(ab)if(cd)x=1;else if(ac)if(bd)x=2;else x=3;else if(cd)x=4;else x=5;【习题3.6】有如下两个程序段:(1) if(ab) (2) if
11、(ab) if(c=d)x=1; if(c=d) x=1; else x=2; else x=2; 它们所表示的逻辑关系是下列所示关系中的哪一个? 1 ab且c=d 1 ab且c=d x= x=2 ab且cd 2 ab且cd 1 ab且c=d 1 ab且c=d x= x=2 ab 2 cd答: (1)表示的逻辑关系是. (2)表示的逻辑关系是.【习题3.7】编写程序,从键盘输入年份year(4位十进制数),判断其是否为闰年。闰年的条件是能被4整除但不能被100整除,或者能被400整除。#includevoid main() int year; scanf(“%d”,&year); if(yea
12、r%400=0|year%4=0&year%100!=0) printf(“%d年是闰年。n”,year); else printf(“%d年不是闰年。n”,year);【习题3.8】设计一个程序,从键盘输入3个整数,按由小到大的顺序输出。#includevoid main() int x,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(small to big:
13、 %d %d %dn,x,y,z); 【习题3.9】编写程序,计算下面的函数。 (0x1) y= |x|+2 (3x4) sin(x2) (当x取其他值时)程序如下:#include#includevoid main()int x , y;printf(please enter a number xn);scanf(%d,&x);if(x0&x=3&x=4) y=fabs(x)+2;else y=sin(x*x); printf(x=%.1f,y= %.2fn,x,y);【习题3.10】编程序计算下面的分段函数程序如下:#include void main() int x,y; scanf(%
14、d,&x); if(x=1&x=10) y=2*x+1; else y=3*x+2; printf(%d,y);【习题3.11】输入一个整数m,判断它能否被3、13、17整除,如果能被这3个数之一整除,则输入它能被整除的信息,否则输出m不能被3、13、17整除的信息。试编写该程序。#include void main() int m; scanf(%d,&m); if(m%3=0|m%13=0|m%17=0) printf(%d能被整除!,m); else printf(%d不能被整除!,m);【习题3.12】若一个学生是某校的学生,且是男生,则输出“male”;若是女生,则输出“female
15、”;若不是某校的学生,则输出“No”。试编写该程序并画出流程图。程序如下:#includevoid main()int hust = 1;int s;char sex ;printf(please enter the students school and sexn);scanf(%d,%c,&s,&sex);if( s = hust )if(sex = M)printf(Malen);else printf(Femalen);elseprintf(Non);【习题3.13】某产品的国内销售价,80箱以下,每箱350元,超过80箱,超过部分每箱优惠20元;国外销售价,1000箱以下,每箱900
16、元,超过1000箱,超过部分每箱优惠15元。试编写计算销售额的程序。程序如下:#include void main( ) float money; int national, count; printf(Input national or external:); scanf(%d,&national); printf(Input count of product:); scanf(%d,&count); if (national) if(count=80) money=count*350.0; else money=count*350.0- (count-80)*20.0; else if (
17、count=1000) money=count*900.0; else money=count*900.0-(count-1000)*15.0; printf(tatal=%f,money); 【习题3.14】电文加密算法:将字母A变成字母G,a变成g,B变成H,b变成h,以此类推,并且U变成A,V变成B等。从键盘输入一个电文字符,输出其相应的密码。程序如下:#include void main() char c; c=getchar(); if(c=a&c=A&c=u&c=U&c=Z) c-=20; else printf(“Input error!”); putchar(c);【习题3.1
18、5】参见实践教程P28第四章 循环结构程序设计【习题4.1】分析下面程序的结果。(1)程序运行结果:10 (2)程序运行结果:k=12(3)程序运行结果:*#i=6(4)程序运行结果:0(5)程序运行结果:略(6)程序运行结果:11,12(7)程序运行结果:4【习题4.2】分别用三种循环控制语句编写程序,求下面和式的值。程序如下:方法一:利用for循环实现#include void main() int s=0,i; for(i=1;i=100;i+) s+=i; printf(s=%dn,s); 方法二:利用while循环实现#include void main() int s=0,i=1;
19、 while(i=100) s+=i;i+; printf(s=%dn,s); 方法三:利用do-while循环实现#include void main() int s=0,i=1; do s+=i;i+;while(i=100); printf(s=%dn,s); 【习题4.3】编程把100200之间的能被20整除的数输出。程序如下:#include void main( ) int n; for(n=100;n=200;n+) if(n%20!=0) continue; printf(%5d,n);【习题4.4】假设全班有30个学生,编写一个程序,连续输入30个学生的计算机考试成绩,并计算
20、出全班学生的计算机平均成绩。程序如下:#include void main( ) float sum=0.0,ave=0.0,score;int i; for(i=0;i30;i+) scanf(%fn,&score);sum+=score;ave=sum/i;printf(Average is %fn,sum);ave; 【习题4.5】编程求1!+3!+5!+7!+19!的值。程序如下:#include void main( ) float sum=0.0;int i,j=1; for(i=1;i20;i+) j*=i;if(i%2=0) continue;sum+=j;printf(sum
21、=%en,sum); 【习题4.6】将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环。程序如下:#include void main() int a,b,t; scanf(%d,%d,&a,&b); while(a!=b) if(ab) t=a;a=b;b=t;printf(%d,%dn,a,b); scanf(%d,%d,&a,&b); 【习题4.7】输入n个数,求其最大数、最小数和平均值。程序如下:#include void main( )int n,i,max,min,a;float s;scanf(%d,%d,&n,&a);s=max=min=a;for(i=1;in
22、;i+) scanf(%d,&a); s+=a; if(maxa) min=a; printf(Max=%d,Min=%d,avg=%f,max,min,s/n);【习题4.8】已知鸡兔共有30只,脚共有90只,编程计算鸡兔各有多少只。程序如下:#include void main() int x,y;for(x=0;x=30;x+) y=30-x;if(2*x+y*4)=90)printf(%d,%dn,x,y);【习题4.9】求算式xyz+yzz=678中的x、y、z的值(其中xyz和yzz分别表示一个三位数)。程序如下:#include void main( )int x,y,z,i,r
23、esult=678;for( x=1;x10;x+ ) for(y=1;y10;y+) for(z=0;z10;z+) i=100*x+10*y+z+100*y+10*z+z; if (i=result) printf(x=%d,y=%d,z=%dn,x,y,z); 【习题4.10】使用嵌套循环输出下列图形:* * *程序如下:#include void main() int i,j;for(i=0;i=3;i+) for(j=0;j=5;j+) if(i=0|j=0|i=3|j=5) printf(*); else printf( ); printf(n); 【习题4.11】编程统计用数字0
24、9可以组成多少个没有重复数字的3位偶数。程序如下:#includevoid main( ) int i,j,k,n=0,l=0; for(i=1;i=9;i+) /*百位数字*/ for(k=0;k=9;k+) /*十位数字*/ if(k!=i) for(j=0;j=8;j+=2)/个位数字 if(j!=k&j!=i)n+; printf(%4d,i*100+k*10+j); l+; if(l%10=0) /*10个数一行输出*/ printf(n); printf(nn=%dn,n);【习题4.12】从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者。程序
25、如下:#include void main() int m=0,n=0; char c; while(c=getchar()!=n) if(cA&c=a&c=z)n+; printf(m=%d,n=%d,max=%dn,m,n,mn?n:m);【习题4.13】输出显示自然数1100之间的全部素数。程序如下:#include #include void main() int n,i,j,l=0; for(n=2;n=100;n+) i=sqrt(n);for(j=2;j=i+1)if(l5) printf(%dt,n); l+;else printf(%dn,n); l=0;【习题4.14】一个
26、数如果恰好等于它的因子之和,就把它称为“完数”。例如,28的因子为1、2、4、7、14,而28=1+2+4+7+14,因此28是“完数”。编程序找出10000以内的所有“完数”并输出其因子。程序如下:#include void main() int m,s,i; for(m=2;m10000;m+) s=0; for(i=1;im;i+) if(m%i)=0) s=s+i; if(s=m) printf(%d,its factors are,m);for(i=1;im;i+)if(m%i=0)printf(%d ,i);printf(n); 【习题4.15】使用循环嵌套输出下列图形:* * *
27、 *程序如下:#include void main( ) int i,j,k; for(i=0;i=3;i+) /*i是外循环变量用于控制行数*/for(k=1;k=i;k+) /*k是内循环变量用于控制每行的空格数*/printf( );for(j=0;j=4;j+) /*j是内循环变量用于控制每行中星号的个数*/printf(*);printf(n); 【习题4.16】假设x,y是整数,编程求xy的最后3位数,要求x、y从键盘输入。程序如下:#includevoid main() int i,x,y; long last=1; printf(Input x and y:); scanf(%
28、d,%d,&x,&y); for(i=1;i=y;i+) last=last*x%1000; printf(The last 3 digits:%ldn,last);【习题4.17】编程实现将从键盘输入的偶数写成两个素数之和。程序如下:#include #include void main() int a,b,c,d; scanf(%d,&a); for(b=3;b=a/2;b+=2) for(c=2;csqrt(b) d=a-b; else continue; for(c=2;csqrt(d) printf(%d=%d+%dn,a,b,d); 【习题4.18】100匹马驮100担货,大马一匹
29、驮担,中马一匹驮担,小马两匹驮担。试编写程序计算大、中、小马的数目。程序如下:#includevoid main() int x,y,z,j=0; for(x=0; x=33; x+) for(y=0; y=(100-3*x)/2;y+) z=100-x-y; if( z%2=0 & 3*x+2*y+z/2=100) printf(%d):x=%d,y=%d,z=%dn,+j,x,y,z); 第五章 数组【习题5.1】现有一实型一维数组A12,其各元素值在内存中排列的顺序为: 1.0,15.5,9.5,-23.0,8.4,66.5,7.1,22.0,54.5,-34.0,11.3,32.5 请
30、按下列要求编写程序求答案。(1) 数组中元素值最小的数组元素。(2) 数组中元素值最大的数组元素。(3) 数组中某数组元素值等于另外两个数组元素值之和的等式。(4) 数组中某数组元素值等于另外两个数组元素值之差的等式。#include void main()double A12=1.0,15.5,9.5,-23.0,8.4,66.5,7.1,22.0,54.5,-34.0,11.3,32.5;int i,j,k;double max,min;min=A0;for (i=0;iAi) min=Ai;printf(min=%lfn,min);max=A0;for (i=0;i12;i+)if (m
31、axAi) max=Ai;printf(max=%lfn,max);for (i=0;i12;i+)for (j=0;j12;j+)for (k=0;k12;k+)if (i=j | j=k | k=i) continue;if (Ai+Aj=Ak)printf(%lf+%lf=%lf n,Ai,Aj,Ak);for (i=0;i12;i+)for (j=0;j12;j+)for (k=0;k12;k+)if (i=j | j=k | k=i) continue;if (Ai-Aj=Ak)printf(%lf-%lf=%lf n,Ai,Aj,Ak);【习题5.2】现有一实型二维数组A43,其各
32、元素值在内存中排列的顺序为:4.0,28.0,15.5,-9.5,-23.0,8.0,56.0,2.0,28.0,7.0,6.2,5.0请按下列要求写出各题的答案。(1)数组中元素值最小的数组元素。(2)数组中元素值最大的数组元素。(3)数组中某数组元素值等于另外两个数组元素值之积的等式。(4)数组中某数组元素值等于另外两个数组元素值之商的等式。程序如下:#include void main()double A43=4.0,28.0,15.5,-9.5,-23.0, 8.0, 56.0, 2.0, 28.0,7.0,6.2,5.0; int i,j,k,g,n,m; double max,mi
33、n; min=A00; for(i=0;i4;i+) for(j=0;jAij) min=Aij; printf(min=%lfn,min); max=A00; for(i=0;i4;i+) for(j=0;j3;j+) if(maxAij) max=Aij; printf(max=%lfn,max);for(i=0;i4;i+) for(j=0;j3;j+) for(k=0;k4;k+) for(g=0;g3;g+) for(m=0;m4;m+) for(n=0;n3;n+) if(i=k|k=m|m=i)&(j=g|g=n|n=j) continue; if(Aij*Akg=Amn) printf(%lf*%lf=%lfn,Aij,Akg,Amn); for(i=0;i4;i+) for(j=0;j3;j+) for(k=0;k4;k+) for(g=0;g3;g+) for(m=0;m4;m+) for(n=0;n3;n+) if(i=k|k=m|m=i)&(j=g|g=n|n=j) continue; if(Aij/Akg=Amn) printf(%lf/%lf=%lfn,Aij,Akg,Am
限制150内