C语言程序设计-----阅读程序题库及答案.pdf
【2.1】以下程序的输出结果是。main(D)float a;printf(%g,a);A)0.00000e+00 B)0.0 C)1.00000e-07 D)0【2.2】下面程序的输出结果是 B_。#include main()int x=10;int x=20;printf(%d,,x);printf(%dn,x);A)10,20 B)20,10 C)10,10 D)20,20【2.3】以下程序的输出结果是_B_。main()unsigned int n;int i=-521;n=i;printf(n=%un,n);/变量 i 中的负号传送给变量 n 后,因 n 是无符号数,已不作为负号处理。【2.4】以下程序的输出结果是。main(D)int x=10,y=10;printf(%d%dn,x,y);A)10 10 B)9 9 C)9 10 D)10 9【2.5】以下程序的输出结果是_B。main()int n=1;printf(%d%d%dn,n,n+,n-);/C 语言在执行 printf()时,对函数中的表达式表列的处理顺序是从后向前,即先处理 n-,再处理 n+,最后处理 n,A)1 1 1 B)1 0 1 C)1 1 0 D)1 2 1【2.6】以下程序的输出结果是_。main()int x=0 x02ff,y=0 x0ff00;printf(%dn,(x&y)4|0 x005f);A)127 B)255 C)128 D)1【2.7】以下程序的输出结果是_。main()int a=1;char c=a;float f=2.0;printf(%dn,(!(a=0),f!=0&c=A);A)0 B)1【2.8】下面程序的输出结果是_。main()int a=1,i=a+1;do a+;while(!i+3);printf(%dn,a);A)1 B)2 C)3 D)4【2.9】下面程序的输出结果是_。main()int a=111;a=a00;printf(%d,%on,a,a);A)111,157 B)0,0 C)20,24 D)7,7【2.10】下面程序的输出结果是_。main()char s12=a book;printf(%.4s,s);A)a book!B)a book!b)a=b;b=c;c=a;printf(a=%d b=%d c=%dn,a,b,c);A)a=10 b=50 c=10 B)a=10 b=30 c=10C)a=50 b=30 c=10 D)a=50 b=30 c=50【2.13】以下程序的输出结果是。main()int a=0,b=1,c=0,d=20;if(a)d=d-10;else if(!b)if(!c)d=15;else d=25;printf(d=%dn,d);A)d=10 B)d=15 C)d=20 D)d=25【2.14】下面程序的输出结果为。main()int a=1,b=0;switch(a)case 1:switch(b)case 0:printf(*0*);break;case 1:printf(*1*);break;case 2:printf(*2*);break;A)*0*B)*0*2*C)*0*1*2*D)有语法错误【2.15】以下程序的输出结果是。main()int v1=0,v2=0,v3=0,v4=0,k;for(k=0;sk;k+)switch(sk)case 1:v1+;case 3:v3+;case 2:v2+;default:v4+;printf(v1=%d,v2=%d,v3=%d,v4=%dn,v1,v2,v3,v4);A)v1=4,v2=2,v3=1,v4=1 B)v1=4,v2=9,v3=3,v4=1C)v1=5,v2=8,v3=6,v4=1 D)v1=4,v2=7,v3=5,v4=8【2.16】下面程序的输出是。main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;printf(a=%d,b=%dn,a,b);A)a=2,b=1 B)a=1,b=1 C)a=1,b=0 D)a=2,b=2【2.17】下面程序的输出是_。main()int num=0;while(num=2)num+;printf(%dn,num);A)1 B)1 C)1 D)12 2 23 34【2.18】下面程序的输出结果是_。main()int a=1,b=0;do switch(a)case 1:b=1;break;case 2:b=2;break;default:b=0;b=a+b;while(!b);printf(a=%d,b=%d,a,b);A)1,2 B)2,1 C)1,1 D)2,2【2.19】从键盘上输入446755时,下面程序的输出是_。#include main()int c;while(c=getchar()!=n)switch(c-2)case 0:case 1:putchar(c+4);case 2:putchar(c+4);break;case 3:putchar(c+3);default:putchar(c+2);break;printf(n);【2.20】下面程序的输出结果是_。main()int k=0;char c=A;do switch(c+)case A:k+;break;case B:k-;case C:k+=2;break;case D:k=k%2;contiue;case E:k=k+10;break;default:k=k/3;k+;while(cC);printf(k=%dn,k);A)k=1 B)k=2 C)k=3 D)k=4【2.21】下面程序的输出结果是_。main()int x,i;for(i=1;i=100;i+)x=i;if(+x%2=0)if(+x%3=0)if(+x%7=0)printf(%d,x);A)39 81 B)42 84 C)26 68 D)28 70【2.22】下面程序的输出结果是_。#include main()int i,k,a10,p3;k=5;for(i=0;i10;i+)ai=i;for(i=0;i3;i+)pi=ai*(i+1);for(i=0;i3;i+)k+=pi*2;printf(%dn,k);A)20 B)21 C)22 D)23【2.23】假定从键盘上输入3.6,2.4,下面程序的输出是_。#include main()float x,y,z;scanf(%f,%f,&x,&y);z=x/y;while(1)if(fabs(z)1.0)x=y;y=z;z=x/y;else break;printf(%fn,y);A)1.500000 B)1.600000 C)2.000000 D)2.400000【2.24】下面程序的输出结果是_。main()int i,j,x=0;for(i=0;i2;i+)x+;for(j=0;j-3;j+)if(j%2)continue;x+;x+;printf(x=%dn,x);A)x=4 B)x=8 C)x=6 D)x=12【2.25】下面程序的输出结果是_。main()int i,j,k=10;for(i=0;i2;i+)k+;int k=0;for(j=0;j=3;j+)if(j%2)continue;k+;k+;printf(k=%dn,k);A)k=4 B)k=8 C)k=14 D)k=18【2.26】下面程序的输出结果是_。#include main()int n33,i,j;for(i=0;i3;i+)for(j=0;j3;j+)nij=i+j;for(i=0;i2;i+)for(j=0;j2;j+)ni+1j+1+=nij;printf(%dn,nij);A)14 B)0 C)6 D)不确定【2.27】下面程序的输出结果是_。#include main()int a45=1,2,4,-4,5,-9,3,6,-3,2,7,8,4;int i,j,n;n=9;i=n/5;j=n-i*5-1;printf(a%d%d=%dn,i,j,aij);A)6 B)-3 C)2 D)不确定【2.28】下面程序的输出结果是_。int m33=1,2,3;int n33=1,2,3;main()printf(%dn,m10+n00);/*/printf(%dn,m01+n10);/*/A)0 B)1 C)2 D)3 A)0 B)1 C)2 D)3【2.29】下面程序的输出结果是_。#include main()char s150=some string*,s2=test;printf(%sn,strcat(s1,s2);A)some string*B)testC)some stritest D)some string*test【2.30】下面程序的输出结果是_。#include f(char*s)char*p=s;while(*p!=0)p+;return(p-s);main()printf(%dn,f(ABCDEF);A)3 B)6 C)8 D)0【2.31】下面程序的输出结果是_。#include#include main()char str100=How do you do;strcpy(str+strlen(str)/2,es she);printf(%sn,str);A)How do you do B)es she C)How are you D)How does she【2.32】下面程序的输出结果是_。#include func(int a,int b)int c;c=a+b;return(c);main()int x=6,y=7,z=8,r;r=func(x-,y+,x+y),z-);printf(%dn,r);A)11 B)20 C)21 D)31【2.33】下面程序的输出结果是_。#include void fun(int*s)static int j=0;do sj+=sj+1;while(+j2);main()int k,a10=1,2,3,4,5;for(k=1;k3;k+)fun(a);for(k=0;k5;k+)printf(%d,ak);A)35756 B)23445 C)35745 D)12345【2.34】下面程序的输出结果是_。#include int k=1;main()int i=4;fun(i);printf(n%d,%d,i,k);/*/fun(int m)m+=k;k+=m;char k=B;printf(n%d,k-A);/*/printf(n%d,%d,m,k);/*/A)4,1 B)5,6 C)4,6 D)A,B,C 参考答案都不对 A)1 B)-59 C)-64 D)A,B,C 参考答案都不对 A)5,66 B)1,66 C)5,6 D)A,B,C 参考答案都不对【2.35】下面程序的输出结果是_。#include fun(int n,int*s)int f1,f2;if(n=1|n=2)*s=1;else fun(n-1,&f1);fun(n-2,&f2);*s=f1+f2;main()int x;fun(6,&x);printf(%dn,x);A)6 B)7 C)8 D)9【2.36】下面程序的输出结果是_。int w=3;main()int w=10;printf(%dn,fun(5)*w);fun(int k)if(k=0)return(w);return(fun(k-1)*k);A)360 B)3600 C)1080 D)1200【2.37】下面程序的输出结果是_。#include funa(int a)int b=0;static int c=3;a=c+,b+;return(a);main()int a=2,i,k;for(i=0;i2;i+)k=funa(a+);printf(%dn,k);A)3 B)0 C)5 D)4【2.38】下面程序的输出结果是_。#include void num()extern int x,y;int a=15,b=10;x=a-b;y=a+b;int x,y;main()int a=7,b=5;x=a-b;y=a+b;num();printf(%d,%dn,x,y);A)12,2 B)5,25 C)1,12 D)输出不确定【2.39】下面程序的输出结果是_。main()int a=2,i;for(i=0;i3;i+)printf(%4d,f(a);f(int a)int b=0;static int c=3;b+;c+;return(a+b+c);A)7 7 7 B)7 10 13 C)7 9 11 D)7 8 9【2.40】下面程序的输出结果是_。#include try()static int x=3;x+;return(x);main()int i,x;for(i=0;i=2;i+)x=try();printf(%dn,x);A)3 B)4 C)5 D)6【2.41】下面程序的输出结果是_。#include main()int x=1;void f1(),f2();f1();f2(x);printf(%dn,x);void f1(void)int x=3;printf(%d,x);void f2(x)int x;printf(%d,+x);A)1 1 1 B)2 2 2 C)3 3 3 D)3 2 1【2.42】下面程序的输出结果是_。#include#define SUB(X,Y)(X)*Ymain()int a=3,b=4;printf(%dn,SUB(a+,b+);A)12 B)15 C)16 D)20【2.43】下面程序的输出结果是_。main()int a=1,2,3,4,5,6;int*p;p=a;printf(%d,*p);printf(%d,*(+p);printf(%d,*+p);printf(%d,*(p-);p+=3;printf(%d%d,*p,*(a+3);A)1 2 3 3 5 4 B)1 2 3 4 5 6 C)1 2 2 3 4 5 D)1 2 3 4 4 5【2.44】下面程序的输出结果是_。main()int a34=1,2,3,4,5,6,7,8,9,10,11,12;int*p=a;p+=6;printf(%d,*p);/*/printf(%d,*(*(a+6);/*/printf(%d,*(a1+=2);/*/printf(%d,*(&a00+6);/*/A)7 7 7 7 B)句语法错误 C)句语法错误 D)句语法错误【2.45】下面程序的输出结果是_。#define FMT%Xn#include main()static int a 4=1,2,3,4,5,6,7,8,9,10,11,12;printf(FMT,a22);/*/printf(FMT,*(*(a+1)+1);/*/A)9 B)11 C)A D)B A)6 B)7 C)8 D)前面三个参考答案均是错误的【2.46】下面程序的输出结果是_。#include main()int a=1,2,3,4,5;int x,y,*p;p=&a0;x=*(p+2);y=*(p+4);printf(%d,%d,%dn,*p,x,y);A)1,3,5 B)1,2,3 C)1,2,4 D)1,4,5【2.47】下面程序的输出结果是_。void ive(x,n)int x,n;int t,*p;p=x+n-1;while(xp)t=*x;*x+=*p;*p-=t;return;main()int i,a=1,2,3,4,5,6,7,8,9,0;ive(a,10);for(i=0;i10;i+)printf(%d,ai);printf(n);A)1 2 3 4 5 6 7 8 9 0 B)0 9 8 7 6 5 4 3 2 1C)1 3 5 7 9 2 4 6 8 0 D)0 8 6 4 2 9 7 5 3 1【2.48】下面程序的输出结果是_。#include string.hfun(char*w,int n)char t,*s1,*s2;s1=w;s2=w+n-1;while(s1s2)t=*s1+;*s1=*s2-;*s2=t;main()static char*p=1234567;fun(p,strlen(p);printf(%s,p);A)7654321 B)1717171 C)7171717 D)1711717【2.49】下面程序的输出结果是_。#include char*p=abcdefghijklmnopq;main()int i=0;while(*p+!=e);printf(%cn,*p);A)c B)d C)e D)f【2.50】下面程序的输出结果是_。#include f(int x,int y)return(y-x);main()int a=5,b=6,c;int f(),(*g)()=f;printf(%dn,(*g)(a,b);A)1 B)2 C)3 D)前面三个参考答案均是错误的【2.51】下面程序的输出结果是_。#include main()int a=1,*p,*pp;pp=&p;p=&a;a+;printf(%d,%d,%dn,a,*p,*pp);A)2,1,1 B)2,1,2 C)2,2,2 D)程序有错误【2.52】下面程序的输出结果是_。main()char*alpha7=ABCD,EFGH,IJKL,MNOP,QRST,UVWX,YZ;char*p;int i;p=alpha;for(i=0;i4;i+)printf(%c,*(pi);printf(n);A)AEIM B)BFJN C)ABCD D)DHLP【2.53】下面程序的输出结果是_。#include char*pp23=abc,defgh,ijkl,mnopqr,stuvw,xyzmain()printf(%cn,*(pp+1);/*/;printf(%cn,*pp0);/*/printf(%cn,(*(*(pp+1)+1)4);/*/printf(%cn,*(pp12+2);/*/printf(%sn,*(pp+1);/*/A)a B)d C)i D)m A)a B)d C)i D)m A)h B)l C)q D)w A)k B)o C)u D)z A)ijkl B)mnopqr C)stuvw D)xyz【2.54】下面程序的输出结果是_。#include stdio.hstruct str1 char c5;char*s;main()struct str1 s12=ABCDEFGH,IJK,LMN;struct str2 struct str1 sr;int d;s2=OPQ,RST,32767;struct str1*p2;p0=&s10;p1=&s11;printf(%s,+p1-s);/*/printf(%c*/A)LMN B)MN C)N D)IJK A)O B)P C)Q D)R【2.55】以下程序的输出结果是_。struct st int x,*y;*p;int s=10,20,30,40;struct st a=1,&s0,2,&s1,3,&s2,4,&s3;main()p=a;printf(%dn,+(*(+p)-y);A)10 B)11 C)20 D)21【2.56】以下程序的输出结果是_。#include main()union EXAMPLE struct int x,y;in;int a,b;e;e.a=1;e.b=2;A)2,3 B)4,4 C)4,8 D)8,8【2.57】下面程序的输出结果是_。#include main()union int i2;long k;char c4;r,*s=&r;s-i0=0 x39;s-i1=0 x38;printf(%cn,s-c0);A)39 B)9 C)38 D)8【2.58】下面程序的输出是。main()printf(%dn,EOF);A)-1 B)0 C)1 D)程序是错误的参考答案【2.1】参考答案:D注释:程序中除法运算的两个操作数均是整型,运算结果也是整型。【2.2】参考答案:B注释:C 语言允许在程序块(分程序)中说明变量。【2.3】参考答案:C注释:变量 i 中的负号传送给变量 n 后,因 n 是无符号数,已不作为负号处理。【2.4】参考答案:D注释:对变量 x 的操作是后缀形式,变量 x 的减 1 操作要在执行完 printf函数之后才进行,所以变量 x 的值在输出的时候仍然保持原值 10。【2.5】参考答案:B注释:C 语言在执行 printf()时,对函数中的表达式表列的处理顺序是从后向前,即先处理 n-,再处理 n+,最后处理 n,而且每一个表达式作为一个处理单元,也就是说在不同的表达式中自增自减运算是单独考虑的。【2.6】参考答案:A注释:变量 x 和变量 y 做按位与,结果为 0 x0200,右移 4 位为 0 x0020,再与0 x005f 做按位或,最后结果为 0 x007f。【2.7】参考答案:A注释:逗号表达式的结果是用逗号分开的最后一个表达式的值,此题由于c=A的值是 0,所以逗号表达式的值为 0。【2.8】参考答案:B【2.9】参考答案:A【2.10】参考答案:C注释:在输出格式描述%m.ns中,m 是输出总长度,n 是实际字符的个数,这里 m 没有给出,则输出总长度就是实际输出字符的个数。【2.11】参考答案:C【2.12】参考答案:B【2.13】参考答案:C【2.14】参考答案:B【2.15】参考答案:D【2.16】参考答案:A【2.17】参考答案:C【2.18】参考答案:A【2.19】参考答案:C注释:在 switch 语句中,case 本身仅起到语句标号的作用,不会改变语句的流程,执行 break 语句才能退出当前的 switch 语句。【2.20】参考答案:D注释:siwtch 语句的表达式中,变量c 是后缀的增一运算,第一次执行do-while 循环时,执行 case A后面的语句。【2.21】参考答案:D【2.22】参考答案:B【2.23】参考答案:B注释:fabs()是浮点数绝对值函数。【2.24】参考答案:A【2.25】参考答案:C注释:C 语言允许在程序块(分程序)内说明变量,如果在程序块内说明的变量和程序块外的变量同名,在块外说明的变量在块内是不可见的。可将此题和【2.11】进行比较,加深理解。【2.26】参考答案:C【2.27】参考答案:B【2.28】参考答案:D A【2.29】参考答案:D【2.30】参考答案:B注释:输出结果为字符串长度。【2.31】参考答案:D注释:字符串拷贝函数 strcpy()要求的两个参数都是字符串首地址。本题中第二个参数是字符串常量,接受这个字符串的第一个参量不是直接给出字符数组名,而是进行了地址运算后的结果。由于 str 字符串的长度是 13,除 2 取整后是 6,第一个参数给出的地址是字符数组 str 的首地址加 6,也就是原来字符串中第二个空格的位置,把es she从该处放入,字符串 str 变为How does she。【2.32】参考答案:C注释:main 函数调用 func 函数时,第一个实参使用的是逗号表达式的值,也就是 x+y 的结果。由于对变量 x、y、z 进行的是后缀运算,所以函数 func 的参数值是 13 和 8。【2.33】参考答案:C【2.34】参考答案:C A C【2.35】参考答案:C【2.36】参考答案:B注释:函数 fun 进行了递归调用,实际进行的运算是 54321310。主函数内说明的局部变量 w 屏蔽了外部变量 w,所以在主函数中外部变量 w 是不可见的,在调用 printf函数时表达式fun(5)*w中 w 的值是 10。【2.37】参考答案:D注释:main 函数三次调用了函数 funa,在 funa 函数中的静态变量 c 仅在第一次调用时进行了初始化,再次调用时不再对静态变量赋初值。【2.38】参考答案:B注释:main 函数和 num 函数中都说明了变量 a 和 b,由于它们是内部变量,所以它们分别在说明它们的函数内有效。外部变量 x 和 y 在函数 num 之后被说明,而在 num 函数中又要引用它们,所以在 num 函数中用关键字extern说明变量 x 和 y 是一个外部变量,也就是通知计算机这两个变量在 fun 函数以外被说明,此处不是定义两个 int 型变量。【2.39】参考答案:D注释:函数 f 中的变量 c 是静态变量,仅在第一次调用函数 f 时它被初始化为 3,第二次调用函数 f 时 c 的值是 4,第三次调用函数 f 时 c 的值是 5。【2.40】参考答案:D【2.41】参考答案:D注释:程序中有三个x分别在三个不同的函数中,这三个x都是自动变量,所以三个x分别局部于三不同的函数,在三个函数中对x的操作互不影响。【2.42】参考答案:A【2.43】参考答案:A注释:*(+p)和*+p 都是指针变量值前加 1,第一次指向 a1,第二次指向 a2;a+3 是a3的地址。【2.44】参考答案:C注释:句没有语法错误,但是 a+6 指向数组之外,因为 a 是 a0的地址,a+1 是 a1的地址,a+2 是 a2的地址,显然数组 a 没有 a6分量。句错误,因为 a1是地址常量,它是 a10的地址,对于地址常量是不可以进行赋值运算的。【2.45】参考答案:D A注释:如果 FMT 定义为%xn,则输出的 16 进制数据用小写字母表示。【2.46】参考答案:A注释:语句p=&a0表示将数组 a 中元素 a0的地址赋给指针变量 p,则 p 就是指向数组首元素 a0的指针变量,&a0是取数组首元素的地址。对于指向数组首址的指针,p+i(或 a+i)是数组元素 ai的地址,*(p+i)(或*(a+i)就是 ai的值。【2.47】参考答案:B【2.48】参考答案:D【2.49】参考答案:D【2.50】参考答案:A注释:变量 g 是指向函数的指针,(*g)(a,b)是调用指针 g 所指向的函数。【2.51】参考答案:C注释:p 是指针,pp 是指向指针的指针。【2.52】参考答案:A注释:对于指向数组的指针变量可以做下标运算,pi和 alphai都是指向字符串的首地址,*pi取出字符串的第一个字符。【2.53】参考答案:D A D D B注释:pp 是一个二维指针数组,pp+1 指向数组的第二维,*(pp+1)是第二维的起始地址,*(pp+1)是第二维第一个元素的地址,*(pp+1)是第二维第一个元素的内容,所以,的参考答案应选 D。*(pp+1)+1 是第二维第二个元素的地址,*(*(pp+1)+1)是第二维第二个元素,(*(*(pp+1)+1)4则是第二维第二个元素所指字符串下标为 4 的元素,即是字符 w,故应当选 D。【2.54】参考答案:B C【2.55】参考答案:D【2.56】参考答案:C注释:联合体成员的取值是最后一次给成员赋的值。【2.57】参考答案:B注释:整型数组i和字符数组c共用存储空间,给i赋值也等于给c赋值,所以s-c0=0 x39,所以输出 9。【2.58】参考答案:A注释:基本概念。EOF 是由 C 语言在头文件 stdio.h 中定义的,用户可以直接使用。