C课本习题答案2010-12.doc_第1页
C课本习题答案2010-12.doc_第2页
C课本习题答案2010-12.doc_第3页
C课本习题答案2010-12.doc_第4页
C课本习题答案2010-12.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章 概 述习 题一、填空题1. C语言的特点是应用广泛、语言简洁、紧凑、明了,目标代码质量高_、运算符及其表达式种类多,语言表达能力强_、数据结构丰富,编程方便灵活_、丰富的结构化控制语句_和程序运行效率高,可移植性强_。(见1.2 C语言的特点)2. 一个C语言程序从编写成功到实现既定功能,需要经历的基本过程是_编辑_、_编译_、_链接_和_运行_。1. 以下叙述中正确的是( B)。A. C程序由主函数组成B. C程序由函数组成C. C程序由函数和过程组成D. C程序中的注释行由“/*”开头,由“*/”结束2. C语言是( B)由美国贝尔实验室的D.M.Ritchie在B语言的基础上设计的。A. 20世纪60年代B. 20世纪70年代C. 20世纪80年代D. 20世纪90年代第2章 数据类型、运算符与表达式习 题一、简答题1. 熟悉各种数制相互转换和原码、反码、补码的知识。2. 试比较常量与变量的关系?变量不仅有值,而且有地址和名;变量在某一时刻的值是常量。3. 用转义字符有什么好处?转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的转义字符及其含义见表2-2。4. 使用符号常量有何好处?使用时应注意什么问题?好处:见名知义,一改全改。注意使用时的书写格式。5. 对照变量类型与常量类型,哪些是相同的,那些是常量所独有的?二、选择题1. 下列选项中,可以作为C语言常量的是(C. )。A. 13.8eB. 1/2C. MD. abc2. 下列选项中,不可以作为C语言常量的是( D )。A. .88B. 35.6e3C. 4e-2D. 3/53. 下列选项中,正确的一组程序是( A )A. char a;B. char b;C. char c;D. char da=M; b=55; c=M; d=554. 已知字母b的ASCII码值为98,如ch为字符型变量,则表达式ch=b+5-2的值为( 101 )。A. eB. dC. 102D. 1005. 下列程序的运行结果是( B )。main( )char c1=6,c2=0;printf(%c,%c,%dn,c1,c2,c1-c2);A. 因程序格式不合法,提示出错信息。B. 6,0,6C. 6,0,7D. 6,0,56. 以下程序的输出结果是( A )。main( )int x=010,y=10,z=0x10;printf(%d,%d,%dn,x,y,z);A. 8,10,16B. 8,10,10C. 10,10,10D. 10,10,167. 已知各变量的类型定义如下:int i=8,k,a,b;unsigned long w=5;double x=1.42,y=5.2;则,以下两组表达式中不符合C语言语法的表达式分别是( )。(1) A. k=i+B. (int)x+0.4C. y+=x+D. a=2*a=3(2) A . x%(-3)B. w+=-2C. k=(a=2,b=3,a+b)D. a+=a-=(b=4)*(a=3)三、填空题1. 分别计算下列各表达式的值。 设x=2.5,a=5,y=4.7,计算表达式x+a%3*(x+y)%2/4的值。(本题有错) 设a=4,计算表达式a=1,a+5,a+的值。1 设a=2,b=3,x=3.5,y=2.5,计算表达式(a+b)/2+x%y的值。(本题有错) 设x=4,y=8,计算表达式y=(x+)*(-y)的值。31 设x=1,y=2,计算表达式1.0+x/y的值。12. 写出下面表达式运算后a的值,设原来a=12,且a和n已定义为整型变量。 a+=a 24 a-=210 a*=2+3 60 a/=a+a 0 a%=(n%=2),n的值等于50 a+=a-=a*=a 0第3章 顺序结构程序设计习 题一、选择题1. 定义变量如下:int x;float y;则以下输入语句( C )是正确的。(A)scanf(%f%f,&x,&y);(B)scanf(%f%d,&x,&y);(C)scanf(%f%d,&y,&x);(D)scanf(%5.2f%2d,&x,&y);2. putchar函数可以向终端输出一个( A )。(A)字符或字符变量的值(B)字符串(C)实型变量(D)整型变量的值3. 下列叙述正确的是( C )。(A)赋值语句中的“=”是表示左边变量等于右边表达式(B)赋值语句中左边的变量值不一定等于右边表达式的值(C)赋值语句是由赋值表达式加上分号构成的(D)x+=y;不是赋值语句二、程序阅读题1. main()int x=12;printf(%d,%o,%x,%u,x,x,x,x); 12,14,c,122. main()int x=235;double y=3.1415926;printf(x=%-6d,y=%-14.5fn,x,y); x=235 ,y=3.141593. main()printf(%f,%4.2fn,3.14,3.14159); 3.140000 ,3.144. main()printf(*n*n*n*n);*5. main()printf(ThististatCtprogram.n);ThisisaCprogram.6. main()char x=a,y=b;printf(%e%cn,x,y); 此处有错,格式符不对,可以是d/o/xprintf(x=%3x,%-3xn,x,x);7. 当输入流为“56789012345a72”时,执行下面的程序段后,int i,j;float x,y;char c;scanf(%2d%f%f%c%d,&i,&x,&y,&c,&j);变量i,j,x,y,c中内容各是什么?i=56 x=789.0 y=123.0 c= j=45第4章 选择结构程序设计习 题一、填空题1语言中用_1_表示“真”,用_0_表示“假”。2a的初值为2,b的初值为3,c的初值为4,求下列表达式的值: a= =3 0 a=3 3 a&b 1 a|b+c&b-c a|(b+c)&(b-c) 1 !(ab)&!c|1) 0 ab?a:cb?c:a (ab)?a:(cb?c:a) 23下列程序的输出结果为:main()int abc;a=b=c=1;b=b+c;a=a+b;printf(%dn,(c0|b0)&(a0|b0&b0Ca+b0Da*b02设 int x=1, y=1;表达式(!x|y-)的值是 ( B )A0B1C2D-13设有如下程序: main() float x=2.0,y;if(x0.0) y=0.0;else if(x10.0) y=1.0/x;else y=1.0;printf(%fn,y);该程序的输出结果是( C )A0.000000B0.250000C0.500000D1.0000004设有如下程序: main()int a=2,b=-1,c=2;if(b0)printf(%dn,a100);else printf(%dn,a=100);该程序的输出结果是 ( A )A0B1C100D-16设有如下程序: main()int x=1,a=0,b=0;switch (x)case 0: b+;case 1: a+;case 2: a+;b+;printf(a=%d,b=%dn,a,b);该程序的输出结果是 ( A )Aa=2,b=1Ba=1,b=1Ca=1,b=0Da=2,b=27若有定义“float w; int a, b;”,则合法的switch语句是(D )A.switch(w)B.switch(a);case 1.0:printf(*n);case 1 printf(*n);case 2.0:printf(*n);case 2 printf(*n);C.switch(b)D.switch(a+b)case 1: printf(*n);case 1:printf(*n);default:printf(*n);case 2:printf(*n);case 1+2:printf( n);default:printf(n);三、编程题1输入一个年份,判断它是否为闰年。2从键盘输入三个整数a、b、c,编程求最大数并输出结果。3为了鼓励节约用水,作如下规定:每人月用水量在10m3或10m3以下,收费为1.8元/m3,用水量在10到20m3之间的,超出部分收费为2.5元/m3,用水量超过20m3的,超出20 m3的部分收费为3.5元/m3。设某人某月份用水x m3,编程求其应付水费y。4某百货商场进行打折促销活动,消费金额(p)越高,折扣(d)越大,标准如下:消费金额折扣p1000%100p2005%200p50010%500p100015%p100020%编写程序,从键盘输入消费金额,输出折扣率和实付金额(f)。要求分别:(1)用if语句实现;(2)用switch语句实现。三、1.#includemain()int year;printf(Please input a year:);scanf(%d,&year);if (year%4 = 0 & year%100 != 0)| year%400 =0)printf(%d year is leap year!n,year);elseprintf(%d year is not leap year!n,year);三、2.#includemain()int a,b,c,max;scanf(%d,%d,%d,&a,&b,&c);max=a;if (maxb)max=b;if (maxc) max=c;printf(Maximum number is %d n,max);三、3#includemain() int x;float y,p;scanf(%d,&x);if(x=10)y=1.8*x;else if(x=20)y=1.8*10+2.5*(x-10);elsey=1.8*10+2.5*10+3.5*(x-20);printf(y=%.2fn,y);三、4(1)#includemain() float p,f,d;scanf(%f,&p);if (p100)d=0.;else if(p200)d=0.05;else if(p500)d=0.1;else if(p1000)d=0.15;elsed=0.2;f=p*(1-d);printf(d=%d% f=%.2fn,(int)(d*100),f);(2)#includemain() float p,f,d;int c;scanf(%f,&p);c=p/100;switch(c)case 0:d=0.;break;case 1:d=0.05;break;case 2:case 3:case 4:d=0.1;break;case 5:case 6:case 7:case 8:case 9:d=0.15;break;default :d=0.2;f=p*(1-d);printf(d=%d% f=%.2fn,(int)(d*100),f);第5章 循环结构程序设计习 题一、简答题1. 试画出while语句、dowhile语句的流程图,并简要说明两者有何区别。2. 试画出for语句的流程图,并简要说明与while语句相比有何不同。二、改错题1. 判断m是否为素数。#includemain( )int m,i,k;scanf(%d,&m);k=sqrt(m);for(i=2;ik)printf(%d is a prime numbern,m);else printf(%d is not a prime numbern,m); 错误的地方: 正确的语句: 错误的地方: 正确的语句: 2. 求数列1,1,2,3,5,8的前40个数,即F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n=3)#include stdio.hmain( ) long int f1=1,f2=1;int i;for(i=1;i=40;i+) printf(%12ld%12ld,f1,f2);if(i%2=0)printf(n);f2+=f1;f1+=f2; 错误的地方: for(i=1;i=40;i+) 正确的语句: for(i=1;i=20;i+) 错误的地方: f2+=f1;f1+=f2 正确的语句: f1+=f2;f2+=f1 三、编程题1. 输入整数n,求表达式的值。2. 求的值,n由手动输入。3. 使用循环,输出以下图案:12223333344444445555555554. 求的值。三、1.main( ) int n,i; float t,s,sum; printf(input n :); scanf(%d,&n); t = 1; s = 1; sum = 1; for(i = 1 ; i = n ; i +) t = t * 2; s = s + t; sum = sum +s ; printf(The value is %f,sum); getch();三、2#includemain() int i,n;float s;scanf(%d,&n);for(i=3,s=1;i=n;i+=2) s=s+1.0/i;printf(s=%fn,s);三、3.#includemain( )int i,j,k;for(i=1;i=5;i+) for(j=1;j=5-i;j+) printf( );for(k=1;k=2*i-1;k+) printf(%1d,i);printf(n);三、4.Main()foalt s,s1,s2,s3,k;for(k=1;k=100;k+)s1=s1+k;for(k=1;k=50;k+)s2=s2+k*k;for(k=1;k=10;k+)s3=s3+1.0/k;s=s1+s2+s3;printf(“s1+s2+s3=%f”,s)第6章 数 组习 题一、改错题1. 求数组的和以及平均值。main( ) int a =1,2,3,4,5,6,7,8,9,10,i; float sum,avg; for(i=0;i10;i+)sum=sum+ai; avg=sum/10; printf(sum=%f,avg=%f,sum,avg);错误的地方: for(i=0;i10;i+)sum=sum+ai; 正确的语句: for(i=0,sum=0;i10;i+)sum=sum+ai; 错误的地方: 正确的语句: 2. 有两个数组,各有5个元素,比较相应的元素,并统计相应元素大于、小于和等于的次数。main( ) int a5, b5, i, n, m, k; printf(enter array a:n); for(i=0;i5;i+) scanf(%d, &ai); printf(n); printf(enter array b: n); for(i=0; i5; i+) scanf(%d, &bi); printf(n); for(i=0; ibi %d timen, n); printf(ai=bi %d timen, m); printf(aik) printf(array a is large than array bn); else if(ny) flag=1; else if(xy) flag=-1; else flag=0; return(flag); 错误的地方: int a5, b5, i, n, m, k; 正确的语句: int a5, b5, i, n=0, m=0, k=0; 错误的地方: large(int x,y) 正确的语句: large(int x,int y) 二、填空题1. 将二维数组行列元素互换,存到另一个数组中。main( )int a23=1,2,3,4,5,6;int b32,i,j;printf(array a:n);for(i=0;i=1;i+) for(j=0;j=2;j+) printf(%5d,aij); bji = aij; printf(n);printf(array b:n);for(i=0;i=2;i+) for(j=0;j=1;j+) printf(%5d,bij);printf(n); 2. 用选择法对10个整数排序。main( )int a10,i,j,k,x;printf(This 10 numbers are:n);for(i=0;i10;i+) printf(n);for(i=0;i10;i+) k=i; for(j=i+1;j=10;j+)if(ajak) k=j;if(i!=k) x=ai;ai=ak;ak=x; printf(The sorted numbers:n);for(i=1;i11;i+)printf(%d ,ai);三、编程题1. 编写程序输出二维数组每列的列号和每列上的最大值。2. 用选择法对10个整数从小到大排序。3. 将一个数组中的值按逆序重新存放。例如原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。三、1.#includemain()int a32;int max,i,j;for(i=0;i3;i+)for(j=0;j2;j+)scanf(%d,&aij); for(j=0;j2;j+) printf(%d lie,j);max=a0j;for(i=0;i3;i+)if (maxaij) max=aij;printf( max=%dn,max); 三、2#include#includemain( )int i,j,k,n,num,array10;printf(The 10 numbers aren);for(i=0;i10;i+)scanf(%d,& arrayi);printf(%4d,arrayi);printf(n);for(i=0;i10-1;i+)k=i;for(j=i+1;jarrayj)k=j;if(i!=k)num=arrayk;arrayk=arrayi;arrayi=num;printf(The10 numbers from small to big is);for(i=0;i10;i+)printf(%4d,arrayi);三、3#includemain() int i,j,a10,m,t; printf(The original array:n);for(i=0;i10;i+)scanf(%d, &ai);for(i=0;i10;i+)printf(%d,ai);printf(n);m=(10-1)/2;for(i=0;i=m;i+)j=10-1-i;t=ai;ai=aj;aj=t;printf(The array has been inverted:n);for(i=0;i10;i+)printf(%d,ai);printf(n);第7章 函 数习 题一、选择题1. 一个C程序是由 组成的。( C )A一个主程序和若干子程序B一个主程序C一个主函数和若干子函数D一个主函数2. C语言规定,函数返回值的类型是由( D )Areturn语句中的表达式类型所决定;B调用该函数时的主调函数类型所决定;C调用该函数时系统临时决定;D在定义该函数时所指定的函数类型所决定。3以下说法中正确的是( C )AC语言程序总是从第一个的函数开始执行B在C语言程序中,要调用的函数必须在main()函数中定义CC语言程序总是从main()函数开始执行DC语言程序中的main()函数必须放在程序的开始部分4. 以下叙述中不正确的是( D )A在不同的函数中可以使用相同名字的变量;B函数中的形式参数是局部变量;C在一个函数内定义的变量在本函数范围内有效;D在一个函数内的复合语句中定义的变量在本函数都有效。5. main函数在源程序中的位置( C )A必须在最开始处B必须在子函数的后面C可以任意D必须在最后6. 下列函数的类型是( C )fun(float x)printf(“%f”,x*x);A与参数x的类型相同Bvoid类型 Cint类型 D无法确定7. 以下叙述不正确的是( C )A一个C程序可以由一个或多个函数组成B一个C源程序必须包含一个main()函数C在C程序中,注释只能位于一条语句的最后面DC程序基本组成单位是函数二、填空题1. 下面函数调用语句含有实参的个数为 2 。func(exp1),(exp2,exp3, exp4);三、判断题1. 在一个函数内部的复合语句中定义的变量,只在该复合语句范围内有效。( )2. C语言中所有的函数都可以互相调用,甚至可以调用自己。( )3. 以数组名做函数参数是一种地址传递。( )4. 被调函数中无return 语句时,系统自动返回void类型的值。( )5. 形参的个数可以多过实参。( )6. C中的函数允许嵌套调用,不允许嵌套定义。( )7. 当全局变量与局部变量冲突时,全局变量起作用。( )8. C语言规定函数返回值的类型是由return语句中的表达式类型所决定。( )9. 实参可以是常量、变量、表达式,空值也可以。( )10. 一个函数可以有多个返回值,用return语句即可将它们带回。( )四、程序填空题1. 一维数组内有10个学生成绩,用函数求平均分、最高分和最低分。#include stdio.hfloat max=0,min=0;main() float average(float array,int n) ; float ave,score10;int i;for(i=0;i10;i+) scanf(%f,&scorei);ave=average(score,10);printf(max=%6.2fnmin=%6.2fnaverage=%6.2fn,max,min,ave);float average(float array,int n) int i;float aver,sum=array0;max=min=array0;for(i=1;in;i+) if(maxarrayi) min=arrayi; sum=sum+arrayi; aver=sum/n;return(aver);2. main() float fact(int n) ; int n;float y;scanf(%d,&n);y=fact(n);printf(%d!=%10.0fn,n,y); float fact(int n) float f;if(n0) printf(n0,dataerror!); else if(n=0|n=1) f=1; elsef=fact(n-1)*n; return f; 3. void inv( int x,int n ) int t,i,j,m= (n-1)/2 ; for(i=0;i=m;i+) j=n-1-i t=xi; xi=xj; xj=t; main() int i,a10=3,7,9,11,0,6,7,5,4,2; inv(a,10); printf(The array has been reverted:n); for(i=0;i10;i+) printf(%3d,ai); printf(n);4. int max,min ; void max_min_value(int array,int n) int *p,*array_end; array_end=array+n; max=min=*array; for(p=array+1;pmax)max=*p; else if(*pmin) min=*p; return;main() int i, a10; printf(enter 10 interger numbers:n); for(i=0;i10;i+) scanf(“%d”,&ai); max_min_value(a ,10); printf(nmax=%d,min=%dn,max,min);五、改错题1. 一个递归函数print(),其功能是使用putchar()函数打印数字包括负号。#include stdio.hmain() int m; m=123;print(m);printf(n); m=456;print(m);printf(n);void print(int n) int i; if(n0)putchar(-);n=-n; if(i=n/10)!=0) print(i); printf(n); putchar(n%10+48);错误的地方: printf(n); 正确的语句: 错误的地方: putchar(n%10); 正确的语句: 2. #include stdio.hfloat average();main( ) float score10,aver; int i; for(i=0;i10;i+)scanf(%f,&scorei); printf(n); aver=average(score,10); printf(average score is %5.2fn,aver); float average(float a ,int n) int i,sum,aver; for(sum=0,i=0;in;i+) sum=sum+ai; aver=sum/n; return(aver); 错误的地方: 正确的语句: 错误的地方: 正确的语句: 六、程序阅读题1. void m1(int x) int a,b,c,d; char a1,b1,c1,d1; char m2(int); a=x/1000;d=x%10;b=(x/100)%10;c=(x/10)%10; a1=m2(a);b1=m2(b);c1=m2(c);d1=m2(d); printf(%c,%c,%c,%c,a1,b1,c1,d1);char m2(int m) switch(m) case 0:return(0);break; case 1:return(1);break; case 2:return(2);break; case 3:return(3);break; case 4:return(4);break; case 5:return(5);break; case 6:return(6);break; case 7:return(7);break; case 8:return(8);break; case 9:return(9);break;main( )m1(1994); 功能: 结果: 1,9,9,4 2. void copy_string(char from,char to)int i=0;while(fromi!=0) toi=fromi;i+; toi=0;main() char a16=I am a teacher.;char b=You are a student.;printf(string_a=%sn string_b=%sn,a,b);copy_string(a,b);printf(nstring_a=%snstring_b=%sn,a,b);功能: 结果: I am a teacher. You are a student. I am a teacher I am a teacher 3. #include stdio.hvoid sort(int x,int n) int i,j,k,t;for(i=0;in-1;i+) k=i;for(j=i+1;jxk)k=j;if(k!=i)t=xi;xi=xk;xk=t;main() int *p,i,a10;p=a;for(i=0;i10;i+)*p=i+2;p+;p=a;sort(p,10);for(p=a,i=0;i10;i+) printf(%d,*p);p+;功能: 结果: 11,10,9,8,7,6,5,4,3,2 4. int max(int array4) int i,j,max;max=array00;for(i=0;i3;i+)for(j=0;jmax)max=arrayij;return(max);main() int a34=1,3,5,7,2,4,6,8,15,17,34,12;printf(max value is %dn,max(a);功能: 结果: 5. float average(float a , int n)int i; float aver, sum=a0; for(i=1;in;i+) sum=sum+ai;aver=sum/n;return(aver); main( ) float s15=98.5, 97, 91.5, 60, 55;float s210=67.5, 89.5, 99, 69.5, 77, 89.5, 76.5, 54,60, 99.5;int i;printf(the average of class A is %6.2fn,average(s1,5);printf(the average of class B is %

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论