1、C语言程序设计复习题及答案 第一部分 程序设计基本概念1.1 在TRUBO C环境中用RUN命令运行一个C程序时,所运行的程序的后缀是_。1.2 C语言源程序文件的后缀是_,经过编译后,生成文件的后缀是_,经过连接后,生成文件的后缀是_。1.3 结构化程序由_、_、_三种基本结构组成。第二部分 C程序设计的初步知识一、选择题2.1 以下选项中正确的整型常量是A)12.B)-20C)1,000D)4562.2 以下选项中正确的实型常量是A)0B)3. 1415 C)0.32910(2)(10的2次方)D).8712.3 以下选项中不正确的实型常量是A)2.607E-1B)0.8103e2C)-7
2、7.77D)456e-22.4 以下选项中不合法的用户标识符是A)abc.cB)fileC)MainD)PRINTF2.5 以下选项中不合法的用户标识符是A)_123B)printfC)A$D)Dim2.6 C语言中运算对象必需是整型的运算符是A)%B)/C)!D)*2.7 可在C程序中用作用户标识符的一组标识符是A)voiddefineWORDB)as_b3_123IfC)For-abccaseD)2cDOSIG2.8 若变量已正确定义并赋值,符合C语言语法的表达式是A)a=a+7;B)a=7+b+c,a+C)int(12.3%4)D)a=a+7=c+b2.9 以下叙述中正确的是A)a是实型
3、变量,C允许进行以下赋值a=10,因此可以这样说:实型变量中允许存放整型值。B)在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式。C)执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值变为0。D)已有a=3,b=5。当执行了表达式a=b,b=a之后,已使a中的值为5,b中的值为3。第三部分、顺序结构一、选择题3.1 若a、b、c、d都是int类型变量且初值为0,以下选项中不正确的赋值语句是A) a=b=c=100;B) d+;C) c+b;D) d=(c=22)-(b+);3.2 以下选项中不是C语句的是A) int i; i+;
4、printf(%dn, i); B) ;C) a=5,c=10D) ; 3.3 以下合法的C语言赋值语句是A) A=B=58B) k=int(a+b);C) a=58,b=58D) -i;3.4 以下程序的输出结果是A) 0 B) 1 C) 3 D)不确定的值main()int x=10,y=3;printf(%dn, y=x/y);3.5 若变量已正确说明为int类型,要给a、b、c输入数据,以下不正确的输入语句是A) read(a,b,c);B) scanf(%d%d%d,a,b,c);C) scanf(%D%D%D,&a,&b,&c); D) scanf(%d%d%d,&a,&b,&c)
5、;3.6 若变量已正确说明为float类型,要通过以下赋值语句给a赋予10、b赋予22、c赋予33,以下不正确的输入形式是A) 10 22 33B) 10.0,22.0,33.0 C) 10.0 22.0 33.0 D) 10 22 33scanf(%f %f %f, &a, &b, &c);3.7 若变量以正确定义,要将a和b中的数进行交换,下面不正确的语句组是A) a=a+b,b=a-b,a=a-b;B) t=a,a=b,b=t;C) a=t; t=b; b=a;D) t=b; b=a; a=t;3.8 若变量已正确定义,以下程序段的输出结果是A) 输出格式说明与输出项不匹配,输出无定值B
6、) 5.17000C) 5.168000D) 5.169000x=5.16894;printf(%fn,(int)(x*1000+0.5)/(float)1000);3.9 若有以下程序段,c3中的值是A) 0B) 1/2C) 0.5D) 13.10 若有以下程序段,int c1=1,c2=2,c3; c3=c1/c2;其输出结果是A) 0,0,-10B) 0,0,5C) -10,3,-10D) 3,3,-10int a=0,b=0,c=0;c=(a-=a-5),(a=b,b+3);printf(%d,%d,%dn,a,b,c);3.11 当运行以下程序时,在键盘上从第一列开始输入987654
7、3210(此处代表Enter),则程序的输出结果是A) a=98,b=765,c=4321B) a=10,b=432,c=8765C) a=98,b=765.000000,c=4321.000000D) a=98,b=765,c=4321.0main()int a; float b,c;scanf(%2d%3f%4f,&a,&b,&c);printf(na=%d,b=%f,c=%fn,a,b,c);3.12 以下程序的输出结果是A) a=%2,b=%5B) a=2,b=5C) a=%d,b=%dD) a=%d,b=%dmain() int a=2,b=5;printf(a=%d,b=%dn,a
8、,b);第四部分、选择结构一、 选择题4.1 下列运算符中优先级最高的运算符是A) !B) %C) -=D) &4.2 下列运算符中优先级最低的运算符是A) |B) !=C) =y)&(y=z)B) (x=y)AND(y=z)4.4 设a、b和c都是int型变量,且a=3,b=4,c=5;则以下的表达式中,值为0的表达式是A) a&b B) a=b C) a|b+c&b- D) !(ab)&!c|1)4.5 以下程序的输出结果是A) 0B) 1C) 2D) 3main() int a=2,b=-1,c=2;if(ab)if(b0)c=0;elsec+=1;printf(%dn,c);4.6 以
9、下程序的输出结果是A)1B) 2C) 3 D) 4main() int w=4,x=3,y=2,z=1;printf(%dn,(wx?w:zy?z:x);4.7 若执行以下程序时从键盘上输入3和4,则输出结果是A) 14B) 16C) 18D) 20main() int a,b,s;scanf(%d%d,&a,&b);s=a;if(ab) s=b;s*=s;printf(%dn,s);4.8 下面的程序片段所表示的数学函数关系是 -1(x0) 1(x0) 0(x0) -1(x0)y=-1;if(x!=0) y=1;if(x0) y=1;else y=0;答案:本题没有正确答案。程序片段所表示的
10、数学函数关系应该是 0(x0)4.9 运行以下程序后,输出A) *B) &C) #&D) 有语法错误不能通过编译main() int k=-3;if(k=0) printf(*n)else printf(&n);4.10 若a和b均是正整型变量,以下正确的switch语句是A)switch(pow(a,2)+pow(b,2) case 1:case 3:y=a+b;break;case 0:case 5:y=a-b;B)switch(a*a+b*b); case 3:case 1:y=a+b; break;case 0:y=b-a; break;C)switch a default:x=a+b
11、;case 10:y=a-b; break;case 11:x=a*d; break;D)switch (a+b) case10 : x=a+b; break;case11 : y=a-b; break;答案:没有正确答案。如果C选项改为:switch(a) default:x=a+b;case 10:y=a-b; break;case 11:x=a*b; break;则答案可以选择C第五部分、循环结构一、 选择题5.1 以下程序段的输出结果是A) 9B) 1C) 11D) 10int k,j,s;for(k=2; k6; k+,k+) s=1;for(j=k; j6; j+)s+=j;pri
12、ntf(%dn, s);5.2 以下程序段的输出结果是A) 12B) 15C) 20D) 25int i,j,m=0;for(i=1; i=15; i+=4)for(j=3; j7) n-;printf(%dn, n);5.4 以下程序段的输出结果是A) 1B) 3 0C) 1 -2D) 死循环int x=3;do printf(%3d,x-=2); while(!(-x);5.5 以下程序段的输出结果是A) 15B) 14C) 不确定D) 0main() int i,sum;for(i=1; i0; y-)if(y%3=0)printf(%d, -y); continue;5.7 若x是in
13、t型变量,以下程序段的输出结果是A) *3 #4 *5B) #3 *4 #5C) #3 *4#5D) *3#4 *5for(x=3; x6; x+)printf(x%2)?(*%d):(#%dn),x);5.8 以下程序的输出结果是A) *#*#*#$B) #*#*#*$C) *#*#$ D) #*#*$main() int i;for(i=1; i=5; i+) if(i%2)printf(*);else contionue;printf(#);printf($n);5.9 以下叙述正确的是A) do_while语句构成的循环不能用其它语句构成的循环来代替。B) do_while语句构成的循
14、环只能用break语句退出。C) 用do_while语句构成循环时,只有在while后的表达式为非零时结束循环。D) 用do_while语句构成循环时,只有在while后的表达式为零时结束循环。5.10 以下程序的输出结果是A) 39 81B) 42 84C) 26 68D) 28 70main() int x,i;for(i=1; ib; +b) i+;while(a+c) j+;do k+;while(ad+);5.12 以下程序段的输出结果是_。int k,n,m;n=10; m=1; k=1;while(k=n)m*=2;printf(%dn,m);5.13 以下程序的输出结果是_。m
15、ain() int x=2;while(x-);printf(%dn,x);5.14 以下程序段的输出结果是_。int i=0,sum=1;do sum+=i+; while(ib) c=1;elseif(a=b)c=0;elsec=-1;return(c);7.6 以下程序的输出结果是A) 0B) 1 C) 6D) 无定值fun(int a,int b,int c) c=a*b;main() int c;fun(2,3,c);printf(%dn,c);7.7 以下程序的输出结果是A) 5.500000B) 3.000000C) 4.000000 D) 8.25double f(int n)
16、 int i;double s;s=1.0;for(i=1; i=n; i+) s+=1.0/i;return s;main() int i,m=3; float a=0.0;for(i=0; im; i+) a+=f(i);printf(%fn,a);二、 填空题7.8 以下程序的输出结果是_。unsigned fun6(unsigned num) unsigned k=1;do k*=num%10;num/=10;while(num);return k;main() unsigned n=26;printf(%dn,fun6(n);答案:127.9 以下程序的输出结果是_。double s
17、ub(double x,double y,double z) y-=1.0;z=z+x;return z;main() double a=2.5,b=9.0;printf(%fn,sub(b-a,a,a);答案:9.0000007.10 以下程序的输出结果是_。fun1(int a,int b) int c;a+=a; b+=b;c=fun2(a,b);return c*c;fun2(int a,int b) int c;c=a*b%3;return c;main() int x=11,y=19;printf(%dn,fun1(x,y);答案:4第八部分 指针 一、 选择题8.1 若有定义:i
18、nt x,*pb; 则以下正确的赋值表达式是A) pb=&xB) pb=xC) *pb=&xD) *pb=*x8.2 以下程序的输出结果是A) 因变量无定义输出不定值B) 0 C) -1 D) 1#include main() printf(%dn,NULL);8.3 以下程序的输出结果是A) 5,2,3B) -5,-12,-7C) -5,-12,-17 D) 5,-2,-7void sub(int x,int y,int *z) *z=y-x; main() int a,b,c;sub(10,5,&a);sub(7,a,&b); sub(a,b,&c);printf(%d,%d,%dn,a,
19、b,c);8.4 以下程序的输出结果是A) 4B) 6C) 8D) 10main() int k=2,m=4,n=6;int *pb=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf(%dn,n);8.5 已知指针p的指向如图8.5所示,则执行语句*p+; 后,*p的值是A) 20 B) 30C) 21 D) 318.6 已知指针p的指向如图8.5所示,则表达式*+p的值是 A) 20B) 30C) 21 D) 318.7 已知指针p的指向如图8.5所示,则表达式+*p的值是A) 20 B) 30C) 21 D) 318.8 以下程序的输出结果是A) 23 B) 24
20、C) 25D) 26void prtv(int *x) printf(%dn,+*x);main() int a=25;prtv(&a);8.9 以下程序的输出结果是A) 运行出错B) 100C) a的地址D) b的地址main() int *k, *a b=100;a=&b; k=&a;printf(%dn,*k);8.10 以下程序的输出结果是A) 4,3B) 2,3C) 3,4D) 3,2void fun(float *a,float *b) float w;*a=*a+*a;w=*a;*a=*b;*b=w;main() float x=2.0,y=3.0;float *px=&x,*p
21、y=&y;fun(px,py);printf(%2.0f,%2.0fn,x,y);8.11 以下程序的输出结果是A)9.000000B)1.500000C)8.000000D)10.500000void sub(float x,float *y,float *z) *y=*y-1.0;*z=*z+x;main() float a=2.5,b=9.0,*pa,*pb;pa=&a,pb=&b;sub(b-a,pa,pa);printf(%fn,a);二、 填空题8.13 以下程序段的输出结果是_。int *var,ab;ab=100; var=&ab;ab=*var+10;printf(%dn,*
22、var); 8.14 以下程序的输出结果是_。int ast(int x,int y,int *cp,int *dp) *cp=x+y;*dp=x-y;main() int a,b,c,d;a=4; b=3;ast(a,b,&c,&d);printf(%d %dn,c,d);答案:7 18.15 若有定义:char ch;(1) 使指针p可以指向变量ch的定义语句是_。答案:char*p=&ch; (2) 使指针p可以指向变量ch的赋值语句是_。 答案:p=&ch; (3) 通过指针p给变量ch读入字符scanf函数调用语句是_。 答案:scanf(%c,*p);(4) 通过指针p给变量ch的
23、赋字符的语句是_。 答案:ch=*p;5) 通过指针p输出ch中字符的语句是_。 答案: printf(%c,*p);第九部分 数组一、 选择题9.1 若已定义:int a =0,1,2,3,4,5,6,7,8,9,*p=a,i;其中0i9,则对a数组元素的引用不正确的是A)ap-aB)*(&ai) C)piD)*(*(a+i)9.2 以下程序段给数组所有元素输入数据,应在下划线处填入的是A)a+(i+) B)&a(i+1)C)a+i D)&a+imain()int a10,i=0;while(i10)scanf(%d,_);. 9.3 以下程序的输出结果是A)3B)4 C)1 D)2main
24、() int a10=1,2,3,4,5,6,7,8,9,10,*p=a;printf(%dn,*(p+2);9.4、 以下程序的输出结果是A)不确定的值 B)3 C)2 D)1main() int n2=0,i,j,k=2;for(i=0;ik;i+) for(j=0;jk;j+)nj=ni+1;printf(%dn,nk);9.5以下程序的输出结果是A)17B)18C)19D)20main() int a =2,4,6,8,10,y=1,x,*p;p=&a1;for(x=0;x3;x+) y+=*(p+x);printf(%dn,y); 9.6 以下程序的输出结果是A)6B)8 C)4 D
25、)2main() int a10=2,4,6,8,*p=a,i;for(i=0;i4;i+)ai=*p+;printf(%dn,a2);9.7 以下程序的输出结果是A)720 B)120 C)24D)6f(int b ,int n)int i,r=1;for(i=0;i=n;i+)r=r*bi;returnr; main()int x,a=2,3,4,5,6,7,8,9;x=f(a,3);printf(%dn,x);9.8 以下程序中若第一个printf语句输出的是194,则第二个printf语句的输出结果是A)212 B)204C)1a4 D)1a6main()int a=1,2,3,4,5
26、,6,7,8,9,0,*p;p=a;printf(%xn,p);printf(%xn,p+9);9.9 以下程序的输出结果是A)0987654321B)4321098765 C)5678901234 D)0987651234fun(int *s,int n1,int n2)int i,j,t;i=n1;j=n2;while(ij)t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;i+;j-; main() int a10=1,2,3,4,5,6,7,8,9,0,*p=a,i;fun(p,0,3);fun(p,4,9);fun(p,0,9);for(i=0;i10;i+)printf(%d,*(a+i);9.10 以下程序的输出结果是A) 4 4 B) 2 2C) 2 4 D) 4 6main() int a5=2,4,6,8,10,*p,*k;p=a;k=&p;printf(%d ,*(p+);printf(%dn,*k);9.11 当运行以下程序时输入三行,每行都是在第一列上开始,代表Enter键:abcdef则程序的输出结果是A) abcdefB) aC) a D) ab bbc cd cdefd