C语言选择题题库2

更新时间:2024-01-03 17:46:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 C语言程序设计概述 一.选择题

1.以下叙述中正确的是(A)

A.C语言程序中注释部分可以出现在程序中任意合适的地方 B.花括号“{”和“}”只能作为函数体的定界符

C.构成C语言程序的基本单位是函数,所有函数名都可以由用户命名 D.分号是C语言语句之间的分隔符,不是语句的一部分 2.以下叙述中错误的是(A)

A.用户所定义的标识符允许使用关键字

B.用户所定义的标识符应尽量做到“见名知意” C.用户所定义的标识符必须以字母或下划线开头

D.用户所定义的标识符中,大,小写字母代表不同标识 3.下列关于C语言用户标识符的叙述中正确的是(B) A.用户标识符中可以出现下划线和中划线(减号) B.用户标识符中不可以出现中划线,但可以出现下划线

C.用户标识符中可以出现下划线,但不可以放在用户标识符的开头

D.用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头 4.以下关于C语言标识符的描述中,正确的是(D) A.标识符可以由汉子组成 B.标识符只能以字母开头

C.关键字可以作为用户标识符 D.Area与area是不同的标识符 5.以下正确叙述是(C)

A.在C语言中,main函数必须位于文件的开头 B.C语言每行只能写一条语句 C.C语言本身没有输入,输出语句

D.对一个C语言进行编译预处理时,可检查宏定义的语法错误 6.下面说法正确的是(C)

A.C程序由符号构成 B.C程序由标识符构成 C.C程序由函数构成 D.C程序由C语句构成 7.以下叙述不正确的是(D)

A.一个C源程序可以由一个或多个函数组成 B.一个C源程序必须包含一个main函数 C.C程序的基本组成单位是函数

D.在C程序中,注释说明只能位于一条语句后面

8.C语言规定:在一个源程序中,main函数的位置可以任意 9.以下不能定义为用户标识符的是(D) A.scanf B.Void C._3com D.int

10.以下不合法的用户标识符是(C) A。j2_KEY B.Double C.4d D._8_

11.下列四组选项中,均不是C语言关键字的是(A) A.define IF type B.getc char printf C.include scanf case D.while go pow 12.以下不能定义为用户标识符的是(D) A.Main B._0 C._int D.sizeof 13.以下不合法的用户标识符是(C)

A。j2_KEY B.Double C.4d_8_ D.main 14.以下选项中合法的用户标识符是(B) A.long B._2Test C.3Dmax D.A.dat

15.以下选项中不合法的用户标识符是(A) A.abc.c B.file C.Main D.Printf

16.以下选项中不合法的用户标识符是(C) A._12Ab B.include C.3abc D.Int 17.以下叙述正确的是(B)

A.可以把define和if定义为用户标识符

B.可以把define定义为用户标识符,但不能把if定义为用户标识符 C.可以把if定义为用户标识符,但不能define定义为用户标识符 D.define和if都不能定义为用户标识符 18.一个C语言的执行是从(A)

A.本程序的main函数开始,到main函数结束

B.本程序文件中的第一个函数开始,到本程序文件的最后一个函数结束 C.本程序的main函数开始,到本程序文件的最后一个函数结束 D.本程序文件的第一个函数开始,到本程序main函数结束 19.C语言程序的基本单位是语句 20.以下叙述 中正确的是(C) A.程序应尽可能短

B.为了编程的方便,应当根据编程人员的意图使程序的流程随意转移 C.虽然注释会占用较大篇幅,但程序中还是应尽可能详细地注释 D.在VC环境下,运行的程序就是源程序 二填空题

1.C语言程序是由函数构成的,其中并且只有一个主函数。C语言程序的执行总是由主函数开始,并且在主函数中结束。

2.C语言源程序文件的扩展名是.C 经过编译后,生成的扩展名是.OBJ,经过连接后,生成的扩展名是 .EXE。

3.C语言的函数体由“{”开始,用符号“}”结束;函数体的前面是变量说明部分,其后是执行语句部分。

4.一个C源程序中至少应包括一个主函数

5.C语言程序的注释是以/*开头,以*/结束的。注释对程序运行不起任何作用。

第2章 数据类型与表达式 一选择题

1.以下选项中不属于C语言的类型的是(D) A.signed short int B.unsigned long int C.ungned int D.long short

2.以下选项中可作为C语言合法整数的是(C) A.10110B B.0386 C.0xffa D.x2a2 3.以下选项中合法的实型常数是(C) A.5E2.0 B.E-3 C.2E0 D.1.3E

4.以下选项中属于C语言的数据类型是(A) A.复数型 B.逻辑数 C.双精度型 D.集合型 5.以下选项中合法的字符常量是(B) A.“B” B.‘\\010' C.68 D.D 6.下面正确的字符常量是(C)

A.“c” B.‘\\\\' C.‘W' D.‘’ 7.下面不正确的字符串常量是(A)

A.‘abc' B.“12‘12” C.“0” D.“”

8.在C语言中,char型数据在内存中的存储形式是(D) A.补码 B.反码 C.原码 D.ASCII码

9.以下所列的C语言常量中,错误的是(B) A.0xFF B.1.2e0.5 C.2L D.‘\\72' 10.表达式3.6-5/2+1.2+5%2的值是(D) A.4.3 B.4.8 C.3.3 D.3.8

11.有以下定义语句:double a,b;int w;long c;若各变量已正确赋值,则以下选项中在的表达式是(C)

A.a=a+b=b++ B.w%((int)a+B C.(c+w)%(int)a D.w=a%b 12.有以下程序

#include main() {int m=12,n=34;printf(“%d%d,m++,n++);printf(“%d%d\\n”,n++,++m);}程序运行后的结果是(C)

A.12353514 B.12353513 C.12343514 D.12343513 13有以下程序:

#include main() {int a1=3,a2=9;printf(“%d\\n”,(a1,a2));} 以下叙述中正确的是(B)

A.格式输出3 B.程序输出9 C.格式说明符不足,编译出错 D.程序运行时产生错误信息

14..有以下程序

#include main() {int x,y,z;x=y=1;z=x++,y++,++y;printf(“%d,%d,%d\\n”,n,y,z);}程序运行后的结果是(C)

A.2,3,3 B.2,3,2 C.2,3,1 D.2,2,1

15.若有定义:int a=8,b=5,c;执行语句“c=a/b+0.4;”后,c的值为 1

16.若变量a是int类型,并执行了语句:a=‘A’+1.6;则正确的叙述是(D) A.a的值是字符C B.a的值是浮点型

C.不允许字符型和浮点型相加 D.a的值是字符‘A'的ASCII值加上1 17.下列语句中,正确的语句是(C) A.int x=y=Z==0 B.int Z=(x+y)++ C.x=+3==2

D.x%=2.5

18.以下能正确地定义整型变量a,b和c,并为它们赋初值5的语句是(C) A.int a=b=c=5 B.int a,b,c=5

C.int a=5,b=5,c=5

D.a=b=c=5

19.已知各变量的类型说明如下:

int k,a,b;unsigned long w=5;double x=1.42;则以下不符合C语言的表达式是(A) A.x%(-3) B.w+=-2

C.k=(a=2,b=3,a+B D.a+=a-=(b=4)*(a=2) 20.若有说明语句:char='\\72';则变量c(A) A.包含1个字符 B.包含2个字符

C.包含3个字符 D.说法不合法,c的值不确定

21.假定w,x,y,z,m均为int型变量,有如下程序段: w=1;x=2;y=3;Z=4;m=(w

22.若x,i,j和k都是int型变量,则计算下面表达式x=(i=4,j=16,k=32)后,x的值为(C) A.4 B.16 C.32 D.52

23.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是(B) A.7 B.8 C.6 D.2

24.设以下变量均为int类型,则值不等于7的表达式是(C) A.(x=y,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)

25.下列关于运算符优先顺序的描述中正确的是赋值运算符〈逻辑运算符〈关系运算符〈算术运算符

26.若有代数式bc/3ac,则不正确的C语言表达式是(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

27.已知字母A的ASCII码为十进制数65,且c2为字型符,则执行语句c2='A'+'6'-'3'后,c2中的值为68

28.若以下变量均是整型,且num=sum=7;则计算表达式sum=num++,sum++,++num;后sum的值为8

29.设a,b,c,d,m,n均为int型变量,且a=5,b=6,c=7,d=8,m=2,n=2,则逻辑表达式(m=a>b) &&(n=c

30.若有定义:int a=7;float x=2.5,y=4.7,则表达式x+a%3*(int)(x+y)%2/4的值是2.500000 31.设x,y,z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为32 32.表达关系X<=Y<=Z的C语言表达式为(X<=Y)&&(Y<=Z) 33.运行结果为4的表达式是C.int i=1,j=1;i+=j+=2 34.表达式(a=3*5,a*5),a+5的值是A.20

35.设有整型变量a,b,c,它们的初值是1,运行表达式++a| |++b&&++c后,a,b,c的值分别是A.2,1,1

36.若有条件表达式(exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是B.(exp!=0) 37.当c的值不为0时,在下列选项中能正确将c的值赋给变量a,b的是C.(a=c) &&(b=c) 38.若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是C.-12 二填空题

1.在C语言中,整数有三种表达方式:十进制数,八进制数,十六进制数。 2.C语言中,用关键字int定义整型变量,用关键字float定义单精度型变量,用关键字double定义双精度型变量。 3.执行以下语句后m的值为3 int w,x,y,z,m;w=3;x=4;y=5;z=6;m=(w

5.s是int型变量,且S=6,则下面表达式:s%2+( s+1)%2的值为 1 6.若a是int型变量,则计算表达式:a=25/3%3后a的值为 2

7.若x和n均是int型变量,且x和n的初值均为5,则计算表达式:x+=n++后x的值为10,n的值为6。

8.假设所有变量均为整型,则表达式:(a=2,b=5,a++,b++,a+b)的值为9。

9.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch='a'+'8'-'3'的值为'f'

10.假设m是一个三位数,从左到右用a,b,c表示各位的数字,则从左到右各个数字是bac的三位数的表达式是(m/10)*100+m/100*10+m 11.若有定义:int a=2,b=3;float x=3.5,y=2.5;则下面表达式: (float)(a+b)/2+(int)x%(int)y的值为3.500000 12.执行语句“printf(“%d”,(a=2)&&(b=-2));”后的输出结果是 1。 13.已知int y=4,x=6,=2,d;执行语句d=(++x,y++),z+2后d的值为 4。

14.定义:double x=3.5,y=3.2;则表达式(int)x*0.5的值是1.500000表达式 y+=x++的值是6.700000。

15.定义;int m=5,n=3;则表达式m=(m=1,n=2,n-m)的值1,不知道m+=m-=(m=1)*(n=2)的值是-2。若再进行下述赋值;m=1,2,n++;则m的值是1,n 的值是4。 16。

第3章C语言程序的控制结构 3.1顺序结构程序设计 一、选择题

1.下列语句中,符合语法的赋值语句是(B) A.a=10 B.x=y==20 C.i++ D.m=2,n=5 2.下列语句中,正确的语句是(C) A.int x=y=z=0 B.int z=(x+y)++ C.x=+3==2 D.x%=2.5 3以下叙述中错误的是(C) A.C语句必须是以分号结束

B.复合语句在语法上被看作一条语句

C.空语句出现在任何位置都不会影响程序运行 D.赋值表达式末尾加分号就构成赋值语句 4.下列程序的输出是(C) #includevoid main()

{int a=011,b=101;printf(“\\n%x,%o”,++a,b++)} A.12,145 B.9,145 C.a,145 D.a,5 5.以下选项中不是C语句的是(C) A.{inti;i++;printf(“%d\\n”,i);} B.; C.a=5,c=10 D.{;}

6.以下程序的功能是:给r输入数据后计算半径为r的圆面积s。程序编译时出错。 main(){intr;float;scanf(“%d”,&r);s=圆周率*r*r;printf(“s=%f\\n”,s);程序出错的原因是(D) A.注释语句书写位置错误

B.存放圆半径的变量r不应该定义为整型 C.输出语句中格式描述符非法

D.计算圆面积的赋值语句中使用了非法变量

7.若变量已正确定义,要将a和b中的数进行交换,下面不正确的语言组是(C) 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

8.设有如下程序段:int x=2002,y=2003;printf(“%d\\n”,(x,y));则以下叙述中正确的是输出值为2003 9.已知字符‘a‘的ASCII码为97,则下述程序段(C) char ch='a';int k=12;printf(“%x,%o”,ch,k);printf(“k=%%d”,k); 答案:C.输出为61,14,k=%d 10.下述程序的输出结果是(B)

#includemain(){int x=023;printf(“%d”,--x);}

A.17 B.18 C.23 D.24 11.下述程序的输出结果是(D) #includemain(){int k=11;printf(“k=%d,k=%o,k=%x\\n”,k,k,k);}答案:D.k=11,k=13,k=b 12.有如下定义:float x;unsigned;则(B)是合法的输入语句。

答案:B.scanf(“óo”,&x,&y) 13.对于下述语句,若将10赋给变量k1和k3,将20赋给变量k2和k4,则应按方式(D)输入数据int k1,k2,k3,k4;scanf(“%d%d”,&k1,&k2); scanf(“%d%d”,&k3,k4);

A.1020 B.10 20 102010 20 C.10,20 D.10 20 10,20,10,2014.有以下程序: main(){int a=666,b=888;printf(“%d\\n”,a,b);} A.错误信息 B.666 C.888 D.666,888

15.已知字符A的ASCII码值是65,以下程序(C)

#includemain(){chara=‘A';intb=20;printf(“%d,%o”,(a=a+1,a+b,b),a+‘a'-‘A',b);} A.表达式非法,输出零或不定值

B.因输出项过多,无输出或输出不定值 C.输出结果为20,142 D.输出结果为20,1541,20

16.对于条件表达式(M)?(a++):(a--),其中的表达式M等价于(C) A.M==0 B.M==1 C.M!=0 D.M!=1

17.若变量c定义为float类型,当从终端输入283.1900后按回车键,能给变量c赋以283.19的输入语句是(D) A.scanf(“%f”,c) B.scanf(“%8.4f”,&c) C.scanf(“%6.2f”,&c) D.scanf(“?”,&c)

18.设有定义:long x=-23456789L;则以下能够正确输出变量x值的语句是(B) A.printf(“x=%d\\n”,x) B.printf(“x=\\n”,x) C.printf(“x=?1\\n”,x) D.printf(“x=%LD\\n”,x) 19.输入一个华氏温度,要求输出摄氏温度。计算公式为:c=5/9(F-32),以下程序正确的是(B) 答案:main(){float c,F;scanf(“%f”,&F);c=5*(F-32)/9;printf(“摄氏温度:%f\\n”,n);} 20.以下程序的输出结果是(D)

#includemain(){int k=17;printf(“%d,%o,%x\\\\n”k,k,k);} A.17,021,0x11 B.17,17,17 C.17,0x11,021 D.17,21,11 21.下列程序执行后的输出结果是(A)

#includemain(){int x=‘f';printf(“%c\\n”,‘A’+(x-‘a'+1); A.G B.H C.I D.J

22.语句printf(“a\\bre\\'hi\\'y\\\\\\bou\\n”);的输出结果是(C) 答案:C。re'hi'you

23.有如下程序:

#includemain(){int y=3,x=3,z=1;printf(“%d%d\\n”,(++x,y++),z+2);}运行该程序的输出结果是(D)

A.3 4 B.4 2 C.4 3 D.3 3 24.若变量已正确说明为float类型,要通过语句scanf(“%f%f%f”,&a,&b,&c);给a赋予10.0,b赋予22.0,c赋予33.0,不正确的输入形式是(B)

A.10<回车>22<回车>33<回车> B.10.0,22.0,33.0<回车> C.10.0<回车>22.0 33.0<回车> D.10 22<回车> 33<回车> 25.以下程序的输出结果是(C)

#includemain(){int a=5,b=4,c=6,d;printf(“%d\\n”,d=a>b(a>ca:c):(b));} A.5 B.4 C.6 D.不确定 二.填空题

1.要用以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是a=5.0,4,c=3 int b,c;floata;scanf(“a=%f,%d,c=%d”,&a,&b,&c.; 2.以下程序输出的结果是 0

#includemain(){int a=5,b=4,c=6,d;d=(a>b>c);printf(“%d\\n”,d);}

3.假设变量a和b均为整型,以下语句可以不借助任何变量把a,b中的值进行交换。请填空。a+=b;b=a-b;a-=b

4.若x为int型变量,则执行以下语句后x的值是-14 x=7;x+=x-=x+x

5.有一输入函数scanf(“%d”,k);则不能使float类型变量k得到正确数值的原因是末指明变量k的地址格式控制符与变量类型不匹配

6.已有定义int a;float b,x;char c1,c2;为使a=3,b=6.5,x=12.6,c1=‘a'.c2=‘A',正确的sanf 函数调用语句是sanf(“%d%f%f%c%c”,&a,&b,&x,&c1,&c2);输入数据的方式为36.512.6aA 7.若有以下定义和语句,为使变量c1得到字符‘A’,变量c2得到字符‘B’,正确的格式输入形式是AB

8.设x,y和z均为int型变量,则执行语句x=(y+(z=10)+5)-5; 后,x、y和z的值是10 15 10

9.已有定义int x;float y;且执行scanf(“=%f”,&x,&y);语句时,从第一列开始输入数据12345[空格]678<回车>,则x的值为123 ,y的值为45.000000 10.以下程序的输出结果是2,1

main(){int a=1,b=2;a=a+b;b=a-b;a=a-b;printf(“%d,%d\\n”,a,b);}

3.2 选择结构程序设计

一。选择题

1.逻辑运算符两侧运算对象的数据类型(D) A.只能是0或1 B.只能是0或非0的整数

C.只能是整型或字符型数据 D.可以是任何类型的数据 2.下列运算符中优先级最高的是(B) A.< B.+ C.&& D.!=

3.设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是(D) A.‘x'&&‘y' B.x<=y

C.x||y+z&&y-z D.!((x

4.已知x=43,ch=‘A',y=0;则表达式(x>=y&&ch<‘B’&&!一y)的值为(C) A.0 B.语法错误 C.1 D.“假”

5.若希望当A的值奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是(C)

A.A%2==1 B.!(A%2==0) C.!(A%2) D.A%2 6.判断char型变量ch是否为大写字母的正确表达式是(C) A.‘A'<=ch<=‘Z' B.(ch>=‘A')&(ch<=‘Z'

C.(ch>=‘A')&&(ch<=‘Z') D.(‘A'<=ch)AND(‘Z'>=ch)

7.判断char型变量c1是否为小写字母的正确表达式为:D.(c1>=‘a')&&(c1<=‘z') 8.以下程序的运行结果是(B)

#include“stdio.h”void main(){int a,b,d=241;a=d/100%9;b=(-1)&&(-1);printf(“%d,%d”,啊,吧);}

A.6,1 B.2,1 C.6,0 D.2,0 9.执行以下语句后a的值为【1】(C),b的值为【2】(A) int a,b,c;a=b=c=1;++a||++b&&++c; 【1】A.错误 B.0 C.2 D.1 【2】A.1 B.2 C.错误 D.4

10.已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是(B) 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 11.下面程序的输出结果是(C)

main(){int i=1,j=1,k=2;if((j++||k++)&&i++);printf(“%d,%d,%d\\n”,i,j,k);} A.1,1,2 B.2,2,1 C.2,2,2 D.2,2,3

12.以下if语句语法正确的是(B)B.if(x>0){x=x+y;printf(“%f”,x;}else printf(“%f”,-x);

13.以下不正确的语句为(B)B.if(x=y)&&(x!=0)x+=y 14.以下程序的运行结果是(C)

#include void main(){int m=5;if(m++>5)printf(“%d\\n”,m); else printf(\A.4 B.5 C.6 D.7

15.方a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是(B.2) if(a

#include\A.3 B.2 C.1 D.0

17.若运行时给变量x输入12,则以下程序的运行结果是(A)

#include\A.0 B.22 C.12 D.10

18.以下程序的运算结果是(D)

#include\“\\n%d\\n”,k

19.执行以下程序段后,变量a,b,c的值分别是(B) int x=10,y=9;int a,b,c;a=(--x==y++)?--x:++y;b=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 20.下面程序运算结果是(B)

main(){int a=5,b=4,c=3,d=2;if(a>b>c)printf(“%d\\n”,d+1).;else if((c-1>=d)==1);else printf(“%d\\n”,d+2);}

A:2 B:3 C:4 D:编译时出错,无结果 21.下程序的输出结果是(C)

main(){int a=-1,b=1,k;if((++a<00&&!(b--<=0))printf(“%d\\n”,a,b);else printf(“%d\\n”,b,a);} A:-1 1 B:0 1 C:1 0 D:0 0 22.下面程序的输出结果是(C)

main(){float x=2.0,y;if(x<0.0)y=0.0;else if(x<10.0)y=1.0/x;elsey+1.0 printf(“%f\\n”,y);} A:0.000000 B:0.250000 C:0.500000 D:1.000000 23.下面程序输出结果是(C)

main(){int a=2,b=-1,c=2;if(a

A:a=2,b=1 B:a=1,b=1 C:a=1,b=0 D:a=2,b=2 25.下面程序的输出结果是(A) main(){int

a=15,b=21,m=0;switch(a%3);case0:m++,break;case1:m++;switch(b%2){default:m++;case0:m++;break;}}printf(“%d\\n”,m);} A:1 B:2 C:3 D:4 二、填空题

1.C语言提供三种逻辑运算符是&& || !

2.条件“22&&x<3||x<-10 3.设y为int型变量,请写出描述“y是奇数”的表达式y%2==1 4.设x,y,z为int型变量,请写出描述“x或y中有一个小于z” 的表达式:x

5.x,y,z均为int型变量,请写出描述“x,y和z中有两个位负数”的 表达式((x<0&&(y<0))||((x<0)&&(z<0))||((y<0)&&(z<0)) 6.有int a=3,b=4,c=5;则下列表达式的值是(1)!(a+b+c-1&&b+c/2

7.已知A=7.5,B=2,C=3.6,表达式A>B&&C>A||AB的值是 0。 8.若a=6,b=4,c=2,则表达式!(a-b+c-1&&b+c/2)的值是 1。 9.若a=2,b=4,则表达式!(x=a||(y=b&&0))的值是 0。 10.若a=1,b=4,c=3,则表达式!(a

12.设a=3,b=4,c=5,则表达式a||b+c&&b==c的值是 1。

13.当m=2,n=1,a=1,b=2,c=3时,执行完d=(m=a!=b&&(n=b>c)后,n的值是0,m的值是? 14.以下程序实现:输入三个整数,按从小到大的顺序进行输出。请填上正确的内容。#include “stdio.h”void main(){int x,y,z,c;scanf(“%d%d%d”,&x,&y,&z);if(y

15.以下程序对输入的一个小写字母,将字母循环后移5个位置输出。如‘a’变成‘f',‘w'变成‘b'。请填入正确的内容。 #include “stdio.h” void main (){char c;c=getchar();if(c>=‘a'&&c<='u'【1】else if (c>‘v'&&c<='z')【2】putchar}

【1】c=c+5 【2】c=c-21

16.以下程序实现输出x,y,z三个数中最大者。请填空。

#include “stdio.h” void main (){int x=4,y=6,z=7;int(【1】);if(【2】)u=x;else u=y;if(【3】)v=u;else v=z;printf(“v=%d”,v);} 【1】u,v【2】x>y【3】u>x

17.以下程序的功能是判断输入的年份是否闰年。请填空。 #include “stdio.h” void main (){int y,f;scanf(“%d”,&y);if(y@0==0)f=1;else if(【1】)f=1;else【2】;if(f)printf(“%d is”,y);elseprintf(“%d is not”,y);printf(“a leap year\\n”);} 【1】y%4==0&&y0!=0【2】f=0

18.输入某个职工的工资,根据不同档次扣除所得税,然后计算实发工资。扣税标准如下。 (1)若工资低于850元,则不扣税。

(2)若工资在850至1500之间,则扣税比例为1% (3)若工资在1500至2000之间,则扣税比例为1.5% (4)若工资大于2000之间,则扣税比例为2%

要求:输入工资为负数,则显示出错信息。请填上正确内容。

#include “stdio.h” void main (){foat gz,rfgz;printf(“plase input a float gz:\\n”);scanf(“%f”,&gz);printf(“gz is %7.2f\\n”,gz);if(gz<0) printf(“error input again!\\n”);else if(【1】)rfgz=gz;else if(【2】)rfgz=gz-gz*0.01;else if(【3】)(【4】);else【5】;if(gz>0)printf(“gz is %7.2f,rfgz is %7.2f.\\n”,gz,rfgz);} 【1】gz<850【2】(gz>=850)&&(gz<1500)【3】gz>=1500)&&(gz<2000)【4】rfgz=gz-gz*0.015【5】rfgz=gz-gz*0.020

3.3循环结构程序设计 一、选择题

1.下述循环的循环次数是(B) int k=2;while(k=0)printf(“%d”,k);k--;printf(“\\n”; A.无限次 B.0次 C.1次 D.2次 2.有以下程序段:

int k=0;while(k=1)k++;while循环执行的次数是(A)

A.无限次 B.有语法错误,不能执行 C.一次也不执行 D。执行一次 3.下述语句执行后,变量k的值是(B) int k=1;while(k++<10);

A.10 B.11 C.9 D.无限循环,值不定 4.有以下程序:

13.以下程序输出结果是(D)

#include“stdio.h”int f(){static int i=0;int s=1;s+=i;i++;return s;}main(){int i,a=0;for(i=0;i<5;i++)a+=f();printf(“%d\\n”,b);} A.20 B.24 C.25 D.15 14.以下程序的输出结果是(D)

#include void fun1(){int x=0;x++;printf(“%d”,x);}void fun2(){static int x;x++;printf(“%d”,x);}main(){int j;for(j=0;j<3,j++){fun2();fun1();}} A.1,1,1,1,1,1 B.1,1,1,1,2,3 C.1,1,2,2,3,3 D.1,1,2,1,3,1 15.以下程序的输出结果是(B)

#include int m=3;main(){int fun (int k);int m=10;printf(“%d\\n”,fun(5)*m);}int fun (int k){if(k==0)return m;return(fun (k-1)*k);} A.360 B.3600 C.1080 D.1200 16.以下程序的输出结果是()

#include int d=1;fun(int p){static int d=5;d+=p;prntf(“%d”,d);return(d);}main(){int a=3;printf(“%d\\n”,妇女(a+fun(d)));}

A.6 9 9 B.669 C.6 15 15 D.6 6 15 17.以下有关宏替换的叙述不正确的是(D) A.宏替换不占用运算时间 B.宏名无类型

C.宏替换只是字符替换 D.宏名必须用大写字母表示 18.在宏定义#definePI3.14159中,用宏名PI代替一个(D) A.常量 B.单精度数 C.双精度数 D.字符串 19.以下程序的输出结果是(D)

#include #define M(x,y,z)x*y+z main(){int a=1,b=2,c=3;printf(“%d\\n”,M(a+b,b+c,c+a));}

A.19 B.17 C.15 D.12 20.以下程序的输出结果是(B) #include #define SQR(x)x*x main(){int a=16,k=2,m=1;a=(k+a)/SQR(k+m);printf(“%d\\n”,a);} A.16 B.12 C.9 D.1 21.有如下程序:

#include #define N2 #define MN+1 #define NUM2*M+1 main(){printf(“%d”,NUM);} A.5 B.6 C.7 D.8

22.以下程序的输出结果是(C)

#include #define(x)x*x main(){int a=6,b=2,c;c=f(a)/f(b);printf(“%d”,c);} A.9 B.6 C.36 D.18 23.若有以下宏定义:

#define N 2 #define Y(n)((N+1)*n)则执行语句:z=2*(N+Y(5));后的结果是(B) A.语句有错误 B.z=34 C.z=70 D.z无定值

24.若有宏定义:#define MOD(x,y)x%y则执行以下语句后的输出结果为(B) intz,a=15,b=100;z=MOD(b,a);printf(“%d”,z++); A.11 B.10 C.6 D.宏定义不合法 25.以下程序的运行结果是(C)

#include #define MAX (a,b)(a)>(b)(a):(a) #define PRINT(Y)printf(“Y=%d\\t”,Y)

main(){int a=1,b=2,c=3,d=4,t;t=MAX(a+b,c+d);PRINT(t);} A.Y=3 B.存在语法错误 C.Y=7 D.Y=0 26.请读程序:

#include #define“stdio.h”#define MUL (x,y)(x)*y main(){int a=3,b=4,c;c=MUL(a++,b++);printf(“%d”,c);} 上面程序的输出结果是(A) A.12 B.15 C.20 D.16

27.对下面程序段:#defineA3 #defineB (a)(A+1)*a)x=3*(A+B(7));正确的判断是(B) A.程序出错,不允许嵌套宏定义 B.x=93 C.x=21 D.程序出错,宏定义不允许有参数 28.允许程序输出结果是(B)

#include #define PT5.5 #define S(x)PT*x*x main(){int a=1,b=2;printf(“%4.1f”,S(a+b));}

A.12. 0 B.9. 5 C.12. 5 D.33. 5 29.允许正确的描述是(C)

A.C语言预处理功能是指完成宏替换和包含文件的调用 B.预处理指令只能位于C源程序文件的首部

C.凡是C源程序中行首以“#”标识的控制都是预处理指令 D.C语言的编译预处理就是对源程序进行初步的语法检查 30.若有以下调用语句,则不正确的fun函数的首部是(D) main(){...int a[50],n;fun(n,&a,[9]);...}

A.void fun (int m,int x[]) B.void fun(int s,int h[41]) C.void fun (int p,int*s) C.void fun (int n,int a) 二、填空题

1.以下程序的功能是根据输入的“y”(“Y”)与“n”(“N”),在屏幕上分别显示出“This is YES”与“This is NO”。请填空。

#includevoid YesNo(charch){switch (ch){case‘y':casw‘Y’:printf(“\\nThis is YES.\\n”);【1】;case‘n':case‘N’:printf(“\\nThis is NO.\\n”);}}(){charch;printf(“\\nEnter a char‘y',‘Y’,‘n’,‘N’:”);ch=;【2】printf(“ch:%c”,ch);YesNo(ch);} 【1】_break【2】getchar()

2.以下Check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示“WELL ,DONE!!”,否则显示计算后的值。已有函数调用语句Check(ponse ,value)。请填空。

void Check(int ponse,float value){int val;val=【1】;printf(“计算后的值:%d”,val);if (【2】)printf(“\\nWELL DONE!!\\n”);else printf(“\\nSorry the correct answer is %d\\n”,val);} 【1】_(int)((value*10+5)/10) 【2】ponse==val

3.已有函数pow,现要求取消变量i后pow函数的功能不变。请填空。 修改前的pow函数:

pow(int x,int y){int i,j=1;for(i=1;i<=y;++i)j=j*x return(j);}修改后的pow函数:pow(int x,int y){int j;for(【1】;【2】;【3】)j=j*x;return(j);} 【1】j=1【2】y>=1【3】y--

4.以下程序的功能是求三个数的最小公倍数。请填空。

max(int x,int y,int z){if(x>y&&x>z)return(x);else if(【1】)return(z);}main(){int

x1,x2,x3,i=1,j,x0;printf(“Input 3 number:”); scanf(“%d%d%d”,&x1,&x2,&x3);x0=max(x1,x2,x3);while(1){j=x0*i;if([【2】)break;i=i+1;}printf(“This is %d%d%d zuixiaogongbeishu is%d\\n”,x1,x2,x3,j);} 【1】y>x&&y>z【2】j%x1==0&&j%x2==0&&j%x3==0

5.函数gongyu的作用是求num1和num2的最大公约数,并返回该值。 gongyu(int num1,int num2){int temp ,a,b;if(num1【1】num2){temp=num1;num1=num2;num2=temp;}a=num1;b=num2;while(【2】){temp=a%b;a=b;b=temp;}return(a);} 【1】<【2】b!=0

6.以下程序的功能是用递归法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,求第五个学生的年龄。 age(int n){int c;if(n==1) c=10;else c=【1】;retrn(c);}main(){int n=5;printf(“age:%d\\n”,【2】);} 【1】age(n-1)+2【2】age(5)

7.C语言提供了三种预处理命令,它们是宏定义、文件包含和条件编译 8.设有以下宏定义:

#define WIDTH80 #define LENGTH WIDTH+40则执行赋值语句:v=LENGTH820;后(v为int型变量),v的值是 880。 9.以下程序的输出结果是 12 。

#define MUN(z)(z)*(z) main{printf(“%d,MUN(1+2)+3);}

10.设有以下程序,为使之正确运行,请在【】处填入应包含的命令行。(try-me()函数在a:\\mylife.txt中有定义。) 【1】main(){printf(“\\n”);try-me();printf(“\\n”);} 【1】#include“a:\\mylife.txt”

11.设有以下程序,为使之正确运行,请在【】中填入应包含的命令行。 【1】main(){int x=2,y=3;printf(“%d”,pow(x,y));} 【1】#include“math.h”

12.以下的程序是选出能被3整除且至少有一位数是5 的两位数,打印出所有这样的数及其个数。 sub(int k,int n){int a1,a2;a2=【1】;a1=k-【2】;if((k%3==0&&a2==5)||(k%3==0&&a1==5)){printf(“%d”,k);n++;return n;}else return -1;}main(){int n=0,i,m;for(i=10;i<=99;i++){m=sub(i,n);if(m!=-1)n=m;}printf(“\\nn=%d”,n);} 【1】k/10【2】a2*10

13.下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误的是【1】,改正后为【2】

void add(float a,float b){float c;c=a+b;return c;}

【1】void add(float a,float b)【2】float add(float a,float b)

14.函数del的作用是删除有序数组a中的指定元素x,已有调用语句del(a,n,x);其中实参n为删除前数组元素的个数,赋值号左边的n为删除后数组元素的个数。 del(int a[],int n,int x){int p,i;p=0;while(x>=a[p]&&p

【1】p=p+1【2】a[i]=a[i+1]

15.以下程序可以计算10 名学生1门课的成绩的平均分。

float average(float array[10]){int i;float aver,sum=array[0];float(i=1;【1】;i++)sum+=【2】;aver=sum/10;return(aver);}main(){float score[10],aver;int i;printf(“\\ninput 10 scores:”);

for(i=0;i<10;i++)scanf(“%f”,&score[i]);aver=【3】;printf(“naverage score is %5.2f\\n”,aver);} 【1】i<10【2】array[i]【3】average(score)

第五章 数组与字符串

一、选择题

1.以下能正确定义一维数组的选项是(B) A.int num[]; B.#define N100 intnum[N] C.int num[0..100]; D.int N=100;int num [N]; 2.若有以下说明:

int a[12]={1,2,3,4,5,6,7,8,9,10,11,12];char c=‘a',d,g;则数值为4的表达式是(D) A.a[g-c] B.a[4] C.a[‘d'-‘c'] D.a[‘d'-c] 3.执行下面的程序段后,变量k中的值为(A) int k=3,s[2];s[0]=k;k=s[1]*10;

A.不定值 B.33 C.30 D.10 4.有以下程序: #include “stdio.h” main(){int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;while(i++<7)if(p[i]%2)j+=p[i];printf(“%d\\n”,j);} 程序运行后的输出结果是(B) A.42 B.45 C.56 D.60 5.以下程序的输出结果是(B) main(){int

i,k,a[10],p[3];k=5;for(i=0;i<10;i++)a[i]=i;for(i=0;i<3,i++)p[i]=a[i*(i+1)];for(i=0;i<3;i++)K+=p[i]*2;printf(“%d\\n”,k);}

A.20 B.21 C.22 D.23

6.以下程序段给数组所有的元素输入数据,请选择正确的答案填入(A) main(){int a[10],i=0;while(i<10)scanf(“%d”,);} A.a+i B.&a[i+1] C.a+i D.&a[i++] 7.阅读下面的程序: main(){int

n[2],i,j,k;for(i=0;i<2;i++)n[i]=0;k=2;for(i=0;i

上面程序的输出结果是(A)

A.不确定的值 B.3 C.2 D.1 8.下述程序的输出结果是(B)

main(){int y=18,i=0,j,a[8];do{a[i]=y%2 i++;y=y/2;}while(y>=1);for(j=i-1;j>=0;j--)printf(“%d”,a[j];printf(“\\n”);}

A.10000 B.10010 C.00110 D.10100 9.有如下程序,该程序的输出结果是(D)

main(){int n[5]={0,0,0},i,k=2;for(i=0;i

10.以下能正确定义二维数组的是(B) A.int a[][3]; B.int a[][3]={2*3};

C.int a[][3]={} D.int a[2][3]={{1},{2},{3}};

11.以下不能正确定义二维数组的是(D)

A.int a[2][2]={{1},{2}}; B.int a[][2]={1,2,3,4}; C.ine a[2][2]={{1},2,3}; D.int a[2][]={{1,2},{3,4}}; 12.以下能正确定义数组并正确赋初值的语句是(D) A.int N=5,b[N][N];

B.int a[1][2]={{1},{3}}; C.int c[2][]={{1,2},{3,4}}; D.int d[2][2]={{1,2};{3,4}}; 13.下述程序输出结果是(A) main(){int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};printf(“%d%d%d%d\\n”,a[0][3],a[1][2],a[2][1],a[3][0]);

A.0650 B.1470 C.5430 D.输出值不定 14.定义如下变量和数组:

int i;int x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是(C)for(i=0;i<3;i++)printf(“%d”,x[i][2-i]);

A.159 B.147 C.357 D.369 15有如下程序,该程序的输出结果是(A) main(){int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)for(j=0,j<=i;j++)s+=a[i][j];printf(“%d\\n”,是);} A.18 B.19 C.20 D.21 16.以下程序的输出结果是(C)

main(){int i,x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)printf(“%d,”,x[i][2-i]);} A.1,5,9 B.1,4,7 C.3,5,7 D.3,6,9 17.以下程序的输出结果是(B) main(){int b[3][3]={0,1,2,0,1,2,0,1,2 },i,j,t=1;for(i=0;i<3,i++)for(j=i;j<=i;j++) t=t+b [i][b[j][j]];printf(“%d\\n”,t);} A.3 B.4 C.1 D.9

18.以下合法的数字定义是(D)

A.int a[]=“string” B.int a[5]={0,1,2,3,4,5}; C.char a=“string” D.char a[]={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’}; 19.给出以下定义: char x[]=“abcdefg”;

char y[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’} 则正确的叙述为(C)

A.数组x和数组y等价 B.数组x和数组y长度相等

C.数组x的长度大于数组y的长度 D.数组x的长度小于数组y的长度 20.不能把字符:Hello!赋给数组b的语句是(B) A.char b[10]={‘H’,‘e’,‘l’,‘l’,‘o’,‘!’}; B.char b[10];b=“Hello”;

C.char b[10];strcpy(b,“Hello”); D.char b[10]=“Hello”;

21.下列描述中不正确的是(C) A.字符型数组中可以存放字符串

B.可以对字符型数组进行整体输入、输出 C.可以对整体数组进行整体输入、输出

D.不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值 22.有以下程序:

#include#defineN 6 main(){char c[N];int i=0;for(;i

输入以下3行,每行输入都是在第1列开始,代表1个回车键符: a b cdef 则程序输出的结果是(C)

A.abcdef B.abcdef C.ab cd D.a b cdef 23.以下程序的输出结果是(D) #include“stdio.h”#include“string.h”main(){int k;char w[][10]={“ABCD”,“EFGH”,“IJKL”,“MNOP”,};for(k=1;k<3;k++)printf(“%s\\n”,&w[k][k]);} A.ABCD FGH KL B.ABCD EFG IJ M C.EFG JK O D.FGH KL

24.设有:static char str[]=“Beijing”;则执行:printf(“%d\\n”,strlen (stecpy (str,“China”)));后的输出结果是(A)

A.5 B.7 C.12 D.14

25.当执行下面程序输入:ABC时,输出结果是(A)

#include“stdio.h”#include“string.h”main(){char ss[10]=“12345”;strcat(ss,“6789”);gets(ss);printf(“%s\\n”,ss);}

A.ABC B.ABC9 C.123456ABC D.ABC456789 26.请选出以下语句的输出结果是(A) printf(“%d\\n”,strlen(“\\t\\”\\065\\xff“\\n”));

A.5 B.14 C.8 D.输出项不合法,无正常输出 27.下述程序的输出结果是(A) main(){char s[]=“-12345”;int k=0,sign,m;if(s[k]==‘+’||s[k]==‘-’)sign=s[k++]==‘+’?1:-1;for(m=0;s[k]>=‘0’&&s[k]<=‘9’;k++)m=m*10+s[k]-‘0';printf(“resault=%d”,sign*m);} A.resault=-12345 B.resault=12345 C.resault=-10000 D.resault=10000()

28。定义如下数组s:chars [40];若准备将字符串“This is a string”记录下来,(B)是错误的输入语句。

A.gets(s+2); B.scanf(“ s”,s); C.for (i=0;i<17;i++) s[i]=getchar( ); D.while((c=getchar()!=\\n) s[i++]=c;

29.当执行下面的程序时,如果输入ABC,则输出结果是(A) #include“stdio.h”#include“string.h” main(){char ss[10]=“1,2,3,4,5”;gets(ss);strcat (ss,“6789”);printf(“%s\\n”,ss);}

A.ABC6789 B.ABC67 C.12345ABCC6 D.ABC456789 30.有以下程序:

#include“stdio.h” void change (int k[]){k[0]=k [5];} main (){int x[10]={1,2,3,4,5,6,7,8,9,10},n=0;while (n<=4)【change (&x[n];n++;}for(n=0;n<5;n++) printf (“%d”,x[n]); printf(“\\n”);}程序运行后输出结果是(A)

A.678910 B.13579 C.12345 D.62345

31.有以下程序: #include“stdio.h” int fun(int x[],int n){staticint sum=0,i;for(i=0;i

#include“stdio.h”void sort(int a[],int n){int i,j,t;for(i=0;i#include“stdio.h” void sum (int a[]){a[0]=a[-1]+a[1];}main (){int a[10]={1,2,3,4,5,6,7,8,9,10};sum (&a [2]);printf(“%d\\n”,a [2]);}程序运行后输出结果是(A) A.6 B.7 C.5 D.8 34.有以下程序: #include“stdio.h” #define N 20 fun(int a [],int n,int m){int i;for(i=m;i>=n;i--)a [i+1]=a[i];} main (){int i,a[N]={1,2,3,4,5,6,7,8,9,10};fun (a,2,9);for(i=0;i<5;i++) printf(“%d”,a[i]);}程序运行后输出结果是(C)

A.10234 B.12344 C.12334 D.12234 35.有以下程序: #include“stdio.h” intf(int b[][4]){int i,j,s=0;for(j=0;j<4;j++){i=j;if(i>2)i=3-j;s+=b[i][j];}return s} main( ){int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,8,12},{3,2,1,0}};程序运行后输出结果是(D) A.12 B.11 C.18 D.16 二、填空题。

1.下面程序每行4个数据的形式输出a数组,请填空。 #define N 20 main( ){int a[N],i;for(i=0;i

【1】m=100;m<1000【2】m/10-x*10【3】a[i]=m

3.设数组a包括10个整型元素。下面程序的功能是求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。请填空。 main( ){int a[10],b[10],i;for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(【1】;i<10;i++)【2】;for(i=1;i<10;i++){printf(“=”,b[i];if(【3】==0)printf(“\\n”);}} 【1】i=1【2】b[i]=a[i]+a[i-1]【3】i%3

4.下面程序的功能是统计年龄在16-31岁之间的学生人数。请填空。

main(){int a[30],n,age,i;for(i=0;i<30;i++) a[i]=0;printf(“Enter the number of the students

(<30)\\n”);scanf(“%d”,&n);printf(“Enter the age of each student:\\n”);for(i=o;i

5.设数组a中的元素均为正整数,以下程序是求a中偶数的个数和偶数的平均值。请填空。 main(){int a[10]={1,2,3,4,5,6,7,8,9,10};int k,s,j;float ave;for(k=s=j=0;j<10;j++){if(a[j]%2!=0)【1】;s+=【2】;k++;}if(k!=0){ave=s/k;printf(“%d,%f\\n”,k,ave);}} 【1】continue【2】a[i]

6.以下程序的功能是:从键盘输入若干学生成绩,统计出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空。 main( ){float x [1000],sum=0.0,ave,a;int n=0,i;printf(“Enter mark:\\n”);scanf(“%f”,&a);while(a>=0.0 && n<1000){sum+=【1】;x [n]=【2】;n++;scanf(“%f”,&a);} ave=【3】;printf (\”);for(i=0;i

7.在C语言中,二维数组元素在内存中的存放顺序是按行存放。

8.若二维数组a有m列,则计算任一元素a[i] [j]在数组中的位置的 公式为:ixm+j+1 。 9.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a [1][2]得到的初始值是 0,a [2][1]得到的初始值是 6。

10.下面程序可求出矩阵a的两条对角线的元素之和。请填空。

main(){int a [3][3]={1,3,6,7,9,11,14,15,17};int sum1=0;int sum2=0,i,j;for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j) sum1=sum1+a [i][j];for (i=0;i<3;i++) for(【1】;【2】;j--) if((i+j)==2)sum2=sum2+a[i][j];printf(“sum1=%d,sum2=%d\\n”,sum1,sum2);} 【1】i=j+1【2】found=1

12.以下程序是求矩阵a,b的和,结果存人矩阵c中并按矩阵形式输出。请填空。 main(){int a[3][4]={{3,-2,7,5},{1,0,4,-3},{6,8,0,2}};int b [3][4]={{-2,0,1,4},{5,-1,7,6},{6,8,0,2}};int i,j,c[3][4];for(i=0;i<3;i++) for(j=0;j<4;j++) c [i][j]=【1】;for(i=0;i<3;i++){for (j=0;j<4;j++) printf (“=”,c[i][j]);【2】}} 【1】a[i][j]+b[i][j]【2】printf(“\\n”) 13.字符串“ab\\n\\012\\\\”的长度是 9。 14.下面程序段将输出computer,请填空。 char c[]=“It's a computer”;for(i=0;【1】;i++){【2】;printf(“%c”,c[j]);} 【1】i<=7【2】j=i+7

15.下面程序段的功能是在三个字符串中找出最小的。请填空。

#include“stdio.h”#include“string.h” main(){char s [20],str [3][20];int j;for(j=0;j<3;j++) gets(str[j];strcpy(s,【1】);if(strcmp(str[2],s)<0) strcpy(s,str [2]);printf(“%s\\n”,【2】);} 【1】(strcmp (str[0],str[1])<0str[0]:str[1])【2】s 16.下面程序段的运行结果是 he。 char x[]=“the teacher”;i=0;while(x[++i]!=‘\\0’)if(x[i-10]==‘t')printf(“%c”,x[i]); 17.下面invert函数的功能是将一个字符串str的内容颠倒过来。填空题。

#include void invert (char str[]){int i,j【1】;for(i=0,j=strlen(str)【2】;i

18.若以定义:int a[10],i;以下fun函数的功能是:在第一个循环中给前10个数组元素依次赋1,2,3,4,5,6,7,8,9,10;在第二个循环中使a数组前10个元素中的值对称折叠,变成

1,2,3,4,5,5,4,3,2,1。请填空。

fun(int a[]){int i;for(i=1;i<=10;i++)【1】=i;for(i=0;i<5;i++)【2】=a[i];} 【1】a[i-1]【2】a[9-i]

第六章 指针 一、选择题

1.以下定义语句中正确的是(C)

A.char a=‘A’b=‘B'; B.float a=b=10.0; C.int a=10,*b=&a; D.float *a,b=&a; 2.若有定义:int x=0,*p&x;则语句printf(“%d\\n”,*p);的输出结果是(B) A.随机值 B.0 C.x的地址 D.p的地址 3.设有定义:“int n1=0,n2,*p=&n2,*&n1;”以下赋值语句中与“n2=n1;”语句等价的是(A) A.*p=*q; B.p=q; C.*p=&n1; D.p=*q; 4.已有定义,int k=2;int*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是(B)

A.k= *ptr1+ *ptr2; B.ptr2=k; C.ptr1=ptr2 D.k= *ptr1*( *ptr2); 5.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是(D) A.a,point,*&a B.&*a,&a,*point C.*&point,*point,&a D.&a,&*point,point

6.若需建立如图所示的存储结构,且已有说明float*p,m=3.14;则正确的赋值语句是(B) A.p=m B.p=&m; C.*p=m D.*p=&m

7.若有说明:int*p,m=5,n;以下正确的程序段是(D) A.p=&n;scanf(“%d,&p”); B.p=&n;scanf(“%d”,*p); C.scanf(“%d”,&n);*p=n; D.p=&n;*p=m;

8.若有说明:int*p1,*p2,m=5,n;以下均是正确赋值语句的选项是(C) A.p1=&m;p2=&p1; B.p1=&m;p2=&n;*p1= *p2; C.p1=&m;p2=p1; D.p1=&m;*p2=*p1; 9.有如下程序段:

int *p,a=10,b=1;p=&a;a=*p+b; 执行该程序段后,a的值为(B) A.12 B.11 C.10 D.编译出错 10.设char *s=“\\ta\\o17bc”;则指针变量s指向的字符串所占的字节数是(C) A.9 B.5 C.6 D.7

11.下面程序段中,for循环的执行次数是(B)。 char *s=“\\ta\\o17bc”;for(;* s!=‘\\0';s++)printf(“*”); A.9 B.5 C.6 D.7 12.下面程序段的运行结果是(C) char *s=“abcde”;s+=2;printf(“%d”,s);

A.cde B.字符‘c' C.字符‘c'的地址 D.无确定的输出结果

13.设p1和p2是指向同一个字符中的指针变量,c为字符变量,则以下不能正确执行的赋值语句是(B)

A.c=*p1+ *p2; B.p2=c;

C.p1=p2; D.c=*p1*(*p2); 14.设有下面的程序段:

char s[]=“china”;char*p;p=s; 则下列叙述正确的是(D) A.s和p完全相同

B.数组s中的内容和指针变量p中内容相等 C.s数组长度和p所指向的字符串长度相等 D.*p与s[10]相等

15.以下正确的程序段是(C) 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]); 16.下面程序段的运行结果是(B) char str[]=“abc”,*p=str;printf(“%d\\n”,*(p+3)); A.67 B.0 C.字符‘C’的地址 D.字符‘C' 17.下面程序段的运行结果是(C) char a[]=“language”,*p;p=a;while(*p!=‘u'){printf(“%c”,*p-32);p++; A.LANGUAGE B.a+2 C.&a+1 D.&a[0]

18.若有以下定义,则对a数组元素的正确引用是(D) int a[5],*p=a;

A.*&[5] B.a+2 C.&a+1 D.*(a+2)

19.若有以下定义,则对a的数组元素地址的正确引用是(D) int a[5],*p=a;

A.p+5 B.* a+1 C.&a+1 D.&a[0]

20.若有定义:int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素值的正确引用为(A)

A.*(*(a+i)+j) B.(a+j)[j] C.*(a+i+j) D.*(a+i)+j

21.若有定义:int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为(D)

A.*(a[i]+j) B.(a+j) C.*(a+j) D.a[i]+j 22.运行程序的输出结果是(C)

main(){int I,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1];for(I=0;I<4;I+=2)printf(“%d”,p[I]);} A.52 B.51 C.53 D.97

23.若有定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是(C)

A.p+1 B.a+1 C.a++ D.++p

24.若有以下的说明和语句,则在执行for语句后,*(*(pt+1+2)表示的数组元素是(C) intt[3][3],*pt[3],k;for(k=0;k<3;k++)pt[k]=&t[k][0]; A.t[2][0] B.t[2][2] C.t[1][2] D.t[2][1] 25.以下程序的输出结果是(C) main(){char ch[3][4]={“123”,“456”“78”,},*p[3];int i;for(i=0;i<3;i++)p[i]=ch[i];for(i=0;i<3;i++) printf(“%s”,p[i]);}

A.123456780 B.123 456 780 C.12345678 D.147 26.以下程序的输出结果是(B)

23.以下关于枚举叙述不正确的是(D)

A.枚举变量只能取对应枚举类型的枚举元素表中的元素 B.可以定义枚举类型时对枚举元素进行初始化 C.枚举元素表中的元素有先后次序,可以比较 D.枚举元素的值可以是整数或者字符串 24.以下对枚举类型名的定义正确的是(B) A.enum a={one,two,three}; B.enum a {one=1,teo=-1,three}

C.enum a={“one”,“two”,“three”}; D.enum a{“one”,“two”,“three”}; 25.下面程序的输出是(C)。 #includemain(){enum

team{my,your=4,his,her=hia+10};printf(“%d%d%d%d\\n”,my,your,his,her);} A.0123 B.04010 C.04515 D.1 4 5 15 26.以下叙述中不正确的是(C)

A.表达式a&=b等价于a=a&b B.表达式a|=b等价于a=a|b C.表达式a!=b等价于a=a!b D.表达式a^=b等价于a=a^b 27.表达式0x13 & 0x17的值是(B) A.0x17 B.0x13 C.0xf8 D.0xec

28.在执行完以下C语句后,B的值是(B) char=‘A’;int b;b=((241&15)&&(z|‘a’)); A.0 B.1 C.TRUE D.FALSE 29.表达式0x13 | 0x17的值是(B) A.0x13 B.0x17 C.0xE8 D.0xc8

30.在位运算中,操作数每右移一位,其结果相当于(B)

A.操作数乘以2 B.操作数除以2 C.操作数除以4 D.操作数乘以4 二、填空题

1.设有三人的姓名和年龄存在结构体数组中,以下程序输出三人年龄居中者的姓名和年龄,请在【】处填入正确内容。

staticstruct man{char name[20];int age;}person[]={“li-ming”,18,“wang-hua”,19,“zhang-ping”,20};main(){int i,j,min;max=min=person[0].age;for(i=1;i<3;i++)if(preson[i].age>max)【1】;else if(person[i].age

#includestruct stu{int num;char name[10];int age;};void fun(struct stu *p){printf(“%s\\n”,(*p).name);}main(){struct stu student[3]={{9801,“Zhang”,20},fun(students+2);}执行以上程序输出结果是:Zhao。 3.若已定义:

struct num{int a;int b;float f;}n=(1,3,5.0};struct num *pn=&n;则表达式pn->b/n.a*++pn->b的值是【1】。表达式(*pn).a+pn->f的值是【2】。 【1】12【2】6.0

4.以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整型数据,成员变量

link是指向自身结构体的指针。请将定义补充完整。 struct node{int info;link;}答案:struct node * 5.已有定义如下:

struct node{int date;struct node *next;}*p;以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。请填空。 p=(struct node *)malloc(sizeof(struct node));

6.以下程序段的功能是统计链表中结点的个数,first为指向第一个结点的指针(链表不带头结点),请在【】中填入正确的内容。

struct link{char data;struct link *next;}......struct link *p,*first;int c=0;p=first;while(【1】){【2】;p=【3】;}

【1】p!=NULL【2】c++【3】p->next 7.下面程序运行后的结果是 39。 #include“stdio.h”main(){union{int a[2];long b;char c[4];}s;s.a[0]=0x39;s.a[1]=0x38;printf(“%1x\\n”,s.b);printf(“%c\\n”,s.c[0]);} 8.下面程序运行后的结果是4,8,9。 void main(){union eg1{int c;int d;struct{int a,int b;} out;}e;e.c=1;e.d=2;e.out.a=e.c*e.d;e.out=e.c+e.d;printf(“%d,%d\\n”,e.out.a,e.out.b);} 9.下面程序中,左边是附加的行号,请在含有错误的行是:第五行。 #include“stdio.h”enum date{sum,mon,tue,wen,thu,fri,sat};void main() 1.{enum date day1,day2; 2.day1=mon 3.day2=day1 4.if(day2>day1)

5.printf(“%s>%s”,day1,day2): 6.for(day1=sum,day1

typedef union student{char name[10];long sno;char sex;float score[4];}stu;main(){stu a[5];printf(“%d\\n”,sizeof(a));}

第八章 文件的输入输出 一、选择题

1.系统的标准输入文件是指(A)

A.键盘 B.显示器 C.软盘 D.硬盘 2.以下叙述错误的是(C)

A.C语言中对二进制文件的访问速度比文本文件快 B.C语言中,随机文件一二进制代码形式存储数据 C.语句FILE fp;定义了一个名为fp的文件指针 D.C语言中的文本文件一ASCII码形式存储数据

3.若执行fopen函数时发生错误,则函数的返回值是(B) A.地址值 B.0 C.1 D. EOF

4.若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是(B)

A.“ab+” B.“wb+” C.“rb+” D.“ab”

5.fscanf函数的正确调用形式是(D) A.fscanf(fp,格式字符串,输出表列); B.fscanf(格式字符串。输出表列,fp);

C.fscanf(格式字符串,文件指针,输出表列); D.fscanf(文件指针,格式字符串,输入表列);

6.fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是(C) A.只写 B.追加 C.读或读写 D.答案B和C都正确 7.函数调用语句:fseek(fp,-20L,2);的含义是(C) A.将文件位置指针移到距离文件头20个字节处 B.将文件位置指针从当前位置向后移动20个字节 C.将文件位置指针从文件末尾后退20个字节 D.将文件位置指针移到离当前位置20个字节处

8.以下可作为函数fopen中第一个参数的正确格式是(D)。 A.c:user\\text.txt B.c:\%user\\text.txt

C.“c:user\\text.txt” D.“c:\%user\\text.txt”

9.若以“a+”方式打开一个已存在的文件,则以下叙述正确的是()

A.文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作 B.文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作 C.文件打开时,原有文件内容被删除,只可作操作 D.以上各种说法都不正确

10.已知函数的调用形式:fread(buffer,size,count,fp);其中buffer代表的是(C)。 A.一个整型变量,代表要读入的数据项总数 B.一个文件指针,指向要读的文件

C.一个指针,指向要读入数据的存放地址 D.一个存储区,存放要读的数据项 12.fwrite函数的一般调用形式是(D) A.fwrite(buffer,count,size,fp); B.fwrite(fp,size,count,buffer); C.fwrite(fp,count,size,buffer); D.fwrite(buffer,size,count,fp);

13.若调用fputc函数输出字符成功,则其返回值是(D) A.EOF B.1 C.0 D.输出的字符 14.设有以下结构体类型:

struct st{char name[8];int num;floats[4];}student[50];并且结构体数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,以下不正确的形式是(C) A.fwrite(student,size,(struct st),50,fp); B.fweite(student,50*sizef(struct st),1,fp); C.ferite(student,25*sizef(struct st),25,fp);

D.for(i=0;i<50;i++)fwrite(student+i,sizeof(struct st),1,fp);

15.以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是(D) A.feof(fp) B.ftell(fp) C.fgtc(fp) D.rewind(fp) 16.以下程序的输出结果是(D) #includemain(){FILE*fp;int i,k,n;fp(i=1;i<6;i++){fprintf(fp,“%d”,i);if(i%3==0)fprintf(fp,“\\n”);}rewind(fp);fscanf(fp,

“%d%d”,&k,&n);printf(“%d%d\\n”,k,n);fclose(fp);} A.0 0 B.123 45 C.1 4 D.1 2

17.在C程序中,可把整型数以二进制形式存放到文件中函数是(A) A.fprintf函数 B.fread函数 C.fwrite函数 D.fputc函数

18.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是(C) A.EOF B.0 C.非零值 D.NULL

19.若要打开A盘上的user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是(B) A.fopen(“A:\%user\\abc.txt”,“r”) B.fopen (“A:\%user\\abc.txt”,“r+”) C.fopen(“A:\%user\\abc.txt”,“rb”) D.fopen(“A:\%user\\abc.txt”,“w”)

20.下述关于C语言文件操作的结论中,正确是(B) A.对文件操作必须先关闭文件 B.对文件操作必须先打开文件 C.对文件操作完毕不需关闭文件

D.对文件操作必须先测试文件是否存在 21.C语言中可以处理的文件类型是(C)

A.文本文件和数据文件 B.二进制文件和数据文件 C.文本文件和二进制文件 D.数据代码文件

22.在执行fopen函数时,ferror函数的初值是(A) A.0 B.-1 C.1 D.TRUE

23.若fp为文件指针,且文件已正确打开,以下语句的输出结果为(B) fseek(fp,0,SEEK_END);i=ftell(fp);printf(“i=%d”,i); A.fp所指文件的记录的长度

B.fp所指文件的当前位置,以字节为单位 C.fp所指文件的当前位置,以字为单位 D.fp所指文件的当前位置,以字为单位 24.以下程序的输出结果是(B)

#includemain(){FILE *fp;int i;char ch[]=“abcd”,t;fp=fopen(“abc.dat”,“wb+”);for(i=0;i<4;i++)fwrite(&ch[i],1,1,fp);fseek(fp,-2L,SEEK_END.);fread(&t,1,1,fp);fclose(fp);printf(“%c\\n”,t);} A.d B.c C.b D.a 二、填空题。

1.在C语言中,文件可以用顺序方式存取,也可以用随机方式存取。 2.在C程序中,数据可以用二进制和ASCII两种代码形式存放。

3.在C语言中,文件的存取是以字节为单位,这种文件被称作流式文件。 4.设有以下结构体类型:

struct st{char name[8];int num;floats[4];}student[50];并且结构体数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,请将以下fwrite语句补充完整。 fwrite(student,50*sizeof(struct st)

5.下列程序用于统计文件中的字符个数,填空使程序完整。

#includevoid main(){FILE *fp;long num=0;if((fp=fopen(“test”,“r+”))==NULL){printf(“Can't open File”);return;}while【1】num++;【2】

printf(“num=”,num);}

【1】fgetc(fp)!=EOF【2】fclose(fp)

6.下面程序的功能是从键盘接受姓名(例如:输入“ZHANG SAN”),在文件“try.dat”中查找,若文件中已经存入了刚输入的姓名,则显示提示信息;若文件中没有刚输入的下面,刚将该姓名存入文件。要求:(1)若磁盘文件“try.dat”,已存在,则要保留文件中原来的信息;若文件“try.dat”不存在,则在磁盘上建立一个新文件;(2)当输入的姓名为空(长度为0),结束程序。

#includemain(){FILE *fp;int flag;char name[30],date[30];if((fp=fopen(“try.dat”,【1】))==NULL){printf(“Open file error\\n”);exit(0);}do{printf(“Enter name:”);gets(name);if(strlen(name)==0)break;strcat(name,“\\n”);【2】;flag=1;while(flag &&(fgets(date,30,fp)【3】))if(strcmp(date,name)==0)【4】;if(flag)fputs(name,fp);else printf(“\\tData enter error!\\n”);}while(【5】);fclose(fp);} 【1】“a+”【2】fclose(fp)【3】!=NULL【4】flag=0【5】ferror(fp)==0

7.程序运行时系统自动打开三个标准文件:标准输入、标准输出、标准出错输出文件,并定义了三个文件类型指针【1】、【2】、【3】分别指向这三个文件。 【1】stdio【2】stdout【3】stderr 8.设有以下结构体类型:

strucy st{char name[8];int num;float s[4];}student[50];并且结构体数组student中的元素都已经有值,若要将这些元素写到硬盘文件fp中,请 将以下fwrite语句补充完整。 ferite(syudent,50*sizeof(struct st),1,fp);

9.以下程序的功能是将文件file1.c的内容输出到屏幕上,并复制到文件file2.c中,请在空白处填入适当内容。

#includemain(){FILE【1】;fp1=fopen(“file1.c”“,r”);fp2=fopen(“file2.c”“,w”);while(! feof(fp1))putchar(fgtc(fp1));【2】;while(!foef(fp1))fputc(【3】);fclose(fp1);fclose(fp2);} 【1】*fp1,*fp2【2】rewind(fp1)【3】fgetc (fp1),fp2 10.以下程序功能是用“追加”的形式打开aa.txt查看文件指针的位置,然后向文件写入“data”再查看文件指针的位置。

#includemain(){【1】;long position;fp=fopen(【2】);position=ftell(fp);printf(“position=\\n”,position);fprintf(【3】);position=ftell(fp);printf(“position=\\n”,position);fclose(fp);} 【1】FILE*fp【2】“aa.txt”,“a”【3】fp,“data”

本文来源:https://www.bwwdw.com/article/f0wx.html

Top