2012C语言程序设计试题
1.一个C程序的执行是从( )
A.本程序的main函数开始,到main函数结束
B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C.本程序的main函数开始,到本程序文件的最后一个函数结束 D.本程序文件的第一个函数开始,到本程序main函数结束 2.以下叙述正确的是:( )
A.在C程序中,main函数必须位于程序的最前面 B.程序的每行中只能写一条语句 C.C语言本身没有输入输出语句
D.在对一个C程序进行编译的过程中,可发现注释中的拼写错误 3.以下叙述不正确的是:( )
A.一个C源程序可由一个或多个函数组成 B.一个C源程序必须包含一个main函数 C.C程序的基本组成单位是函数
D.在C程序中,注释说明只能位于一条语句的后面 4.C语言规定:在一个源程序中,main的位置( ) A.必须在最开始
B.必须在系统调用的库函数后面 C.可以任意 D.必须在最后
5.一个C语言程序是由( )
A.一个主程序和若干子程序组成 B.函数组成
C.若干过程组成
D.若干子程序组成
6.C源程序的基本单位是_______
7.一个C源程序中至少包括一个_______
8.在一个C源程序中,注释部分两侧的分界符分别为_____和____
9.在C语言中,输入操作是由库函数______ 完成的,输出操作是由库函数_____ 完成的
运算符与表达式
1.若x,i,j和k都是int型变量,则计算下面表达式后,x的值为( ) x=(i=4,j=16,k=32)
A.4 B.16 C.32 D.52 2.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是( )
A.7 B.8 C.6 D.2 3.下面四个选项中,均是不合法的用户标识符的选项的是:( )
A.A p_o do B.float lao _A
C.b-a goto int D._123 temp INT
4.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( )
A.必须为字母
B.必须为下划线
C.必须为字母或下划线
D.可以是字母、数字和下划线中的任意一种
5.下面四个选项中均是不合法整型常量的选项是( )
A.160 -0xffff 011 B.-0xcdf 01a 0xe C.-01 986,012 0668 D.-0x48a 2e5 0x 6.下面四个选项中均是不合法整型常量的选项是( )
A.-0f1 -0xffff 0011 B.-0xcdf 017 12,456 C.-018 999 5e2 D.-0x48eg -068 03f 7.下面四个选项中,均是不合法的浮点数的选项是( )
A.160 0.12 e3 B.123 2e4.2 e5 C.-18 123e4 0.0 D.-e3 234 1e3 8.下面四个选项中,均是合法的浮点数的选项是( )
A.+1e+1 5e-9.4 03e2 B.-60 12e-4 -8e5 C.123e 1.2e-4 -8e5 D.-e3 8e-4 5.e-0 9.下面四个选项中,均是合法转义字符的选项是( )
A.'\\\ ?\\\\' ?\\n' B.?\\' ?\\017' ?\\\C.'\\018' ?\\f' ?xab' D.'\\\\0' ?\\101' ?x1f' 10.下面四个选项中,均是不合法的转义字符的选项是( )
A.'\\\ ?\\\\' ?\\xf' B.'\\1011' ?\\' ?\\a' C.'\\011' ?f' ?\\}' D.'\\abc' ?\\101' ?x1f' 11.下面正确的字符常量是( )
A.?c\ B.'\\\\\ C.'w' D.\
12.下面四个选项中,均是正确的数值常量或字符常量的选项的是( )
A.0.0 0f 8.9e ?&' B.\ 3.9E-2.5 1e1 ?\\\C.'3' 011 0xFF00 0a D.+001 0xabcd 2e2 50 13.下面不正确的字符串常量是( )
A.'abc' B.\ C.\ D.\ “ 14.若有代数式3ae/bc,则不正确的C语言表达式是( )
A.a/b/c*e*3 B.3*a*e/b/c C.3*a*e/b*c D.a*e/c/b*3
15.已知各变量的类型说明如下:int k,a,b; unsigned long w=5; double x=1.42;则以下不符合C语言语法的表达式是( )
A.x%(-3) B.w+=-2
C.k=(a=2,b=3,a+b) D.a+=a-=(b=4)*(a=3)
16.已知各变量的类型说明如下:int i=8,k,a,b; unsigned long w=5;double x=1.42,y=5.2;则以下符合C语言语法的表达式是( )
A.a+=a-=(b=4)*(a=3) B.a=a*3=2 C.x%(-3) D.y=float(i) 17.以下不正确的叙述是( )
A.在C程序中,逗号运算符的优先级最低
B.在C程序中,APH和aph是两个不同的变量
C.若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变 D.当从键盘输入数据时,对整型变量只能输入整型数值,对实型变量只能输入实型数值
18.以下正确的叙述是( )
A.在C程序中,每行中只能写一条语句
B.若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数 C.在C语程序中,无论是整数还是实数,都能被准确无误地表示 D.在C程序中,%是只能用于整数运算的运算符 19.以下符合C语言语法的赋值表达式是( )
A.d=9+e+f=d+9 B.d=9+e,f=d+9
C.d=9+e,e++,d+9 D.d=9+e++=d+7
20.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3';后,c2中的值为( )
A.D B.68 C.不确定的值 D.C 21.在C语言中,要求运算数必须是整型的运算符是( )
A./ B.++ C.!= D.%
22.若以下变量均是整型,且num=sum=7;则计算表达式SUM=num++,SUM++,++num后sum值为( )
A.7 B.8 C.9 D.10 23.若有说明语句:char c='\\72';则变量c( )
A.包含1个字符 B.包含2个字符
C.包含3个字符 D.说明不合法,c的值不确定 24.若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是( ) A.2.500000 B.2.750000 C.3.500000 D.0.000000
25.设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为( ) A.int B.float C.double D.不确定 26.在C语言中,char型数据在内存中存储形式是( )
A.补码 B.反码 C.原码 D.ASCII码 27.表达式18/4*sqrt(4.0)/8值的数据类型为( )
A.float B char C.double D.不确定 28.设有说明:char w;int x;float y;double z;则表达式w*x+z-y值的数据类型为( ) A.float B char C.int D.double
29.若有以下定义,则能使值为3的表达式为3的表达式是( ) int k=7,x=12; A.x%=(k%=5) B.x%=(k-k%5) C.x%=k-k%5 D.(x%=k)-(k%=5) 30.设以下变量均为int类型,则值不等于7的表达式是( )
A.(x=y=6,x+y,x+1) B.(x=y=6,x+y,y+1) C.(x=6,x+1,y=6,x+y) D.(y=6,y+1,x=y,x+1)
31.在c语言中(以16位pc机为例),一个char型数据在内存中所占的字节数为( ),一个int型数据在内存中所占的字节数为( ), 一个float型数据在内存中所占的字节数为( ), 一个double型数据在内存中所占的字节数为( ).
32.有以下定义,则计算表达式y+=y-=m*=y后的y值是( )。int m=5,y=2; 33.若s是int型变量,s=6;则下面表达式的值为( )s%2+(s+1)%2
34.若a是int 型变量,则下面表达式的值为( )(a=4*5,a*2),a+6 35.若x和a均是int型变量,则计算式(1)后的x的值为( ),计算表达式(2)后的x的值为( )。
(1)x=(a=4,6*2) (2) x=a=4,6*2
36.若a.b和c均是int型变量,则计算表达式后,a值为( ),b值为( ),c值为( ).
a=(b=4)+(c=2)
37.若a是int型变量,且a的初值为6,则计算表达式后a的值为( )。 a+=a-=a*a 38.若a是int型变量,则计算表达式后a的值为( )。 a=25/3%3
39.若x和n均是int型变量,且x和n的初值均为5,则精神表达式后x的值为( ),难得值为( )。x+=n++ 40.若有定义:int b=7;float a=2.5,c=4.7;则下面表达式的值为( )。 a+(int)(b/3*(int)(a+c)/2)%4 41.若定义:int a=2,b=3;float x=3.5,y=2.5;则下面表达式的值( )。(float)(a+b)/2+(int)x%(int)y 42.若有定义:char c='\\010';则变量c中包含的字符个数为( ).
43.若有定义:int x=3,y=2;float a=2.5,b=3.5;则下面表达式的值( ) (x+y)%2+(int)a/(int)b 44.若x和n均为int型变量,且x的初值为12,n的初值为5,则计算表达式后x的值为( ) x%=(n%=2)
45.假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为( ) 46.C语言中的标识符只能由三种字符组成,它们是( ),( )和( ).
47.已知字母a的ASII码为十进制数97,且设ch为字符型变量,则表达式ch='a'+'8'+-'3'的值为( ).
48.把以下多项式写成只含七次乘法运算,其余皆为加.减运算的表达式为 ( ) 5x^7+3x^6-4x^5+2x^x^3-6x^2+x+10
49.若x和y都是double型变量,且x的初值为3.0,y的初值为2.0,则表达式pow(y,fabs(x))的值为( )
50.若有定义:int e=1,f=4,g=2;float m=10.5,n=4.0,k;则计算赋值表达式k=(e+f)/g+sqrt((double)n)*1.2/g+m后k的值是( )
51.表达式8/4*(int)2.5/(int)(1.25*(3.7+2.3))值的数据类型为( ) 52.表达式pow(2.8,sqrt(double)(x)))值的数据类型为( )
53.假设m是一个三位数,从左到右用a、b、c表示各位的数字,则从左到右各个数字是bac的三位数的表达式是( )
顺序结构程序设计
注:□代表空格;
1.putchar函数可以向终端输出一个( )
A.整型变量表达式值 B.实型变量值
C.字符串 D.字符或字符变量值 2.以下程序的输出结果是( ) main( ) {
printf(“\\n*s1=s*',“chinabeijing\ printf(“\\n*s2=%-5s*\
}
A.*s1=chinabeijing□□□* *s2=**chi* B.*s1=chinabeijing□□□* *s2=chi□□* C.*s1=*□□chinabeijing* *s2=□□chi*
D.*s1=□□□chinabeijing* *s2=chi□□*
3.printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列.如果字符串长度以大于5,则输出按方式( );如果字符串长度小于5,则输出按方式( )
A.从左起输出该字串,右补空格
B.按原字符长从左向右全部输出 C.右对齐输出该字串,左补空格 D.输出错误信息
4.x和y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是( ) A.scanf(“%d%s,\,&z); B.scanf(“-*%d%f\
C.scanf(“%x%d*%o\
D.scanf(“%x%o%6.2f\,&z);
5.已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是( );
int a1,a2;char c1;c2;
scanf(“%d%c%d%c\
A.10A□20B
C.10A20B
6.已有定义int x;float y;且执行scanf(“=%f\语句时,从第一列开始输入数据12345□678<回车>,则x的值为( 1 ),y的值为( 2 )
(1)A.12345 B.123 C.45 D.345
(2)A.无定值 B.45.000000 C.678.000000 D.123.000000 7.已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是( )(注:□表示空格,
int a1,a2; char c1,c2; scanf(“%d%d\,&a2); scanf(“%c%c\
A.1020AB
8.已有程序段和输入数据的形式,程序中输入语句的正确形式应当为( ) main( ) {
int a;float f;
printf(“\\nInput number:\
}
输入语句 printf(“\\nf=%f,a=%d\\n\输入的数据为4.5
A.scanf(“%d,%f\ B.scanf(“%f,%d\ C.scanf(“%d%f,&a,&f); D.scanf(“%f%d\ 9.阅读以下程序,当输入数据形式为:25,13,10
int x,y,z;
scanf(“%d%d%d\ printf(“x+y+z=%d\\n\
}
A.x+y+z=48 B.x+y+z=35 C.x+z=35 D.不确定值
10.根据题目中已给出的数据的输入和输出形式,程序中输入输出的语句的正确内容是( ) main( ) {
int x; float y;
printf(“enter x,y:\
输入语句 输出语句
}
输入为:2□3.4 输出为:x+y=5.40
A.scanf(“%d,%f\\\nx+y=4.21\B.scanf(“%d%f\\\nx+y=4.2f\C.scanf(“%d%f\\\nx+y=6.1f\Dscanf(“%d%3.1f\\\nx+y=%4.2f\11.以下说法正确的是( )
A.输入项可以为一个实型常量,如scanf(“%f,3.5);
B.只有格式控制,没有输入项,也能进行正确输入,如scanf(“a=%d,b=%d);
C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(“%4.2f\D.当输入数据时,必须指明变量的地址,如scanf(“%f\
12.有输入语句:scanf(“a=%d,b=%d,c=%d\为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应是( )
A.132
C.a=1□b=3□c=2
A.ch='123'; B.ch='\\xff'; C.ch='\\08'; D.ch='\\' 14 .已知ch是字符变量,下面不正确的赋值语句是( )
A.ch='a+b'; B.ch='\\0'; C.ch='7'+'9' D.ch=5+9; 15.若有以下定义,且各变量均有初值,则正确的赋值语句是( ) int a,b; float x; A.a=1,b=2; B.b++; C.a=b=5 D.b=int(x); 16.设x,y均为float型变量,则以下不合法的赋值语句是( )
S.++a; B.y=(x%2)/10; C.x*=y+8; D.x=y=0; 17.设x,y和z均为int型变量,则执行语句x=(y=(z=10)+5)-5;后x,y,z的值是:( ) A.x=10 y=15 z=10 B.x=10 y=10 z=10 C.x=10 y=15 z=15 D.x=10 y=5 z=10 18.以下程序的输出结果为( ) main( ) {
short a;
a=-4;
printf(\
}
19.以下程序的输出结果为( )
main( )
{ printf(\ 3.14, 3.15); } 20. 以下程序的输出结果为( )
main( ) {
char c='a';
printf(\
}
21.已有定义int d=-2;执行以下语句后的输出结果是( )
printf(\
22.以有定义int d=-2;执行以下语句后的输出结果是( ) printf(\
23.以有定义float d1=3.5,d2=-3.5;执行以下语句后的输出结果是( ) printf(\printf(\24. 以下程序输出结果为( ) main( ) {
int x=1,y=2;
printf(\,x+y); printf(\}
25. 以下程序的输出结果为( ) main( ) {
int x=10; float pi=3.1416;
printf(\ printf(\printf(\ printf(\printf(\ printf(\printf(\ printf(\
}
26.假设变量a和b均为整型,以下语句可以不借助任何变量把a,b中的值进行交换,请填空. a+=( ) b=a-( ); a-=( );
27.设变量a,b,c均为整型,以下语句借助中间变量t把a,b,c中的值进行交换,即:把b中的值给a,把c中的值给b,把a中的值给c.例如:交换前a=10,b=20,c=30,交换后a=20,b=30,c=10,请填空.
( ); a=b; b=c; ( );
28.设x,y,z均为int型变量,m为long型变量,则在16位机上执行下面赋值语句后,y=( ),z=( ),m=( ).
y=(x=32767,x-1); z=m=0xffff; 29.如有int x;则执行下面语句后x值是( ) x=7; x+=x-=x+x;
30.若有int a,b;则以下语句的功能是( )
a+=b; b=a-b; a-=b;
31.在scanf函数调用语句中,可以在格式字符和%之间加一星号,它的作用是( ); 当输入以下数据: 10_ _20_ _30_ _40
32.若有以下定义和语句,为使变量c1的到字符'A',变量c2得到字符'B'正确的格式输入形式是( )
char c1,c2; scanf(\
33.执行以下程序时,若从第一列开始输入数据,为使变量a=3,b=7,x=8.5,y=71.82, c1='A', c2='a',正确的数据输入形式是( )
mian( ) {
int a,b; float x,y; char c1,c2; scanf(a=%d b=%d\scanf(\
scanf(\ c2=%c\
printf(\
}
34.已有定义int i,j;float x;为了使i=10,j=12,x=410.34,其对应的scanf函数调用语句的输入形式是( )
scanf(\
选择结构程序设计
1.逻辑运算符两侧运算对象的数据类型( )
A.只能是0和1 B.只能是0或非0正数 C.只能是整型或字符型数据 D.可以是任何类型的数据 2.下列运算符中优先级最高的是( )
A.< B.+ C.&& D.!=
3.能正确表示“当x的取值在[1,10]和[200,210]范围内为真,否则为假\的表达式是( ) A.(x>=1)&&(x<=10)&&(x>=200)&&(x<=210) B.(x>=1)||(x<=10)||(x>=200)||(x<=210)
C.(x>=1)&&(x<=10)||(x>=200)&&(x<=210) D.(x>=1)||(x<=10)&&(x>=200)||(x<=210)
4.表示图中坐标轴上阴影部分的正确表达式是( )
A.(x<=a)&&(x>=b)&&(x<=c) B.(x<=a)||(b<=x<=c) C.(x<=a)||(x>=b)&&(x<=c) D.(x<=a)&&(b<=x<=c 5.判断char型量ch是否为大写字母的正确表达式是( )
A.?A?<=ch<=?Z? B.(ch>=?A?)&(ch<=?Z?) C.(ch>=?A?)&&(ch<=?Z?) D.(?A?<=ch)AND(?Z?>=ch)
6.设x,y,z都是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是( ) A.?x?&&?y? B.x<=y C.x||y+z&&!y D.!(x
A.0 B.语法错误 C.1 D.“假” 8.若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是( )
A.A%2==1 B.!(A%2==0) C.!(A%2) D.A%2
9.设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后的值为( ) A.1 B.2 C.3 D.4 10.下列运算符中优先级最低的是( )优先级最高的是( )
A.? B.&& C.+ D.!= 11.以下程序的运行结果是( ) #include
int a,b,d=241;
a=d/100%9; b=(-1)&&(-1); printf(“%d,%d”,a,b); }
A.6,1 B.2,1 C.6,0 D.2,0 12.执行以下语句后a的值为( ) int a,b,c;
a=b=c=1; ++a||++b&&++c;
A.错误 B.0 C.1 D.2 13.执行以下语句后a的值为( ① ),b的值( ② ) int a=5,b=6,w=1,x=2,y=3,z=4;
(a=w>x)&&(b=y ①A.5 B.0 C.2 ②A.6 B.0 C.1 14.以下不正确的if语句形式是( ) A.if(x>y&&x!=y); B.if(x==y)x+=y; C.if(x!=y)scanf(“%d“,&x) else scanf(“%d”,&y); D.if(x 15.已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是( ) if(x>y) z=x;x=y;y=z; A.x=10,y=20,z=30 B.x=20,y=30,z=30 C.x=20,y=30,z=10 D.x=20,y=30,z=20 16.以下语句语法正确的是:( ) A.if(x>0) printf(“%f”,x) else printf(“%f”,-x); B.if(x>0) {x=x+y;printf(“%f”,x);} else printf(“%f”,-x) C.if(x>0) {x=xy; printf(“%f”,x);}; else printf(“%f”,-x); D.if(x>0) {x=x+y;printf(“%f”,x)} else printf(“%f”,-x); 17.请阅读以下程序,该程序( ) main() { int a=5,b=0,c=0; if(a+b+c) printf(“***\\n”); else printf(“$$$\\n”); } A.有语法错误不能通过编译 B.可以通过编译但不能通过连接 C.输出*** D.输出$$$ D.1 D.4 18.以下程序的运行结果是( ) main() { int m=5; if(m++>5) printf(“%d\\n”,m);else printf(“%d\\n”,m--); } A.4 B.5 C.6 D7 19.当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是( ) if(a else x=7; A.1 B.2 C.3 20.有一函数关系如下: x-1 (x<0) y={ x (x=0) x+1 (x>0) 则下面程序段中能正确表示上面关系的是( ) A.y=x+1; if(x>=0) if(x==0) y=x; else y=x-1; B.y=x-1 if(x!=0) if(x>0) y=x+1; else y=x; C.if(x<=0) if(x<0) y=x-1; else y=x; else y=x+1; D.y=x; if(x<=0) if(x<0) y=x-1; else y=x+1; 21.以下程序的输出结果是( ) main() { int a=100,x=10,y=20,ok1=5,ok2=0; if(x if(y!=10) if(!ok1) a=1; else if(ok2) a=10; a=-1; printf(“%d\\n”,a); } A.1 B.0 C.-1 22.以下程序的输出结果是( ) main() { int x=2,y=-1,z=2; if(x if(y<0) z=0; else z+=1; printf(“%d\\n”,z); D.6 D.值不确定 } A.3 B.2 C.1 D.0 23.为了避免在嵌套的条件语句if--else中产生二义性,C语言规定:else子句总是与( )配对。 A.缩进排位置相同的if B.其之前最近的if C.其之后最近的if D.同一行上的if 24.以下不正确的语句为( ) A.if(x>y); B.if(x=y)&&(x!=0) x+=y; C.if(x!=y) scanf(“%d”,&x); else scanf(“%d”,&y); D.if(x 25.运行下面程序后输入为2.0 { float a,b; scanf“%f”,&a); if(a<0.0) b=0.0; else if((a<0.5)&&(a!=2.0)) b=1.0/(a+2.0); else if(a<10.0) b=1.0/x; else b=10.0; printf(“%f\\n”,y); } A.0.000000 B.0.500000 C.1.000000 26.若运行时给变量x输入12,则以下程序的运行结果是( main() { int x,y; scanf(“%d\\n”,y); } A.0 B.22 C.12 27.以下程序的运行结果是( ) main() {int k=4,a=3,b=2,c=1; printf(“\\n%d\\n”,k A.4 B.3 C.2 28.执行以下程序段后,变量a,b,c的值分别是( ) int x=10,y=9; int a,b,c; a=(-x= =y++)?- -x:++y; x=x++;c=y; A.a=9,b=9,c=9 B.a=8,b=8,c=10 C.a=9,b=10,c=9 D.a=1,b=11,c=10 29.int w,x,y,z,m;则执行以下语句后m的值为( ) w=1;x=2;y=3;z=4; m=(w A.1 B.2 C.3 D.0.250000 ) D.10 D.1 D.4 30.若w=1,x=2,y=3,z=4,则表达式w A.4 B.3 C.2 D.1 31.执行以下程序段后的输出结果是:( ) int w=3,z=7,x=10; printf(“%d ”,x>10?x+100:x-10); printf(“%d ”,w++||z++); printf(“%d ”,!w>z); printf(“%d ”,w&&z); A.0 1 1 1 B.1 1 1 1 C.0 1 0 1 D.0 1 0 0 32.当a=3,b=2,c=1时,表达式f=a>b>c的值是________ 33.当a=5,b=4,c=2时,表达式a>b!=c的值是________ 34.以下程序的运行结果是___________ main() {int x=1,y,z; x*=3+2; printf(“%d\\t”,x); x*=y=z=5; printf(“%d\\t”,x); x=y==z; printf(“%d\\n”,x);} 35.在C语言中,表示逻辑“真”用__________ 36.设y为int型变量,请写出描述“y是奇数”的表达式__________ 37.C语言提供的三种逻辑运算符是____ _____ _____ 38.设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式____________ 39.设int x,y,z;请描述“x,y和z中有两个为负数”的表达式____________ 40.已知A=7.5,B=2,c=3.6,表达式A>B&&C>A||AB的值是________ 41.若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是____________ 42.若a =2,b=4,则表达式(x=a)||(y=b)&&0的值是___________ 43.若a=1,b=4,c=3,则表达式!(a 48.当m=2,n=1,a=1,b=2,c=3时,执行完d=(m=a!=b)&&(n=b>c)后;n的值为______,m的值为________ 49.以下程序运行结果是______ main() { int a1,a2,b1,b2; int i=5,j=7,k=0; a1=!k; a2=i!=j; printf(“a1=%d\\t a2=%d\\n”,a1,a2); b1=k&&j; b2=k||j; printf(“b1==%d\\t b2=%d\\n”,b1,b2); } 51.以下程序的运行结果是:_________ main() { int x,y,z x=1;y=1;z=0; x=x||y&&z; printf(“%d,%d”,x,x&&!y||z); } 52.有int x,y,z;且x=3,y=-4,z=5,则表达式(x&&y)==(x||z)的值是______ 循环控制 1.设有程序段 int k=10; while (k=0) k=k-1; 则下面描述中正确的是 ( ) A while循环执行10次 B 循环是无限循环 C 循环体语句一次也不执行 D 循环体语句执行一次 2.设有以下程序段 int x=0,s=0; while(!x!=0)s+=++x;printf(\则( ) A 运行程序段后输出0 B 运行程序段后输出1 C 程序段中的控制表达式是非法的 D 程序段执行无限次 3、语句while(!E);中的表达式!E特等价于( ) A、E==0 B、E!=1 C、E!=0 D、E==1 4、下面程序段的执行结果是( ) a=1;b=2;c=2; while(a printf(\ A、1,2,0 B、2,1,0 C 、1,2,1 D、2,1,1 5、下面程序段的运行结果是( ) x=y=0; while(x<15) y++,,x+=++y; printf(\ A、20,7 B、6,12 C、20,8 D 8,20 6、下面程序段的运行结果是( ) int n=0; while (n++<=2); printf(\ A,2 B、3 C、4 D 有语法错误 8、下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等的数时结束循环,请选择填空。 main() { int a,b,t; scanf(“%d,%d”,&a,&b); while( ) { if(a>b) { t=a; a=b; b=t; } printf(“%d,%d\\n”,a,b); scanf(“%d,%d”,&a,&b); } } A、!a=b B、a!=b C、a==b D、a=b 9、下面程序的功能是从键盘输入的一组字符中统计出大写字母个数m和小写字母个数n,并输出m,n中较大者,请选择填空。 #include main( ) { int m=0,n=0; char c; while((_①_)!=?\\n?) { if(c>=?A?&&c<=?Z?) m++; if(c>?a?&&c<=?z?) n++; } printf(“%d\\n”,m ①A. c==getchar( ) B.getchar( ) C.c=getchar( ) D.scanf(“%c”,c) ②A. n:m B.m:n C.m:m D.n:n 11.下面程序的功能是在输入的一批正整数中求出最大者,输入0时结束,请选择填空 main( ) { int a,max=0; scanf(“%d”,&a); while(____) { if(max } A.a==0 B.a C!a==1 D.!a 12、下面程序的运行结果是( ) main( ) { int num=0; while(num<=2) num++; printf(“%d”,num); } A.0 B.1 C.2 D.3 14.C语言中while和do-while循环的主要区别是( ) A.do-while的循环体至少无条件执行一次 B.while的循环控制条件比do–while的循环控制条件严格 C.do-while允许从外部转到循环体内 D.do-while的循环体不能是复合语句 15 .以下程序段() x=-1; do{ x=x*x; }while(!x); A.是死循环 B.循环执行二次 C.循环执行一次 D.有语法错误 16、以下描述中正确的是( ) A.由于do-while循环中循环语句中只能是一条可执行语句,所以循环体内不能使用复合语句。 B.do-while循环由do开始,且while结束,在while(表达式)后面不能写分号。 C.在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作。 D.do-while循环中,根据情况可以省略while 17.若有以下后句 int x=3; do { print(\ } while(-x);则运行程序段() A.输出的是1 B.输出的是1和-2 C.输出的是3和0 D.死循环 18.下面程序是从键盘输入学号,然后输出学号中百位数字是3的学号,输入0时结束循环,填空。 main() { long int num; scanf(\ do{ if(__①_) printf(\ scanf(\ }while(__②__); } ①A.num0/10=3. B.num/100=3 C.num/10=3 D.num/10=3 ②A.!num B.num>0=0 C.!num=0 D.!num!=0 19.下面程序的运行结果是( ) main( ) { int y=10; do{y--;} while(--y); printf(\} A .-1 B.1 C.8 D.-8 21.下面程序的运行结果是( ) main() { int a=1,b=10, do{b-=a;a++;}while(b-,0); printf(\ } A.3.11 B.2,8 C.1,-1 D.4,9 22.下面有关for循环的正确描述是( ) A.for循环只能有于循环次数已经确定的情况 B.for 循环是先执行循环体语句,后判断表达式 C.在for循环中,不能用break语句跳出循环体 D.for循环的循环体语句中,可以包含多条语句,但必须花括号括起来 23.对for(表达式1; ; 表达式3)可理解为( ) A.for(表达式1;0;表达式3) B.for(表达式1;1;表达式3) C.for(表达式1;表达式1;表达式3) D.for(表达式1;表达式3;表达式3) 24.若i为整型变量,则以下循环执行的次数是( ) for(i=2; i=0; ) printf(“%d”, i--) A.无限次 B.0次 C.1次 D.2次 25.以下for循环的语句是( ) for (x=0,y=0 ; (y=123)&&(x<4) ; x++); A.是死循环 B.循环次数不定 C.4次 D.3次 26.以下不是死循环的语句是( ) A.for(y=0,x=1;x>++y;x=I++) I=x; B.for(; ;x++=I); C.while (1) {x++;} D.for(I=10; ;I--) sum+=I; 27.以下程序段的运行结果是( ) for (y=1; y<10; ) y=((x=3*y,x+1),x-1); printf(“x=%d,y=%d”,x,y); A. x=27,y=27 B.x=12,y=13 C.x=15,y=14 D.x=y=27 29.下列程序段不是死循环的是( ) A. int I=100; while(1) {I=I0+1; if(I>100)break; } B. for( ; ; ) C. int k=0; do{++k;}while(k>=0); D.int s=36; while(s); --s; 30.执行语句for(I=1;I++<4;);后变量I的值是( ) A.3; B.4 C.5 D.不定 31.下面程序的功能是计算1到50中是7的倍数的数值之和,请选择填空。 main() { int I,sum=0; for(I=1;I<=50;I++) if(______)sun+=I; printf(“%d”,sum); } A.(int)(i/7)=i/7 B.(int)i/7=i/7 C.i%7+0 D.i%7=0 32.下面程序的运行结果是( ) main( ) { int a; for(a=1;a<=5;a++) switch(a%5) { case 0: printf(“*”); break; case 1: printf(“#”); break; default: printf(“\\n”); case 2: printf(“&”); } } 34.下面程序的运行结果是( ) main() { int I,b,k=0; for(I=1;I<=5;I++) { b=I%2; while(b-->=0) k++; } printf(“%d,%d”,k,b); } A.3,-1 B.8-1 C.3,0 D.8,-2 35.以下正确的描述是( ) A. continue语句的作用是结束整个循环的执行 B. 只能在循环体内和switch语句体内使用break语句 C. 在循环体内使用break或continue语句 D. 从多层循环嵌套中退出时,只能使用goto语句 36.下面程序段( ) for(t=1;t<=100;t++) { scanf(“%d”,&x); if(x<0) continue; ptintf(“=”,t); } A. 当x<0时整个循环结束 B. x>=0时什麽也不输出 C. printf函数永也不执行 D. 最多允许输出100个非负整数 37.下面程序段( ) x=3; do{y=x--; if(!y) {printf(“x”); continue;} printf(“#”);} while(1<=x<=2); A.将输出## B.将输出##* C.是死循环 D.含有不合法的控制表达式 38.以下是死循环的是( ) A.for(I=1; ; ) {if(++I%2==0) continue; if(++I%3==0) break;} B.int I=32767; do{if(I<0) break;}while(++I); C.for(I=1; ; ) if(++I<10) continue; D.i=1; while(i--); 39.以下描述正确的是( ) A. goto语句只能用于退出多层循环 B. switch语句中不能出现continue语句 C. 只能用continue语句来终止本次循环 D. 在循环中break语句不能独立出现 41.下面程序的运行结果是( ) main() { int a,b; for(a=1,b=1;a<=100;a++) { if(b>=20)break; if(b%3==1) {b+=3;continue;} b=-5; } ptintf(“%d\\n”,a); } A.7 B.8 C.9 D.10 42.下面程序的运行结果是( ) main() { int I,j,x=0; for(I=0;I<2;I++) { x++; for(j=0;j<=3;j++) { if ( j%2 ) continue; x++; } ) ptintf(“x=%d\\n”,x); } A.x=4 B.x=8 C.x=6 D.x=12 43.下面程序的运行结果是( ) main() { int I; for(I=1;I<=5;I++) { if(I%2) printf(“*”); else continue; printf(“#”); } printf(“$\\n”); } A.*#*#*#$ B.#*#*#*$ C.*#*#$ D.#*#*$ 44.下面程序的运行结果是( ) main() { int I,j,a=0; for(I=0;I<2;I++) { for(j=0;j<4;j++) { if (j%2) break; a++; } a++; } printf(“%d\\n”,a); } A.4 B.5 C.6 D.7 45.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填空: int n=0,c; c=getchar( ); while( ) { if ( ) n++; c=getchar( );} 46.当运行以下程序段时,从键盘输入right? main() { int a,s,n,count; a=2;s=0;n=1;count=1; while(count<=7) {n=n*a;s=s+n;++count;} printf(“s=%d”,d); } 49.执行以下程序段以后,K值是:________________ k=1;n=263; do{k*=n; n/=10;}while(n); 50.下面程序段中循环体的执行次数是_______________ a=10; b=0; do{b+=2;a-=2+b;}while(a>0); 51.下面程序段的运行结果是:______________________ x=2; do{printf(“*”); x-;}while(!x==0); 52.下面程序段的运行结果是:_____________________ I=1; a=0; s=1; do {a=a+s*I;s=-s;I++;}while(!x<=10); printf(“a=a%d”,a); 53.当运行以下程序段时,从键盘输入1 2 3 4 5 -1 int I,x,y; I=x=y=0 do{ ++I; if(I%2!=0) {x=x+I; I++;} y=y+I++; }while(I<=7); printf(“x=%d,y=%d\\n”,x,y); 55.下面程序段的运行结果是______________________ int a,b,I; a=1; b=3; I=1; do{ printf(\ a=(b-a)*2+b; b=(a-b)*2+a; if(I++%2==0) printf(\ }while(b<100); 56.当运行以下程序,从键盘输入-1 0 { int a,b,m,n; m=n=1; scanf(“%d%d”,&a,&b); do{ if(a>0){m=2*n;b++;} else {n=m+n;a+=2;b++;} }while(a==b); printf(“m=%dn=%d”,m,n); } 58.下面程序段的运行结果是( ) for(a=1;I=-1;-1<=I<1;I++) { a++; printf(“-”,a); } printf(“-”,I); 59.若for循环体用以下形式表示:for(表达式1;表达式2;表达式3)循环体语句 则执行语句for(I=0;I<3;I++) printf(“*”);时, 表达式1执行(___)次,表达式3执行(____)次。 60.下面程序的功能是计算1-3+5-7+?-99+100的值,请填空。 main() { int I,t=1,s=0; for(I=1;I<=101;I+=2) {________; s=s+t; _________;} printf(“%d\\n”,s); } 61.下面程序的运行结果是___________ main() { int I,t,sum=0; for(t=I=1;I<=10;) { sum+=t; ++I; if(I%3==0) t=-I; else t=I; } printf(“sum=%d”,sum); } 62.下面程序的运行结果是____________ main() { int I; for(I=1;I<=5;I++) switch (I%2) { case 0: I++; printf(“#”); break; case 1: I+=2; printf(“#”) default: printf(“\\n”); } } 63.下面程序的运行结果是______________ main() { int I,j=4; for(I=j;I<=2*j;I++) switch(I%j) { case 0: case 1: printf(“*”); break; case 2: printf(“#”); } } 64.若从键盘输入65 14 { int m,n; printf(“Enter m,n:”); scanf(“%d%d”,&m,&n); while(m!=n) { while(m>n) m-=n; while(n>m) n-=m; } printf(“m=%d\\n”,m); } 65.下面程序的运行结果是____________ main() { int y,a; y=2;a=1; while(y-!=-1) { do {a*=y; a++;}while(y--); } printf(“%d,%d”,a,y); } 66.下面程序的运行结果是_____________ 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”); } } 67.下面程序的运行结果是______________ #include for(I=4;I>=4;I--) { for(j=1;j<=I;j++)putchar(?#?);. for(j=1;j<=4-I;j++)putchar(?*?); putchar(?\\n?); } } 69.下面程序段的运行结果是_____________ I=1;s=3; do{ s+=I++; if(s%7==0) continue; else ++I;} while(s<15); printf(“%d”,I); 70.下面程序的运行结果是_______________ main() { int I=1; while(I<=15) if(++I%3!=2) continue; else printf(“%d”,I) ; printf(“n\\”); } 71.下面程序的输出结果是_______________ main() { int I,j,k=19; while(I=k-1) { k-=3; if (k%5==0) { I++; continue; } else if (k<5) break; I++; } Printf(“I=%d,k=%d\\n”,I,k); } 72.下面程序的运行结果是______________ main() { int a=10 , y =0 ; do{ a+=2; y+=a; if (y>50) break; }while(a=14); printf(“a=%d y=%d”,a,y); } 数组 1. 在C语言中,引用数组元素时,其数组下标的数据类型允许的是( ) A.整型常量 B.整型表达式 C.整型常量或整型表达式 D.任何类型的表达式 2. 以下对一维整型数组a的正确说法是( ) A .int a(10); B. int n=10,a[n]; C. int n;scanf(“%d”,&n);int a[n]; D. #define SIZE 10 int a[SIZE]; 3. 若有说明: int a[10];则对a数组元素的正确引用是( ) A .a[10] B. a[3.5] C. a(5) D. a[10-10] 4. 在C语言,一维数的定义方式为: 类型说明符 数组名 ; A .[常量表达式] B.[整型表达式] C.[整型常量]或[整型表达式] D.[整型常量] 5.以下能对一维数组a进行正确初始化的语句是( ) A .int a[10]=(0,0,0,0,0); B.int a[10]={}; C.int a[ ]={0}; D.int a[10]={10*1} 6. 以下对二维数组a正确说明是( ) A. int a[3][ ]; B. float a(3,4); C. double a[1][4]; D. float a(3)(4); 7.若有说明: int a[3][4];则对a数组元素的正确引用是( ) A. a[2][4] B. a[1,3] C. a[1+1][0] D. a(2)(1) 8.若有说明:int a[3][4];则对a数组元素的非法引用是( ) A. a[0][2*1] B. a[1][3] C. a[4-2][0] D. a[0][4] 9. 以下能对二维数组a正确初始化的语句是( ) A. int a[2][ ]={{1,0,1},{5,2,3}}; B. int a[ ][3]={{1,2,3},{4,5,6}}; C. int a[2][4]={{1,2,3},{4,5},{6}}; D. int a[ ][3]={{1,0,1},{ },{1,1}}; 10.以下不能对二维数组a进行正确初始化的语句是( ) A.int a[2][3]={0}; B.int a[ ][3]={{1,2},{0}}; C. int a[2][3]={{1,2},{3,4},{5,6}}; D. int a[ ][3]={1,2,3,4,5,6}; 11. 若有说明:int a[3][4]={0};则下面正确的叙述是( ) A.只有元素a[0][0]可行到初值0 B. 此说明语句不正确 C. 数组a中各元素都可得到初值,但其值不一定为0 D. 数组a中第个元素均可得到初值0 12. 若有说明:int a[ ][4]={0,0};则下面不正确的叙述是:( ) A.数组a的每个元素都可得到初值0 B. 二维数组的第一维大小为1 C. 因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1 D. 只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0 13. 若有说明:int a[3][4]; 则数组a中各元素( ) A. 可在程序的运行阶段得到初值0 B.可在程序的编译阶段得到初值0 C.不能得到确定的初值 D.可在程序的编译或运行阶段得到初值0 14.以下各组选项中,均能正确定义二维实型数组a的选项是:( ) A. float a[3][4]; float a[ ][4]; float a[3][ ]={{1},{0}}; B. float a(3,4); float a[3][4]; float a[ ][ ]={{0};{0}}; C. float a[3][4]; static float a[ ][4]={{0},{0}}; auto float a[ ][4]={{0},{0},{0}}; D. float a[3][4]; float a[3][ ]; float a[ ][4] 15.若二数组a有m列,则计算任意元素a[I][j]在数组中位置的分式为__________ A.I*m+j B.J*m+I C.I*m+j-1 D.I*m+j+1 16.对以下说明语句的正确理解是( )int a[10]={6,7,8,9,10}; A.将5个初值依次与给a[1]至a[5] B.将5个初值依次与给a[1]至a[4] C.将5个初值依次与给a[6]至a[10] D.因为数组长度与初值的个数不同,所以此语句不正确 17.以下不正确的定义语句是:( ) A.double x[5]={2.0,4.0,6.0,8.0,10.0}; B.int y[5]{0,1,3,5,7,9}; C.char cl[ ]={?1?,?2?,?3?,?4?,?5?}; D.char c2[ ]={?\\x10?,?\\xa?,?\\x8?}; 18.若有说明:int a[ ][3]={1,2,3,4,5,6,7};则a数组第一维的大小是( ) A.2 B.3 C.4 D.无确定值 19.若二维数组a有m列,则在a[I][J]前的元素个数为( ) A.J*m+I B.I*m+j C.I*m+j-1 D.I*m+j+1 20.定义如下变量和数组:int k; int a[3][3]={1,2,3,4,5,6,7,8,9,}; 则下面语句的输出结果是( )for(k=0;k<3;k++) printf(“%d”,a[k][2-k]); A.3 5 7 B.3 6 9 C.1 5 9 D.1 4 7 21.以下正确的定义语句是( ) A.int a[1][4]={1,2,3,4,5}; B.float x[3][ ]={{1},{2},{3}} C.long b[2][3]={{1},{1,2},{1,2,3}}; D.double y[ ][3]={0}; 22.下面程序的运行结果是( ) main() { int a[6],I; for(I=1;I<6;I++) { a[I]=9*(I-2+r*(I>3))%5; printf(“-”,a[I]); } } A.-4 0 4 0 4 B.-4 0 4 0 3 C.-4 0 4 4 3 D.-4 0 4 4 0 23.下面是对s的初始化,其中不正确的是( ) A.char s[5]={“abc”}; B.char s[5]={?a?,?b?,?c?}; C. char s[5]=””; D. char s[5]=”abcdef”; 24.下面程序段的运行结果是( ) char c[5]={?a?,?b?,?\\0?,?c?,?\\0?}; printf(“%s”,c); A.’a”b’ B.ab C.ab□c D.abc 25.对两个数组a和b进行如下初始化 char a[ ]=”ABCDEF”; char a[ ]={?A?,?B?,?C?,?D?,?E?,?F?}; 则以下叙述正确的是( ) A.a和b数组完全相同 B.a与b长度相同. C.a和b中都存放字符串 D.a数组比b数组长度长 26.有两个字符数组a,b,则以下正确的输出语句是( ) A.gets(a,b); B.scanf(“%s,%s”,a,b); C.scanf(“%s%s”,&a,&b); D.gets(“a”),gets(“b”); 27.有字符数组a[80]和b[80],则正确的输出语句是( ) A.puts(a,b); B.printf(“%s,%s”,a[ ],b[ ]); C.putchar(a,b); D.puts(a),puts(b); 28.下面程序段的运行结果是( ) char a[7]=”abcdef”; char b[4]=”ABC”; strcpy(a,b); printf(“%c”,a[5]); A.□ B.\\0 C.e D.f 29.有下面的程序段,则( ) char a[3],b[ ]=”China”; a=b; printf(“%s”,a); A.运行后将输出China B. 运行后将输出Ch C. 运行后将输出Chi D.编译出错 30.下面程序段的运行结果是( ) char c[ ]=”\\t\\v\\\\\\0will\\n”; printf(“%d”,strlen(c)); A.14 B.3 C.9 D.字符串中非法字符,输出值不确定 31.判断字符串a和b是否相等,应当使用( ) A. if(a==b) B.if(a=b) C.if(strcmp(a,b)) D. .if(strcmp(a,b)) 32.判断字符串s1是否大于字符串s2,应当使用( ) A.if(s1>s2) B. .if(strcmp(s1,s2)) C. .if(strcmp(s2,s1)>0) D. .if(strcmp(s1,s2)>0) 33.下面程序段是输出两个字符串中对应相等的字符请填空 char x[ ]=”program”, char y[ ]=”Fortran”; int I=0; while(x[I]1=?\\0?&&y[I]!=?\\0?) if(x[I]==y[I]) printf(“%c”, ________); else I++; A.x[I++] B.y[++I] C.x[I] D.y[I] 34.下面描述正确的是( ) A. 两个字符串所包含的字符个数相同时才能比较字符串 B. 字符个数多的字符串比字符个数少字符串大 C. 字符串“STOP□”与“STOP”相等 D. 字符串“That”小于字符串“The” 35.下述对C语言字符数组的描述中错误的是( ) A. 字符数组可以存放字符串 B. 字符数组的字符串可以整体输入,输出 C. 右以在赋值语句中能过赋值运算符“=”对字符数整体赋值 D. 不可以用关系运算符对数组中的字符串进行比较 36.下面程序的运行结果是( ) #include { char ch[7]={“12ab56”}; int I,s=0; for(I=0;ch[I]>=?0?&&ch[I]<=?9?;I+=2) s=10*s+ch[I]-?0?; printf(“%d\\n”,s); } A. 1 B. 1256 C. 12ab56 D. 1 { char a[80]=”AB”,b[80]=”LMNP”; int I=0; strcat(a,b); while(a[I++]!=?\\0?) b[I]=a[I] puts(b); } A. LB B.ABLMNP C.AB D.LBLMNP 38.下面程序的运行结果是( ) #include { char a[ ]=”morning”,t; int I,j=0; for(I=1;I<7;I++) if(a[j] } A. mogninr B.mo C.morning D.mornin 39.若有定义:doublex[3][5];则x数组中行下标的下限为( ),列下标的上限为( )。 40.若二维数组a有m列,则计算任一元素a[I][j]在数组中的位置的公式为( ) 41.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初始值是( ),a[2][1]得到的初值是( )。 42. 若有以下输入,则下面程序的运行结果是:___________ 7□10□5□4□6□7□9□8□3□2□4□6□12□2□-1 { int b[51],x,I,j=0,n=0; scanf(“%d”,&x); while(x>-1) {b[++n]=x; scanf(“%d”,&x);} for(I=1;I<=n;I++) if(b[I]%2==0) b[++j]=b[I]; for(I=1;I<=j;I++) printf(“=”,b[I]); printf(“\\n”); } 43.下面程序以每行4个数据的形式输出a数组,填空 #define N 20 main() { int a[N],I; for{I=0;I for(I=0;I 44.下面的运行结果是 main() { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2], I, j; printf(“array a:\\n”); for(I=0;I<=1;I++) { for(j=0;j<=2;J++) {printf(“]”,a[I][j]); b[j][I]=a[I][j];} printf(“\\n”); } printf(“array b:\\n”); for(I=0;I<=2;I++) { for(j=0;j<=1;j++) printf(“]”,b[I][j]); printf(“\\n”); } } 45.下面程序可以求出矩阵a的主对角线上的元素之和。请填空。 main() { int a[3][3]={1,3,6,7,9,11,14,15,17}, sum1=0,sum2=0,I,j; for(I=0;I<3;I++) for(j=0;j<3;j++) { if (I= =j) sum1=sum1+a[I][j]; if ( ) sum2=sum2+a[I][j]; } printf(“sum1=%d,sum2=%d\\n”,sum1,sum2); } 46.下面程序的运行结果是:______________ main() { int I=1,n=3,j,k=3; int a[5]={1,4,5}; while(I<=n&&k>a[I]) I++; for(j=n-1;j>=I;j--) a[j+1]=a[j]; a[I]=k; for(I=0;I<=n;I++) printf(=”,a[I]); } 47.下面程序的运行结果是:_______________ main() { int num list[]={6,7,8,9},k,j,b,u=0,m=4,w w=m-1; while(u<=w) { j=num_list[u]; k=2; b=1; while(k else { num_list[u]=num_list[w]; num_list[w--]=j; } } } 48.以下程序的功能是________________ main() { int num[10]={10,1,-20,-203,-21,2-2,-2,11,-21}; int sum=0,I; for(j=0;j<4;j++) { if (numm[I]>0) sum=num[I]+sum; } printf(“sum=m”,sum); } 49.先面程序的运行结果是:___________ main() { int I,j,row,col,min; int a[3][4]={{1,2,3,4},{9,8,7,6},{-1,-2,0,5}}; min=a[0][0]; row=col=0; for(I=0;I<3;I++) for(j=0;j<4;j++) if (min } 50.下面程序的运行结果是:______________________ main() { int a[6][6],I,J; for(I=1;j<6;j++) for(j=1;j<6;j++) a[I][J]=(I / j) * ( j / I ); for(I=1;I<6;I++) { for(j=1;j<6;j++) printf(\ printf(\} } 51.字符串 \的长度是________________ 52.下面的程序运行结果是:__________________________ char ch[]=\ int a,s=0; for(a=0;ch[a]>='0'&&ch[a]<='9';a++) s=10*s+ch[a]-'0' printf(\ 53.下面的程序段将输出computer,填空: char c[]=\for(I=0;___________________;I++) {_______________________; Printf(\ 54.下面程序段的运行结果是:______________________ char x[ ]=\ int I=0; while(x[++I]!='\\0') if(x[I-1]=='t') printf(\55.下面程序的功能是在三个字符串中找出最小的.填空: #include #include { char s[20],st[3][20]; int I; for(I=0;I<3;I++) gets(str[I]); strcpy(s,__________); if(strcmp(str[2],s)<0) strcpy(s,str[2]); printf(\} 56.下面程序的运行结果是_____________ #include main() { int I; char a[]=\Time\ b[]=\ for(I=0;a[I])!='\\0&&b[I]!='\\0';I++) if(a[I]==b[I]) if(a[I]>='a'&&a[I]<='z') printf(\else printf(\else printf(\ } 57.下面程序的运行结果是______________ #include { char a [2][6]={\ int i,j,len[2]; for(I=0;I<2;I++) { for(j=0;j<6;j++) if(a[I][j])=='\\0') {len[I]=j; break;} printf(\} } 58.下面程序的运行结果是__________________ #include main() { int I,r; char sl(80)=\ char s2[80]=\ for(I=r=0; sl[I]!='\\0' && s2[I]!='\\0'; I++) if(sl[I]==s2[I]) I++; else {r=sl[I]; break;} printf(\; } 59.下面程序的运行结果是______________ #include { int j,c; char n[2][LEN+1]={\ for(j=LEN-1;j>=0:j--) {c=n[0][j]+n[l][j]-2*'0'; n[0][j]=c+'0';} for(j=0;j<=1;j++) puts(n[j]); } 60.下面程序的运行结果是:_________________________________ #include main() { int I=5; char c[6]=\ do {c[I]=c[I-1];} while(-I>0); puts(c); } 61.当运行以下程序时,从键盘输入 AabD { char s[80]; int I=0; gets(s); while(s[I]!='\\0') { if(s[I]<='z'&&s[I]>='a') s[I]='z'+'a'-s[I]; I++; } puts(s); } 62.下面程序的运行结果是____________ #include { char s[]=\ int k; char c; for(k=l;(c=s[k])!='\\0';k++) { switch(c) { case 'A':putchar('%');continue; case 'B':++k;break; default:putchar('*'); case 'C':putchar('&');continue; } putchar('#'); } } 函数练习题 1.以下正确的说法是( ) A.用户若需调用标准库函数,调用前必须重新定义 B.系统根本不允许用户重新定义标准库函数 C.用户可以重新定义标准库函数,若如此,该函数失去原有含义 D.对所有标准库函数,调用前不必用预编译命令将该函数的头文件包含到用户源文件中 2.函数首部的正确形式是( ) A.double fun(int x,int y) B.double fun(int x;int y) C.double fun(int x,int y); D.double fun(int x,y); 3.以下正确的函数形式是( ) A.double fun(int x,int y) {z=x+y; return z;} B.fun(int x,y) {int z; return z;} C.fun(x,y) {int x,y; double z; z=x+y; retun z;} D.double fun(int x,int y) {double z; z=x+y; return z;} 4.以下正确的说法是( )在C语言中: A.实参和与其对应的形参各占用独立的存储单元 B.实参和与其对应的形参共占用一个存储单元 C.只有当实参和与其对应的形参同名时才共占用存储单元 D.开参是虚拟的,不占用存储单元 5.若调用一个函数,且此函数中没有return语句,则正确的说法是( )该函数: A.没有返回值 B.返回若干个系统默认值 C.能返回一个用户所希望的函数值 D.返回一个确定的值 6.以下说法不正确的是( )C语言规定: A.实参可以是常量、变量或表达式 B.形参可以是常量、变量或表达式 C.实参可以为任意类型 D.形参应与其对应的实参类型一致 7.以下说法正确的是( ) A.定义函数时,形参的类型说明可以放在函数体内 B.return后边的值不能为表达式 C.如果函数值的类型与返回值类型不一致,以函数值类型为准 D.如果形参与实参的类型不一致以实参类型为准 8.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是( ) A.地址传递 B.单向值传递 C.由实参传给形参,再由形参传回给实参 D.由用户指定传递方式 9.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( ) A.float型 B.int型 C.long型 D.double型 10.C语言规定,函数返回值的类型是由( ) A.return语句中的表达式类型所决定 B.调用该函数时的主调函数类型所决定 C.调用该函数时系统临时决定 D.在定义该函数时所指定的函数类型所决定 11.下面函数调用语句含有实参的个数为( ) A. 1 B.2 C.4 D.5 12.以下错误的描述是( )函数调用可以 A. 出现在执行语句中 B.出现在一个表达式中 C. 做为一个函数的实参 D.做为一个函数的形参 13.以下正确的描述是( )在C语言程序中 A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可嵌套,但函数的调用可以嵌套 C.函数的定义和函数的调用均不可以嵌套 D.函数的定义和调用均可以嵌套 14.已有以下数组定义和f函数调用的语句,则在f函数的说明中,对形参数组array的错误定义方式为( )int a[3][4]; f(a); A.f(int array[][6]) B.f(int array[3][]) C.f(int array[][4]) D.f(int array[2][5] 15.若使用一维数组名作函数实参,则以下正确的说法是( ) A.必须在主调函数中说明此数组的大小 B.实参数组类型与形参数组类型可以不匹配 C.在被调函数中,不需要考虑形参数组的大小 D.实参数组名与形参数组名必须一致 16.以下正确的说法是( )如果在一个函数中的复合语句中定义了一个变量,则该变量 A.只在该复合语句中有效 B.在该函数中有效 C.在本程序范围内均有效 D.为非法变量 17.以下不正确的说法为( ) A.在不同函数中可以使用相同名字的变量 B.形式参数是局部变量 C.在函数内定义的变量只在函数范围内有效 D.在函数内的复合语句中定义的变量在本函数范围内有效 18.在C语言中,一个函数一般由两个部分组成,它们是_________和_________ 19.下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误的部分是_____________,改正后应是_____________ void add(float a,float b) {float c; c=a+b; return c;} 20.以下程式序的运行结果是_____________ main() { int I=2,x=5,j=7; fun(j,6); printf(“I=%d;j=%d;x=%d\\n”,I,j,x); } fun(int I,int j) { int x=7; printf(“I=%d;j=%d;x=%d\\n”,I,j,x); } 21.以下程序的运行结果是_____________ main() { increment(); increment(); increment(); } increment() { int x=0; x+=1; printf(“%d”,x); } 22.以下程序的运行结果是_____________ main() { int a=1,b=2,c; c=max(a,b);printf(“max is %d\\n”,c); } max(int x,int y) { int z; z=(x>y)?x;y; return(z); } 23.若输入一个整数10,以下程序运行结果是_____________ main() { int a,e[10],c,I=0; printf(“输入一个整数: \\n”); scanf(“%d”,&a); while(a!=0) {c=sub(a); =a/2; e[I]=c; I++;} for(;I>0;I--) printf(“%d”,e[I-1]); } sub(int a) { int c; c=a%2; return c; } 24.以下程序的运行结果是_____________ main() { int x=2,y=3,z=0; printf(“(1)x=%d y=%d z=%d\\n”,x,y,z); add(x,y,z); printf(“(3)x=%d y=%d z=%d\\n”,x,y,z); } add(int x,int y, int z) { z=x+y; x=x*x; y=y*y; printf(“(2)x=%d y=%d z=%d\\n”,x,y,z); } 25.下面程序的运行结果是_____________ main() { int I=5; printf(“%d\\n”,sub(I)); } sub(int n) { int a; if(n==1) return 1; a=n+sub(n-1); return(a); } 26.以下程序的运行结果是_____________ int I=0; main() { int I=5; reset(I/2); printf(“I=%d\\n”,I); reset(I=I/2); printf(“I=%d\\n”,I); reset(I/2);printf(“I=%dn\\”,I); workover(I); printf(“I=%d\\n”,I); } workover(int I) { I=(I%I)*((I**)/(2*I)+4); printf(“I=%d\\n”,I); return(i); } reset(int I) { I=I<=2?5:0; return(I); } 27.以下程序的运行结果是_____________ int a=5; int b=7; main() { int a=4,b=5,c; c=plus(a,b); printf(“A+B=%d\\n”,c); } plus(int x,int y) { int z; z=x+y; return(z); } 28.以下程序的运行结果是_____________ int a=3,b=5; max(a,b) { int c; c=a>b?a:b; return(c); } main() { int a=8; printf(“%d”,max(a,b)); } 29.以下程序的运行结果是_____________ int x; main() { x=5; cude(); printf(“%d\\n”,x);} cude ( ) { x=x*x*x; } 结构体与共用体 1.已知学生记录描述为 struct student { int no; char name[20]; char sex; struct { int year; int month; int day;} birth; }; struct student s; 设变量s中的”生日”应该是”1984年11月11日”,下列对”生日”的正确赋值方式是( ) A. year=1984; B.birth.year=1984; C.s.year=1984; D.s.birth.year=1984; month=11; birth.month=11; s.month=11; s.birth.month=11; day=11; birth.day=11; s.day=11; s.birth.day=11; 2.当说明一个结构体变量时系统分配给它的内存是( ) A.各成员所需内存的总和 B.结构中第一个成员所需内存量 C.成员中占内存量最大者所需的容量 D.结构中最后一个成员所需内存量 3.设有以下说明语句: struct stu { int a; float b; } stutype; 则以下叙述不正确的是( ) A. struct 是结构体类型的关键字 B. struct stu 是用户定义的结构体类型 C. stutype 是用户定义的结构体类型名 D. a 和 b 都是结构体成员名 4.C语言结构体类型变量在程序执行期间( ) A. 所有成员一直驻留在内存中 B. 只有一个成员驻留在内存中 C. 部分成员驻留在内存中 D. 没有成员驻留在内存中 5.在16位机动IBM-PC机上使用C语言,若有如下定义: struct data { int I; char ch; double f; } b; 则结构体变量b占用内存的字节数是( ) A.1 B.2 C.8 D.11 6.以下程序的运行结果是( ) main() { struct date {int year, month, day ; } today; printf(\} A.6 B.8 C.10 D.12 7.根据下面的定义,能打印出字母M的语句是( ) struct person { char name[9]; int age; }; struct person class[10] = {\A.printf(\B.printf(\C.printf(\D.printf(\8.下面程序的运行结果是( ) main() { struct cmplx { int x ; int y; } cnumn[2]={1,3,2,7}; printf(\} A.0 B.1 C.3 D.6 9.若有以下定义和语句 struct student { int age ; int num; }; struct student stu[3]={{1001,20},{1002,19},{1003,21}}; main() { struct student *p; p=stu;?? } 则以下不正确的引用是( ) A.(p++)->num B.p++ C.(*p).num D.p=&stu.age 10.以下scanf函数调用语句中对结构体变量成员的不正确引用是( ) struct pupil { char name[20]; int age; int sex ; } pup[5], *p ; A.scanf(\ B.scanf(\C..scanf(\ D.scanf(\11.若有以下说明和语句: p=pup; struct student { int age ; int num ; } std , *p; p=&std; 则以下对结构体变量std中成员age的引用方式不正确的是( ) A. std.age B.P->age C.(*p).age D.*p.age 12.若有以下程序段: struct dent { int n ; int *m ; }; int a=1,b=2,c=3; struct dent s[3]={{101,&a},{102,&b},{103,&c}}; main() {struct dent *p; p=s; ??} 则以下表达式值为2是( ) A.(P++)->m B.*(P++)->m C.(*P).m D.*(++p)->m 13.若有以下说明和语句: struct pupil { char name[20] ; int sex ; } pup , *p; p=&pup; 则以下对pup中成员age的引用方式正确的是( ) A.p.pup.sex B.p->pup.sex C.(*p).pup.age D.(*p).sex 14.设有以下语句: struct st { int n ; struct st *next; }; struct st a[3]={5.&a[1],7,&a[2],9,'\\0'}, *p; p=&a[0]; 则以下表达式的值为6的是( ) A.p++->n B.p->n++ C.(*p).n++ D.++p->n 15.若有以下说明和语句,则下面表达式中的值为1002的是( ) struct student {int age; int num;}; struct student stu[3]={{1001,20},{1002,19},{1003,21}}; struct student *p; p=stu; A.(p++)->num B.(++p)->age C.(*p).num D.(*++p).age 16.以下对结构体变量stul中成员age的非法引用的是( ) struct strudent { int age ; int num;} stul , *p; p=&stul; A.stul.age B.student.age C.p->age D.(*p).age 17.设有以下说明和定义语句,则下面表达式中值为3的是( ) struct s { int x ; struct s *y;}; struct s a[3]={1,&a[1],2,&a[2],3,&a[0]},*ptr ptr=&a[1]; A.ptr->x++ B.ptr++->x C.*ptr->x D.++ptr->x 18.当说明一个共用体变量时系统分配给它的内存是( ) A.各成员所需内存量的总和 B.结构中第一个成员所需内存量 C.成员中占内存量最大者所需内存量 D.结构中最后一个成员所需内存量 19.以下对C语言中共用体类型数据的叙述正确的是( ) A.可以对共用体变量名直接赋值 B.一个共用体变量中可以同时存放其所有成员 C.一个共用体变量中不能同时存放其所有成员 D.共用体类型定义中不能出现结构体类型的成员 20.若有以下定义语句 union data { int I; char c; float f;}a; int n; 则以下语句正确的是( ) A.a=5; B.a={2,'a',1,2}; C.printf(\ D.n=a; 21.设有以下语句,则下面不正确的叙述是( ) union data{int I; char c; float f;}un; A.un所占的内存长度等于成员f的长度 B.un的地址和它的各成员地址都是同一地址 C.un可以作为函数参数 D.不能对un赋值,但可以在定义un时对它初始化 22.以下程序的运行结果是( ) #include { union{ long a; int b; char c;} m; printf(\ } A.2 B.4 C.6 D.8 23.在16位IBM-PC机上使用C语言,若有以下定义: union data {int I; char ch; double f;}b; 则共用体变量b占用内存的字节数是( ) A.1 B.2 C.8 D.11 24.以下程序的运行结果是:( ) #include union pw { int I; char ch[2]; } a; main() { a.ch[0]=13; a.ch[1]=0; printf(\} A.13 B.14 C.208 D.209 25.下面对typedef的叙述中不正确的是:( ) A.用typedef可以定义各种类型名,但不能用来定义变量 B.用typedef可以增加新类型 C.用typedef只是将已存在的类型用一个新的标识符来代表 D.使用typedef有利用程序的通用移值 指针 1.以下程序的运行结果是( ) 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(“K,M,M\\n”,a,b,c); } A.5,2,3 B.-5,-12,-7 C.-5,-12,-17 D.5,-2,-7 2.执行以下程序后,a的值为( )b的值为( ) main() { int a,b,k=4,m=6,*p1=&k,*p2=&m; a=p1==&m; b=(-*p1)/(*p2)+7; printf(“a=%d\\n”,a); printf(“b=%d\\n”,b); } A.-1 B.1 C.0 D.4 A.5 B.6 C.7 D.10 3.下面程序应能对两个整型变量的值进行交换以下正确的说法是( ) main() { int a=10,b=20; printf(“(1)a=%d,b=%d\\n”,a,b); swap(&a,&b); printf(“(2)a=%d,b=%d\\n”a,b); } swap(int p,int q) { int t; t=p; p=q; q=t; } A.程序完全正确 B.程序有错,只要将语句swap(&a,&b);中的参数改成a,b即可 C.程序有错,只要将swap()函数中的形参p和q 以及t均定义为指针(执行语句不变)即可 D.以上说法都不对 4.有四组对指针变量进行操作的语句,以下判断正确的选项是( ) (1) int p,q; q=p; int a,*p,*q; p=q=&a; (2) int a,*p,*q; q=&a; p=*q; int a=20,*p; p=a; (3) int a=b=0,*p; p=&a; b=*p; int a=20,*p,*q=&a; p=q; (4) int a=20,*p,*q=&a; p=q; int p,*q; p=q; A.正确(1) 不正确(2)(3)(4) B.正确(1)(4) 不正确(2)(3) C.正确(3) 不正确(1)(2)(4) D.以上结论都不正确 5.以下程序中调用scanf 函数给变量a输入值的方法是错误的,其错误原因是( ) main() { int*p, a ; p=&a; printf(“input a:”); scanf(“%d”,*p); ?? } A.*p表示的是指针变量p的地址 B.*p表示的是变量a的值,而不是变量a的地址 C.*p表示的是指针变量p的值 D.*p只能用来说明p是一个指针变量 6.已有定义int k=2; int *ptr1=&k, *ptr2=&k;下面不能正确执行赋值语句的是( ) A. k=*ptr1+*ptr2; B.ptr2=k; C.ptr1=ptr2; D. k=*ptr1*(*ptr2); 7.变量的指针,其含义是指该变量的( ) A.值 B.地址 C.名 D.一个标志 8.若有语句int *point , a=4和point=&a;下面均代表地址的一组选项是( ) A. a, point, *&a B.&*a, &a, *point C. &point, *point, &a D.&a, &*point, point 9.若有说明:int *p,m=5,n;以下正确的程序段是( ) A. p=&n; scanf(“%d”,&p); B. p=&n; scanf(“%d”,*p); C. scanf(“%d”,&n); *p=n; D. p=&n; *p=m; 10.若有说明:int *p1,*p2,m=5,n;以下不正确的赋值语句的选项是( ) A. p1=&m; p2=&p1; B.p1=&m; p2=&n; *p1=*p2; C. p1=&m; p2=p1; D.p1=&m; p2=p1; 11已有变量定义和函数调用语句: int a=25; print_value(&a);下面函数的正确输出结果是( ) void print_value(int *x) {printf(“%d\\n”,++*x);} A. 23 B. 24 C. 25 D. 26 12.下面判断正确的是( ) A. char *a=”china”; 等价于 char *a; *a=”china”; B. char str[10]={“china”}; 等价于 char str[10]; C. char *s=”china”; 等价于 char str[10] D. char c[4]=”abc”, d[4]=”abc” 等价于 char c[4]=b[4]=”abc”; 13.设char*s=”\\ta\\017bc”;则指针变量s指向的字符串所占的字节数是 ( ) A.9 B.5 C.6 D.7 14.下面能正确进行字符串赋值的操作的是( ) A. char s[5]={“ABCDE”}; B. char s[5]={?A?,?B?,?C?,?D?,?E?,}; C. char*s; s=”ABCDE”; D.chars;scanf(“%s”,s); 15.下面程序段的运行结果是( ) char *s=”abcde”; s+=2; printf(“%d”,s); A.cde B.字符?c? C.字符?c?的地址 D.无确定结果 16.设有以下程序段:char s[]=”china”; char*p; p=s; 则下列叙述正确的是( ) A.s和p完全相同 B.数组s中的内容和指针变量p中的内容相等 C.s数组长度和p所指向的字符串长度相等 D.*p与s[0]相等 17.以下正确的程序段是( ) A.char str[20]; scanf(“%s”,&str); B.char *p; scanf(“%s”,p); C.char str[20];Scanf(“%s”,&str[2]); D.char str[20], *p=str; scanf(“%s”,p[2]); 18.下面程序段的运行结果是( ) char str[]=”ABC”, *p=str; printf(“%d\\n”,*(p+3)); A. 67 B. 0 C.字符?C?的地址 D.字符?C? 19.下面程序段运行结果是( ) char a[]=”language”,*p; p=a; while(*p!=?u?) { pirntf(“%c”,*p-32); p++; } A. LANGUAGE B. language C. LANG D. language 20.下面说明不正确的是( ) A.char a[10]=”china”; B.char a[10], *p=a; p=”china”; C.char *a; a=”china”; D.char a[10], *p; p=a=”china”; 21. 若有说明语句: char a[]=”It is mine”; char *p=”It is mine”; 则以下不正确的叙述是( ) A.a+1表示的是字符t的地址 B.p指向另外的字符串时,字符串的长度不受限制 C.p变量中存放的地址值可以改变 D.a中只能存放10个字符 22.若已定义char s[10];则在下面表达式中不 表示s[1]的地址是( ) A.s+1 B.s++ C.&s[0]+1 D. &s[1] 23.下面程序段的运行结果是( ) char s[6]; s=”abcd” printf(“\\”%s\\”\\n”,s); A.”abcd” B.”abcd” C。\\”abcd\\” D编译出错 24.当运行以下程序时,从键盘输入Happy! { char str [10], *p=str; gest(p); printf(“%d\\n”,stre(p)); } stre(char str[ ] ) { int num=0; while(*(str+num)!=?0?) num++; return(num); } A.7 B.6 C.5 D.10 25.下面程序的运行结果是( ) #include a=s; for(I=0,j=0;a[I]!=?\\0?;I++) if(a[I]>=?0?&&a[I]<=?9?) { s[j]=a[I]; j++; } s[j]=?\\0?; } main() { char *item=”a34bc”; delch(item); printf(\ } A.abc B.34 C.a34 D.a34bc 26.下面程序运行结果是( ) #include { char*s1=”AbDeG”; char *s2=”ABdEg”; s1+=2; s2+=2; printf(“%d\\n”,strcmp(sl,s2)); } A.正数 B.负数 C.零 D.不确定的值 27.下面和序的运行结果是( ) #include main() { char* p1,*p2,str[50]=”abc”; p1=”abc”; p2=”abc”; strcpy(str+1,strcat(p1,p2)); printf(“%s\\n”,str); } A.abcabcabc B.bcabcabc C.aabcabc D.cabcabc 28.若有以下定义int a[5],*p=a; 则对a数组元素的正确引用是 A.*&a[5] B.a+2 C.*(p+5) D.*(a+2) 29.若有定义:int a[2][3];则对a数组的第I行,第j列元素值的正确引用是( ) A.*(*a+I)+j) B.(a+I)[j] C*(a+I+j) D.*(a+I)+j 30.若有以下定义和语句int a[2][3], (*P)[3]; p=a;则对a数组的地址的正确引用为( ) A.*(p+2) B.p[2] C.p[1]+1 D.(p+1)+2 31.若有以下定义和语句int a[2][3],(*p)[3]; p=a;则对a数组元素的正确引用为( ) A.(p+1)[0] B.*(*(p+2)+1) C.*(p[1]+1) D.p[1]+2 32.若有定义:int a[5];则a数组中首元素地址可以表示为( ) A.&a B.a+1 C.a D.&a[1] 33.若有定义: int(*p)[4]; 则标识符p是( ) A.是一个指向整形变量的指针 B.是一个指针数组名 C.是一个指针,它指向一个含有四个整形元素的一维数组 D.定义不合法 34.若有以下定义和赋值语句,则以s数组的第I行第j列元素地址的合法引用为( ) int s[2][3]={0}, (*p)[3]; p=s; A.*(*p+I)+j) B.*(p[I]+j) C.(p+I)+j D.(*(p+I))[j] 35.以下与int *q[5];等价的定义语句是( ) A.int q[5]; B.int *q; C.int *(q[5]); D.int (*q)[5]; 36.设有以下程序段: char str[4][10]={“frist”,”second”,”third”,”forurth”},*strp[4]; int n; for(n=0;n<4;n++) strp[n]=str[n]; 若k为int型变量且0<=k<4,则对字符串的不正确引用是( ) A. strp B. str[k] C.strp[k] D.*strp 37.若有以下定义int a[10],*p=a; 则*(p+5)表示( ) A.元素a[5]的地址 B.元素a[5]的值 C.元素a[6]的地址 D.元素a[6]的值 38.以下选项中,对指针变量p的不正确操作是( ) A.int a[5],*p; p=&a; B.int a[5],*p; p=a; C.int a[5]; int *p=a; D.int a[5]; int*p1,*p2=a; *p1=*p2; 39.若有以下定义int a[5],*p=a; 且0<=I<5,则对a数组元素的非法引用是( ) A.a[1] B.*(a+1) C.*(p+1) D.*(&a+I) 40.若有以下定义int x[10]={0,1,2,3,4,5,6,7,8,9},*p1; 则数值不为3的表达式是( ) A.x[3] B.p1=x+3,*p1++ C.p1=x+2,*(p1++) D.p1=x+2,*++p1 41.阅读以下程序: main() { int a[10]={2,4,6,8,10,12,14,16,18,20},*p; p=a; printf(“%x\\n”,p); printf(“%x\\n”,p+9); } 若第一个printf语句输出的是ffca,则第二个printf语句输出的是( ) A.ffdd B.ffdc C.ffde D.ffcd 42.设有以下定义: char *cc[2]={“1234”,”5678”}; 则正确的叙述是( ) A.cc数组的两个元素中各自存放了字符串”1234”和”5678”的首地址 B.cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 C.cc是指针变量,它指向含有两个数组元素的字符型一维数组 D.cc数组元素的值分别是”1234”和”5678” 43.若有以下定义int x[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int(*p)[3]=x; 则能够正确表示数组元素x[1][2]的表达式是( ) A *((*p+1)[2]) B (*p+1)+2 C *(*p+5) D *(*p+1)+2) 44.下面程序的运行结果是( ) main() { int x[5]={2,4,6,8,10},*p,**pp; p=x; pp=&p; printf(“%d”,*(p+1)); printf(“=\\n”,**pp); } A 4 4 B 2 4 C 2 2 D, 4 6 45.若有说明:char *language[]={“fortran”,”basic”,”pascal”,”java”,”c”}; 则表达式language[1]>*language[3]比较的是( ) A.字符f和字符p B.字符串basic和字符串java C.字符b和字符j D.字符串fortran和字符串pascal 46.若有说明:char *language[]={“fortran”,”basic”,”pascal”,”java”,”c”}; 则language[2]的值是( ) A.一个字符 B.一个地址 C.一个字符串 D.一个不定直 47. 若有说明:char *language[]={“fortran”,”basic”,”pascal”,”java”,”c”}; 则以下不正确的是( ) A.language+2表示字符串”pascal”的首地址 B.language[2]的值是字母p C.language是一个字符行指针数组,它包含5个元素每个元素都是一个指向字符串变量的指针 D.language是一个字符型指针数组,它包含5个元素其初直分别是:fortran, basic, pascal, java, c 48.若有函数max(a,b)并且已使函数指针变量p指向max,当调用该函数时正确的调用方法是( ) A.(*p)max(a,b) B.pmax(a,b) C.(p)(a,b) D.*p(a,b) 49.已有函数max(a,b),为了让函数指针变量p指向函数max正确的赋值方法是( ) A.p=max B.*p=max C.p=max(a,b) D.*p=max(a,b) 50.已有定义int(*p)( )指针p可以( ) A.代表函数的返回值 B.指向函数的入口地址 C.表示函数的类型 D.表示函数返回值的类型 51.若有以下说明和语句: char *language[]={“fortran,”basic,”pascal,”java,c,} char **p; q=language+2 则语句printf(“%o/n”,*p); A.输出的是language[2]元素的地址 B.输出的是字符串pascal C.输出的是language[2]元素的值,它是字符串pascal的首地址 D.格式说明不正确,无法得到确定的输出 52.若要对a进行++运算,则a应具有下面说明( ) A.int a[3][2] B.char *a[]={“12”,ab} C.char (*a)[3] D.int b[10],*a=b; 文件 1.以下要作为函数fopen中第一个参数的正确格式是:( ) A.c:user\\text.txt B.c:\\rser\\text.txt C.\%user\\text.txt D.”c:\\\%user\\\\text.txt” 2.若执行fopen函数时发生错误,则函数的返回值是:( ) A.地址值 B.0 C.1 D.EOF 3.若要用fopen 函数时发生错误,则函数的返回值是:( ) A.”ab+” B.”wb+” C.”rb+” D.”ab” 4.若以”a+”方式打开一个已存在的文件,则以下叙述正确的是:( ) A.文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作。 B.文件打开时,原有文件内容被删除,位置指针移到文件开头,可作重新写和读操作。 C.文件打开时,原有文件内容被删除,只可作写操作。 D.以上各种说法皆不下确。 5.当顺利执行了文件关闭操作时,fclose函数的返回值是:( ) A.-1 B.TURE C.0 D.1 6.已知函数的高速用形式:fread(buffer,size,count,fp);其中buffer代表的是( ) A.一个整型变量,代表要读入的数据项总数 B.一个文件指针,指向要读的文件 C.一个指针,指向要读入数据的存放地址 D.一个存储区,存放要读的数据项 7.fscanf函数的正确调用形式是:( ) A.fscanf(fp,格式字符串,输也表列) B.fscanf(格式字符串,输出表列, fp) C.fscanf(格式字符串,文件指针,输出表列) D.fscanf(文件指针,格式字符串,输入表列) 8.fwrite函数的一般调用形式是:( ) A.fwrite(buffer,count,size,fp) B.fwrite(fp,size,count,buffer) C.fwrite(fp,count,size,buffer) D.fwirte(buffer,size,count,fp) 9.fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是( ) A.只写 B.追加 C.读或读写 D.答案B和C都正确 10.若调用fputc函数输出字符成功,则其返回值是:( ) A.EOF B.1 C.0 D.输出的字符 11.函数调用语句:fseek(fp,-20L,2);的含义是( ) A.将文件位置指针移到了距离文件头20个字节处 B.将文件位置指针从当前位置向后移动20个字节 C.将文件 位置指针从文件末尾处向后退20个字节 D.将文件位置指针移到了距离当前位置20个字节处 12.利用fseek函数可以实现的操作是:( ) A.改变文件的位置指针 B.文件的顺序读写 C.文件的随机读写 D.以上答案均正确 13.Rewind,函数的作用是:( ) A.使位置指针重新返回文件的开头 B.将位置指针指向文件中所要求的特定位置 C.使位置指针指向文件的末尾 D.使位置指针自动移至下一个字符位置 14.函数ftell(fp)作用是:( ) A.得到流式文件 中的当前位置 B.移动流式文件 的位置指针 C.初始化流式文件 的位置指针 D.以上答案均正确 15.在C程序中,数据可以用_______和_______两种代码形式存放。 16.函数调用 语句:fgetd(buf,n,fp);从fp指向的文件中读入_______个字符放到buf字符数组中。函数值为_______ 17.Feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为____,否则为( )