搜索
您的当前位置:首页正文

二级C语言笔试题汇编及答案 (新)

来源:尚车旅游网


第一章 C语言的结构

一.单项选择题

1.设d为字符变量,下列表达式不正确的是__________。 (A) d=97 (B) d='a' (C) d=\"a\" (D) d='g' 2.C语言的程序一行写不下时,可以________。 A 用逗号换行 B 用分号换号 C 在任意一空格处换行 D 用回车符换行

3.在ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII码__________。 (A) 大32 (B) 大64 (C) 小32 (D) 小1 4.下列四个叙述中,错误的是________。 A 一个C源程序必须有且只能有一个主函数 B 在C源程序中注释说明必须位于语句之后 C 一个C源程序可以含零个或多个子函数 D C源程序的基本结构是函数

5.一个C程序可以包含任意多个不同名的函数,但有且仅有一个__________。 (A) 过程 (B) 主函数 (C) 函数 (D) include 6.C 语言中,当复合语句多于一条时,要有一对________括起来。 A 方括号 B 圆括号 C 花括号 D 尖括号 7.__________是C程序的基本构成单位。

(A) 函数 (B) 函数和过程 (C) 超文本过程 (D) 子程序 8.C语言程序的基本单位是__________。 (A) 程序行 (B) 语句 (C) 函数 (D) 字符 9.C语言规定,必须用__________作为主函数名。 (A) function (B) include (C) main (D) stdio

10.C语言规定,在一个C程序中,main()函数位置________。 A 必须开始 B 必须在最后

C 可以任意 D 必须在系统调用库函数之后 11.下列说法正确的是__________。 (A) 在执行C程序时不是从main函数开始的 (B) C程序书写格式严格限制,一行内必须写一个语句 (C) C程序书写格式自由,一个语句可以分写在多行上

(D) C程序书写格式严格限制,一行内必须写一个语句,并要有行号 12.以下说法中正确的是__________。

(A) C语言程序总是从第一个定义的函数开始执行

(B) 在C语言程序中,要调用的函数必须在main()函数中定义 (C) C语言程序总是从main()函数开始执行

(D) C语言程序中的main()函数必须放在程序的开始部分 13.以下叙述不正确的是________。 A 分号是C语句的必要组成部分 B C程序的注释可以写在语句的后面 C 函数是C程序的基本单位 D 主函数的名字不一定用main表示 14.若有以下定义: float x;int a,b;

则正确的switch语句是__________。 (A) switch (x)

{ case 1.0:printf(\"*\n\"); case 2.0:printf(\"**\n\"); } (B) switch (x)

{ case 1,2:printf(\"*n\"); case 3:printf(\" **\n\"); } (C) switch (a+b)

{ case 1:printf(\"*\n\"); case \"1+2\":printf(\"**\n\"); } (D) switch (a+b)

{ case 1:printf(\"*\n\"); case 2:printf(\"**\n\"); }

15.一个c语言由若干个c函数组成,各个函数在文件中的书写位置为________。 A 任意

B 第一个函数必须是主函数,其他函数任意 C 必须完全按调用的顺序排序

D 其他函数必须在前,主函数必须在最后 16.程序

#define NUM 30+4 main()

{ printf(\"NUM*20=%d\ 的执行结果为__________。

(A) NUM*20=110 (B) NUM*20=680 (C) NUM*20=604 (D) 以上都不对 17.下面属于C语句的是________。

A printf(\"%d\\n\ B #include C a=b;b=c;c=a; D /*this is a program */ 18.所谓微处理器的位数,就是计算机的__________。 (A) 字长 (B) 字 (C) 字节 (D) 二进制位 19.C语言程序的基本单位是________。

A 程序行 B 语句 C 函数 D 字符 20.以下叙述正确的是________。

A C语言程序总是从第一个定义的函数开始执行 B C语言程序中的main()函数开始执行

C C 语言程序中的main ()函数必须放在程序的开始执行 D 一个C函数中只允许一对花括号 21.机器语言是用__________编写的。

(A) 二进制码 (B) ASCII码 (C) 十六进制码 (D) 国标码

22.计算机只能识别机器语言,而人熟悉高级语言,故人机通信必须借助一 种中间者,此中间者就是__________。

(A) 编译程序 (B) 编辑程序 (C) 连接程序 (D) 装入程序 23.下面正确的赋值语句是________

A i++; B a=1,b=2; C a=b=5 D y=int(x) 24.以下叙述中正确的是

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

C)构成C程序的基本单位是函数,所有函数名都可以由用户命名 D)分号是C语句之间的分隔符,不是语句的一部分? 25.在C语言中,回车换行符是__________。 (A) \n (B) \t (C) \v (D) \b 26.__________不是C语言提供的合法关键字。 (A) switch (B) print (C) case (D) default 27.下面四个叙述中,错误的是________。 A C语言中的关键字必须小写 B C语言中的标识符必须全部由字母组成 C C语言不提供输入输出语句

D C语言中的注释行可以出现在程序的任何位置 28.下面四个叙述中,正确的是________。 A C程序中的所有字母都必须小写

B C程序中的关键字必须小写,其他标识符不区分大小 C C程序中的所有字母都不区分大小 D C语言中的所有关键字必须小写

29.在C语言中,每个语句和数据定义是用__________结束。 (A) 句号 (B) 逗号 (C) 分号 (D) 括号 30.以下选项中可作为C语言合法整数的是

A)10110B B)0386 C)0Xffa D)x2a2 31.在printf的格式字符中,g格式字符的作用是________. A 以字符形式输出,且只输出了一个字符 B 输出一个字符串

C 用来输出实数,并根据数值的大小,自动选用f格式或e格式 D 以无符号十进制形式输出整数

32.在c语言中,如果下面的变量都是int类型,则输出结果是________。 Sum=pad=;pAd=sum++,pAd++,++pAd; Printf(\"%d\\\);

A 7 B 6 C 5 D 4

33.结构化程序设计的三种基本逻辑结构为顺序、选择和__________。 (A) 随机 (B) 循环 (C) 相关 (D) 直接 34.下列字符串是标识符的是__________。

(A) _WL (B) 3_3333 (C) int (D) LINE 3 35.C语言提供的合法关键字是__________。 (A) break (B) print (C) funiton (D) end 36.C语言提供的合法关键字是__________。

(A) continue (B) procedure (C) begin (D) append 37.在下面字符序列中,不可用作c语言标识符的是________。

A water B price C a>b D a12 38.下列字符串是标识符的是__________。 (A) INT (B) 5_student (C) long (D) ! DF 39.下面不正确的叙述是________。 A 在C程序中所应用变量必须先定义后使用 B 在程序中,XYZ和xyz是两个不同的变量

C 若a和b类型相同,在执行了赋值语句a=b;后b中的值将放入a中,b中的值不变 D当输入数值型数据时,对于整型变量只能输入整型值;对于实型变量只能输入实型值 40.下面各标识符中,合法的用户自定义标识符是________。 A A#B B 2B C void D printf 41.以下选项中,合法的C语言关键字是________。 A VAR B cher C 2L D default 42.以下选项中非法的表达式是?

A)0<=x<100? B)i=j==0 C)(char)(65+3)? D)x+1=x+1 43.下面正确的叙述是________。

A 在C程序中,语句之间必须用分号\";\"分隔

B若a是实型变量,C程序中允许以下赋值a=10,因此实型变量中允许存放整型 C在C程序中,无论是整数还是实数,都能准确无误地表示 D在C程序中,%是只能用于整数运算的运算符 44. 以下不能定义为用户标识符的是 A)scanf?B)Void?C)_3com_?D)int 45.下列字符串是标识符的是__________。 (A) _HJ (B) 9_student (C) long (D) LINE 1 二.填空题

1.以下函数用来求出两整数之和,并通过形参将结果传回,请填空。 void func(int x,int y, ________z) { *z=x+y; }

2.主函数名后面的一对圆括号中间可以为空,但一对圆括号不能________。 3.函数体一般包括__________、__________。 4.函数体的范围是 __________。

5.在C语言中,输入操作是由库函数______完成的,输出操作是由库函数______完成。 6.在一个C源程序中,注释部分两侧的分界符分别为和______。 7.一个C源程序中至少应包括一个______。 8.C源程序的基本单位是[_________]。.

第二章 数据类型及其运算

一.单项选择题

1.在C语言中,逻辑真以________表示。

A true B 大于0的数 C 非零整数 D 非零数 2.C语言中,文件由________。 A记录组成 B 由数据行组成 C 由数据块组成 D 由字符序列组成

3.已知在ASCII代码中,字母A的序号为65,以下程序的输出的结果是_______ # include main()

{ char c1='A', c2='Y'; printf(\"%d,%d\\n\

A) 因输出格式不合法,输出错误信息 B)65,90 C)A,Y D)65,89 4.如果int i=3;int j=4,则k=i+++j执行之后k,i和j的值分别为_________。 (A) 7,3,4 (B) 8,3,5 (C) 7,4,4 (D) 8,4,5 5.sizeof(double)是___________

A)一种函数调用 B)一个双精度型表达式 C)一个整型表达式 D)一个不合法的表达式 6.在C语言中,下列类型属于基本类型的是__________。 (A) 整型、实型、字符型 (B) 空类型、枚举型 (C) 结构体类型、实型 (D) 数组类型、实型 7.以下选项中,非法的字符常量是________。 A ' \\ t ' B ' \\17 ' C \" \\ n \" D ' \\ xaa' 8.下列符号中,可以作为变量名的是__________。

(A) +c (B) *X (C) _DAY (D) next day 9.下面C语言中非法的转义字符为________。 A '\' B '\\108' C '\\n' D'\\xff' 10.以下程序的输出结果是__________。 main()

{ int i=010,j=10,k=0x10; printf(\"%d,%d,%d\n\

(A) 8,10,16 (B) 8,10,10 (C) 10,10,10 (D) 10,10,16 11.将十进制21转化为二进制为__________。

(A) 11111 (B) 10101 (C) 10011 (D) 10001 12.以下程序的输出结果是__________。 main()

{ int i=011,j=11,k=0x11; printf(\"%d,%d,%d\n\

(A) 9,11,17 (B) 9,11,11 (C) 11,11,11 (D) 11,11,16 13.在C语言中,合法的字符常量是________。 A '\\084' B '\\x43' C 'ab' D \"\\0\" 14.以下叙述正确的是________ A 可以把define和if定义为用户标识符

B 可以把define定义为用户标识符,但不能把if定义为用户标识符 C 可以把if定义为用户标识符,但不能把define定义为用户标识符 D define和if都不能定义为用户标识符

15.在C语言中,以下合法的字符常量是__________。 (A) '\084' (B) '\x43' (C) '0' (D) \"\0\" 16.在C语言中,合法的长整型常数是________。

A 0L B 4962710 C 0.054838743 D 2.1869e10 17.下列符号中,可以作为变量名的是__________。 (A) +a (B) 12345e (C) a3B (D) 5e+0 18.在C语言中,下列类型属于构造类型的是__________。 (A) 整型 (B) 字符型 (C) 实型 (D) 数组类型 19.下列类型不属于基本类型的是__________。

(A) 结构体类型和整型 (B) 结构体类型、数组、指针 (C) 实型 (D) 空类型和枚举型 20.下列常数中,不合法的C常量是__________。 (A) -0x3bl (B) 123e+2.3 (C) '}' (D) 6e+7 21.下列常数中,不合法的C常量是__________。 (A) -0x2al (B) lg3 (C) '[' (D) \"CHINA\" 22.C语言提供的合法的数据类型关键字是________。 A doubl B short C integer D Char 23.C语言中最简单的数据类型包括__________。 (A) 整型,实型,逻辑型 (B) 整型,实型,字符型 (C) 整型,字符型,逻辑型 (D) 整型,实型,逻辑型,字符型 24.当执行下面两个语句后,输出的结果为________。 char c1=97; c2=98; printf(\"%d %c\

A 97 98 B 97 b C a 98 D a b

25.设d为字符变量,下列表达式正确的是__________。 (A) d=678 (B) d='a' (C) d=\"d\" (D) d='gjkl'

26.内存中每一个基本单位,都被赋予一个唯一的序号,称为__________。 (A) 容量 (B) 地址 (C) 编号 (D) 字节 27.两个字节表示__________。

(A) 32位 (B) 16位 (C) 8位 (D) 4位 28.以下可用作C语言用户标识符的一组标识符是__________。 (A) void (B) a3_b3 (C) For (D) 2a define _123 -abc DO WORD IF Case sizeof 29.下列数中,__________最小。

(A) 二进制数100 (B) 十进制数8 (C) 十六进制数12 (D) 八进制数10 30.C语言提供的合法关键字是________。

A switch B chan C Case D default 31.下列字符串不是标识符的是__________。 (A) sum (B) average

(C) day_night (D) M.D.JOHN

32.下列说法正确的是__________。 (A) main函数必须放在C程序的开头 (B) main函数必须放在C程序的最后

(C) main函数可以放在C程序的中间部分,即在一些函数之前在另一些函数之 后,但在执行C程序时是从程序开头执行的

(D) main函数可以放在C程序的中间部分,即在一些函数之前在另一些函数之 后,但在执行C程序时是从main函数开始的 33.表达式(int)2.1416的值为__________。

(A) 2 (B) 2.1 (C) 0 (D) 3 34.C语言中能用来表示整常数的进制是__________。 (A) 十进制、八进制 、十六进制 (B) 十二进制、十进制 (C) 六进制、八进制 (D) 二进制、十进制 35.下列常数中,合法的C常量是__________。 (A) \"x-y\" (B) '105' (C) 'Be' (D) 7ff 36.下列常数中,合法的C常量是__________。 (A) -0. (B) '105' (C) 'AB' (D) 3+5 37.下列常数中,合法的C常量是__________。 (A) '\n' (B) e-310 (C) 'DEF' (D) '1234' 38.以下程序的输出结果是_______。 #include main() {

int i=011, j=11;

printf(\"%d,%d\n\

(A) 10,11 (B) 12,10 (C) 11,11 (D) 10,9 39.下面各运算符中,优先级别最低的是______ A ?: B - - C && D - =

40.在C语言中,要求运算数必须是整型的运算符是__________。 (A) % (B) / (C) < (D) !

41.在以下一组运算符中,优先级最高的运算符是__________。 (A) <= (B) = (C) % (D) && 42.下列运算符中优先级最高的是__________。

(A) >> (B) + (C) && (D) !=

43.如果int i=3,则printf(\"%d\的结果为____________,i的值为 __________。 (A) -3,4 (B) -4,4 (C) -4,3 (D) -3,3

44.设有语句int a=3;则执行了语句a+=a-=a*a;后,变量a的值是 _________。 A)3 B)0 C)9 D)-12

45.如果int i=3,则k=(++i)+(++i)+(i++)执行过后k的值为_________,i 的值为__________。 (A) 15,6 (B) 12,5 (C) 18,6 (D) 15,5

46.C语言中,运算对象必须是整型数的运算符是__________。 (A) % (B) / (C) %和/ (D) **

47.当运行以下程序时输入OPEN T H E DOOR

(此处代表Enter键),则输出结果是________。 #include char fun(char *c) { if(*c<='Z'&& *c>='A') *c-='A'-'a'; return *c;} main()

{ char s[81], *p=s; gets(s); while(*p)

{ *p=fun(p);putchar(*p);p++; } putchar('\n'); }

(A) oPEN tHE dOOR (B) open the door

(C) OPEN T H E DOOR (D) Open The Door

48.写出下面程序的输出结果__________。 main() { int x=2,y=0,z;

x+=3+2;printf(\"%d\ x*=y=z=4;printf(\"%d\ }

(A) 7 28 (B) 无法计算 (C) 7 4 (D) 8 4 49.写出下面程序的输出结果__________。 main() { int x,y,z; x=y=1; z=x++ -1;

printf(\"%d,%d\t\ z+=-x++ +(++y||++z); printf(\"%d,%d\

(A) 2,0 3,-1 (B) 2,1 3,0 (C) 2,0 2,1 (D) 2,1 0,1 50.写出下面程序的输出结果__________。 main() { int x;

x=-3+4*5-6;printf(\"%d\ x=3+4%5-6;printf(\"%d\ x=-3*4%-6/5;printf(\"%d\ x=(7+6)%5/2;printf(\"%d\

(A) 11 1 0 1 B) 11 -3 2 1 (C) 12 -3 2 1 (D) 11 1 2 1 51.下面程序的输出结果是__________。 main() { int x=0x23;

printf(\"%d\n\ }

(A) 36 (B) 35 (C) 23 (D) 24

52.以下关于运算符优先级的描述中,正确的是__________。

(A) !(逻辑非)>算术运算>关系运算>&&(逻辑与)>||(逻辑或)>赋值运算 (B) &&(逻辑与)>算术运算>关系运算>赋值运算

(C) 关系运算>算术运算>&&(逻辑与)>||(逻辑或)>赋值运算 (D) 赋值运算>算术运算>关系运算>&&(逻辑与)>||(逻辑或)

53.若已定义x和y为double类型,则表达试: x=1,y=x+3/2的值是________。 A 1 B 2 C 2.0 D 2.5 54.以下程序的运行结果是__________。 main() {

int c,x,y; x=0; y=0; c=0;

c=x++&&y++;

printf(\"\n%d %d %d\n\(A) 1 0 0 (B) 2 1 1 (C) 0 1 1 (D) 0 0 1

55.为表示关系x>=y>=z,应使用C语言表达式__________。 (A) (y<=x)&&(y>=z) (B) (x>=y)AND(y>=z) (C) (x>=y>=z) (D) (x>=y)&(y>=z) 56.表达式(double)(20/3)的值为__________。 (A) 6 (B) 6.0 (C) 2 (D) 3

57.程序段:int i=65536:printf(\"%d\\n\); 则输出结果是________。 A 65536 B 0 C有语法错误,无输出结果 D -1

58.在下面关于多种类型数据的混合运算的叙述中,正确的一条是___。 A 一个int整型与一个double型数据运算,先将double型转换成int型 B 一个int型与一个long型数据运算,先将int型转换成long型 C float型数据在运算时一律先转换成单精度型

D 一个int型与一个short型数据运算,先将int型转换成short型 59.10+'a'+1.5-567.345/'b'的结果是__________型数据。 (A) long (B) double (C) int (D) unsigned float 60.对于下面的程序,说法正确的是__________。 main( )

{ int x=3, y=1, z=1;

if(x=y+z) printf(\"x=y+z\"); else printf(\"x!=y+z\"); }

(A) 有语法错误不能通过编译 (B) 输出x=y+z (C) 可以通过编译,但是不能通过连接,因而不能运行 (D) 输出x!=y+z

61.语句int i=3;k=(i++)+(i++)+(i++);执行过后k的值为__________,i的值为__________。 (A) 9,6 (B) 12,5 (C) 18,6 (D) 15,5

62.假设所有变量均为整型,表达式a=2,b=5,a>b? a++: b++,a+b的值是_____。 A 7 B 8 C 9 D 2 63.分析以下程序 #include main()

{ int a,b,c=246;

a=c/100%9;b=(-1)&&(-1); printf(\"%d,%d\n\ }

其输出结果是__________。

(A) 2,1 (B) 3,2 (C) 4,3 (D) 2,-1

64.若x=3,y=z=4,则下列表达式的值分别为__________。 (1) (z>=y>=x)? 1:0 (2) z>=y&&y>=x

(A) 0 1 (B) 1 1 (C) 0 0 (D) 1 0 65.设有如下定义:

int x=10,y=3,z;则语句printf(\"%d/n\的输出结果是__________。 (A) 3 (B) 0 (C) 4 (D) 1 66.设有语句char a='\\72';则变量a __________

A)包含1个字符 B)包含2个字符 C)包含3个字符 D)说明不合法 67.以下程序的运行结果是__________。 main() {

int a=5,b=6,c=7,d=8,m=2,n=2; printf(\"%d\n\ }

(A) 0 (B) 1 (C) 2 (D) 3 68.下面程序的输出结果是__________。 main() { int a,b,c; a=100; b=200;

printf(\"%d\ }

(A) 200 (B) 100 (C) 100 200 (D) 输出格式符不够,输出不确定的值 69.在C语言中,如果下面的变量都是int类型,则输出的结果是____。 sum=wa=10;

wa=sum++,wa++,++wa; printf(\"%d\n\

(A) 10 (B) 12 (C) 11 (D) 13

70.若已定义int a=25,b=14,c=19;以下三项运算符(?:)所构成的语句的执 行结果是__________。

a++<=25&&b--<=2&&c++? printf(\"***a=%d,b=%d,c=%d\n\ printf(\"###a=%d,b=%d,c=%d\n\

(A) (***a=25,b=14,c=19) (B) (***a=26,b=13,c=19) (C) (###a=25,b=14,c=19) (D) (###a=26,b=13,c=19)

71.表达式:10!=9的值是__________。 (A) true(B) 非零值 (C) 0(D) 1

72.表达式a73.表达试:10!=9的值是_________。

A true B非零值 C 0 D 1 74.逻辑运算符运算对象的数据类型__________。 (A) 只能是0或1 (B) 只能是.T.或.F. (C) 只能是整型或字符型 (D) 任何类型的数据

75.判断字符型变量ch为小写字母的表达式是__________。 (A) 'a'<=ch<='z' (B) (ch>=a)&&(ch<=z) (C) (ch>='a') || (ch<='z') (D) (ch>='a')&&(ch<='z')

76.若t为double类型,表达试t=1,t+5,t++的值是________。 A 1 B 6.0 C 2.0 D 1.0 77.下面程序的输出是__________。 main() { int x=10,y=3;

printf(\"%d\n\ }

(A) 0 (B) 1 (C) 3 (D) 不确定的值

78.若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为_______ A a<>0 B !a C a=0 D a 79.若有以下函数关系 x<0→y=2x x>0→y=x x=0→y=x+1

下面程序段能正确表示以上关系的是__________。 (A) y=2x; if(x!=0) if(x>0) y=x; else y=x+1; (B) y=2x; if(x<=0) if(x==0) y=x+1; else y=x; (C) if(x>=0) if(x>0) y=x; else y=x+1; else y=2x;

(D) y=x+1; if(x<=0) if(x<0) y=2x; else y=x; 若有以下变量定义:

float x;int a,b;则正确的switch语句是__________。 (A) switch(x)

{ case 1.0:printf(\"*\n\"); case 2.0:printf(\"**\n\"); } (B) switch(x)

{ case 1,2:printf(\"*\n\"); case .3:printf(\"**\n\"); } (C) switch(a+b)

{ case 1:printf(\"*\n\"); case 2*a:printf(\"**\n\"); } (D) switch(a+b)

{ case 1:printf(\"*\n\"); case 1+2:printf(\"**\n\"); }

80.设a、b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0 的表达式是__________。 (A) 'a'&&'b' (B) a<=b

(C) a||b+c&&b-c (D) !((a<b)&& !c||1)

81.设int a=12, 则执行完语句a+=a-=a*a的值是_______ A 522 B 264 C 144 D -264

82.设int x=10,y=3,z;则语句printf(\"%d\\n\)的输出结果是________。 A 1 B 0 C 4 D 3

83.下列赋面语句中符合C语言语法的是__________。 (A) a=7+b+c=a+7; (B) a=7+b++=a+7; (C) a=7+b,b++,a+7 (D) a=7+b,c=a+7;

84.下面不正确的赋值语句是________

A i++; B i=i=5; C k=2*4, k*4 D y=float(i); 85.以下程序的输出结果是_______ main() {

int x=10, y=10;

printf(\"%d %d\\n\}

A 10 10 B 9 9 C 9 10 D 10 9 86.以下程序的输出结果是__________。 main()

{ int x=10,y=10;

printf(\"%d%d\n\(A) 10 10(B) 9 9(C) 9 10(D) 10 9

87.若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关 系的表达式为__________。 (A) a<>0 (B) !a (C) a=0 (D) a 88.以下程序的输出结果是 _________ # include main()

{ int i=010 , j = 10;

printf(\"%d,%d\\n\ }

A) 11,10 B ) 9,10 C) 010,9 D) 10,9

89.设m、n、p、q为整形变量,则下面选项中不正确的赋值语句是_______ A m=n=p=q=168; B m+n; C p++; D p=m+n-(q=23); 90.设有以下说明:char ch='B',且有下面的表达式: ch=(ch>='A'&& ch<='Z')?(ch+32):ch; 则上面表达式的值是__________。

(A) B (B) b (C) Z (D) z 91.设有语句

int a=5,b=6,c=7,d=8,m=2,n=2; (m=a>b)&&(n=(++c>d && b92.设语句int a=3; ,则执行了语句a+=a-=a*a; 后,变量a 的值是______ A 3 B -12 C 9 D 0

93.设语句int a=3; ,则执行了语句a-=a-=a*a; 后,变量a 的值是______ A 3 B 0 C 9 D -12 94.下面语句中为C语言中正确的赋值语句是_________ A x=1,y=2 B k++; C x=y=2 D y=int(x) 95.写出下面程序的输出结果__________。 main() { int x=2,y=0,z;

x*=3+2;printf(\"%d\ x*=y=z=4;printf(\"%d\

(A) 8 40 (B) 10 40 (C) 10 4 (D) 8 4 96.以下程序的输出结果是 __________ # include # include main()

{ int a=1,b=4,c=2; float x=10..5 , y=4.0 , z;

z=(a+b)/c+sqrt((double)y)*1.2/c+x; pritnf(\"%f\\n\

A) 14.000000 B) 015.400000 C) 13.700000 D) 14.900000 97.以下C语言赋值语句合法的是__________。

(A) X=Y=58 (B) j++; (C) X=58,Y=58 (D) M=int(X+Y); 98.下面程序的输出是__________。 main()

{ int a=-1,b=4,k;

k=(a++<=0)&&(!(b--<=0)); printf(\"%d %d %d\n\

(A) 0 0 3 (B) 0 1 2 (C) 1 0 3 (D) 1 1 2 99.以下程序的输出结果是______ # include main() { int a ,b,d=241; a=d/100%9; b=(-1)&&(-1); printf(\"%d,%d\\n\ }

A) 6,1 B) 2,1 C) 6,0 D) 2,0 100.以下程序的运行结果是__________。 main() {

int c,x,y; x=1; y=1; c=0; c=x++||y++;

printf(\"\n%d %d %d\n\ }

(A) 1 1 0 (B) 2 1 1 (C) 0 1 1 (D) 0 0 1 101.有以下程序 main()?

{?int?a;?char?c=10; float?f=100.0;? doubl?e?x; a=f/=c*=(x=6.5);

printf(\"%d?%d?%3.1f??%3.1f\\n\}

程序运行后的输出结果是

A)1? 65? 1? 6.5? B)1 ?65? 1.5? 6.5 C)1 ?65? 1.0? 6.5? D)2? 65? 1.5 ?6.5

102.执行下面程序中的输出语句后,a的值是__________。 main() { int a;

printf(\"%d\n\(A) 65 (B) 20 (C) 15 (D) 10

103.如果int i=3,则k=(++i)+(++i)+(++i)执行过后k的值为_________,i 的值为__________。

(A) 9,6 (B) 12,5 (C) 18,6 (D) 15,5

104.若已知a=10,b=20,则表达式! a105.能正确表示x的取值范围在[-10,-5]和[0,100]内的表达式是_______。 (A) (x<=-10)||(x>=-5) && (x<=0)||(x>=100) (B) (x>=-10)&&(x<=-5) || (x>=0)&&(x<=100) (C) (x>=-10)&&(x<=-5) && (x>=0)&&(x<=100) (D) (x<=-10)||(x>=-5) && (x<=0)||(x>=100) 106.写出下面程序的输出结果__________。 main() { int x=4,y=0,z;

x*=3+2;printf(\"%d\ x*=(y==(z=4));printf(\"%d\ }

(A) 14 40 (B) 20 0 (C) 20 4 (D) 14 4 二.填空题

1.以下程序的输出结果是__________ #define MAX(x,y) (x)>(y)?(x):(y) main()

{ int a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d)*10; printf(\"%d\\n\}

2.在C语言中,程序运行期间,其值不能被改变的量叫____

3.在一个变量定义语句中可以同时定义多个变量,变量之间用__________隔开。 4.在TURBO C中,单精度实数的数值范围约在_____~_____之间。

5.在C语言中,字符型数据和整型数据之间可以通用,一个字符数据既能以__________输出,也能以__________输出。

6.C的字符常量是用__________括起来的一个字符。

7.在C语言中,系统在每一个字符串的结尾自动加一个\"字符串结束标志符\"即__________,以便系统据此判断字符串是否结束。

8.十进制数153转化为二进制数为__________。 9.C语言的关键字都用__________{大写或小写}。 10.符号常量是指__________。

11.在C语言中,实数有两种表示形式,即__________和__________。

12.在一个整常量后面加一个字母__________或__________,则认为是longint型常量。

13.在C语言中,常量有不同的类型,包括___________、___________、___________和_____________等。

14.在C语言中,习惯上符号常量名用__________,变量用__________。{大写或小写} 15.整型常量和实型常量也称为__________,它们有正负值之分。

16.C语言基本数据类型包括__________、__________、__________、__________。 17.实型变量分为__________和__________,即float和duble型。 18.int型的取值范围是_____ ~ _____。

19.C语言中规定,在变量定义的同时也可以给变量赋初值,叫做__________。

20.C语言数据类型中构造类型包括三种,它们是__________、__________、 __________。 21.若想通过以下输入语句a使中存放字符串1234,b中存放字符5,则输入数据的形式应该是──. char a [10],b;

scanf(\"a=%sb=%c\

22.C的字符串常量是用__________括起来的字符序列。 23.位无符号二进制数能表示的最大十进制数是______。

24.C语言中逻辑运算符的优先级是__________高于__________高于__________。 25.C语言中运算符的优先级最小的是__________运算符。

26.在ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII码大__________。 27.在C语言中,算术运算符的结合性是__________。

28.在C语言中,算术运算符有加、减、乘、除等,这些运算符需要两个运算对象,称为__________运算符。

29.一个C源程序至少包含一个__________,即__________。

30.sizeof用于计算出各个数据类型使用多少内存空间(以bytes为单位),若有语句: i=sizeof(int);和j=sizeof(char); 则:i=_________;j=_________。 31.在C语言中,变量是指__________。

32.在C语言中,可以利用__________将一个表达式的值转换成指定的类型。 33.sizeof用于计算出各个项数据类型使用多少内存空间(以bytes为单位),若有语句: i=sizeof(float);和j=sizeof(double); 则:i=_______ ;j= ________。

34.与八进制小数0.1等值的十六进制小数为__________。 35.下面的程序 main() { float x; int i; x=3.6; i=(int)x;

printf(\"x=%f,i=%d\ 运行结果为__________。 36.下面的程序 main() { char c1,c2;

c1='A';c2='B';c1=c1-32;c2=c2-32; printf(\"%c %c\运行结果为__________。 37.下面程序 main() { int i,j,m,n; i=8;j=10; m=++i;n=j++;

printf(\"%d,%d,%d,%d\运行后i,j,m,n的值是__________。

38.表达式10+'a'+1.5-0.5*'B'的结果是__________。

39.表达式10+'a'+1.5-567.345/'b'的结果是__________型数据。

40.表达式x=(a=3,6*3)和表达式x=a=3,6*a分别是__________表达式和_________表达式,两个表达

式执行完的结果是__________和__________。两个表达式执行完后x的值是__________,__________。

41.如果int i=3,则printf(\"%d\执行后的输出以及i的结果分别是 __________。 42.写出以下数学式的C语言表达式_________。 ab·c

43.若已知a=10,b=20,则表达式!a<b的值为________。

44.设x和y均为int型变量,且x=1,y=2,则表达式2.0+y/x的值为______。 45.下面程序的执行结果是__________。 main() {

int a=5,b=4,c=9;

printf(\"###%d\ }

46.若x=3,y=2,z=1,求下列表达式的值分别为:

(1)________ (2)________ (3)__________ (1) x47.表示\"整数x的绝对值大于5\"时值为\"真\"的C语言表达式是 ________ 48.以下程序的输出结果是_________ void fun() { static int a=0; a+=2; printf(\"%d\} main() { int cc;

for(cc=1;cc<4;cc++) fun() printf(\"\\n\"); }

49.逗号表达式如下: 表达式1,表达式2

则逗号表达式的结果是__________的值。

第三章 基本语句

一.单项选择题

1.以下程序的输出结果是________ # include main() { int i;

for ( i=1;i<=5;i + + ) {if ( i%2 ) printf(\"*\"); else continue; printf(\"#\");} printf(\"$\\n\"); }

A) *#*#*#$ B) #*#*#*$ C) *#*#$ D) #*#*$ 2.以下程序的输出结果是_________ # include main() { int a=2,c=5;

printf(\"a=%%d,b=%%d\\n\

A) a=%2,b=%5 B) a=2,b=5 C) a=%%d,b=%%d D) a=%d,b=%d 3.设k 为int 变量,下面语句将输出_____ k=1988;

printf(\"|%-06d|\\n\

A 输出格式描述符不合法 B 输出为|001988| C 输出为|1988| D 输出为|-01988|

4.若欲表示在if后a不等于0的关系,则能正确表示这一关系的表达式为 __________。

(A) a< >0 (B) ! a (C) a=0 (D) a

5.判断字符型变量ch为大写字母的表达式是__________。 (A) 'A'<= ch <='Z' (B) (ch>='A')&(ch<='Z') (C) (ch>='A')&&(ch<='Z') (D) (ch>='A')AND(ch<='Z') 6.以下程序的输出结果是__________。 main()

{ int a=-1,b=4,k;

k=(++a<=0)&&! (b--<=0); printf(\"%d %d %d\n\

(A) 1 0 4 (B) 0 0 4 (C) 1 0 3 (D) 0 0 3 7.有以下程序 main()

{ int a=1,b=2,m=0,n= 0,k; k=(n=b>a)||(m=a ) ; printf(\"%d,%d\\n\ }

程序运行后的输出结果是

A)0,0 B)0,1 C)1,0 D)1,1

8.若int类型数据占两个字节,则下列语句的输出为________。 int k=-1;

Printf (\"%d, %u, \\n\

A -1, -1 B -1,32767 C -1,32768 D -1,65535

9.若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存 储单元: int *p;

p=__________malloc(sizeof(int)); 则应填入__________。

(A) int (B) int * (C) (*int) (D) (int*) 10.设a为float 变量,下面语句将输出_____ float a=271.828; printf(\"%-4.2f\\n\

A 输出格式描述符的域不够宽,不能输出 B 输出为271.83 C 输出为271.82 D 输出为-271.82 11.在下列选项中,不正确的赋值语句是_______ A ++t; B n1=(n2=(n3=0)); C k=i=j; D a=b+c=1; 12.若有以下定义各语句: char c1='b', c2='e';

printf (\"%d, %c \\n\ 则输出结果是_______

A 2, M B 3, E C 2, E D 输出结果不确定 13.以下程序的输出结果是__________。 main()

{ char c1='6',c2='0';

printf(\"%c,%c,%d,%d\n\(A) 因输出格式不合法,输出出错信息 (B) 6,0,6,102 (C) 6,0,7,6 (D) 6,0,5,7 14.若k为int变量,则以下语句________。 k=8567;

printf(\"| %-06d | \\n\);

A 输出格式描述符不合法 B输出为0085671 C输出为|8567| D输出为|-08567| 15.分析程序片段(字符串内没有空格字符): printf(\"%d\n\\n012\1\\\")); 上面程序片段的输出结果是__________。 (A) 11 (B) 10 (C) 9 (D) 8 16.分析程序: #include main() { int a;float b,c;

scanf(\"%2d%3f%4f\ printf(\"\na=%d,b=%f,c=%f\n\ }

若运行时从键盘上输入9876543210(表示回车),则上面程序的输出结果是__________。

(A) a=98,b=765,c=4321 (B) a=10,b=432,c=8765

(C) a=98,b=765.000000,c=4321.000000 (D) a=98,b=765.0,c=4321.0

17.当输入为\"quert?\"时,下面程序的执行结果是__________。 #include main() { char c; c=getchar(); while(c!='?') { putchar(c); c=getchar(); } }

(A) quert (B) Rvfsu (C) quert? (D) rvfsu?

18.printf函数中用到格式符\"%4s\其中数字4表示输出的字符串占用4列。 如果字符串长度大于4,则按原字符长从左向右全部输出;如果字符串长度小于4,则输出方式为__________。 (A) 左对齐输出该字符串,右补空格 (B) 按原字符长从左向右全部输出 (C) 右对齐输出该字符,左补空格 (D) 输出错误信息

19.以下程序的输出结果是 _____ # include main()

{ int k=4,m=1,p;

p=func(k,m); printf(\"%d,\func(a,b) int a,b;

{ static int m=0,i=2;

i+=m+1; m=i+a+b; return(m); }

A) 8,17 B) 8,16 C) 8,20 D) 8,8

20.已知在ASCII代码中,字母A的序号为65,以下程序的输出结果是________。 #include main() {

char ch1='A',ch2='b'; printf(\"%d,%d\n\ }

(A) 因输出格式不合法,输出错误信息 (B) 65,98 (C) A,b (D) 65,89

21.有定义语句:int?x,?y;,若变量x得到数值11,变量y得到数值12,下面四组输入要通过scanf(\"%d,%d\语句使变量x得到数形式中,错误的是 A)11?12<回车> ?B)11,?12<回车> C)11,12<回车>? D)11?,<回车> 12<回车>?

22.已知在ASCII字符集中,数字0的序号为48,下面程序的输出结果为______。 main()

{ char x,y; x='0'; y='9'; printf(\"%d,%d\n\(A) 因输出格式不合法,输出错误信息

(B) 48,57 (C) 0,9 (D) 48,58

23.已知在ASCII集中,字母A的序号是65,以下程序的输出结果是__________。 main()

{ char c1='B',C2='Y';

printf(\"%d,%d\n\(A) 输出格式不合法,输出错误信息 (B) 67,88 (C) 66,89 (D) C,X 24.分析程序片段:

int i=65536;printf( \"%d\n\

上面程序片段的输出结果是__________。

(A) 65536 (B) 0 (C) -1 (D) 有语法错误,无输出结果

25.根据题目中已给出的数据输入和输出形式,程序中输入输出语句的正确内容是__________。 main() {

int a;float x; printf(\"input a,x:\"); 输入语句 输出语句 }

输入形式 input a,x: 3 2.1 输出形式 a+x=5.10

(A) scanf(\"%d,%f\\na+x=%4.2f\(B) scanf(\"%d%f\\na+x=%4.2f\(C) scanf(\"%d%f\\na+x=%6.1f\(D) scanf(\"%d%3.1f\\na+x=%4.2f\

26.已知在ASCII字符集中,字母A的序号为65,下面程序的输出结果为_______。 main()

{ char c='A'; int i=10; c=c+10; i=c%i;

printf(\"%c,%d\n\

(A) 75,7 (B) 75,5 (C) K,5 (D) 因存在非图形字符,无法直接显示出来 27.下面程序段运行时输出结果是________。 char s[18]=\"a book !\"; printf(\"%.4s\",s); A a book ! B a bo

C a book! D 格式描述不正确,没有确定输出 28.如a为整形变量,以下语句_________. printf(\"%d\\n\

A 赋值不合法 B输出为不确定值 C输出值为-2 D 输出值为2

29.在scanf函数的格式控制中,格式说明的类型与输入项的类型应该一一对应匹配。如果类型不匹配,系统将__________。 (A) 不予接收

(B) 并不给出出错信息,但不可能得到正确数据 (C) 能接收到正确输入

(D) 给出出错信息,不予接收输入

30.若有定义:int x,y;char a,b,c;并有以下输入数据(此处,代表换行 符)1 2A B C则能给x赋整数1,给y赋整数2,给a赋字符A,给b赋 字符B,给c赋字符C的正确程序段是__________。

(A) scanf(\"x=%dy=%d\(B) scanf(\"%dy%d\(C) scanf(\"%d%d%c%c%c%c%c%c\(D) scanf(\"%d%d%c%c%c\31.在C语言中,退格符是__________。 (A) \n (B) \t (C) \v (D) \b 32.有以下程序? main()?

{?int?x=3,?y=2,?z=1;? printf(\"%d\\n\ }?

程序运行后的输出结果是? A)3?B)2?C)1?D)0

33.以下程序的输出结果是________。 #include main() {

int a=2, c=5;

printf(\"a=%%d, b=%%d\\n\}

A a=%2, b=%5 B a=2, b=5 C a=%%d D a=%d, b=%d 34.写出下面程序的输出结果__________。 main()

{ int x=40,y=4,z=4; x=y==z; printf(\"%d\ x=x==(y-z); printf(\"%d\

(A) 4 0 (B) 4 1 (C) 1 1 (D) 1 0 35.下面程序的输出结果是__________。 main() { int k=11;

printf(\"k=%d,k=%o,k=%x\n\ }

(A) k=11,k=12,k=11 (B) k=11,k=13,k=13 (C) k=11,k=013,k=0xb (D) k=11,k=13,k=b

36.下列说法正确的是__________。

(A) 输入项可以是一个实型常量,如scanf(\"f%\

(B) 只有格式控制,没有输入项,也能进行正确输入,如scanf(\"a=%d,b=%d\"); (C) 当输入一个实型数据时,格式控制部分应规定小数点后的位数,如 scanf(\"%5.3f\

(D) 当输入数据时,必须指明变量的地址,如scanf(\"%f\37.下面程序的输出结果是__________。 main() { char x=060;

printf(\"%d\n\

(A) 96 (B) 160 (C) 24 (D) 48 38.设有如下程序段?:? int?x=2002,?y=2003;? printf(\"%d\\n\ 则以下叙述中正确的是?

A)输出语句中格式说明符的个数少?于输出项的个数,不能正确输出? B)运行时产生出错信息? C)输出值为2002? ?D)输出值为2003? 39.下列程序的输出是_________ main( ) {

char ch='A'; ch--;

printf(\"%d\\n\}

A 18 B 9 C -18 D -9 40.若x是int型变量,且有下面的程序片段: for(x=3;x<6;x++)

printf((x%2)?(\"**%d\"):(\"##%d\n\"),x); 上面程序片段的输出结果是__________。 (A) **3 (B) ##3 (C) ##3 (D) **3##4 ##4 **4 **4##5 **5 **5 ##5

41.若k是int型变量,且有下面的程序片断: k=-3;

if(k<=0)printf(\"# # # #\") else printf(\"&&&&\"); 上面程序片断的输出结果是_______.

A # # # # B &&&& C # # # # D 有语法错误,无输出结果

42.若k是int型变量,且有下面的程序片段: k=-3;

if(k<=0) printf(\"# # # #\") else printf(\"& & & &\");

上面程序片段的输出结果是__________。 (A) # # # # (B) & & & &

(C) # # # # & & & & (D) 有语法错误,无输出结果

43.在C语言中,如果下面的变量都是int类型,则输出的结果是 ________ sum=pad=5; pad=sum + + ,pad + + , + + pad; printf(\"%d\\n\

A) 7 B) 6 C) 5 D) 4 44.以下语句的输出结果是__________。 printf(\"%d\n\\t\\01\txt\n\"));

(A) 5 (B) 14 (C) 8 (D) 输出项不合法,无正常输出 45.以下C程序,正确的运行结果是__________。(注:└┘表示空格) main()

{ long y=-34567; printf(\"y=%-8ld\n\ printf(\"y=%-08ld\n\ printf(\"y=%08ld\n\ printf(\"y=%+8ld\n\(A) y=└┘└┘-34567 y=-└┘└┘34567 y=-0034567 y=-34567 (B) y=-34567 y=-34567 y=-0034567 y=+└┘-34567 (C) y=-34567 y=-34567 y=-0034567 y=└┘└┘-34567 (D) y=└┘└┘-34567 y=-0034567 y=00034567 y=+34567

46.字符(char)型数据在微机内存中的存储形式是__________。 (A) 反码 (B) 补码 (C) EBCDIC码 (D) ASCII码 47.下面语句的输出结果是______ printf(\"%d\\n\(int)(2.5+3.0)/3);

A 有语法错误不能通过编译 B 2 C 1 D 0

48.C语言中调用printf函数进行输出时需要注意,在格式控制串中,格式说明与输出项的个数必须相同。如果格式说明的个数小于输出项的个数,多余的输出项将________;如果格式说明的个数多

于输出项的个数,则对于多余的格式将输出不定值(或0)。

(A) 不予输出 (B) 输出空格 (C) 照样输出 (D) 输出不定值或0 49.设有如下定义

int x=10,y=5,z;则语句printf(\"%d\n\ 的输出结果是__________。 (A) 1 (B) 0 (C) 4 (D) 3 50.下面语句执行后的输出为_________ int=-1;

if(i<0) printf(\"* * * *\\n\") else printf(\"%%%%\\n\")

A * * * * B %%%% C %%%%c D 有语法错误,不能正确执行 51.在C语言中,反斜杠字符是__________。 (A) \n (B) \t (C) \v (D) \\ 52.有以下程序: #include union pw

{ int i; char ch[2]; } a; main()

{ a.ch[0]=13; a.ch[1]=0; printf(\"%d\\n\

程序的输出结果是 _______(注意: ch[0]在低字节,ch[1]在高字节。) A) 13 B) 14 C) 208 D) 209 53.若有以下程序段,w和k都是整形变量: w=k;

LB: if(w= =0) goto LE; w--; printf(\"*\"); goto LB; LE:

则不能与上面程序段等价的循环语句是_______ A for(w=k ; w!=0; w--) printf(\"*\"); B w=k; C w=k;

do{w--;printf(\"*\");} while(w!=0); D for(w=k ; w; --w) printf(\"*\"); 二.填空题

1.要使以下程序段输出10个整数,请填入一个整数。for(i=0;i<=_________;printf(\"%d\\n\2.函数mycmp (char*s,chat *t)的功能是比较字符串s和t的大小,当s等于t 时返回0,否则返回s和t的第一个不同字符的ASCII码的差值,即当s>t时返回正值, 当s等于t 时返回0,否则返回s和t的第一个不同字符的ASCII码的差值,即当s>t时返回正值, 当sreturn (________); }

3.若输入字符串:abcde<回车>,则以下while循环体将执行_________次。 While((ch=getchar())=='e') printf(\"*\"); 4.下面程序的输出结果是 7 ───. char b []=\"ABCD\"; main() { char *chp ;

for (chp =b;*chp ;chp +=2) printf(\"%s\printf(\"\\n\"); }

5.下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。 int add(int x,int y, ________z) { ______ =x+y;}

6.(下面程序把从终端读入的文本用@作为文本结束标志)复制到一个名为bi.dat的新文件中,请填空。

#include FILE *fp; main() { char ch;

if((fp=fopen(_______))==NULL)exit(0); while ((ch=getchar())!='@')fputc(ch,fp); _______;}

7.函数pi的功能是根据以下近似公式求鹬担?(?*?)/6=1+1/(2*2)+1/(3*3)+..+1/(n*n) 现在请你在下面的函数中填空,完成求鸬墓δ堋£ #include \"math.h\" double pi(long n) { double s=0.0; long i;

for(i=1;i<=n;i++)s=s+ ________ ; return(sqrt(6*s)); }

8.下列程序的输出结果是__________。 #include \"stdio.h\" main()

{ char b[]=\"ABCDEFG\" char *chp=&b[7]; while(--chp>&b[0]) putchar(*chp); putchar('\n'); }

9.下面程序的输出结果是__________ main() { int x,y,z; x=3;y=z=4;

printf(\"%d\printf(\"%d\

}

10.C语言是通过__________来进行输入和输出的。

11.通过以下输入语句给x赋值2,给y赋值3,则输入数据的形式应该是 __________。 int x,y;

scanf(\"x=%d,y=%d\

12.scanf函数中的\"格式控制\"后面应当是__________,而不是__________。 13.如果想输出字符\"%\则应该在\"格式控制\"字符串中用__________表示。 14.写出下列程序的输出结果__________。 #include main() { char a; a='A';

printf(\"%d %c\

15.printf函数的\"格式控制\"包括两部分,它们是__________和_________。 16.分析下面程序(回车换行符用表示): main() { int x,y;

x=16;y=(x++)+x);printf(\"%d\n\ x=15;printf(\"%d,%d\n\ x=20;y=x-- +x;printf(\"%d\n\ x=13;printf(\"%d,%d\程序的输出结果是__________。

17.分析下面程序(回车换行符用表示): #include main() { int x=2,y,z;

x*=3+2;printf(\"%d\n\ x*=y=z=4;printf(\"%d\n\ x=y=z;printf(\"%d\n\ x=(y=z);printf(\"%d\n\ 程序的输出结果为__________。 18.分析下列程序 main()

{ printf(\"%d\ printf(\"%d\ printf(\"%d\ printf(\"%d\ printf(\"%d\程序的输出结果是__________。

19.对不同类型的数据有不同的格式字符。例如:__________格式字符是用来输出十进制整数,________格式字符是用来输出一个字符,_________格式字符是用来输出一个字符串。 20.编制程序对实数a与b进行加减乘除计算,要求显示如下结果。 jia=70.000000 jian=30.000000

cheng=1000.000000 chu=2.500000 程序:#include void main(void) { __________ a=50.0;b=20.0;

printf(\"jia=%f\n\ printf(\"jian=%f\n\ printf(\"cheng=%f\n\ printf(\"chu=%f\n\ 将缺少的部分,填在空白处。 21.putchar函数的作用是__________。 22.阅读程序 main()

{ char str1[]=\"people and computer\[10]; char *p1=str1,*p2=str2; scanf(\"%s\ printf(\"%s\ printf(\"%s\n\

运行上面的程序,输入字符串PEOPLE AND COMPUTER,则程序的输出结果是__________。 23.以下程序的输出结果是 _________ main()

{ unsigned short a=65536; int b; printf(\"%d\\n\}

24.在C语言中,用来标识变量名,符号常量名,函数名,数组名,类型名,文件名的有效字符序列称为__________。

25.在C语言中,要求对所有用到的变量,遵循先定义后__________的原则。

26.在C语言中,标识符只能由__________、__________和__________三种字符组成,且第一个字符必须是__________或__________。

27.以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后按照逆序输出该字符串,补足所缺语句。 #include #include main()

{ char str[81],*sptr; int i;

for(i=0;i<80;i++) { str[i]=getchar( ); if(str[i]=='\n')break; }

str[i]=____(1)____; sptr=__________; while(*sptr)

putchar(*sptr--); }

28.可以用来表示C的整常数的进制是__________、__________、__________。 29.分析下面的程序 main() { int a,b,c; a=b=c=1;

a+=b; b+=c; c+=a; printf(\"(1)%d,\ printf(\"(2)%d,\ (a>=b>=c)? printf(\"AA\"):printf(\"CC,\"); printf(\"a=%d,b=%d,c=%d\n\}

运行结果为(1)___。 (2)_______________。

30.C语言的数据类型有四大类,其分别为__________、__________、 __________、__________。 31.表示条件:10{ enum em{ em1=3,em2=1,em3}; char *aa[]={\"AA\

printf(\"%s%s%s\\n\

33.若有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量b中的值是_________ c=(a-=(b-5)); c=(a%11)+(b=3);

34.若想通过以下输入语句给a赋于1,给b赋于2,则输入数据的形式应该是_______ int a,b;

scanf(\"a=%b,b=%d,&a,&b);

35.下面程序的输出结果是__________。 main()

{ int x=1,y=1,z=1; y=y+z;x=x+y; printf(\"%d\ printf(\"%d\ printf(\"%d\ printf(\"%d\

36.想通过以下输入语句给a赋值1,给b赋值2,则输入数据的形式应该是 __________。 int a,b;

scanf(\"a=%d,b=%d\

37.变量也有不同类型,如__________、__________和__________等。

38.C语言在定义变量的同时说明变量的__________,系统在编译时就能根据变量定义及其__________为它分配相应大小的存储空间。

第四章 选择结构程序设计

一.单项选择题

1.写出下面程序的运行结果__________。 main() { int x,y=1,z=0; if(y!=0) x=5;

printf(\"x=%d\t\ printf(\"x=%d\t\n\ x=1; if(z<0)

if(y>0) x=3; else x=5;printf(\"x=%d\t\n\ if(z=y<0) x=3; else if(y==0) x=5; else x=7; printf(\"x=%d\t\ printf(\"z=%d\t\n\ if(x=z=y) x=3; printf(\"x=%d\t\ printf(\"z=%d\t\n\(A) x=5 x=5 x=1 x=7 z=0 x=3 z=1 (B) x=5 x=5 x=1 x=5 z=0 x=3 z=0 (C) x=5 x=5 X=5 x=7 z=0 x=3 z=1 (D) x=5 x=5 x=1 x=7 z=0 x=3 z=0

2.若执行下面的程序时从键盘上输入3和5,则输出是__________。 main() { int a,b,s;

printf(\"Please Enter a and b\"); scanf(\"%d %d\ s=a; if(a>b)

s=a%b; else s=b%a; printf(\"%d\n\ }

(A) 0 (B) 3 (C) 2 (D) 5

3.假定所有变量均已正确说明,下列程序段运行后x的值是__________ a=b=c=0;x=35; if(!a) x-=1; else if(b); if(c) x=3; else x=4;

(A) 34 (B) 4 (C) 35 (D) 3

4.假定所有变量均已正确说明,下列程序段运行后x 的值是_____ a=b=c=0; x=35; if(!a) x--; else if(b); if(c) x=3; else x=4;

A 34 B 4 C 35 D 3

5.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是 __________。 main() { int x;

printf(\"Please input a integer\"); scanf(\"%d\ if(x++>5) printf(\"%d\ else

printf(\"%d\n\ }

(A) 7和5 (B) 6和3 (C) 7和4 (D) 6和4 6.以下if语句书写正确的是__________。 (A) if(x=0;)printf(\"%f\(B) if(x>0){ x=x+1;printf(\"%f\(C) if(x>0);{ x=x+1;printf(\"%f\(D) if(x>0){ x=x+1;printf(\"%f\7.分析程序:

#include main() { float x,y; scanf(\"%f\ if(x<0.0)y=0.0;

else if((x<5.0)&&(x!=2.0))

y=1.0/(x+2.0); else if(x<10.0) y=1.0/x; else y=10.0; printf(\"%f\n\ }

若运行时从键盘上输入2.0(表示回车),则上面程序的输出结果是_________。 (A) 0.000000 (B) 0.250000 (C) 0.500000 (D) 1.000000 8.若执行以下程序时从键盘上输入9,则输出结果是 A) 11 B) 10 C) 9 D) 8 main0 { int n; scanf(\"%d\

if(n++<10) printf(\"%d\\n\else printf(\"%d\\n\}

9.写出下面程序的执行结果__________。 main()

{ int x=1,y=1,z=0; if(z<0) if(y>0) x=3; else x=5; printf(\"%d\t\ if(z=y<0) x=3; else if(y==0) x=5; else x=7; printf(\"%d\t\ printf(\"%d\t\

(A) 1 7 0 (B) 3 7 (C) 5 5 0 (D) 1 5 10.以下程序的输出结果是________

A 1 B 2 C3 long fun( int n) { long s;

if(n==1 || n==2) s=2; else s=n-fun(n-1); return s; } main()

{ printf(\"%ld\\n\

11.写出下面程序的执行结果__________。 main() { int x,y=1; if(y!=0) x=5; printf(\"%d\t\

0 1 D 4

if (y==0) x=3; else x=5;

printf(\"%d\t\n\(A) 1 3 (B) 1 5 (C) 5 3 (D) 5 5 12.写出下面程序的输出结果__________。 main() { int i,j;

i=16;j=(i++)+i;printf(\"%d\ i=15;printf(\"%d %d\

(A) 32 16 15 (B) 33 15 15 (C) 34 15 16 (D) 34 16 15 13.以下程序的输出结果是__________。 main()

{ int x=10,y=10;

printf(\"%d %d\n\(A) 10 10 (B) 9 9 (C) 9 10 (D) 10 9

14.运行下面程序将输出_________ # include main() { int i=-1;

if(i<=0) printf(\"111\") else printf(\"222\"); }

A 111 B 222 C 1122 D 将显示语法错误 15.阅读以下程序: main() { int x; scanf(\"%d\if(x--<5) printf(\"%d\"'x); else printf(\"%d\"'x++); }

程序运行后,如果从键盘上输人5,则输出结果是________ A 3 B 4 C 5 D 6 16.下面程序的输出结果是__________。 main()

{ int x=100,a=10,b=20,ok1=5,ok2=0; if(a<b) if(b!=15) if(!ok1) x=1; else

if(ok2)x=10; x=-1; printf(\"%d\n\ }

(A) -1 (B) 0 (C) 1 (D) 不确定的值 17.在C语言的if 语句中,用作判断的表达式为_______ A 关系表达式 B 逻辑表达式 C 算术表达式 D 任意表达式 18.若执行下面的程序时从键盘上输入5,则输出结果是__________。 #include main() { int x;

scanf(\"%d\ switch( ++x ) { case 1: case 2: case 3: case 4:

case 5: printf(\"****\"); break; case 6: printf(\"####\"); break; default: printf(\"@@@@\"); break; } }

(A) **** (B) #### (C) @@@@ (D) ####@@@@ 19.有如下程序 main0

{ int x=1,a=0,b=0; switch(x){ case 0: b++; case 1: a++; case 2: a++;b++; }

printf(\"a=%d,b=%d\\n\}

该程序的输出结果是________

A a=2,b=1 B a=1,b=1 C a=1,b=0 D a=2,b=2 20.以下程序的输出结果是________ main() { int a=0,i; for(i=0;i<5;i++) { switch(i) { case 0: case 3:a+=2; case 1: case 2:a+=3;

default:a+=5; } }

printf(\"%d\\n\}

A 31 B 13 C 10 D 20 21.下面程序的输出结果是__________。 int aa[3][3]={{2},{4},{6}}; main()

{ int i,*p = aa[0]; for( i = 0;i<3;i++) { switch(i) { case 0:

aa[i][1]=*p+1; break; case 1:

aa[i][1]=aa[i][0]*2; break; default : ++p; }

printf(\"%d\ } }

(A) 223 (B) 236 (C) 234 (D) 226 22.有以下程序: # 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); case 4: putchar(c+2);break; } } printf(\"\\n\"); }

从第一列开始输入以下数据,代表一个回车符。 2743

程序的输出结果是 _________

A) 668977 B) 668966 C) 6677877 D) 6688766 23.分析程序: #include main()

{ int x=1,y=0,a=0,b=0; switch( x ) { case 1: switch(y) { case 0: a++; case 1: b++;break; }

case 2:a++;b++;break; }

printf(\"a=%d,b=%d\n\ }

上面程序的输出结果是__________。 (A) a=2,b=1 (B) a=1,b=1 (C) a=1,b=0 (D) a=2,b=2

24.运行下面程序将输出_________ # include main() { int n=0; char ch='a'; while(ch<'g') {

switch(ch++) {

case'a': n++; break; case'b': n- -; case'c': n+=2; break; case'd': n=n%2; continue; case'e': n=n*10; break; default:n=n/3; } n++; }

printf(\"%d \\n\}

A 0 B 2 C 3 D 4 25.运行下面程序将输出_________ # include main() { int k=10; switch(k)

{

case8: k++; case10: k++; case20: k++; case30: k++; }

printf(\"%d\\n\}

A 10 B 11 C12 D 13 26.下面程序的输出是____ main() {

char * s=\"12134211\"; int v1=0, v2=0, v3=0, v4=0, k; for(k=0; s[k]; k++) switch(s[k]) { default: v4++; case'1': v1++; case' 3': v3++; case' 2': v2++;}

printf(\"v1=%d, v2=%d, v3=%d, v4=%d\\n\}

A v1=4, v2=2 , v3=1, v4=1 B v1=4, v2=9 , v3=3, v4=3 C v1=5, v2=8, v3=6, v4=1 D v1=8, v8=2 , v3=8, v4=8 27.运行下面程序将输出_________ # include 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; case 3: a++; b++; }

printf(\"a=%d, b=%d\\n\ b); }

A a=1, b=0 B a=2, b=1 C a=2, b=1 D a=2, b=2 28.若有定义: float w; int a, b; 则合法的switch语句是________ A switch(w) B switch(a);

{ case 1.0: printf(\"*\\n\"); { case 1 printf(\"*\\n\"); case 2.0: printf(\"**\\n\"); case 2 printf(\"**\\n\");

} } C switch(b) D switch(a+b);

{ case 1: printf(\"*\\n\"); { case 1: printf(\"*\\n\"); default: printf(\"\\n\"); case 2: printf(\"**\\n\"); case 1+2: printf(\"**\\n\"); default: printf(\"\\n\"); } } 29.运行下面程序将输出_________ # include main()

{ int k=10;char c='A'; do

{switch(c++) { case'A': k++; break; case'B': k- -; case'C': k+=2; break; case'D': k=k%2; continue; case'E': k=k*10; break; default : k=k/3; } k++;

}while(c<'G'); printf(\"k=%d \\n\}

A k=3 B k=4 C k=2 D k=0 30.有以下程序 main() { int k=4,n=0; for( ; n ) { n++;

if(n%3!=0) continue; k--; }

printf(\"%d,%d\\n\ }

程序运行后的输出结果是

A)1,1 B)2,2 C)3,3 31.下面程序的输出结果是__________。 main()

{ char *s=\"12134211\"; int v1=0,v2=0,v3=0,v4=0,k; for (k=0;s[k];k++)switch (s[k]) { default:v4++; case '1':v1++; case '3':v3++; case '2':v2++;

D)4,4

}

printf(\"v1=%d,v2=%d,v3=%d,v4=%d\n\(A) v1=4,v2=2,v3=1,v4=1 (B) v1=4,v2=9,v3=3,v4=1 (C) v1=5,v2=8,v3=6,v4=1 (D) v1=8,v2=8,v3=8,v4=8 32.如果从键盘上输入a~z26个字母后,下面程序将输出_________ # include main() {

char c; int v0=0, v1=0 , v2=0; do

switch(c=getchar()) {

case'a': case'A'; case'e': case'E'; case'i': case'I'; case'o': case'O'; case'u': case'U'; v1+=1;

default:v0+=1;v2+=1; }

while(c!='\\n')

printf(\"v0=%d, v1=%d, v2=%d\\n\}

A v0=7, v1=4, v2=7 B v0=8, v1=4, v2=8 C v0=27, v1=5, v2=27 D v0=12, v1=4, v2=12 33.与 y=(x>0?1:x<0?-1:0);的功能相同的if语句是________ A if (x>0) y=1; B if(x) else if(x<0)y=-1; if(x>0)y=1; else y=0; else if(x<0)y=-1; else y=0;

C y=-1 D y=0; if(x) if(x>=0) if(x>0)y=1; if(x>0)y=1; else if(x==0)y=0; else y=-1; else y=-1; 34.有如下程序 Main()

{ int a=2,b=-1,c=2; if(a该程序的输出结果是________

A 0 B 1 C 2 D 3 35.有如下程序 Main() { float x=2.0,y; if(x<0.0) y=0.0; else if(x<10.0) y=1.0/x; else y=1.0; printf(\"%f\\n\}

该程序的输出结果是________

A 0.000000 B 0.250000 C 0.500000 D 1.000000 36.下面程序的输出是_____ main() {

int x=3, y=6, a=0; while(x++!=(y- =1)) {a+=1; if(yprintf(\"x=%d,y= %d\\n\}

A x=4, y=4, a=1 B x=5, y=5, a=1 C x=5, y=4, a=3 D x=5, y=4, a=1 37.以下程序的输出结果是______ 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\} }

A 39 81 B 42 84 C 26 68 D 28 70 38.下面程序的输出结果是______ main() {

char * s=\"121\"; int k=0, a=0, b=0; do { k++;

if(k%2= =0){a=a+s[k]-'0'; continue;}

b=b+ s[k]-'0'; a=a+s[k]-'0';} while(s[k+1]);

printf(\"k=%d a=%d b=%d\\n, k, a, b); }

A k=3 a=2 b=3 B k=3 a=2 b=3 C k=2 a=3 b=2 D k=2 a=2 b=3

39.若i , j 已经定义为int类型,则以下程序段中内循环体总的执行次数是_______ for(i=5; i; i-- ) for(j=0;j<4;j++) {…}

A 20 B 24 C 25 D 30

40.假定a和b为int型变量,则执行以下语句后b 的值为_______ a=1; b=10; do {b=-a; a++} while(b--<0);

A 9 B-2 C -1 D 8 二.填空题

1.下面程序的输出结果是___________ #define MAX 3 int a[MAX]; main ( )

{ funl( ); fun2(a); printf(\"\\n\");} funl( ) { int k,t=0; for (k=0;k FILE *fp; main() {int i,j;

if ((fp=fopen(19)==NULL)exit(0)); for (i=0;i<10;i++) {scanf(\"%d\

fwite(&j,sizeof(int ),1, 20 ); } fclose(fp); }

2.下面程序的输出是__________ #define MAX 5 int a[MAX],k; main()

{ fun1();fun3(); fun2(); fun3(); printf(\"\\n\"); } fun1()

{ for(k=0;k{ int a[MAX],k;

for(k=0;k<5;k++) a[k]=k; } fun3() { int k;

for(k=0;k3.分析下面的程序,写出它的功能____________________。 #include \"stdio.h\" main() { int label; char c;

printf(\"\nPlease enter 1 number:\");c=getchar(); while(c!='\n') { if(c=='.') label=1; c=getchar(); } if(label==1) printf(\"\nfloat\"); else printf(\"\nint\"); }

4.把for(表达式1;表达式2;表达式3);改写为等价的While语句为_______。 5.设有程序片段如下: switch(class)

{ case 'A':printf(\"GREAT! \n\");break; case 'B':printf(\"GOOD! \n\");break; case 'C':printf(\"OK! \n\");break; case 'D':printf(\"NO! \n\");break; default:printf(\"ERROR! \n\"); } 若class的值为'C',则输出结果是__________。 6.以下程序段的运行结果是__________。 int x=1,y=0; switch(x)

{ case 1 : switch(y)

{ case 0:printf(\"x=1 y=0\n\");break; case 1:printf(\"y=1\n\");break; } break;

case '2':printf(\"x=2\n\"); }

7.C语言中的空语句就是__________。

8.while语句的特点是_____,_____;dowhile语句的特点是_____,_____。 9.返回语句的功能是从__________返回__________。 10.复合语句是由一对__________括起来的若干语句组成的。 11.由一次函数调用加一个分号构成一个__________语句。

12.语句标号由标识符表示,由__________、__________和__________组成。第一个字符必须是字母或下划线。

13.goto语句的主要用途是__________和__________。 14.循环的嵌套是指__________。

15.条件1016.以下程序的功能是计算一元二次方程(如下所示)的根,补足程序中空缺 的语句。 #include main()

{ float a,b,c,_abs,_derta,_doublea,part1,part2; printf(\"enter a,b,c:\"); scanf(\"%f%f%f\ if(__________) if(__________)

printf(\"no answer due to input error\n\"); else

printf(\"the single root is %f\n\ else{ _derta =b*b-4*a*c;_doublea=2*a; part1=-b/(2*a);_abs=abs(_derta); part2=sqrt(_abs)/_doublea; if(__________)

printf(\"complex root\n real part=%f image part=%f\n\ part1,part2); else

printf(\"real roots\n root1=%f root2=%f\n\ part1-part2);} }

17.以下两条if语句可合并成一条if语句为 。 if(a<=b) x=1; else y=2;

if(a>b) printf(\" * * * * y=%d\n\ else printf(\" # # # # x=%d\n\

应该为:______ {x=1;printf(\"####x=%d\n\ else {y=2;printf(\"****y=%d\n\

第五章 循环结构程序设计

一.单项选择题

1.下面的程序的输出结果是__________。 main()

{ char *s=\"121\"; int k=0,a=0,b=0; do { k++;

if(k%2==0) {a=a+s[k]-'0';continue;} b=b+s[k]-'0';a=a+s[k]-'0'; }while(s[k+1]);

printf(\"k=%d a=%d b=%d\n\(A) k=3 a=2 b=3 (B) k=3 a=3 b=2 (C) k=2 a=3 b=2 (D) k=2 a=2 b=3

2.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0) s=a;

for(b=1;b<=c;b++) s=s+1;

则与上述程序段功能等价的赋值语句是________ A s=a+b; B s=a+c; C s=s+c; D s=b+c; 3.如有以下程序 main() { int i; sum;

for(i=1;i<=3; sum++) printf(\"%\\n\}

该程序的输出结果是????????????________ A 6 B 3 C 死循环 D 0 4.以下循环体的执行次数是________ main() { int i, j;

for(i=0,j=1;i<=j+1;i+=2,j--); printf(\"%d\\n\

A 3 B 0 C 1 D 2 5.以下程序输出的结果是________

A 741 B 852 C 963 D 975421 main( ) { int y=10; for(; y>0; y--) if(y%3==0)

{ printf (\"%d\ continue; }} 6.下面程序的输出结果是__________。 main() { int y=9; for(;y>0;y--)

{ if(y%3==0)

{ printf(\"%d\ } }

(A) 741 (B) 852 (C) 963 (D) 875421 7.下列程序的输出结果为__________。 main()

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

for(i=0;i<k;i++) for(j=0;j<k;j++) n[j]=i*j; printf(\"%d\n\[1]); }

(A) 2 (B) 1 (C) 0 (D) 3

8.for语句中的表达式可以部分或全部省略,但两个_________不可省略。但当三个表达式均省略后,因缺少判断条件,循环会无限制地执行下去,形成死循环。 (A) 0 (B) 1 (C) ; (D) , 9.分析程序:

#include 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; }

printf(\"%d\n\ }

上面程序的输出结果是__________。 (A) 7 (B) 8 (C) 9 (D) 10 10.下述for循环语句是________ int i, k;

for(i=0, k=1, i++, k++) printf(\"* * *\");

A 判断循环结束的条件非法 B 是无限循环 C 只循环一次 D 一次也不循环 11.若X是int型变量,以下程序段的输出结果是________. A **3 B ##3 C ##3 D **3##4

##4 **4 **4##5 **5 **5 ##5 for(x=3; x<6; x++)

printf((x%2)?(\"**%d\"): (\"##%d\\n\"), x); 12.以下程序输出的结果是________ A 39 81 B 42 84 C 26 68 D 28 70 main() { int x, i;

for(i=1; i<=100; i++) { x=i;

if(++x%2==0) if(++x%3==3) if(++x%7==0) printf(\"%d \}

pfrintf(\"\\n\"); }

13.分析以下程序: main()

{ int x=5,a=0,b=0;

if(x=a+b) printf(\"****\n\"); else printf(\"####\n\"); } 以上程序__________。

(A) 有语法错,不能通过编译(B) 通过编译,但不能连接 (C) 输出**** (D) 输出####

14.下面程序的输出结果是__________。 #include main() { int i,j,k; char str[5]; for(i=0;i<5;i++) str[i]='A'; k=5;

for(i=0;i<k;i++)

for(j=0;j<k;j++) str[j]=str[i]+32; printf(\"%c\n\[k]); }

(A) 不确定的值 (B) A (C) B (D) a

15.while循环语句中,while后一对圆括号中表达式的值决定了循环体是否进行,因此,进入while循环后,一定要有能使此表达式的值变为_______的操作,否则,循环将会无限制地进行下去。 (A) 0 (B) 1 (C) 成立 (D) 2 16.执行下面程序片段的结果是__________。 int x=123; do

{ printf(\"%3d\n\ while(!x);

(A) 打印出321 (B) 打印出123 (C) 不打印任何内容 (D) 陷入死循环 17.程序段如下: int k=0;

while(k++<=2) printf(\"%d\n\ 则正确的执行结果是__________。

(A) 1 (B) 2 (C) 0 (D) 无结果 2 3 1 3 4 2 18.有以下程序 main( )

{ int x=0,y=5,z=3;

while(z-->0&&++x<5) y=y-1; printf(\"%d,%d,%d\\n\}

程序执行后的输出结果是________

A 3,2,0 B 1,4,2 C 4,3,-1 D 5,-2,-5 19.有以下程序 main() { int s=0,a=1,n; scanf(\"%d\do

{ s+=1; a=a-2; } while(a!=n); printf(\"%d\\n\}

若要使程序的输出值为2,则应该从键盘给n输入的值是________ A -1 B -3 C -5 D 0 20.分析程序: #include main() { int num=11; while(--num) num--; printf(\"%d\n\}

上面程序的输出结果是__________。

(A) 1 (B) 0 (C) -1 (D) 以上无正确答案 21.以下程序的输出结果是__________。 main() { int x=3;

do

{ printf(\"%3d\ }

(A) 1 (B) 30 3 (C) 1 -2 (D) 死循环 22.下面的程序__________。 main( ) { int x=3; do{

printf(\"%d\n\ }while(!(--x)); }

(A) 输出的是1 (B) 输出的是1和-2 (C) 输出的是3和0 (D) 是死循环 23.程序段如下: int k=-20; while (k=0) k=k+1;

则以下说法中正确的是__________。

(A) While循环执行20次 (B) 循环是无限循环 (C) 循环体语句一次也不执行 (D) 循环体语句执行一次 24.t为int类型,进人下面的循环之前,t的值为0 while( t=l ) { …… }

则以下叙述中正确的是________

A 循环控制表达式的值恒为0 B 循环控制表达式的值恒为1 C 循环控制表达式不合法 D 以上说法都不对 25.程序段如下: int k=1;

while (!k==0) { k=k+1; printf(\"%d\n\ 则以下说法中正确的是__________。 A While循环执行2次 B 循环是无限循环 C 循环体语句一次也不执行 D 循环体语句执行一次

26.定义如下变量: int n=10; 则下列循环的输出结果是__________。 while(n>7)

{ n--; printf(\"%d\n\

(A) 10 (B) 9 (C) 10 (D) 9 9 8 9 8 8 7 8 7 7 6 27.有以下程序? main()?

{?int?s=0,a=1,n;? scanf(\"%d\ do?

{?s+=1;?a=a-2;?

}while(a!=n);?

printf(\"%d\\n\ }?

若要使程序的输出值为2,则应该从键盘给n输入的值是? (A)-1 ?(B)-3 ?(C)-5? (D)0? 28.以下程序段的输出结果是__________。 int x=3; do

{ printf(\"%3d\ while(!(--x));

(A) 1 (B) 3 0 (C) 1 -2 (D) 死循环 29.程序段如下: int k=0;

while(k++<=2); printf(\"last=%d\n\ 则正确的执行结果是last=__________。 (A) 2 (B) 3 (C) 4 (D) 无结果 30.当输入为\"quert?\"时,下面程序的执行结果是__________。 #include main()

{ while(putchar(getchar())!='?'); }

(A) quert (B) Rvfsu (C) quert? (D) rvfsu? 31.下面程序的输出结果是__________。 main()

{ char *s=\"121\";int k=0, a=0, b=0; do { k++;

if(k%2==0){a=a+s[k]-'0'; continue; }

b=b+s[k]- '0'; a=a+s[k]-'0'; } while(s[k+1]);

printf(\"k=%d a=%d b=%d\n\ }

(A) k=3 a=2 b=3 (B) k=3 a=3 b=2 (C) k=2 a=3 b=2 (D) k=2 a=2 b=3 32.执行下面的程序后,a的值为__________。 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; }

}

(A) 7 (B) 8 (C) 9 (D) 10 33.有以下程序 main( ) { int i,n=0; for(i=2;i<5;i++) { do

{ if(i%3) continue; n++; } while(!i); n++; }

printf(\"n=%d\\n\}

程序执行后的输出结果是________

A n=5 B n=2 C n=3 D n=4 34.以下叙述正确的是________

A do-while语句构成的循环不能用其它语句构成的循环来代替。 B do-while语句构成的循环只能用break语句退出。

C 用do-while语句构成的循环,在while后的表达式为非零时结束循环。 D 用do-while语句构成的循环,在while后的表达式为零时结束循环。

35.在do while循环中,循环由do开始,用while 结束;必须注意的是:在while表达式后面的__________不能丢,它表示do while循环的结束。

(A) 0 (B) 1 (C) ; (D) , 36.以下输出的结果是________ A 1 B 3 0 C 1 -2 D 死循环 int x=3; do

{ printf(\"%3d\ } while(!(--x));

37.以下程序输出的结果是________。 A #*#*# B #### C ***** D *#*#* main() {int i; for(i=1; i<6; i++)

{if(i%2){printf(\"#\");continue;} printf(\"*\"); }

printf(\"\\n\"); }

38.以下程序的输出结果是________

A *#*#*#$ B #*#*#*$ C *#*#$ D #*#*$ main() { int i;

for( i=1;i<=5;i++) { if(i%2) printf(\"*\"); else continue; printf(\"#\"); }

printf(\"$\\n\"); }

39.在下述程序中,判断i>j共执行了几次________ # include void main( )

{ int i=0,j=10,k=2,s=0; for(; ;) {i+=k; if(i>j)

{printf(\"%d\ break; } s+=i } }

A 4 B 7 C 5 D 6

40.以下程序中,while循环的循环次数是________ main() { int i=0; while(i<10)

{ if(i<1) continue; if(i= =5) break; i++; } ...... }

A 1 B 10 C 6 D 死循环,不能确定次数 41.下面程序段输出的结果是????????????________ A 9 B 1 C 11 D 10 Int k, j, s;

For(k=2; k<6; k++,k++) { s=1;

for(j=k; j<6; j++) s+=j; }

printf(\"%\\n\42.有如下程序 main0

{ int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++)

for(j=0;j该程序的输出结果是????????????________ A 18 B 19 C 20 D 21 43.以下程序的输出结果是__________。 main()

{ int a=-1, b=4, k;

k=(++a<0)&&!(b--<=0); printf(\"%d %d %d\n\(A) 1 0 4 (B) 1 0 3 (C) 0 0 3 (D) 0 0 4 44.分析下列程序 main()

{ int n[3],i,j,k; for(i=0;i<3;i++) n[i]=0; k=2; for(i=0;i上述程序运行后,输出结果是__________。 (A) 2(B) 1(C) 0(D) 3 45.分析程序: #include #include void fun(char *s ,int *n) { chara[10]; int i;

for(i=0;i<10;i++) a[i]='A'+i; s=a; *n=10; } main() { int n=0; char *p; fun(p ,&n);

printf(\"%c\n\[n-1]); } 上面程序的输出结果是__________。

(A) ABCDEFGHIJ(B) abcdefghij(C) AAAAAAAAAA (D) 不确定的值

46.在C语言的循环语句for,while,do while中,用于直接中断最内层循环的语句是__________。

(A) switch (B) continue (C) break (D) if 47.执行以下程序后,y的值是__________。 main()

{ int a[]={2,4,6,8,10}; int y=1,x,*p; p=a+4;

for(x=0;x<3;x++) y+=*(p-x); printf(\"%d\n\ }

(A) 17 (B) 18 (C) 19 (D) 25 48.有以下程序 void sort(int a[],int n) { int i,j,t;

for(i=0;iif(a[i]{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(aa,10);

for(i=0;i<10;i++) printf(\"%d\ printf(\"\\n\"); }

其输出结果是________

A 1,2,3,4,5,6,7,8,9,10, B 10,9,8,7,6,5,4,3,2,1, C 9,2,7,4,5,6,3,8,1,10, D 1,10,3,8,5,6,7,4,9,2, 49.以下程序的输出结果是________ #include main() { int i=0,a=0; while(i<20) { for(;;)

{ if((i%10)==0) break; else i--; }

i+=11; a+=i; }

printf(\"%d\\n\}

A 21 B 32 C 33 D 11 50.以下程序的输出结果是________ # include void main()

{ int k=0,m=0; int i, j; for(i=0;i<2;i++) { for(j=0;j<3;j++) k++; k- =j; } m=i+j;

printf(\"k=%d,m=%d\}

A k=0,m=3 B k=0,m=5 C k=1,m=3 D k=1,m=5 51.以下程序的输出结果是__________。 #include fun(p,start,number) int *p,start,number; { int t,*p1,*p2;

p1=p+start;p2=p1+number-1; while(p1{ t=*p1;*p1++=*p2;*p2--=t; } } main()

{ int a[10]={1,2,3,4,5,6,7,8,9,0},i, *p=a; fun(p,0,4);fun(p,4,6);fun(p,0,10); for(i=0;i<10;i++) printf(\"%d\ printf(\"\n\"); }

(A) 0987654321 (B) 4321098765 (C) 5678901234 (D) 0987651234 52.下面的程序中_________有错误(每行程序前面的数字是行号)。 1 #include 2 main() 3 {

4 float a[3]={0,0}; 5 int i;

6 for(i=0;i<3;i + + ) scanf(\"%d\7 for(i=1;i<3;i + + ) a[0]=a[0]+a[i]; 8 printf(\"%f\\n\9 }

A) 没有 B)第4行 C)第6行 D)第8行 53.下面程序段输出的结果是多少________

A 12 B 15 C 20 D 25 Int I, j, m=0; For(i=1; i<=5; i+=4)

For(j=3;j<=19;j+=4) m++; Printf(\"%\\n\54.分析程序: #include

void fun(float *p1,int n1,float *p2,int n2,float *s) { int i;

s=(float *)calloc(1,sizeof(float)); *s=0;

for(i=0;i{ float a[2]={1.1,2.2}, b[3]={10.0,20.0,30.0}, *s=a; fun(a,2,b,3,s); printf(\"%f\n\ }

上面程序的输出结果是__________。

(A) 60.000000(B) 3.300000(C) 63.300000(D) 1.100000 二.填空题

1.以下程序的执行结果为__________。 main() { int i,j,k;

for(i=0,j=10;i<=j;i++,j--) k=i+j; printf(\"k=%d\ }

2.下面程序的输出结果是__________。 char b[]=\"ABCD\"; main() { char *p=b; for(; *p; p++) printf(\"%s\ printf(\"\n\"); }

3.以下程序段的输出结果是______. Main( ) { int x=2; while(x--); printf(\"%d\\n\}

4.以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。

main()

{ float x,amax,amin; scanf(\"%f\ amin=x;

while(__________) {if(x>amax) amax=x; if(______) amin=x; scanf(\"%f\

printf(\"\namax=%f\namin=%f\n\ }

5.在C语言中,对于if语句,else子句与if子句的配对约定是_________。

6.feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数返回值为__________,否则为__________。

7.以下程序输出的结果是______. int k, n, m; n=10; m=1; k=1; while(k<=n) m*=2; printf(\"%d\\n\

8.以下程序段的输出结果是______. Int i=0, sum=1;

do { sum+=i++; } while(i<5); printf(\"%d\\n\

9.写出下面程序的输出结果__________。 main() { int n=0; while(n++<=1); printf(\"%d,\ printf(\"%d\n\

10.continue语句的作用是__________,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。

11.break语句只能用于__________语句和__________语句中。 12.执行以下程序后,输出'#'号的个数是______。 main() { int i,j;

for(i=1; i<5; i++) for(j=2; j<=i; j++) putchar('#'); }

13.下面程序的功能是输出以下形式的金字塔图案是: * *** ***** ******* main( )

{ int i,j; for(i=1;i<=4;i++)

{ for(j=1;j<=4-i;j++) printf(\" \"); for(j=1;j<=______;j++) printf(\"*\"); printf(\"\\n\"); } }

第六章 数组的定义和引用

一.单项选择题 1.若有下面语句: char x[]=\"abcd\"; char y[]={'a','b','c','d'}; 则下列叙述正确的是__________。

(A) 数组x和数组y等价 (B) 数组x和数组y的长度相同 (C) 数组x占用空间大小大于数组y占用空间大小 (D) 数组x占用空间大小小于数组y占用空间大小 2.若给出以下定义 char x[ ]=\"abcdefg\";

char y[]={'a','b','c','d','e','f','g'}; 则正确的叙述为________。

A 数组x和数组y等价 B 数组x和数组y的长度相等 C 数组x的长度大于数组y的长度 D 数组x的长度小于数组y的长度

3.要求函数的功能是在一维数组a中查找x值;若找到则返回所在的下标值,否则返回0;数列放在a[1]到a[n]中。则不符合要求的函数是__________。 (A) funa ( int *a, int n, int x) { *a=x;

while (a[n]!=x)n--; return n; }

(B) funb (int *a,int n,int x) { int k;

for(k=1; k<=n;k++) if(a[k]==x) return k; return 0; }

(C) func (int a[],int n,int x) { int *k;

a[0]=x; k=a+n; while (*k!=x)k--; return k-n; }

(D) fund (int a[],int n,int x) { int k=0; do k++;

while ((k<n+1)&&(a[k]!=x)); if(a[k]==x) return k;else return 0; }

4.下面程序的运行结果是__________。

main() { int a[6],i; for(i=1;i<6;i++)

{ a[i]=9*(i-2+4*(i>3))%5; printf(\"%2d\[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 5.定义如下变量和数组: int i;

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

printf(\"%d\[i][2-i]);

(A) 1 5 9 (B) 1 4 7 (C) 3 5 7 (D) 3 6 9 6.下面程序的输出结果是______ A)0 B)1 C)10 D)9 Mian()

{int a[ ]={1,2,3,4,5,6,7,8,9,0},*p; p=a;

printf(\"%d\\n,\}

7.若有说明:int a[][3]={1,2,3,4,5,6,7}; 则a数组第一维的大小是_____。 (A) 2 (B) 3 (C) 4 (D) 正确定值 8.下列程序的输出下列程序的输出是________。 A 12ba56 B 6521 C 6 D 62 Mian ()

{ char ch [7]={\"65ab21\int I ,s=0;

for (I=0;ch[I]>='0'&&ch[I]<='9';I+=2) s=10*s+ch[I]-'0'; printf (\"%d\\n\}

9.下面程序的运行结果是________。 Main ()

{ int a[10]={1,2,3,4,5,6,7,8,9,10}; printf (\"%d\\n\ }

A 4 B 3 C 5 D 6

10.设有变量说明int(*ptr)[m];其中的标识符ptr是__________。 (A) m个指向整型变量的指针 (B) 指向m个整型变量的函数指针

(C) 一个指向具有m个整型元素的一维数组的指针

(D) 具有m个指针元素的一维指针数组,每个元素都只能指向整型变量

11.下述对C语言字符数组的描述正确的是__________。

(A) 任何一维数组的名称都是该数组存储单元的开始地址,且其每个元素按照顺序连续占用存储空间

(B) 一维数组的元素在引用时其下标大小没有限制

(C) 任何一个一维数组的元素,可以根据内存的情况按照其先后顺序以连续或非连续的方式占用存储空间

(D) 一维数组的第一个元素是其下标为1的元素

12.若有以下的定义,int t[3][2];能正确表示t数组元素地址的表达式是________。 A & t[3][2] B t[3] C t[1] D * t[2]

13.若有语句int a[8];则下述对a的描述正确的是__________。 (A) 定义了一个名称为a的一维整形数组,共有8个元素 (B) 定义了一个数组a,数组a共有9个元素 (C) 说明数组a的第8个元素为整型变量 (D) 以上可选答案都不对

14.若有说明:int a[][4]={0,0};则下列叙述不正确的是________。 (A) 数组a的每个元素都可得到初值0 (B) 二维数组a的第一维的大小为1

(C) 因为对二维数组a的第二维大小的值除以初值个数的商为1,故数组a的行数为1 (D) 只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值 15.下面程序的运行结果是________。 Main()

{ int a[ ]={2,4,6,8,10}; int y=1,x; for(x=0;x<3;x++) y+=a[x+1];

printf(\"%d\\n\ }

A 17 B 18 C 19 D 20 16.以下程序的输出结果是________。 Mian ()

{ int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};

printf(\"%d%d%d%d\\n\ } A 0650 B 1470 C 5430 D 输出值不确定 17.有以下程序 main()

{ int a[ ][3]={ {1,2,3},{4,5,0} },* pa[I],I; pa=a;

for(I=0;I<3;I++)

if(I<2) pa[1][I]=pa[1][I]-1; else pa[1][I]=1;

printf( \"%d \\n\ ) 执行后输出结果是________。

A 7 B 6 C 8 D 无确定值 18.有以下程序 mian()

{ int aa[4][4]={1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6} }; int I,s=0;

for(I=0;I<4;I++) s+ =aa[I][1]; printf (\"%d\\ n\ }

程序运行后的输出结果是________。

A 11 B 19 C 13 D 20 19.有以下程序 main()

{ int x[8]={8,7,6,5,0,0}, *s; s=x+3;

printf(\" %d \\n\ } 执行后输出结果是________。

A 随机值 B 0 C 5 D 6

20.以下能对二维数组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}}; 21.以下程序运行后,输出的结果是______

A 10000 B 10010 C 00110 D 10100 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\\n\ printf(\"\\n\");}

22.以下程序的输出结果为________。 main() { int I;

static int f [ 4 ]={1,1}; for (I=2;I<4;I++) f[I]=f[I-2]+f[I-1]; for(I=0;I<4;I++) { if(I%5==0)printf(\" \\0\"); printf(\"%- 3d\} }

A 1 2 3 B 1 1 2 3 C 1 2 3 4 D 0 1 2 3 23.执行下面的程序段后,变量k中的值为________ A 不定值 B 33 C 30 D 10 int k=3, s[2]; s[0]=k; k=s[1]*10;

24.以下程序的输出结果是????????????________ main()

{ int i; a[10];

for(i=9; i>=0; i--) a[i]=9-i; printf(\"%d%d%d\}

A 258 B 741 C 852 D 369 25.以下程序的输出结果是_____ 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\ }

A 20 B 21 C 22 D 23 26.对以下说明语句的正确理解是__________。 int a[10]={6,7,8,9,10}; 将5个初值依次赋给a[1]至a[5] 将5个初值依次赋给a[0]至a[4] (C) 将5个初值依次赋给a[6]至a[10]

(D) 因为数组长度与初值的个数不相同,所以此语句不正确 27.合法的数组定义是__________。

(A) int a[]=\"language\" (B) int a[5]={0,1,2,3,4}; (C) char a=\"string\" (D) char a[]={\"0,1,2,3,4,5\28.若有说明:int a[3][4];则对a数组元素的正确引用是________。 (A) a[2][4] (B) a[1,3] (C) a[1+1][0] (D) a(2)(1) 29.以下数组定义中不正确的是________ A int a[2][3]; B int b[][3]={0,1,2,3};

C int c[100][100]={0}; D int d[3][]={{1,2},{1,2,3},{1,2,3,4}};

30.当执行下面的语句定义一维数组a并赋以初值后,此数组的元素中不正确的一个赋值结果是________。

Static char [ 10 ]={1,2,3,4,5};

A a[2]=3 B a[ 8] =0 C a[0]=1 D a[4]=4 31.合法的数组定义是________。

A int a[]='ting' B int a[5]={0,1,2,3,4,5}; C char a=\"string\"; D char a[]={0,1,2,3,4,5}; 32.以下程序的输出结果是_____

A 14 B 0 C 6 D不确定 Main() { int n[3][3],I,j; for(I=0;I<3;I++) for(j=0;j<3;j++) n[3][3]=I+j; for(I=0;I<2;I++)

for(j=0;j<2;j++) n[I+1][j+1]+=n[I][j]; printf(\"%d\\n\}

33.若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是 A &t[3][2] B t[3] C t[1] D t[2]

34.设有以下语句,不是对a数组元素的正确应用的是________,其中0<=I<10 int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;

A a[p-a] B *(&a[I]) C p[I] D *(*(a+1)) 35.若使用一维数组名作函数实参,则以下正确的说法是__________。 (A) 在被调函数中,与该实参相对应的形参必须是指针型变量 (B) 实参数组类型与形参数组类型可以不匹配 (C) 在被调函数中,不需要考虑形参数组的大小 (D) 实参数组名与形参数组名必须一致

36.以下能正确定义数组并正确赋值的语句是________。 A int N =5,b[N][N]; B int a[1][2]={{1},{3}}; C int c[2][]={ {1,2},{3,4}}; D int a[3][2]={ {1,2},{34} }; 37.若已定义:

int a[ ]={0,1,2,3,4,5,6,7,8,9}, *p=a,i;

其中 0≤i≤9, 则对a数组元素不正确的引用是________ A a[p-a] B *(&a[i]) C p[i] D a[10]

38.假设array是一个有十个元素的整型数组,则下列写法中正确的是__________。 (A) array[0]=10 (B) array=0 (C) array[10]=0 (D) array[-1]=0 39.以下语句中,错误的是________。

A int a [ ]={1,2} B char *a[3]; C char s[10]=\"test\"; D int n=5,a[n]; 40.有如下程序 main()

{ int n[5]={0,0,0},I,k=2;

for (I=0;IA 不确定的值 B 2 C 1 D 0 41.有以下程序

{ int p[7] ={11,13,14,15,16,17,18},I=0,k=0; while (I<7 && p[I] %2) { k=k+p[I];I++;} printf(\"%d \\n \ } 执行后输出结果是

A 58 B 56 C 45 D 24

42.当执行下面的语句定义一维数组a并赋初值后,此数组的元素中以下不正确的一个赋值结果是________。

Static int a[10]={0,1,2,3,4,5};

A a[2]=1 B a[0]=0 C a[3]=3 D a[9]=0 43.在下列叙述中,错误的一条是________。

A C语言中,二维数组或多维数组的排列顺序是按行存放 B 赋值表达式b[1][2]=a[2][3]/2 *a[ 0 ][ 0 ]是正确的 C char c[1];c[0]='A'与int c[1];c[0]='A'等价

D 数组名后的方括弧内可以为常量表达式,也可以为变量 44.下面程序段的运行结果是________。 Char a[7]=\"bcdef\" Char b[4]=\"ABC\"; Strcpy(a,b); Printf(\"%c\

A U B \\0 C e D f(其中U表示空格) 45.有以下程序 main()

{ int m[ ][3] ={1,.4,7,2,5,8,3,6,9}; int I,j,k=2; for (I=0;I<3;I++)

{ printf(\"%d\ } }

执行后输出结果是________。

A 456 B 258 C 369 D 789 46.以下程序的输出结果是________。 Main () {int I, a[10]; for (I=9;I>=0;I--) a[I]=10-I;

printf (\"%d%d%d\ } A 258 B 741 C 852 D 369

47.以下各组选项中,均能正确定义二维实型数组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}}; (D) float a[3][4]; float a[3][];

48.以下能对一维数组a进行正确初始化的语句是__________。 (A) int a[10]=(0,0,0,0,0); (B) int a[10]={ }; (C) int a[]={0}; (D) int a[10]=(10*1);

49.若定义 static int a[2] [2] ={1,2,3,4},则a数组的各数组元素分别为________。 A a [ 0 ][ 0 ]=1,a[0][1]=2,a[1][ 0]=3,a[1] [1]=4

B a [ 0 ][ 0 ]=1,a[0][1]=3,a[1][ 0]=2,a[1] [1]=4 C a [ 0 ] [ 0 ]=4,a[0][1]=3,a[1][ 0]=2,a[1] [1]=1 D a [ 0 ][ 0 ]=4,a[0][1]=2,a[1][ 0]=3,a[1] [1]=1

50.若有说明:int a[3][4]={0};则下面正确的叙述是__________。 (A) 只有元素a[0][0]可得到初值0 (B) 此说明语句不正确

(C) 数组a中各元素都可得到初值,但其值不一定为0 (D) 数组a中每个元素均可得到初值0

51.在C语言中,引用数组元素时,其数组下标的数据类型允许是_______。 (A) 整型常量 (B) 整型表达式

(C) 整型常量或整型表达式 (D) 任何类型的表达式

52.若要定义c为2 * 3 *4的三维数组,正确的定义语句是________。 A float c[2] [3] [4]; B float c [2,3,4] C float c(2,3,4) D float c (2) (3) (4); 53.执行以下程序后,y的值是__________。 main()

{ int a[]={2,4,6,8,10}; int y=1,x,*p; p=&a[1]; for(x=0;x<3;x++) y+=*(p+x); printf(\"%d\n\ }

(A) 17 (B) 18 (C) 19 (D) 20

54.在下列定义一维数组并对其数组元素赋以初值的语句中,错误的一条语句是________。 A static int a[10]={0,1,2,3,4}; B static int a[10]={0,1,2,3,4,5,6,7,8,9}; C static int a[10]={0*10};

D static int a[10]={0,0,0,0,0,0,0,0,0,0,0,0}; 55.请选出一下语句的输出结果 prinf(\"%d\\n\

A 5 B 14 C 8 D 输出项不合法,无正常输出 56.以下程序的输出结果________。 # include #include main ()

{ char str [12]={'s','t','r','i','n','g'};

printf (\"%d\\n\ } A 6 B 7 C 11 D 12

57.对于以下字符串。说明表达式strlen(s)的值。 char s[10] ={'A','\\0','B','C','\\0','D'}; A 10 B 1 C 6 D 4

58.若有以下定义和语句:

char *s1=\"12345\ printf(\"%d\n\ 则输出结果是__________。 (A) 4 (B) 5 (C) 9 (D) 10

59.当用函数strcmp(字符串1,字符串2)比较字符串1和字符串2时,比较的结果由函数值带回。对该函数比较结果的叙述错误的是_______。 A 如果字符串1=字符串2,函数值为0 B如果字符串1=字符串2,函数值为1 C如果字符串1>字符串2,函数值为一正整数 D如果字符串1<字符串2,函数值为一负整数

60.当输入为\"quert?\"时,下面程序的执行结果是__________。 #include main() { char c; c=getchar();

while((c=getchar())!='?') putchar(++c); }

A Quert B vfsu C quert? (D rvfsu?

61.设已有定义: char *st=\"how are you\"; 下列程序段中正确的是________ A char a[11], *p; strcpy(p=a+1,&st[4]); B char a[11]; strcpy(++a, st); C char a[11]; strcpy(a, st); D char a[], *p; strcpy(p=&a[1],st+2); 62.设已有定义: char *st=\"how are you\"; 下列程序段中正确的是________ A char a[11], *p; strcpy(p=a+1,&st[4]); B char a[11]; strcpy(++a, st); C char a[11]; strcpy(a, st);

D char a[], *p; strcpy(p=&a[1],st+2); 63.下列程序的输出结果是_______ A)非法 B)a[4]的地址 C)5 D)3 Main()

{char a[10]={9,8,7,6,5,,4,3,2,1,0},*p=a+5; printf(\"%d\}

64.以下程序的输出结果是__________。 #include #include main() {

char str[10]={'s','t','r','i','n','g',NULL}; printf(\"%d\n\(A) 6 (B) 7 (C) 11 (D) 12 65.以下程序的输出结果是__________。 #include \"ctype.h\" space(char *str)

{ int i,t;char ts[81];

for(i=0,t=0;str[i]!='\0';i+=2) if(!isspace(*str+i)&&(*(str+i)!='a')) ts[t++]=str[i]; ts[t]='\0'; strcpy(str,ts); } main()

{ char s[81]={\"a b c d ef g\ puts(s); }

(A) abcdeg (B) bcde (C) ABCDE (D) BCDE 66.以下选项中,不能正确赋值的是________。 A char s[10]; s=\"Ctest\"; B char s1[ ]={'C,'t','e','s','t'} C char s2[20]=\"Ctest\"; D char *s[4]=Ctest\\n\";

67.下列程序的输出结果是__________。 #include main()

{ char *p1,*p2,str[50]=\"xyz\"; p1=\"abcd\"; p2=\"ABCD\"; strcpy(p1+2,p2+1); strcat(str+2,p1); printf(\"%s\ }

(A) xyzabBCD (B) abcABz (C) Ababcz (D) xyzcdBCD 68.已知字母A的ASCII码为十进制的65,下面程序的输出__________。 main() { char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3';

printf(\"%d,%c\n\

(A) 67,D (B) B,C (C) C,D (D) 不确定的值

69.设有\"static char str[ ]=\"Beijing ;\"则执行\"printf(\"%d \\ n\ A 5 B 7 C 12 D 14 70.不能把字符串:hello1!赋值数组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!\"; 71.有以下程序 main()

{ char s[ ]=\"\\ n123\\ \\\";

printf(\"%d,%d \\n\}

执行后输出结果是________。

A 赋初值的字符串有错 B 6,7 C 5,6 D 6,6

72.设有数组定义: char array [ ]=\"China\"; 则数组 array所占的空间为________ A 4个字节 B 5个字节 C 6个字节 D 7个字节 73.设有以下定义及语句,则输出结果是________。 Char *sp=\"\\\"D: \\\\ANI.WSP\\\" \"; Printf(\"%s\

A 字符串中有非法字符,输出值不定 B \\\"D: \\\\ANI.WSP\\\" C \"D: \\ANI.WSP\" D \"D: \\\\ANI.WSP\" 74.下面不正确的字符串赋值或赋初值方式是________。 A char *str; str=\"string\"; B char str[7]={'s','t','r','I','n','g'}; C char str1[10]; str1=\"string\";

D char str1[]=\"string\75.下面程序段的运行结果是__________。 char a[7]=\"abcdef\"; char b[4]=\"ABC\"; strcpy(a,b); printf(\"%c\[5]);

(A) └┘ (B) \0 (C) e (D) f (其中└┘表示空格) 76.下述对C语言字符数组的描述中错误的是__________。 (A) 字符数组可以存放字符串

(B) 字符数组中的字符串可以整体输入、输出

(C) 可以在赋值语句中通过赋值运算符\"=\"对字符数组整体赋值 (D) 不可以用关系运算符对字符数组中的字符串进行比较 77.对两个数组a和b进行如下初始化 char a[]=\"ABCDEF\"; char b[]={'A','B','C','D','E','F'}; 则以下叙述正确的是__________。 (A) a与b数组完全相同 (B) a与b长度相同 (C) a和b中都存放字符串 (D) a数组比b数组占用内存大 78.以下程序段________。 Char str[]=\"ab\\n\\\\012\\\\\\\"; Printf(\"\\n%d\\n\其输出结果上________。

A 14 B7 C 9 D 10 79.若有以下说明和语句,则输出结果是________。 Char s[12]=\"a book !\";

Printf (\"%d\

A 12 B 8 C 7 D 6 80.在下列语句中,不正确的是________。

A static char a [] ={\" China\ B static char a[]=\"China\"; C printf(\"%s\ D scanf(\"%s\

81.字符'0'的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是__________。 #include main()

{ union { int i[2]; long k; char c[4]; }r, *s=&r; s->i[0]=0x39; s->i[1]=0x38;

printf(\"%x\n\>c[2]); }

(A) 39 (B) 9 (C) 38 (D) 8 82.若有以下说明:

int a[2]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a','d',g;

则数值为4的表达式是________。

A a[g-c] B a[4] C a['d'-'c'] D a['d'-'c'] 83.下面程序输出的是________。 #include #include main()

{char *p1=\"abc\strcpy(str+2,strcat(p1,p2)); printf(\"%s\\n\}

A xyzabcABC B zabc ABC C yzabcABC D xyabcABC

84.以下数组定义中不正确的是________。

A int a[2][3]; B int b[][3]={0,1,2,3,}; C int c[100][100]={0}

D int d[3][]={{1,2},{1,2,3},{1,2,3,4}}; 85.有以下程序 main()

{ char a[ ] ={'a','b',,'c','e','f'-'g','h','\\ 0'} ; int I,j; I=sizeof(a); j=strlen(a);

Printf(\"%d,%d \\ n\ } 程序运行后的输出结果是________。

A 9,9 B 8,9 C 1,8 D 9,8 86.以下程序的输出结果是 main( )

{ char ch[2][5]={\"6937\[2]; int i,j,s=0;

for(i=0; i<2; i++) p[i]=ch[i]; for(i=0; i<2; i++)

for(j=0; p[i][j]>'\0' && p[i][j]<='9'; j+=2) s=10*s+p[i][j]-'0'; printf(\"%d\n\ }

(A) 6385 (B) 69825 (C) 63825 (D) 693825 87.字符串\"\\\\\\\"ABC\\\"\\\\\"的长度是________。

A 11 B 7 C 5 D 3

88.设已定义char c[]=\"Tianjin\"和int I,则下面的输入函数调用中错误的是________。 A printf(\"%s\ B for(I=0;I<8;I++)printf(c[I]);

C puts(c) ; D for(I=0;I<8;I++)printf(\"%c\89.设有如下程序段: char str[ ]=\"Hello\"; char *ptr; ptr=str;

执行完上面的程序段后,*(ptr+5)的值为________。 A '0' B '\\0' C 不确定的值 D '0'的地址 90.设有如下的程序段: char str[ ]=\"Hello\" char *ptr; ptr=str+2

执行完上面的程序段后,ptr[3]的值为__________。 (A) 'o' (B) '\0' (C) 不确定的值 (D) 'o'的地址 91.下列语句的执行结果是__________。 static char str[10]={\"china\ printf(\"%d\

(A) 10 (B) 5 (C) 6 (D) 0 92.下面程序的输出结果是______。 #include main()

{char p1[7]=\"abc\ strcpy(str,strcat(p1,p2)); printf(\"%s\}

A)xyzabcABC B)abcABC C)xyzabc D)xyzABC 93.下述对C语言字符数组的描述错误的是__________。

(A) 字符数组可以存放字符串

(B) 可以在赋值语句中通过赋值运算符\"=\"对字符数组整体赋值 (C) 字符数组中的字符串可以整体输入,输出

(D) 不可以用关系运算符对字符数组中的字符串进行比较 94.设有如下定义:

char *aa[2]={\"abcd\ 则以下说法正确的是__________。 (A) aa数组元素的值分别是\"abcd\"和\"ABCD\"

(B) aa是指针变量,它指向含有两个数组元素的字符型一维数组

(C) aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 (D) aa数组的两个元素中各自存放了字符'a'和'A'的地址 95.以下程序的输出结果是________。 main()

{ char st [20]=\"hello \\0 \\ t \\ \\ \\ \"; printf(\"%d%d \\n\ }

A 9 9 B 5 20 C 13 20 D 20 20

96.设变量定义为int A=5,B=6,表达式(++A==B--)?++A:--B的值是________ A 5 B 6 C 7 D 8 97.D若有定义和语句:

char s[10];s=\"abcd\";printf(\"%s\\n\); 则运行结果是________。 A 输出abcd B 输出a C 输出ab cd D编译不通过

98.当执行下面的程序时,如果输入ABC,则输出结果是________。 A ABC6789 B ABC67 C 12345ABC6 D ABC456789 # include #include main ()

{ char ss[10]=\"12345\";

gets(ss); strcat (ss,\"6789\"); printf (\"%s\\n\

99.函数调用strcat(strcpy(str1,str2),str3)的功能是__________。 (A) 将串str1复制到串str2中后再连接到串str3之后 (B) 将串str1连接到串str2之后再复制到串str3之后 (C) 将串str2复制到串str1中后再将串str3连接到str1之后 (D) 将串str2复制到串str1中后再将串str1复制到str3中

100.执行下列程序时输入123<空格>456<空格>789<回车>,输出结果是________。 A 123,456,789 B 1,456,789 B 1,23,456,789 D 1,23,456 Main()

{ char s[100];int c,I; scanf(\"

101.若有以下程序段: char str[ ]=\"ab\\n\\012\\\\\\\" ;

printf(\"%d,strlen(str));

该程序段的输出结果是________。

A 3 B 4 C 6 D 12 102.若有以下说明语句,则输出结果是________ char a[12]=\"a book!\"; printf(\"%.4s\

A a book! B a bo C a book!XXXX D 格式描述不正确,没有确定的输出 103.下述对C语言字符数组的描述中正确的是__________。

(A) 任何一个一维数组的元素在引用时,其下标可以是整型、实型或字 符型常量

(B) 一维数组的元素实质上就是一个变量,代表内存中的一个存储单元 (C) 如果要引用数组中的每一个元素,则直接使用该数组名称即可 (D) 以上都不对 二.填空题

1.下面程序的运行结果是 ______。 #define N 10 main()

{ int I,j,m[ N ]; for (I=0;I2.以下程序的输出结果是______ main()

{ int arr[10],i,k=0 ; for(i=0;i<10; i++) arr[i]=i; for(i=0; i<4; i++) k+=arr[i]+i; printf(\"%d\\n\}

3.对于数组a[m][n]来说,使用数组的某个元素时,行下标最大值是________,列下标最大值是__________。

4.已定义一个含有30个元素的数组s,函数fav1的功能是按顺序分别赋予各元素从2开始的偶数,函数fav2则按顺序每五个元素求一个平均值, 并将该值存放在数组w中。补足所缺语句。 #define SIZE 30 fav1(float s[]) { int k,i;

for(k=2,i=0;i<SIZE;i++) { __________; k+=2; } } }

fav2(float s[],float w[])

{ float sum;int k,i; sum=0.0;

for(k=0,i=0;i<SIZE;i++) { sum+=s[i]; if((i+1)%5= =0) { w[k]=sum/5; __________; k++; } } } main()

{ float s[SIZE],w[SIZE/5],sum;int i,k; fav1(s); fav2(s,w); } 5.程序 main() { int i,*p;

static int a[4]={1,2,3,4}; p=a;

for(i=0;i<3;i++) printf(\"%d\

程序的运行结果是__________。 6.以下程序的输出结果是__________。 main( )

{ int a[10]={10,20,30,40,50,60,70,80,90,100},*p;p=a+2; printf(\"%d\n\[3]); }

7.变量定义时,如果对数组全部元素赋初值,则数组长度_______ 8.若有以下程序 main()

{int a[4][4]={1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0 }} int I,j,s=0; for(I=0;I<4;I++) { for (j=0;j<4;j++) { if (a[I][j]<0) continue; if (a[I][j]==0) break ; s+ =a[I][j]; }

} printf(\"%d \\n\ } 执行后输出结果是______。 9.对数组中的元素值进行排序: # include

main()

{ int a[ ] ={2,4,15,3,17,5,8,23,9,7,11,13},I,j,k; for (l=0; k<12;k++) for(I=k;I<12;I++) if (a[ I ]>________ { j=a[ I ]; a[ I ]= ________ ________ =j; for(I=0 ; I<12;I++) printf(\"4%d\ printf(\"\\ n\"); }

10.以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空。 Mian()

{ float x[100],sum=00.0,ave,a; int n=0,I;

printf(\"Enter mark;\\n\");scanf(\"%f\while(a>=0.0&&n<1000) { sum+=______;x[n]=______; n++; scanf(\"%f\ }

ave=______; printf(\"Output:\\n\"); for(I=0;Iifprintf(\"%f\\n\ } 11.以下程序的输出结果是______ mian(0

{int arr[ ]={30,25,20,15,10,5},*p=arr; p++;

printf(\"%d\\n\}

12.若有以下定义: double w[10];

则w数组元素的上限是______,下限是______.

13.在C语言中,引用数组只能通过__________数组元素来实现,而不能通过整体引用__________来实现。

14.下面函数的功能是求出形式参数array所指数组中的最大值和最小值,并把最大值和最小值分别存入max和min所对应的实参中,将下列程序填写完整。 void find(arrry,n,max,min) int *array,n,*max,*min; { int *p,*data_end; data_end=array+n; *max=*min=*data;

for(p=array+1;p{ if(__________) *max=__________。 else if(__________) *min=__________。 } return; }

15.对于一维数组的定义\"类型说明符数组名[常量表达式]\"其中常量表达式可以包括__________和__________,不能包含__________。

16.若已定义: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++)________=I; for (I=0;I<=5;I++)________=a [I] }; 17.getchar函数的作用是__________。

18.函数mycmp(char *s,char *t)的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码的差值,即当s>t时返回正值,当s<t时返回负值。补足所缺语句。 mycmp(char *s,char *t) { while(*s==*t)

{ if(*s=='\0')rENturn 0; ++s; ++t; }

return(__________); }

19.以下程序的输出结果是__________。 #include

void fun(char *al,char *a2,int n) { int k;

for(k=0; k<n; k++ )

a2[k]=(a1[k]-'A'-3+26)%26+'A'; a2[n]='\0'; } main()

{ char s1[5]=\"ABCD\[5]; fun(s1,s2,4); puts(s2); }

20.以下语句的输出结果上 ______ char s [80], * sp =\"HELLO!\"; sp=strcpy(s,sp); s [0]='h';puts(s);

21.当运行以下程序时从键盘输入字符串qwerty和abcd,则程序的输出结果是__________。 #include #include

strle(char a[ ],char b[ ])

{ int num=0,n=0;

while(*(a+num) !='\0') num++;while(b[n]) { *(a+num)=b[n]; num++; n++; } return(num); } main( )

{ char str1[81],str2[81],*p1=str1,*p2=str2; printf(\"Input first string\n\") gets(p1);

printf(\"Input secend string\n\") gets(p2);

printf(\"%d,str1 is: %s\n\ }

22.以下程序的输出结果是__________。 main()

{ char *p[]={\"BOOL\ int i;

for(i=3; i>=0; i--,i--) printf(\"%c\[i]); printf(\"\n\"); }

23.下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。补足所缺语句。

#include main()

{ char s[80],c1,c2=' '; int i=0,num=0; gets(s);

while(s[i]!='\0') { c1=s[i]; if(i==0) c2=' '; else c2=s[i-1]; if(__________) num++; i++; }

printf(\"There are %d words.\n\24.下面程序的输出结果是__________。 #include funct(char *s,char ch) {

int j=0,k; k=0;

for(k=0;s[k]!=NULL;k++) if(s[k]==ch) j++;

return(j); } main() {

char str[]=\"abcdefcghijk\"; printf(\"%d\ }

25.以下程序的输出结果是______: #include main()

{ char str[80]=\"abcd\";

printf(\"%d \\n\ } 26.以下语句的输出结果是 [________] Printf(\"%d\\n\27.以下语句的输出结果是 ______。 Printf(\"%s\

28.在C语言中,将字符串作为__________处理。

29.将for(表达式1;表达式2;表达式3)语句改写为等价的While语句为 __________。 30.下面程序的功能是将字符串s中所有的字符c删除。补足所缺语句。 #include main() { char s[80]; int i,j; gets(s);

for(i=j=0;s[i]!='\0';i++) if(s[i]!='c')__________; s[j]='\0'; puts(s); }

31.下列程序段的输出结果是______ mian()

{char b[ ]=\"Hello,you\"; b[5]=0; printf(\"%s\\n\}

32.下列程序中字符串各单词之间有一个空格,则程序的输出结果是 ______ # include main()

{ char strl[ ]=\"how do you do \ *pl=strl; strcpy(strl+strlen(strl)/2,\" es she\"); printf(\"%s \\n\ }

33.以下程序运行后的输出结果是 ______ main()

{ char s [ ]=\"9876\

for (p=s;p{char s[ ]=\"9876\ for (p=s;p35.若有定义语句:char s[100],d[100];int j=0,I=0,且s中已赋字符串,请填空以实现字符串拷贝。(注意不要使用逗号表达式) while(s[I]){ d[j]=______;j++ } d[j]=0;

第七章 函数

一.单项选择题 1.分析程序:

#include void fun(int *s) { static int j=0; do

s[j]+=s[j+1]; while(++j<2); } main()

{ int k, a[10]={1,2,3,4,5}; for(k=1;k<3;k++)fun(a);

for(k=0;k<5;k++)printf(\"%d\[k]); } 上面程序的输出结果是__________。

(A) 34756 (B) 23445 (C) 35745 (D) 12345 2.不合法的main函数命令行参数表示形式是________

A main(int a,char *c[]) B main(int arc,char **arv) C main(int argc,char *argv) D main(int argv,char *argc[]) 3.若a,b,c,d,t均为int型变量,则执行以下程序段后的结果为_______。 #define MAX(A,B) (A)>(B)? (A):(B) #define PRINT(Y) printf(\"Y=%d\ main() { int a,b,c,d,t; …

a=1;b=2;c=3;d=4; t=MAX(a+b,c+d); PRINT(t);}

(A) Y=3 (B) 存在语法错误 (C) Y=7 (D) Y=0 4.若有以下程序 #include void f(int n); main()

{ void f(int n); f(5); }

void f(int n)

{ printf(\"%d\\n\ }

则以下叙述中不正确的是________

A 若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f

B 若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数f C 对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明 D 函数f无返回值,所以可用void将其类型定义为无值型

5.以下程序的输出结果是__________。 #include sub(x,y,z) int x,y,*z; { *z=y-x; } main()

{ int a=1,b=2,c=3;

sub(a,b,&a);sub(b,a,&b);sub(a,b,&c); printf(\"%d,%d,%d\n\

(A) 1,1,0 (B) 1,2,3 (C) 1,-1,-2 (D) 1,2,1 6.以下程序的输出结果是__________。 #include #include main() {

int a=2,b=3,c=4; float x=5.5,y=1.0,z;

z=(a+b)/c+sqrt((double)y)*1.2/c+x; printf(\"%f\n\ }

(A) 6.800000 (B) 6.400000 (C) 6.773861 (D) 6.900000

7.在C程序中,可把整型数以二进制形式存放到文件中的函数是________ A fprintf函数 B fread函数 C fwrite函数 D fputc函数 8.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是____。 (A) float型 (B) int型 (C) long型 (D) double型 9.C语言规定,程序中各函数之间__________。 (A) 既允许直接递归调用也允许间接递归调用 (B) 不允许直接递归调用也不允许间接递归调用 (C) 允许直接递归调用不允许间接递归调用 (D) 不允许直接递归调用允许间接递归调用 10.以下说法正确的是__________。

(A) 用户若需调用标准库函数,调用前必须重新定义

(B) 用户可以重新定义标准库函数,若如此,该函数将失去原有含义 (C) 系统根本不允许用户重新定义标准库函数

(D) 用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调用.

11.若调用一个函数,且此函数中没有return语句,则正确的说法是该函数 __________。 (A) 没有返回值

(B) 返回若干个系统默认值

(C) 能返回一个用户所希望的函数值 (D) 有返回值,但返回一个不确定的值 12.设有以下语句:

char str1[]=\"string\[8],*str3,*str4=\"string\";

则对库函数strcpy的调用不正确的是__________,此库函数用来复 制字符串。

(A) strcpy(str1,\"HELLO1\"); (B) strcpy(str2,\"HELLO2\"); (C) strcpy(str3,\"HELLO3\") (D) strcpy(str4,\"HELLO4\"); 13.下面函数的功能是__________。 int fun1(char *x) {

char *y=x; while(*y++); return(y-x-1); }

(A) 求字符串的长度 (B) 比较两个字符串的大小 (C) 将字符串x复制到字符串y (D) 将字符串x连接到字符串y后面 14.以下函数形式正确的是__________。 (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; return z; } (D) double fun(int x,int y); { double z; z=x+y;return z; }

15.在C语言程序中,以下描述正确的是__________。 (A) 函数的定义可以嵌套,但函数的调用不可以嵌套 (B) 函数的定义不可以嵌套,但函数的调用可以嵌套 (C) 函数的定义和函数的调用均不可以嵌套 (D) 函数的定义和函数的调用均可以嵌套 16.fscanf函数的正确调用形式是 __________。 (A) fscanf(fp,格式字符串,输出表列); (B) fscanf(格式字符串,输出表列,fp); (C) fscanf(格式字符串,文件指针,输出表列); (D) fscanf(文件指针,格式字符串,输入表列);

17.若有以下调用语句,则不正确的fun函数的首部是________ A void fun(int m, int x[]) B void fun(int s, int h[41]) C void fun(int p, int *s) D void fun(int n, int a) main() { … int a[50],n; …

fun(n, &a[9]); …

}

18.下列说法正确的是__________。

(A) 一个函数的函数体必须要有变量定义和执行部分,二者缺一不可 (B) 一个函数的函数体必须要有执行部分,可以没有变量定义

(C) 一个函数的函数体可以没有变量定义和执行部分,函数可以是空函数 (D) 以上都不对

19.以下所列的各函数首部中,正确的是________ A void play(var :Integer,var b:Integer) B void play(int a,b) C void play(int a,int b)

D Sub play(a as integer,b as integer)

20.fwrite函数的一般调用形式是 __________。 (A) fwrite(buffer,count,fp,size); (B) fwrite(fp,size,count,buffer); (C) fwrite(fp,count,size,buffer); (D) fwrite(buffer,size,count,fp);

21.C语言规定,函数返回值的类型是由__________。 (A) return语句中的表达式类型所决定 (B) 调用该函数时的主调函数类型所决定 (C) 调用该函数时系统临时决定

(D) 在定义该函数时所指定的函数类型决定 22.以下程序段的执行结果为__________。 #define PLUS(A,B) A+B main()

{ int a=1,b=2,c=3,sum;

sum=PLUS(a+b, c)*PLUS(b,c); printf(\"Sum=%d\ }

(A) Sum=9 (B) Sum=30 (C) Sum=12 (D) Sum=18 23.以下程序的输出结果是__________。 void fun(int *s) { static int j=0; do

s[j]+=s[j+1]; while(++j<2); } main( )

{ int k,a[10]={1,2,3,4,5}; for(k=1; k<3; k++) fun(a);

for(k=0; k<5; k++) printf(\"%d\[k]); }

(A) 34756 (B) 23445 (C) 35745 (D) 12345 24.以下说法正确的是__________。

(A) 定义函数时,形参的类型说明可以放在函数体内,也可以放在函数体外

(B) return后边的值不能为表达式

(C) 如果函数值的类型与返回值类型不一致,以函数值类型为准 (D) 如果形参与实参的类型不一致,以实参类型为准 25.下面函数的功能是__________。 sss(s,t) char *s, *t;

{ while((*s)&&(*t++=*s++)); return(*s-*t); }

(A) 求字符串的长度 (B) 比较两个字符串的大小 (C) 将字符串s复制到字符串t中 (D) 将字符串s接续到字符串t中 26.以下描述正确的是__________。

(A) 函数调用可以出现在执行语句或表达式中 (B) 函数调用不能做为一个函数的实参 (C) 函数调用可以做为一个函数的形参 (D) 以上都不正确 27.设有如下函数, funct(x) float x;

{ x*=x;printf(\"\n%d\ 则函数的类型__________。

(A) 与参数x的类型相同 (B) 是void (C) 是int (D) 无法确定 28.以下函数值的类型是________ fun ( float x ) { float y; y=3*x-4; return y; }

A int B 不确定 C void D float 29.有如下函数调用语句 func(rec1,rec2+rec3,(rec4,rec5));

该函数调用语句中,含有的实参个数是________

A 3 B 4 C 5 D 有语法错 30.关于C语言以下说法正确的是__________。 (A) 实参和与其对应的形参各占用独立的存储单元 (B) 实参和与其对应的形参共占用一个存储单元

(C) 只有当实参和与其对应的形参同名时才共占用存储单元 (D) 形参是虚拟的,不占用存储单元

31.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是__。 (A) 地址传递 (B) 单向值传递 (C) 由实参传给形参,再由形参传回给实参 (D) 由用户指定传递方式

32.按照C语言的规定以下说法不正确的是__________。

(A) 实参可以是常量、变量或表达式,在传递给形参时,要求实参必须有确定的值

(B) 形参可以是常量、变量或表达式 (C) 实参可以为任意类型

(D) 形参与其对应的实参类型要求可以不一致 33.在C语言中,形参的缺省存储类是________ A auto B register C static D extern 34.以下程序的输出结果是__________。 #include main()

{ static int a[]={1,2,3,4}; int x=0,i; for(i=0;i<4;i++)

{ func(a,x);printf(\"%d\ printf(\"\n\"); } func(x,y) int x[],y;

{ static int i=2;y=x[i];i++; }

(A) 3333 (B) 4321 (C) 0000 35.下列程序执行后输出的结果是__________。 #include funct (int a) { int b=0; static c=3; a=(c++,b++); return(c+a); } main() { int a=2,i,k; for(i=0;i<2;i++) k=funct (a++); printf(\"%d\n\ }

(A) 3 (B) 0 (C) 5 36.下面程序的输出结果是__________。 void func(int *x) { static int b=1;

printf(\"%d\ main() { int a=25; func(&a); func(&a); }

(A) 5254 (B) 5050 (C) 5281 37.以下程序的输出结果是__________。

(D) 1234 (D) 4 (D) 5075

#include

sub1(char a,char b) {char c;c=a;a=b;b=c;} sub2(char *a,char b) {char c;c=*a;*a=b;b=c;} sub3(char *a,char *b) {char c;c=*a;*a=*b;*b=c;} main() { char a,b; a='A';b='B';

sub3(&a,&b);putchar(a);putchar(b); a='A';b='B';

sub2(&a,b);putchar(a);putchar(b); a='A';b='B';

sub1(a,b);putchar(a);putchar(b); }

(A) ABBBBA (B) BABBAB (C) BABABA (D) BAABBA 38.以下程序的正确运行结果是__________。 #define MAX 10 int a[MAX],i; main( )

{ printf(\"\n\");sub1();sub3(a);sub2();sub3(a); } sub2()

{ int a[MAX],i,max; max=5;

for(i=0;i<max;i++) a[i]=i; } sub1()

{ for(i=0;i<MAX;i++) a[i]=i+i; }

sub3(int a[]) { int i;

for(i=0;i<MAX;i++) printf(\"%d\[i]); printf(\"\n\"); } }

(A) 0 2 4 6 8 10 12 14 16 18 0 1 2 3 4 (B) 0 1 2 3 4

0 2 4 6 8 10 12 14 16 18 (C) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4

(D) 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18

39.下面函数调用语句含有实参的个数为__________。 func((a,b,c,d),(e,f,g));

(A) 1 (B) 2 (C) 4 (D) 以上都不对

40.下面的说法不正确的是__________。

(A) 函数调用时,先求出实参表达式,然后带入形参。而使用带参的宏只是 进行简单的字符替换

(B) 函数调用是在程序运行时处理的,分配临时的内存单元。而宏展开则 是在编译时进行的,在展开时也要分配内存单元,进行值传递 (C) 对于函数中的实参和形参都要定义类型,二者的类型要求一致,而宏不 存在类型问题,宏没有类型

(D) 调用函数只可得到一个返回值,而用宏可以设法得到几个结果 41.设有如下函数定义: int f(char *s) { char * p=s; while(*p!='\0') p++; return(p-s); }

如果在主程序中用下面的语句调用上述函数,则输出结果为 _______

printf(\"%d\n\(A) 3 (B) 6 (C) 8 (D) 0

42.C语言中,形参缺省的存储类说明是__________。 (A) auto() (B) static(静态) (C) register(寄存器) (D) extern(外部)

43.库函数strcpy用以复制字符串。若有以下定义和语句: char str1[]=\"string\[8],*str3,*str4=\"string\"; 则对库函数strcpy的不正确调用是__________

(A) strcpy(str1,\"HELLO1\"); (B) strcpy(str2,\"HELLO4\";) (C) strcpy(str3,\"HELLO3\";) (D) strcpy(str4,\"HELLO4\";) 44.分析程序: #include char fun(char *c) { char *p=c; for(;*p;p++)

if(*p<='Z'&&*p>='A')*p-='A'-'a'; return *c; } main()

{ char s[81], *p=s; gets(s); fun(p); printf(\"%s\}

若运行时从键盘上输入OPEN THE DOOR(表示回车),则上面程序的输出结果是__________。

(A) oPEN tHE dOOR (B) open the door

(C) OPEN THE DOOR (D) Opne The Door 45.下列程序执行后的输出结果是________ A 6 B 7 C 8 D 9 void func(int *a,int b[]) { b[0]=*a+6; } main() { int a,b[5]; a=0; b[0]=3;

func(&a,b); printf(\"%d \\n,b[0]); }

46.下面程序的输出结果是__________。 int w=3; main() { int w=10;

printf(\"%d\n\ } fun(int k)

{ if(k==0) return w; return(fun(k-1)*k); }

(A) 360 (B) 3600 (C) 1080 (D) 1200 47.下列程序段的输出结果是________

A 2 1 4 3 B 1 2 1 2 C 1 2 3 4 D 2 1 1 2 void fun(int *x, int *y)

{ printf(\"%d %d\main() { int x=1,y=2; fun(&y,&x); printf(\"%d %d\}

48.以下程序的输出结果是__________。 main( ) {

int k=4,m=1,p; p=func(k,m); printf(\"%d,\ p=func(k,m); printf(\"%d\ }

func(int a,int b) {

static int m,k=2; k+=m+1; m=k+a+b;

return(m); }

(A) 8,17 (B) 8,16 (C) 8,20 (D) 8,8

49.如果在一个函数的复合语句中定义了一个变量,则该变_________。 (A) 只在该复合语句中有效,在该复合语句外无效 (B) 在该函数中任何位置都有效 (C) 在本程序的原文件范围内均有效 (D) 此定义方法错误,其变量为非法变量 50.以下程序的输出结果是________。 #include main() {

int k=4,m=1,p; p=func(k,m); printf(\"%d,\ p=func(k,m); printf(\"%d\n\ } func(a,b) int a,b; {

static int m=0,i=2; i+=m+1; m=i+a+b; return(m); }

(A) 8,17 (B) 8,16 (C) 8,20 (D) 8,8 51.下列程序的输出结果是________ A 4 B 6 C 8 D 10 int b=2; int func(int *a) { b += *a; return(b);} main() { int a=2, res=2; res += func(&a); printf(\"%d \\n\}

52.下面程序的输出结果是__________。 int m=13; int fun2(int x,int y) { int m=3; return(x*y-m); } main()

{ int a=7, b=5;

printf(\"%d\n\ }

(A) 1 (B) 2 (C) 7 (D) 10 53.以下程序的输出结果是__________。 main()

{ int a[]={1,2,3,4},i,x=0;

for(i=0; i<4; i++) { sub(a,&x); printf(\"%d\ printf(\"\n\"); }

sub(int*s, int *y) { static int t=3; *y=s[t]; t--; }

(A) 1234 (B) 4321 (C) 0000 (D) 4444 54.以下程序的输出结果是 __________ # include main() { int i=1,j=3; printf(\"%d\

{ int i=0; i+=j*2; printf(\"%d,%d\printf(\"%d,%d\\n\ }

A) 1,6,3,1,3 B) 1,6,3,2,3 C) 1,6,3,6,3 D) 1,7,3,2,3 55.以下程序运行后,输出结果是__________。 int d=1; fun(int p) { int d=5; d+=p++; printf(\"%d\ } main() { int a=3; fun(a); d+=a++;

printf(\"%d\n\ }

(A) 84 (B) 99 (C) 95 (D) 44 56.执行以下程序段后,a的值是__________。 static int a[]={5,3,7,2,1,5,4,10}; int a=0,k; for(k=0;k<8;k+=2) a+=*(a+k);

(A) 17 (B) 27 (C) 13 (D) 有语法错误, 无法确定

57.分析程序: #include func(int a,int b) { static int c=0; c+=a+b; return c; } main() {

int x=6, y=7, z=8, r; r=func((x--,y++,x+y),z--); r+=func(x,y); printf( \"%d\n\ }

上面程序的输出结果是__________。

(A) 34 (B) 55 (C) 40 (D) 31 58.下面程序的输出结果是__________。 char s[]=\"ABCD\"; main() { char *p;

for(p=s;p<s+4;p++) printf(\"%s\n\ }

(A) ABCD (B) A (C) D (D) ABCD BCD B C ABC CD C B AB D D A A 59.下面程序的输出结果是__________。 main() { int n=0; while(n++<=1) printf(\"%d\t\ printf(\"%d\n\

(A) 1 2 3 (B) 0 1 2 (C) 1 1 2 (D) 1 2 2 60.下面不属于C语言保留字的是________。 A short B ELSE C extern D for 61.以下叙述中不正确的是__________。

(A) 一个变量的作用域完全取决于变量定义语句的位置

(B) 局部变量的\"生存期\"只限于本次函数调用,因此不可能将局部变量的运算结果保存至下一次调用全局变量

(C) 可以在函数以外的任何部位进行定义

(D) 一个变量说明为static存储类是为了限制其他编译单位的引用 62.在C语言中,函数的隐含存储类别是________

A auto B static C extern D 无存储类别

63.分析程序: #include f(int b[],int n) { static int i,r=0; for(i=0;i<=n;i++) r+=b[i]; return r; } main()

{ int x,a[]={2,3,4,5,6,7,8,9}; x=f(a,3); x+=f(a+3,3); printf(\"%d\n\ }

上面程序的输出结果是__________。 (A) 26 (B) 40 (C) 14 (D) 54 二.填空题

1.下面程序的输出结果是__________。 #include funct(int x) { int k,p; switch(x) { case 0:

case 1: return(3); }

p=x-funct(x-2); return p; } main()

{ printf(\"%d\n\

2.若输入的值是-72,以下程序的运行结果是__________。 #include #include main() { int n;

scanf(\"%d\ printf(\"%d=\ if(n<0) printf(\"-\"); n=fabs(n);fun(n); }

fun(int n) { int k,r;

for(k=2;k<=sqrt(n);k++) { r=n%k; while(r==0)

{ printf(\"%d\ if(n>1) printf(\"*\");r=n%k; } }

if(n!=1) printf(\"%d\n\ }

3.下面pi函数的功能是,根据以下公式返回满足精度逡蟮酿的值。根据以下算法要求补足所缺语句。

?2=1+13+13·25+13·25·37+13·25·37·49+… double pi(double eps) { double s=0.0,t=1.0; int n;

for(__________; t>eps; n++) { s+=t;

t=n*t/(2*n+1); }

return (2.0* __________); }

4.一个函数由两部分组成,它们是__________和__________。

5.在C语言中,凡在一个标识符后面紧跟着一对圆括弧,就表明它是一个__________。 6.下面程序的输出结果是__________。 #define MAX 5 int a[MAX],k; main( ) { fun1( );fun3( ); fun2( );fun3( ); printf(\"\n\"); } fun1( )

{ for(k=0;k{ int a[MAX],k; for(k=0;k<5;k++) a[k]=k+k; } fun3( ) { int k;

for(k=0;kprintf(\"%d\ }

7.以下程序的功能是计算s=∑nk=0k!。补足所缺语句。 long f(int n) { int i; long s; s=__________;

for(i=1; i<=n; i++) s=__________; return s; } main() { long s; int k,n;

scanf(\"%d\ for(k=0; k<=n; k++) s=s+__________; printf(\"%ld\n\

8.以下函数用以求x的y次方。补足所缺语句。 double fun(double x, int y) { int i; double z=1;

for(i=1; i__________; i++) z=__________; return z; }

9.下面函数要求求出两个整数之和,并通过形参传回最终结果,补足所缺语句。 int add(int x,int y,____(1)____z) { ____(2)____=x+y ;}

10.以下程序的输出结果是__________。 unsigned funct(unsigned num) { unsigned int k=1; do

{ k*=num%10; num/=10; } while(num); return k; } main()

{ unsigned int n=26;

printf(\"funct result is:%d\n\ }

11.以下程序的输出结果是__________。 double sub(double x,double y,double z) { y-=1.0; z=z+x; return z; } main()

{ double a=2.5,b=9.0;

printf(\"function running result is:%6.1f\n\}

12.以下程序的输出结果是__________。 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(\"The final result is:%d\n\ }

13.若输入一个整数12,以下程序的运行结果是______。 main()

{ int a,b[10],c,i=0;

printf(\"Please input a integer:\n\"); scanf(\"%d\ while(a != 0) { c=funct(a,2); a=a/2; b[i]=c; i++; }

for(;i>0;i--) printf(\"%d\[i-1]); } funct(int a,int n) { return(a%n); }

14.分析下面程序,如果输入的数为123456,则其输出结果_______。 #include #include #include long funct(long num) { long k=1; num=labs(num); do {

k*=num%10; num/=10; }while(num); return(k);

} main( ) { long n;

printf(\"\n Input a number:\"); scanf(\"%ld\

printf(\"\n result is :%ld\ }

15.以下程序的输出结果是 __________。 void fun( ) { static int a; a+=2;

printf(\"%d\ main( ) { int cc;

for(cc=1; cc<=4; cc++) fun(); printf(\"\n\"); }

16.以下程序的运行结果是__________。 int x; main() { x=5; cude();

printf(\"%d\n\ cude () { x=x*x*x; }

17.如果想使一个内部数组在定义时每个元素初始化值为0,但不进行逐个赋值,将其说明成__________存储类型。

18.在定义数组时对数组元素自动赋以初值0,需要在数组的类型说明符前加关键字__________。 19.C语言规定,只有__________存储类型和__________存储类型的数组定义时才可进行初始化。

第八章 编译预处理

一.单项选择题

1.在宏定义#define MAX 30中,用宏名代替一个_________。 (A) 常量 (B) 字符串 (C) 整数 (D) 长整数 2.以下程序的输出结果是__________。 #define MIN(x,y) (x)<(y)?(x):(y) main() { int i,j,k;

i=10; j=15; k=10*MIN(i,j); printf(\"%d\n\ }

(A) 15 (B) 100 (C) 10 (D) 150 3.以下程序段的执行结果为__________。 #define PLUS(A,B) A+B main()

{ int a=1,b=2,c=4,sum; sum=PLUS(a++,b++)/c; printf(\"Sum=%d\ }

(A) Sum=1 (B) Sum=0 (C) Sum=2 (D) Sum=4 4.将大写字母变为小写字母的宏定义为__________。 A #define TOLOWER(ch) (ch>='A')&&(ch<='Z')? ch+26:ch? B #define TOLOWER(ch) ((ch)>='A')&&((ch)<='Z')? (ch)+'a'-'A':(ch) C #define TOLOWER(ch) ((ch)>='A')||(ch)<='Z')? (ch)'a'-'A':(ch) D #define TOLOWER(ch) (ch>='A')||(ch<='Z')? ch+26:ch 5.下列程序的执行结果是__________。 #include #define sum 10+20 main() { int b=0,c=0; b=5; c=sum*b; printf(\"%d\

(A) 100 (B) 110 (C) 70 (D) 150 6.下面程序的执行结果是__________。 #include #define SUB(X,Y) X*Y main() { int a=3,b=4;

printf(\"%d\n\ }

(A) 13 (B) 11 (C) 16 (D) 20 7.以下程序的输出结果是 _________

# include # define FUDGE(y) 2.84+y # define PR(a) printf(\"%d\# define PRINT1(a) PR(a);putchar('\\n') main()

{int x=2; PRINT1(FUDGE(5)*x); }

A) 11 B) 12 C) 13 D) 15 8.以下程序的输出结果是________ # include < stdio .h> # define SQR(X) X*X void main() { int a=10,k=2,m=1; a/=SQR(k+m)/SQR(k+m); printf(\"%d\}

A 10 B 1 C 9 D 0 9.以下程序的输出结果是________ A 15 B 100 C 10 D 150 # define MIN(x,y) (x)<(y)?(x):(y) main( ) { int i,j,k;

i=10; j=15; k=10*MIN(i,j); printf(\"%d\\n\}

10.以下说法正确的是__________。 (A) 宏定义是C语句,所以要在行末加分号 (B) 可以使用#undef命令来终止宏定义的作用域 (C) 在进行宏定义时,宏定义不能层层置换

(D) 对程序中用双引号括起来的字符串内的字符,与宏名相同的要进行置换 11.有如下程序 #define N 2 #define M N+1 #define NUM 2*M+1 #main() { int i;

for(i=1;i<=NUM;i++)printf(\"%d\\n\}

该程序中的for循环执行的次数是????????????________ A 5 B 6 C 8 D 9

12.执行以下语句的结果是________ # define N 2

# define Y(n) ((N+1)*n) z=2*(N+Y(5));

A 语句有错误 B z=34 C z=70 D z无定值

13.下面对宏定义描述,不正确的是________

A 宏不存在类型问题,宏名无类型,它的参数也无类型 B 宏替换不占运行时间

C 宏替换时先求出实参表达式的值,然后代入形参数运算求值 D 其实,宏替换只不过是字符替换而已

14.从下列选项中选择不会引起二义的宏定义是________ A # define power(x) x*x B # define power(x)(x)*(x) C # define power(x)(x*x) D # define power(x)((x)*(x)) 15.分析下面函数 swap(int *p1,*p2) { int *p;

*p=*p1;*p1=*p2;*p2=*p; }

则该程序功能为: __________。 (A) 交换*p1和*p2的值

(B) 正确,但无法改变*p1和*p2的值 (C) 交换*p1和*p2的地址

(D) 可能造成系统故障,因为使用了空指针 16.若有定义和语句: int ** pp,*p,a=10,b=20;

pp=&p;p=&a;p=&b;printf(\"%d,%d\n\ 则输出结果是__________。

(A) 10,20 (B) 10,20 (C) 20,10 (D) 20,20 17.下列说法中不正确的是__________。 (A) 指针是一个变量 (B) 指针中存放的是地址值

(C) 指针可以进行加、减等算术运算 (D) 指针变量不占用存储空间 18.以下程序输出的结果是________ A 6 B 8 C 10 D 12 #define MA(x) x*(x-1) main()

{ int a=1, b=2;printf(\"%d\\n\19.以下叙述不正确的是________ A 预处理命令行都必须以#号开始

B 在程序中凡是以#号开始的语句行都是预处理命令 C C程序在执行过程中对预处理命令行进行处理 D 以下是正确的宏定义 # define IBM-PC

20.若要使指针变量p指向一个double类型的动态存储单元,在下划线处应填入________ A double B double* C (*double) D (double*) 二.填空题

1.以下程序的输出结果是______ # define A 4 # define B(x) A*x/2

main( ) { foat c,a=4.5; c=B(a); printf(\"%5.1f\\n\}

2.设有如下宏定义

#define MYSWAP(z,x,y) {z=x; x=y; y=z;} 以下程序段通过宏调用实现变量a、b内容交换,请填空。 float a=5,b=16,c; MYSWAP(______,a,b);

3.以下程序的输出结果是__________。 #define PR(ar) printf(\"ar=%d,\ main()

{ int j, a[]={1,3,5,7,9,11,13,15}, *p=a+5; for(j=3;j;j--) switch(j) { case 1:

case 2: PR(*p++); brENak; case 3: PR(*(--p)); } }

4.可以使用__________命令来终止宏定义的作用域。

5.#define命令出现在程序中函数的外面,宏名的有效范围为________。 6.下列程序的输出结果是(__________)。 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 %d\n\

7.__________处理是指一个源文件可以将另外一个源文件的全部内容包含进来。

第九章 指针

一.单项选择题

1.若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是__________。

(A) s->next=NULL; p=p->next;p->next=s; (B) p=p->next;s->next=p->next;p->next=s; (C) p=p->next;s->next=p;p->next=s; (D) p=(*p).next;(*s).next=(*p).next;(*p).next=s;

2.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为__________。 (假设a[0][0]位于数组的第一个位置上。) (A) i*m+j (B) j*m+I (C) i*m+j-1 (D) i*m+j+1 3.若有以下定义和语句:

int w[2][3],(*pw)[3]; pw=w; 则对w数组元素的非法引用是__________。 (A) *(w[0]+2) (B) *(pw+1)[2] (C) pw[0][0] (D) *(pw[1]+2) 4.以下程序的输出结果是 ________ main()

{ printf(\"%d\\n\

A) 0 B)不确定的(因变量无定义) C)-1 D)1 5.设有char str[10],下列语句正确的是__________。 (A) scanf(\"%s\(B) printf(\"%c\(C) printf(\"%s\[0]); (D) printf(\"%s\

6.以下程序输出结果是________ A 4 B 6 C 8 D 10 Main()

{ int k=2, m=4, n=6; int pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); printf(\"%d\\n\}

7.下面程序的输出为________。 #include < stdio.h > main()

{printf(\"%d \ }

A 变量无定义 B 0 C -1 D 1 8.若已定义:

int a [ ] ={0,1,2,3,4,5,6,7,8,9} ,*p=a,I;

其中0<=I<=9,则对a数组元素不正确的应用是________。 A a [p-a] B *(&a[ I ]) C p[ I ] D a[10] 9.下列的说法正确的是__________。

(A) 在C语言中,可以使用动态内存分配技术,定义元素个数可变的数组 (B) 在C语言中,数组元素的个数可以不确定,允许随机变动 (C) 在C语言中,数组元素的数据类型可以不一致

(D) 在C语言中,定义了一个数组后,就确定了它所容纳的具有相同数据 类型元素的个数

10.下面的程序中__________有错误(每行程序前面的数字是行号)。 1 #include 2 main() 3 {

4 int a[3]={0,0}; 5 int i;

6 for(i=0;i<3;i++) scanf(\"%d\[i]); 7 for(i=1;i<3;i++) a[0]=a[0]+a[i]; 8 printf(\"%f\n\[0]); 9 }

(A) 没有 (B) 第4行 (C) 第6行 (D) 第8行 11.若有以下定义和语句: int* *pp,*p,a=10,b=20;

pp=&p; p=&a; p=&b;printf(\"%d,%d\n\ 则输出结果是__________。

(A) 10,20 (B) 10,10 (C) 20,10 (D) 20,20 12.执行以下程序段后,m的值是__________。 int a[]={7,4,6,3,10}; int m,k,*ptr; m=10; ptr=&a[0]; for(k=0;k<5;k++)

m=(*(ptr+k)int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*ptr)[3]=a,*p=a[0];

则下列能正确表示数组元素a[1][2]的表达式是_________。 (A) *((*ptr+1)[2]) (B) *(*(p+5)) (C) (*ptr+1)+2 (D) *(*(a+1)+2)

14.若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是________

A scanf(\"%d%d%d\ B scanf(\"%d%d%d\C scanf(\"%d%d%d\ D scanf(\"%d%d%d\15.若定义:int a=511,*b=&a;, 则printf(\"%d\\n\的输出结果为 A) 无确定值 B) a的地址 C) 512 D) 511

16.假定int类型变量占用两个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是________。

A 3 B 6 C 10 20

17.若有定义:int x, *pb; 则以下真确的赋值表达式是________ A pb=&x B pb=x C *pb=&x D pb=x

18.若要说明x是整型变量,pb为指向x的整型指针变量,则正确的说明是 _________。 (A) int x,*pb=&x; (B) int x,pb=&x; (C) int *pb=&x,x; (D) int x,*pb=*x; 19.分析下面程序 #include main()

{ int *p1,*p2,*p; int a=5,b=8; p1=&a;p2=&b;

if(a程序的输出结果为: __________。

(A) 8,5 5,8 (B) 5,8 8,5 (C) 5,8 5,8 (D) 8,5 8,5 20.在C语言中,下面不能作为外部数组存储类型的是__________。 (A) 自动类(auto) (B) 静态类(static) (C) 外部类(extern) (D) 寄存器类(register) 21.下面程序的输出结果是__________。 main() {

char str[]=\"ABCD\[0]; printf(\"%d\n\

(A) 68 (B) 0 (C) 字符'D'的地址 (D) 不确定的值 22.下面程序的输出结果是__________。 main()

{ int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=a+1; printf(\"%d\n\[2]); }

(A) 3 (B) 4 (C) 1 (D) 2 23.下面程序的执行结果为__________。 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; }

printf(\"%d\ }

(A) 7 (B) 8 (C) 9 (D) 10 24.下面程序输出数组中的最大值,由s指针指向该元素. main()

{ int a[10]={6,7,2,9,1,10,5,8,4,3,},*p,*s; for(p=a, s=a; p-a<10; p++) if(---?---)s=p;

printf(\"The max:%d\}

则在if语句中的判断表达式应该是________。

A p>s B *p>*s C a[p]>a[s] D p-a>p-s

25.下面程序把数组元素中的最大值放入a[0]中。则在if 语句中的条件表达式应该是________ A?p>a B?*p>a[0] C?*p>*a[0] D?*p[0]> *a[0] main( )

{ int a[10]={6,7,2,9,1,10,5,8,4,3},*p=a,i; for(i=0;i<10;i++,p++) if(________) *a=*p; printf(\"%d\",*a); }

26.以下程序段的输出结果为__________。 static char a[]=\"Program\"; char *ptr; ptr=a;

for(ptr=a;ptr(A) Program (B) Porm (C) 有语法错误 (D) Por 27.有如下说明

int a[10]={1,2,3,4,5,6,7,8,9,10},*P=a; 则数值为9的表达式是________

A *P+9 B *(P+8) C *P+=9 D P+8 28.执行以下程序段后y的值为__________。 static int a[]={1,3,5,7,9}; int y,x,*ptr; y=1; ptr=&a[1]; for(x=0;x<3;x++) y*=*(ptr+x);

(A) 15 (B) 105 (C) 945 (D) 无确定值 29.执行以下程序段后的结果为__________。 static char a[]=\"language\"; char *ptr; ptr=a; while(*ptr)

printf(\"%c\ ptr++;

LANGUAGE (B) 陷入死循环 (C) 有语法错误 (D) language 30.请选出正确的程序段 A int *p; scanf(\"%d\… B int *s, k; *s=100; …

C int *s, k; char *p, c; s=&k; p=&c; *p='a'; … D int *s, k; char *p, e; s=&k; p=&c; s=p; *s=1; … 31.若定义了以下函数: void f(……) {……

*p=(double *)malloc( 10*sizeof( double)); …… }

p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是________

A double *p B float **p C double **p D float *p 32.以下程序的输出结果是__________。 main()

{ char s[ ]=\"ABCD\

for(p=s;p<s+4; p++) printf(\"%s\n\ }

(A) ABCD (B) ABCD (C) D (D) A ABC BCD C B AB CD B C A D A D 33.以下程序的输出结果是__________。

static int a[2][3]={1,2,3,4,5,6},(*p)[2],I; p=a;

for(I=0;I<3;I++)

printf(\"%d\

(A) 输出不确定 (B) 3 4 5 (C) 2 3 4 (D) 4 5 6 34.分析程序: #include int a[]={2,4,6,8}; main() { int i,t;

int *p=a,*q=a+3; for(i=0;i<4;i++)

{ t=*p;*p++=*q;*q--=t; } printf(\"%d\n\[2]); }

上面程序的输出结果是__________。 (A) 6 (B) 8 (C) 4 (D) 2 35.分析程序: #include

#include

void fun(char *s1,char *s2,char *s3) { char s, *p1, *p2;

p1=s1;p2=s1+strlen(s1)-1; while(p1<=p2) { *s3++=*p1++; if(*s2 !='\0') *s3++=*s2++; } } main() { int i;

char a[]=\"ABCDEFG\[]=\"123456789\[20]; for(i=0;i<20;i++) c[i]=0; fun(a,b,c);puts(c); }

上面程序的输出结果是__________。

(A) A1B2C3D4E5F6G7 (B) A1B2C3D4E5F6G789 (C) G7F6E5D4C3B2A1 (D) 输出不确定 36.若有如下定义和语句: static int a[3]={10,20,30}; int **pp,*p; p=a;pp=&p;

(pp[0]++)[1] +=5;

printf(\"%d,%d,%d\n\[0]); 则输出结果是__________。

(A) 25,25,10 (B) 10,25,10 (C) 25,25,15 (D) 输出结果不确定 37.若有说明:int a,b=3, *p=&b;则与a*=b;等价的语句是__________。 (A) a*=*p; (B) a=a*p; (C) a*=**p; (D) a*=&*p; 38.设有如下程序: #include main()

{ static int data[3]={10,20,30}; int **k,*j; j=data+1;k=&j+2; printf(\"%d\n\

上述程序的输出结果是__________。

(A) 运行错误 (B) 20 (C) k的地址 (D) j的地址 39.设有以下语句:

char str[4][12]={\"aaa\ *strp[4];int i;

for(i=0;i<4;i++)strp[i]=str[i];

以下对字符串的引用错误的是__________,其中0≤k<4。

(A) strp (B) str[k] (C) strp[k] (D) *strp 40.下列程序的输出结果是__________。 main()

{ char ch[2][5]={\"6934\[2]; int i,j,s=0; for(i=0;i<2;i++) p[i]=ch[i]; for(i=0;i<2;i++)

for(j=0;p[i][j]>'\0' && p[i][j]<='9';j+=2) s=10*s+p[i][j]-'0'; printf(\"%d\n\ }

(A) 6385 (B) 69825 (C) 63825 (D) 693825 41.以下程序运行后,输出结果是__________。 main( )

{ char ch[2][5]={\"693\[2]; int i,j,s=0;

for(i=0;i<2;i++) p[i]=ch[i]; for(i=0;i<2;i++)

for(j=0;p[i][j]>='0'&&p[i][j]<='9';j+=2) s=10*s+p[i][j]-'0'; printf(\"%d\n\ }

(A) 6385 (B) 22 (C) 33 (D) 693825 42.以下程序的输出结果是________ A 6 B 8 C 4 D 2 main( )

{ int a[ ]={2,4,6,8},*p=a, i; for(i=0; i<4; i++) a[i]=*p++;

printf(\"%d\\n\ } 43.若有以下定义:

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则不能表示a数组元素的表达式是__________。 (A) *p (B) a[10] (C) *a (D) a[p-a]; 44.以下程序的输出结果是__________。 #include #include void fun(char *w,int m) { char s,*p1,*p2; p1=w; p2=w+m-1; while(p1{ s=*p1++; *p1=*p2--; *p2=s; } }

main()

{ char a[ ]=\"ABCDEFG\"; fun(a,strlen(a)); puts(a); }

(A) GFEDCBA (B) AGADAGA (C) AGAAGAG (D) GAGGAGA 45.以下程序的输出结果是__________。 main()

{ char *alpha[6]={\"ABCD\ \"UVWX\ int i; p=alpha;

for(i=0; i<4; i++)printf(\"%s\[i]); printf(\"\n\"); }

(A) ABCDEFGHIJKL (B) ABCD (C) ABCDEFGHIJKLMNOP 46.若有以下定义和语句 int s[4][5],(*ps)[5]; ps=s;

则对s数组元素的正确引用形式是________

A ps+1 B *(ps+3) C ps[0][2] D *(ps+1)+3 47.以下程序的输出结果是__________。 #include main()

{ char s[4][10]; int i;

scanf(\"%s%s\[0],s[1]);gets(s[2]);gets(s[3]); for(i=0;i<4;i++) puts(s[i]); }

输入数据如下:(此处代表回车符) aaaa bbbb cccc dddd

(A) aaaa (B) aaaa (C) aaaa (D) aaaa bbbb bbbb bbbb bbbb cccc cccc cccc dddd dddd cccc dddd dddd eeee 48.若以下定义: struct link { int data; struck link *next; }a,b,c,*p,*q;

且变量a和b之间已有如下图所示的链表结构: a b

data next data next

(D) AEIM

┌──┬──┐ ┌──┬──┐ │ 5 │ ┼──→ │ 9 │ \\0 │ └──┴──┘ └──┴──┘ ↑p c

data next ┌──┬──┐ │ 7 │ │ └──┴──┘ ↑q

指针p指向变量a,q指向变量c。则能够把c插入到a和b 之间并形成新的链表的语句组是________ A a.next=c; c.next=b; B p.next=q; q.next=p.next; C p->next=&c; q->next=p->next; D (*p).next=q; (*q).next=b;

49.若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是________ A i=*p; B *p=*&j; C i=&j; D i=**p; 50.若有以下定义:

int a[]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为3的表达式是__________。

(A) p+=2,*++p (B) p+=2,*(p++) (C) p+=3,*p++ (D) p+=2,++*p 51.下面程序的输出结果是__________。 main()

{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4]=a,i,j,k=0; for(i=0;i<3;i++) for(j=0;j<2;j++) k+=p[i][j]; printf(\"%d\n\ }

(A) 60 (B) 68 (C) 99 (D) 108 52.设有以下定义:

int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*prt)[3]=a,*p=a[0];

则下列能够正确表示数组元素a[1][2]的表达式是__________。 *((*prt+1)[2])(B) *(*(p+5)) (C) (*prt+1)+2 (D) *(*(a+1)+2)

53.若有int a[10],*p;则下列表达式正确的是__________。 (A) p=a; (B) p=a[0]; (C) *p=&a[0]; (D) p=&a; 54.若有int *p,a[10];p=a;则下列写法不正确的是__________。 (A) p=a+2 (B) a++ (C) *(a+1) (D) p++ 55.若已定义:

int a[ ]={0,1,2,3,4,5,6,7,8,9], *p=a,i;

其中 0≤i≤9, 则对a数组元素不正确的引用的是________ A a[p-a] B *(&a[i]) C p[i] D a[10]

56.若以定义

int a[ ]={0,1,2,3,4,5,6,7,8,9},*p=a,i

其中0≤i≤9,则对a数组所有元素的引用不正确的是________。 A a[p-a] B *(&a[i]) C p[i] D *(*(a+i)) 57.在以下定义等价的是________ int *p[4]

A int [4]; int p; C (int *p)[4] D int (*p)[4] 58.若有以下说明:

int a[2]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a','d',g;

则数值为4的表达式是________。

A a[g-c] B a[4] C a['d'-'c'] D a['d'-'c'] 59.以下定义中,标识符prt________ int(*prt)[3] A 定义不合法

B 是一个指针数组名,每个元素是一个指向正整数变量的指针。 C 是一个指针,它指向一个具有三个元素的一维数组。 D 是一个指向整型变量的指针。 60.以下程序段的输出为__________。

static char a[]=\"language\[]=\"progratne\"; char *ptr1,*ptr2; int k; ptr1=a;ptr2=b; for(k=0;k<7;k++)

if(*(ptr1+k)==*(ptr2+k)) printf(\"%c\

(A) gae (B) ga (C) language (D) 有语法错误 61.以下程序的输出结果是__________。 int f(char *s) { char *p=s;

while(*p!='\0')p++; return (p-s); } main() { int len=0;

len=f(\"goodbey!\"); printf(\"%d\n\ }

(A) 3 (B) 6 (C) 8 (D) 0 62.分析下面程序 #include main() { int i; int *int_ptr;

int_ptr=&i; *int_ptr=5; printf(\"i=%d\ }

程序的执行结果是__________。

(A) i=0 (B) i为不定值 (C) 程序有错误 (D) i=5 63.以下程序的输出结果是__________。 # include \"stdlib.h\"

fut(int **s,int p[2][3]) { **s=p[1][1]; } main()

{ int a[2][3]={1,3,5,7,9,11},*p; p=(int *)malloc(sizeof(int)); fut(&p,a);

printf(\"%d\n\

(A) 1 (B) 7 (C) 9 (D) 11

64.变量i的值为3,i的地址为1000,若欲使p为指向i的指针变量,则下列赋 值正确的是__________。

(A) &i=3 (B) *p=3 (C) *p=1000 (D) p=&i 65.以下程序的输出结果是________。

A ABCD B ABCD C EFG D EFGH FGH EFG JK IJKL KL IJ O M Main()

{ char w[ ][10]={\"ABCD\ for(k=1;k<3;k++)printf(\"%s\\n\}

66.下列语句不正确的是__________。

(A) int *a[3]; (B) char **p; (C) char *substr(),*p; (D) int *p,x;x=3;*p=&x; 67.下列程序执行后的输出结果是__________。 int d=1; fun(int p) { int d=5; d+=++p; printf(\"%d\ } main() { int a=3; fun(a); d+=a++;

printf(\"%d\n\ }

(A) 8 4 (B) 9 6 (C) 9 4 (D) 8 5 68.下列程序的输出结果是________ A 非法 B a[4]的地址 C 5 D 3 main()

{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5; printf(\"%d\}

69.以下对一维整型数组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];

70.以下语句定义正确的是__________。 (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};

71.若有以下说明,且0≤i≤9,则________是对数组元素的错误引用。 Int a[10],*p=a;

A *(a+I) B a[p-a+I] C p+I D *(&a[I]) 72.执行以下程序段后,m的值为__________。 static int a[2][3]={1,2,3,4,5,6}; int m,*ptr; ptr=&a[0][0];

m=(*ptr)*(*(ptr+2))*(*(ptr+4));

(A) 15 (B) 48 (C) 24 (D) 无定值 73.若有下面的程序片段:

int a[12]={ 0 }, *p[3], **pp,i; for(i=0;i<3;i++) p[i]=&a[i*3]; pp=p;

对数组元素的错误引用是__________。

(A) pp[0][1] (B) a[10] (C) p[3][1] (D) *(*(p+2)+2) 74.分析程序: #include #include main()

{ char *s1=\"AbCdEf\ s1++;s2++;

printf(\"%d\n\ }

上面程序的输出结果是__________。

(A) 正数 (B) 负数 (C) 零 (D) 不确定的值

75.以下程序输出的结果是________ A 23 B 24 C 25 D 26 Void prtv(int *x) { printf(\"%d\\n\main() { int a=25; prtv(&a); }

76.当调用函数时,实参是一个数组名,则向函数传送的是________ A 数组的长度 B 数组的首地址 C 数组每一个元素的地址 D 数组每个元素中的值 77.以下程序的输出结果是________ #include #include main()

{ char b1[8]=\"abcdefg\while (--pb>=b1) strcpy(b2,pb); printf(\"%d\\n\}

A 8 B 3 C 1 D 7

78.指针S所指字符串的长度为__________。 char *s=\"\t\\Name\\Address\n\"; (A) 说明不合法 (B) 19 (C) 18 (D) 15 79.下面程序的输出结果是__________。 #include func(char *s)

{ char *p=s; int num=0;

while(*p!='\0') num++;return(num); } main()

{ printf(\"%d\n\

(A) 3 (B) 6 (C) 8 (D) 0

80.以下四个程序中,__________不能正确实现对两个整型变量的值进行交换。 (A) #include main() {

int a=10,b=20; swap(&a,&b); printf(\"%d%d\n\ } swap(p,q) int *p, *q; { int *t;

t=(int *)malloc(sizeof(int)); *t=*p;*p=*q;*q=*t; }

(B) #include main() {

int a=10,b=20; swap(&a,&b); printf(\"%d%d\n\ } swap(p,q) int *p,*q; { int t;

t=*p;*p=*q;*q=t; }

(C) #include main() {

int *a,*b; *a=10,*b=20; swap(a,b);

printf(\"%d%d\n\ } swap(p,q) int *p,*q; int t;

t=*p;*p=*q;*q=t; }

(D) #include main() {

int a=10,b=20; int *x=&a,*y=&b; swap(x,y);

printf(\"%d%d\n\ } swap(p,q) int *p,*q; {

int t;t=*p;*p=*q;*q=t; }

81.以下程序的输出结果是________

A 720 B 120 C 24 D 6

f(int b[ ], int n) { int i,r=1;

for(i=0; i<=n; i++)r=r*b[i]; return n; } main()

{ int x,a[ ]={2,3,4,5,6,7,8,9}; x=f(a,3); printf(\"%d\\n\}

82.分析程序

#include main()

{ int a[10]={1,2,3,4,5,6,7,8,9,0},*p; p=a;

printf(\"%x\n\ printf(\"%x\n\ }

该程序有两个printf语句,假设第一个printf语句输出的是194,则第二个printf语句的输出结果是__________。

(A) 203 (B) 204 (C) 1a4 (D) 1a6 83.已知下列函数定义

setw(int *b,int m,int n,int dat) { int k;

for(k=0;k则调用此函数的正确写法是(假设变量a的说明为 int a[50]) _____。 (A) setw(*a,5,8,1); (B) setw(&a,5,8,1); (C) setw((int *)a,5,8,1); (D) setw(a,5,8,1);

84.C语言中函数返回值的类型是由________决定。 A return语句中的表达式类型 B 调用函数的主调函数类型 C 调用函数时临时决定

D 定义函数时所指定的函数类型

85.在说明语句:int *f();中,标识符f代表的是________ A 一个用于指向整型数据的指针变量 B 一个用于指向一维数组的行指针 C 一个用于指向函数的指针变量 D 一个返回值为指针型的函数名

86.若有以下说明和语句,则输出结果是________

char s[12]=\"a book1\"; printf(\"%d\

A 12 B 8 C 7 D 6 87.以下程序的输出结果是__________。 #include space (char *str) { int i,t;char ts[81];

for(i=0,t=0;str[i]!='\0';i+=2) if(!isspace(*str+i)&&(*(str+i)!='a')) ts[t++]=toupper(str[i]); ts[t]='\0'; strcpy(str,ts); } main()

{ char s[81]={\"a b c d e f g\ space(s); puts(s); }

(A) abcdeg (B) bcde (C) ABCDE (D) BCDEFG 88.以下程序的输出结果是__________。 fut(int **s,int p[2][3]) { **s=p[1][2]; } main()

{ int a[2][3]={1,3,5,7,9,11}, *p; p=(int *) malloc(sizeof(int)); fut(&p,a);

printf(\"%d\n\ }

(A) 1 (B) 7 (C) 9 (D) 11 89.设有如下定义:

char *aa[2]={\"abcd\ 则以下说法中正确的是__________。 (A) aa数组元素的值分别是\"abcd\"和\"ABCD\"

(B) aa是指针变量,它指向含有两个数组元素的字符型一维数组

(C) aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 (D) aa数组的两个元素中各自存放了一个字符串 90.以下程序输出的结果是________

A 运行出错 B 100 C a的地址 D b的地址 Main()

{ int **k , *a,, b=100; a=&b; k=&a; printf(\"%d\\n\}

91.以下程序输出的结果是__________。

#include #include main()

{ char w[][10]={\"ABCD\ for(k=0;k<3;k++)

printf(\"%s\n\[k][k]); }

(A) ABC (B) ABCD (C) EFG (D) FGH EF FGH JK KL IJ KL 0 M

92.若有以下说明和定义 fun(int *c){ } main()

{ int (*a)()=fun,*b(),w[10],c; ┆ }

在必要的赋值之后,对fun函数的正确调用语句是________ A a=a(w); B (*a)(&c); C b=*b(w); D fun (b); 93.以下程序的输出结果是________ (A) 4 4 (B) 2 2 (C) 2 4 (D) 4 6 main()

{ int a[5]={2,4,6,8,10},*p,**k; p=a; k=&p; printf(\"%d \ printf\"%d\\n\}

94.下列程序的输出结果是__________。 main( )

{ int a[5]={2,4,6,8,10},*p,**k; p=a; k=&p;

printf(\"%d\ printf(\"%d\n\(A) 4 4 (B) 2 2 (C) 2 4 (D) 4 6

95.若有以下说明和语句,则下列对data数组元素引用正确的是_______。 int data[3][4],(*p)[4]; p=data;

(A) p+1(B) *(p+3)(C) *(p+1)+3(D) *(*p+2) 96.若有以下说明:

int w[3][4] ={{0,1},{2,4},{5,8}}; int(*p)[4]=w;

则数值为4的表达式是________

A *w[1]+1 B p++,*(p+1) C w[2][2] D p[1][1]

97.以下程序输出的结果是________ A 60 B 68 C 99 D 108 main()

{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4]=a,i,j,k=0; for(i=0; i<3; i++) for(j=0; j<2; j++) k+=*(*(p+i)+j); printf(\"%d\\n\}

98.以下程序的输出结果是__________。 int i;

int x[3][3]={1,2,3,4,5,6,7,8,9},(*p)[2]=x; main( ) {

for(i=0;i<3;i++)

printf(\"%d\[i][i]); }

(A) 1 4 7 (B) 1 5 9 (C) 3 5 7 (D) 3 6 9 二.填空题

1.符号'&'是__________运算符,&a是指__________。 2.一个专门用来存放另一个变量地址的变量叫__________。

3.以下fun函数的功能是:累加数组元素中的值。N为数组中元素的个数。累加的和值放入x所指的存储单元中。补足所缺语句。 fun(int b[],intn,int*x) { int k, r=0;

for(k=0;k<n;k++)r=____(1)____;____(2)____=r; }

4.以下程序实现带有头结点的单链表的建立,链表中每个结点包含数据域data(字符型)和指针域next。所建立链表的头指针由参数phd传回调用程序。在空格处填入正确内容。 #include #include struct node { char data; struct node *next; };

void creatlist(________) { char ch; struct node *s,*r;

*phd=malloc(sizeof(struct node)); r=*phd; ch=getchar(); while(ch!='@') {

s=malloc(sizeof(struct node)); s->data=ch; r->next=s; r= s; ch=getchar(); }; r->next =________; } main() {

struct node *head; head=NULL; creatlist(_________); }

5.若有以下定义和语句,则使指针p指向值为36的数组元素的表达式是_______。 int a[10]={19,23,44,17,37,28,49,36},*p; p=a;

6.下列程序的输出结果是__________。 main( )

{ int w[10]={23,54,10,33,47,98,72,80,61},*p; p=w;

printf(\"%d\ }

7.下面程序的输出结果是__________。 #include main() {

static char str[]=\"abcdef\"; char *p_str=str+6;

while(--p_str>=str) putchar(*p_str); }

8.下面程序调用getone函数开辟一个动态存储单元,调用assone函数把数据输入此动态存储单元,调用outone函数输出此动态存储单元中的数据, 补足所缺语句。 #include \"stdlib.h\" getone(int **s)

{ *s=__________malloc(sizeof(int)); } assone(int *s)

{ scanf(\"%d\ outone (int *b)

{ printf(\"%d\n\ main() { int *p;

getone(&p); assone(p); outone(p); }

9.若有以下定义和语句,则使指针p指向值为36的数组元素的表达式是_______ int a[10]={19,23,44,17,37,28,49,36},*p; p=a;

10.以下程序的输出结果是______ int *var, ab;

ab=100; var=&ab; ab=*var+10; printf(\"%d\\n\

11.int a[10];则a[i]的地址可表示为__________或__________,a[i]的值可表示为__________。 12.程序 main() { int i,*p;

static int a[4]={1,2,3,4}; p=a;

for(i=0;i<3;i++) printf(\"%d,\ 程序的运行结果是__________

13.数组名定名规则和变量名相同,遵循__________定名规则。 14.一个数组,其元素均为指针类型数据,这样的数组叫__________。 15.在C语言中,数组的首地址是__________。 16.以下程序的输出结果是______。 main()

{ char *p=\"abcdefgh\ long *q; q=(long*)p; q++; r=(char*)q; printf(\"%s\\n\}

17.若有以下定义和语句,则通过指针p引用值为98的数组元素的表达式是__________或p[5]。 int w[10]={23,54,10,33,47,98,72,80,61},*p; p=w;

18.以下程序的输出结果是______. Main()

{ int a[ ]={2,4,6},*prt=&a[0], x=8,y,z; for(y=0; y<3; y++)

z=(*(prt+y)19.以下函数用来在w数组中插入x,w数组中的数已按由小到大顺序存放,n所指存储单元中存放数组中数据的个数。插入后数组中的数仍有序。补足所缺语句。 void fun(char *w,char x,int *n) { int i, p; p=0; w[*n]=x;

while(x>w[p])____(1)____; for(i=*n;i>p;i--)w[i]=____(2)____; w[p]=x; ++ *n; }

20.下列程序的执行结果是:__________。 main( ) {

int i,test,p[17],head; for(i=0;i<16;i++) p[i]=i+1; p[16]=0; test=0;

while(test!=p[test]) {

for(i=1;i<3;i++) {

head=test; test=p[test]; }

p[head]=p[test]; test=p[head]; }

printf(\"\n%5d\ }

21.下面程序的输出结果是__________。 #include

funct(int a,int b,int *c,int *d) { *c=a*b; *d=a/b; } main() {

int a=4,b=3,c,d; funct(a,b,&c,&d);

printf(\"a*b=%d,a/b=%d\22.以下程序的输出结果是______。 main() { int x=0; sub(&x,8,1); printf(\"%d\\n\}

sub(int *a,int n,int k)

{ if(k<=n) sub(a,n/2,2*k); *a+=k; }

23.以下程序的功能是:从键盘输入一字符串,要求将每个单词中的第一个字母改成大写(如果原来已是大写字母,则不变),然后输出转换结果。补足所缺语句。 #include main()

{ char str[255]; int i=0;

printf(\"Please Input a string!\"); while((__________=getchar())!='\n'); str[i-1]='\0';

for(i=0;str[i]!='\0';i++)

if((str[i-1]==' '||i==0)&& str[i]>='a'&& str[i]<='z')str[i]+=__________; printf(\"\n%s\ }

24.写出下列程序的执行结果 swap(p1,p2) int *p1,*p2; { int p; p=*p1; *p1=*p2; *p2=p; } main() { int a,b; int *p1,*p2;

scanf(\"%d%d\ p1=&a;p2=&b; if(aprintf(\"\na=%d,b=%d\n\若a=6,b=9,则程序的运行结果为__________。 25.以下程序的输出结果是______. 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 %d\\n\}

26.一个指针变量p和数组变量a的说明如下: int a[10],*p;

则 p=&a[1]+2的含义是指p指向数组a的第__________个元素。 27.以下程序的输出结果是__________。 #include int fun(int*x,int*y) { static int i=0,m=2;i+=m+1; m+=*x+*y; *x+=m; *y+=m; rENturn m; } main( ) { int a=1,b=2,k;

k=fun(&a,&b);printf(\"%d,\ k=fun(&a,&b);printf(\"%d\n\

28.下面fun函数的功能是将形参x的值转换成二进制数,所得二进制数的每一位放在一维数组中返回,二进制数的最低位放在下标为0的元素中,其他依此类推。补足所缺语句。 fun(int x,int b[ ]) { int k=0,r; do

{ r=x%____(1)____; b[k++]=r; x/=____(2)____; }while (x); }

29.函数fun的功能是使一个字符串按逆序存放,补足所缺语句。 void fun(char str[]) { char m;int i,j;

for(i=0,j=strlen(str);i<____(1)____;i++,j--) { m=str[i];

str[i]=____(2)____; str[j-1]=m; }

printf(\"%s\n\ }

30.fun2函数的调用语句为:fun2(&a,&b,&c);它将三个整数按由大到小的顺序调整后依次放入a、b、c三个变量中,a中放最大数。补足所缺语句。 void fun2(int *x,int *y) { int t;

t=*x; *x=*y; *y=t; }

void fun1(int *pa,int *pb,int *pc) { if(*pc>*pb ) fun2 (____(1)____);

if(*pa<*pc ) fun2(____(2)____); if(*pa<*pb=fun2(____(3)____); }

31.以下程序的输出结果是__________。 exchange(int *x, int*y) { int t;

t=*y;*y=*x;*x=t; } main() {

int a=5,b=7; exchange(&a,&b); printf(\"a=%d,b=%d\ }

32.若函数fun的类型为void,且有以下定义和调用语句: #define M 50 main() { int a[M]; ┊ fun(a); ┊ }

定义fun函数首部可以用三种不同的形式,给出这三种形式:____(1)____、____(2)____、void fun(int q[M])(注意:①形参的名字请用q,②使用同一种风格)。 33.以下程序的输出结果是______ main()

{ int a[5]={2,4,6,8,10},*p,**k; p=a; k=&p; printf(\"%d \ printf(\"%d\\n\}

34.以下程序的输出结果是______ main()

{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4]=a, i, j, k=0 ; for (i=0; i<3; i++ for(j=0; j<2; j++) k+=*(*(p+i)+j); printf(\"%d\\n\}

35.下列程序的输出结果是__________。 main() {

int a[2][3]={10,20,30,40,50,60},(*p)[3];

p=a;

printf(\"%d\ }

第十章 结构体(即“结构”)与共用体(即“联合”)

一.单项选择题

1.若有以下说明,则下列表达式中值为20的是__________。 struct sampl { int a;int b; };

struct sampl test[3]={{1,10},{2,20},{3,30}},*p=test; (A) (p++)->b (B) (p++)->a (C) (*++p).b (D) (*++p).a 2.下列描述正确的是__________。

(A) 用户可通过类型定义产生一种新的数据类型 (B) 类型定义格式要求中的标识符必须是大写字母序列

(C) 类型定义格式要求中的类型名必须是在此之前有定义的类型标识符 (D) 以上描述均不正确

3.下列程序的输出结果是__________。 #include main()

{ union{ int i[2];long k;char c[4];}r,*s=&r; s->i[0]=0x39; s->i[1]=0x38;

printf(\"%c\n\[0]); }

(A) 39 (B) 9 (C) 38 (D) 8 4.下列描述说明正确的是__________。

(A) 结构体变量可以作为一个整体进行其值的输入和输出 (B) 结构体成员项不可以是结构体

(C) 结构体成员项可以是结构体或其他任何C语言的数据类型 (D) 结构体变量和结构体是相同的概念 5.结构体定义 struc student

{ int num;char sex;int age; } s1,s2;

下列语句中错误的是__________。

(A) printf(\"%d,%c,%d\ (B) s2.age=s1.age; (C) s1.age++; (D) printf(\"%o\6.设有如下枚举类型定义:

enum language { Basic=3,Assembly,Ada=100,COBOL,Fortran }; 枚举量Fortran的值为__________。 (A) 4 (B) 7 (C) 102 (D) 103 7.以下程序的输出结果为__________。 typedef union

{ long i;int k[5]; char c; } DATE; struct date

{ int cat;DATE cow;double dog; }too;

DATE max; #include main() {

printf(\"%d\ }

(A) 25 (B) 30 (C) 18 (D) 8 8.以下程序的输出结果是__________。 #include main( )

{ union{int i[2];long k;char c[2];}r,*s=&r; s->k=0x12345678; printf(\"%x\n\[0]); }

(A) 12 (B) 78 (C) 1234 (D) 5678 9.以下程序的输出结果是__________。 #include main() { union un { int a[2]; long b; char c; };

printf(\"%d\n\ }

(A) 9 (B) 4 (C) 1 (D) 8

10.已知字符0的ASCII码为十六进制的30,下面程序的输出结果是____。 main()

{ union { unsigned char c; unsigned int i[4]; } z; z.i[0]=0x1234; z.i[1]=0x5678; printf(\"%x\n\ }

(A) 12 (B) 34 (C) 56 (D) 78 11.已知结构体com类型的变量a,其初始化赋值如下: static struct com a={\"20\

则以下结构体com的类型定义正确的是__________。 (A) com struct { char name( ); int kodo;float shuki; } (B) struct com { char name[];int kodo;double shuki; } (C) struct com { int name; int kodo;float shuki; } (D) com struct { int name;int kodo;float shuki; } 12.下面程序的输出结果是__________。 typedef union { long x[2];

int y[4]; char z[16]; } MYTYPE; MYTYPE them; main()

{ printf(\"%d\n\

(A) 32 (B) 16 (C) 8 (D) 24 13.下列描述说明正确的是__________。

(A) 共用体定义时,系统按照成员项中占用空间最大的成员所需空间大小实际分配存储空间 (B) 共用体定义时并不分配存储空间,只有在共用体变量说明时,系统才分 配存储空间

(C) 共用体定义时,系统按照各成员项各自占用空间大小之和分配存储空间 (D) 以上说法均不正确

14.下列程序的输出结果是__________。 #include main( )

{ union{ int i[2];long k;char c[4];}r,*s=&r; s->i[0]=0x39; s->i[1]=0x38; printf(\"%lx\n\ }

(A) 390038 (B) 380039 (C) 3938 (D) 3839 15.下列描述说明正确的是__________。

(A) 只有外部存储类型的结构体变量可以进行初始化 (B) 只有静态存储类型的结构体变量可以进行初始化

(C) 外部存储类型和静态存储类型的结构体变量都可以进行初始化 (D) 以上描述都不正确 16.下列程序的输出结果是 A 5 B 6 C 7 D 8 struct abc { int a, b, c; }; main()

{ struct abc s[2]={{1,2,3},{4,5,6}}; int t; t=s[0].a+s[1].b; printf(\"%d \\n\}

17.设有以下定义

typedef union{ long i; int k[5];char c; } DATE; struct date

{ int cat; DATE cow; double dog; }too; DATE max;

则下列语句的执行结果是__________。 printf(\"%d\ (A) 25 (B) 30 (C) 18 (D) 8

18.设有如下定义: struct st

{ int a;float b; }st1,*pst;

若有pst=&st1;,则对st中的a域的正确引用是__________。 (A) (*pst).st1.a (B) (*pst).a (C) pst->st1.a (D) pst.st1.a 19.若有以下的定义 struct stru { int a; long b;

char c[6]; }sampl;

则以下赋值正确的是__________。

(A) sampl.c=\"abcd\"; (B) strcpy(sampl.c,\"abcd\"); (C) sampl->c=\"abcd\" (D) 以上均不正确 20.以下程序的输出结果是__________。 #include main( )

{ union un{ int i;long k;char c; }; struct byte { int a;long b; union un c; }r; printf(\"%d\n\ }

(A) 10 (B) 13 (C) 7 (D) 8 21.下列说法不正确的是__________。 (A) 下列结构体定义时,占据了5个字节的空间 struct s{ int num;int age; char sex; } (B) 结构体的成员名可以与程序中的变量名相同

(C) 对结构体中的成员可以单独使用,它的作用相当于普通变量 (D) 结构体的成员可以是一个结构体变量 22.下列描述说明正确的是__________。

(A) 结构体变量说明时,系统按照结构体定义时所需空间的大小实际分配存储空间 (B) 结构体变量说明时,系统按照成员项中占用空间最大的成员项分配存储空间 (C) 结构体说明时,系统并不给结构体分配存储空间 (D) 以上说法均不正确

23.下列描述说明正确的是__________。

(A) 定义结构体时,它的每个成员的数据类型可以不同 (B) 不同结构体的成员名不能相同

(C) 结构体定义时,其成员的数据类型不能是结构体本身 (D) 结构体定义时各成员项之间可用分号也可用逗号隔开 24.下列描述说明正确的是__________。 (A) typedef int INTEGER; INTEGER j,k; (B) typedef int char ; char j,k;

(C) typedef a[3] ARRAY; ARRAY b; (D) 以上描述均不正确

25.下列描述说明错误的是__________。

(A) 结构体变量的名称为该结构体变量的存储首地址 (B) 结构体数组的名称为该结构体数组的存储首地址 (C) 结构体变量本身的地址即各成员项存储空间的开始地址 (D) 结构体数组中不同元素的同名成员项具有相同的数据类型 26.若有以下说明,则能打出Yun的语句是__________。 struct sampl { char name[10]; int number; };

struct sampl test[3]={{\"WangBing\ {\"LiuHua\(A) printf(\"%s\n\[1].name+2); (B) printf(\"%s\n\[1].name[2]); (C) printf(\"%s\n\[2].name+2); (D) printf(\"%s\n\[2].name[2]); 27.若程序中有下面的说明和定义 struct abc {int x;char y;} struct abc s1,s2;

则会发生的情况是________

A 编译出错 B 程序将顺利编译`连接`执行 C 能顺利通过编译`连接`但不能执行 D 能顺利通过编译`但连接出错 28.下列描述说明正确的是__________。

(A) 共用体定义时,系统按照各成员项所需空间的大小之和实际分配存储 空间

(B) 结构体定义时并不分配存储空间,只有在结构体变量说明时,系统才分 配存储空间

(C) 共用体定义时,系统按照占用空间最大的成员项分配存储空间 (D) 以上说法均不正确 29.设有以下语句:

struct st {int n;struct st * next;};

static 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 30.有如下定义

struct person{char name[9]; int age;}; strict person class[10]={\"Johu\\"Paul\\"Mary\\"Adam 16,};

根据上述定义,能输出字母M的语句是________。 A prinft(\"%c\\n\

B pfintf(\"%c\\n\C prinft(\"%c\\n\D printf(\"%^c\\n\31.以下程序的输出结果是__________。 #include main() {

struct byte {int a;char b;};

union{int i[2];long k;char c[2];struct byte d;}r,*s=&r; s->k=0x12345678;

printf(\"%x,%x\n\ }

(A) 34,56 (B) 56,78 (C) 1234,5678 (D) 5678,34 32.以下程序的输出结果是__________。 main() { struct cmplx { int x; int y; } cnum[2]={1,3,2,7};

printf(\"%d\n\[0].y/cnum[0].x*cnum[1].x); }

(A) 0 (B) 1 (C) 3 (D) 6 33.以下程序的输出结果是__________。 #include main() { struct stru { int a,b; char c[6]; };

printf(\"%d\n\ }

(A) 2 (B) 4 (C) 8 (D) 10 34.以下程序的输出结果是__________。 #include main() { struct stru { int a; long b; char c[6]; };

printf(\"%d\n\ }

(A) 2 (B) 4 (C) 6 (D) 12

35.下列语句段,没有错误的是__________。 (A) static str[]={\"i love China\(B) char *a=\"i love China\";

(C) char *a;strcpy (a,\"i love China\"); (D) char str[14];str[]=\"i love China\"; 36.下列描述说明错误的是__________。

(A) 结构体变量各的成员项各自占用各自的存储空间,而共用体各成员项 共同占用同一存储空间

(B) 结构体定义时并不分配存储空间,只有在结构体变量说明时,系统才分 配存储空间

(C) 结构体变量占用空间的大小为各成员项占用空间大小之和,而共用体 占用空间大小为其成员项中占用空间最大的成员项所需存储空间大小 (D) 以上说法均不正确

37.下列描述说明正确的是__________。

(A) 定义结构体时,系统按照各成员项的大小分配相应的存储空间 (B) 定义结构体时,系统按照成员项中占用空间最大的成员项分配存储空间

(C) 结构体定义时,结构体本身并不占用存储空间,即系统并不给结构体分配存储空间 (D) 以上说法均不正确

38.下列程序的输出结果是__________。 main()

{ char *p1,*p2,str[50]=\"xyz\"; p1=\"abcd\"; p2=\"ABCD\";

strcpy(str+2,strcat(p1+2,p2+1)); printf(\"%s\ }

(A) xyabcAB (B) abcABz (C) Ababcz (D) xycdBCD 39.有下面的程序段

char a[3],b[]=\"China\"; a=b; printf(\"%s\ 则__________。 (A) 运行后将输出China (B) 运行后将输出Ch (C) 运行后将输出Chi (D) 编译出错

40.设有char str1[10],str2[10],c1,则下列语句正确的是___。 (A) str1={\"china\(B) c1=\"ab\";

(C) str1={\"china\(D) c1='a';

以下能正确进行字符串赋值、赋初值的语句组是__________。 (A) char s[5]={'a','b','c','d','e'}; (B) char *s; s=\"abcde\"; (C) char s[5]=\"abcde\"; (D) char s[5]; s=\"abcd\";

以下程序段的输出结果是__________。 char str[ ]=\"ABCD\

p=str;

printf(\"%d\n\

(A) 68 (B) 0(C) 字符D的地址 (D) 不确定的值 41.对于下述说明,表达式________不能使变量p->b的值增1。 Struct st {int a; int *b; }*p;

A *++p->b B *++((p++)->b) C *p->b++ D (*(p++)->b)++ 42.若有以下定义:

char s[20]=\"programming\ 则不能代表字符o的表达式是__________。 (A) ps+2 (B) s[2] (C) ps[2] (D) ps+=2,*ps 43.若有以下程序片段:

char str[]=\"ab\n\012\\\\"; printf(\"%d\ 则其输出结果是__________。 (A) 3 (B) 4 C) 6 (D) 12

44.若有下面的说明和定义,则sizeof (struct aa)的值是_________。 struct aa

{ int r1; double r2;float r3; union uu{ char u1[5]; long u2[2]; } ua; } mya;

(A) 30 (B) 29 (C) 24 (D) 22

45.根据下面的定义,能打印出字母M的语句是__________。 struct person { char name[9]; int age; }; struct person class[10]={\"John\ \"Paul\ \"Mary\ \"Adam\(A) printf(\"%c\n\[3].name); (B) printf(\"%c\n\[3].name[1]); (C) printf(\"%c\n\[2].name[1]); (D) printf(\"%c\n\[2].name[0]);

46.分析下面四个函数strcpy,其功能是把字符串t复写到串s中,则 下面四个函数__________。 (1) strcpy ( char s[],char t[]) { int i; i=0;

while((s[i]=t[i])!='\0') i++; } (2) strcpy ( char *s,char *t) { while((*s++=*t++)!='\0'); }

(3) strcpy ( char *s,char *t)

{ while((*s=*t)!='\0') {s++;t++; } }

(4) strcpy ( char *s,char *t) { while(*s++=*t++); }

(A) 第四个函数是错的 (B) 第三个函数是错的 (C) 全部正确 (D) 第二个函数是错的 47.下面程序的输出结果是__________。 main()

{ enum team {a=2,b=a*3,c,d,e=d+20}; printf(\"%d %d %d %d %d\n\ }

(A) 0 1 2 3 4 (B) 2 6 0 0 20 (C) 2 6 7 8 28 (D) 2 6 2 3 20

48.若有以下说明和语句,则值为6的表达式是__________。 struct st { int n;

struct st *next; };

struct st a[3],*p;

a[0].n=5; a[0].next=&a[1]; a[1].n=7; a[1].next=&a[2]; a[2].n=9; a[0].next='\0'; p=&a[0];

(A) p++->n (B) p->n++ (C) (*p).n++ (D) ++p->n 49.下列程序的输出结果是__________。 main()

{ char ch[2][5]={\"6934\[2]; int i,j,s=0; for(i=0;i<2;i++) p[i]=ch[i]; for(i=0;i<2;i++)

for(j=0;p[i][j]>'0'&&p[i][j]<='9';j+=2) s=10*s+p[i][j]-'0'; printf(\"%d\n\ }

(A) 6385 (B) 69825(C) 63825 (D) 693825 50.以下程序的输出结果是__________。 struct st { int x; int *y;} *p;

int dt[4]={10,20,30,40 };

struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],

60,&dt[0]}; main() { p=aa;

printf(\"%d\n\ printf(\"%d\n\ printf(\"%d\n\ }

(A) 10 (B) 50 (C) 51 (D) 60 20 60 60 70 20 21 11 31 51.以下程序的输出结果是__________。 typedef union { long x[2]; int y[4];

char z[8]; } MYTYPE; MYTYPE them; main()

{ printf(\"%d\n\

(A) 32 (B) 16 (C) 8 (D) 24 52.结构体类型变量在程序执行期间__________。

(A) 所有成员一直驻留在内存中 (B) 只有一个成员驻留在内存中 (C) 部分成员驻留在内存中 (D) 没有成员驻留在内存中 53.下面程序的输出结果为__________。 struct st { int x; int *y; } *p;

int dt[4]={10,20,30,40}; struct st

aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]}; main() { p=aa;

printf(\"%d\n\>x); printf(\"%d\n\>x); printf(\"%d\n\>y)); }

(A) 10 (B) 50 (C) 51 (D) 60 20 60 60 70 20 21 21 31 54.设有如下定义: struct sample { int a; int b;}; struct st { int a;float b;

struct sample *p; } st1,*pst;

若有pst=&st1;,则以下引用正确是__________。 (A) (*pst).p.a (B) (*pst)->p.a (C) pst->p->a (D) pst.p->a 55.下面程序的输出结果是__________。 #include #include main( )

{ char *p1=\"abc\[50]=\"xyz\"; strcpy(str+3,p2); strcat(str+2,p1); printf(\"%s\n\ }

(A) xyzabcABC (B) zabcABC (C) yzabcABC (D) xyzABCabc

56.下列描述说明正确的是__________。

(A) 对于一个具体的结构体,它的成员数目可以根据自己的需要随时更改 (B) 结构体与数组一样,其每个成员的数据类型都相同 (C) 结构体的每个成员的数据类型必须是基本数据类型 (D) 以上描述均不正确

57.下列程序的输出结果是__________。 main()

{ static int num[5]={2,4,6,8,10}; int *n,**m; n=num; m=&n;

printf(\"%d\ printf(\"%d\n\ }

(A) 4 4 (B) 2 2(C) 2 4 (D) 4 6 58.下面程序的输出结果是__________。 main() { struct cmplx {

int x,y;} cnum[2]={1,2,3,4}; printf(\"%d\n\[0].y/cnum[0].x*cnum[1].x); }

(A) 0 (B) 1 (C) 3 (D) 6 二.填空题

1.有以下说明定义和语句,可用a.day引用结构体成员day,写出引用结构体成员day的其他两种形式____(1)____、____(2)____。

struct {int day;char mouth;int year;}a,*b;b=&a;

2.以下程序的运行结果是__________。 main() {

static struct s1 {char c[4],*s;} s1={\"abc\

static struct s2 {char *cp;struct s1 ss1;} s2={\"ghi\

printf(\"%s,%s\n\ }

3.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是______。 Struct stud { char num[6]; int s[4]; double ave; } a,*p;

4.在C语言中,用关键字__________来说明结构体类型。

5.以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针.请将定义补充完整。 struct node {int info; ______link; }

6.在C语言中,使几个不同的变量共占同一段内存的结构称为________。 7.若有以下说明和定义语句,则变量w在内存中所占的字节数是__________。 union aa { float x,y; char c[6]; }w;

8.若有以下定义和语句,则sizeof(a)的值是____(1)____,而sizeof(b)的值是____(2)____。 struct node { int day; char mouth; int year; struct node *p; }a;

union{ struct node calender;char str[20]}b; 9.设有以下结构体类型: struct st

{ char name[8]; int num; float s[4]; }student[50];

并且结构体数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,请将以下fwrite语句补充完整。

fwrite(student,__________,1,fp)

10.下面程序由终端键盘输入字符,以二进制方式存放到文件中,用!结束输入。补足所缺内容。 #include main( ) { FILE *fp;

char ch, fname[10];

printf(\"Input name of file\n\");gets(fname); if((fp=fopen(fname,____(1)____))==NULL) { printf(\"cannot open\n\");exit(0); } printf(\"Enter data :\n\");

while(__________!= '!')fputc(____(3)____); fclose(fp); }

11.以下程序的运行结果是__________。 struct node {int x;char c;}; main()

{ static struct node a={10,'x'}; func(a);

printf(\"%d,%c\ }

func(struct node b) { b.x=20;b.c='y'; }

12.把程序补充完整,该程序的功能是删除链表中的指定结点。 struct student *del(head,num) struct student *head; int num;

{ struct student *p1,*p2; if(head==NULL)

{ printf(\"\nlist null!\n\"); goto end; } p1=head;

while (num!=p1->num && p1->next!=NULL) { p2=p1;p1=p1->next; } if(__________)

{ if(p1==head) head=p1->next; else __________

printf(\"deleteN:%d\n\ }

else printf(\"%d not been found!\n\ end: return(head); }

13.以下min函数的功能是:查找带有头结点的单向链表,将结点数据域的最小值作为函数值返回。补足所缺语句。 struct node { int data;

stuct nodc *next; }; int min(struct node *first) { struct node *p; int m; p=first; m=p->data;

for(p=p->next; p!='\0'; p=__________) if(__________) m=p->data; return m; }

14.把程序补充完整,该程序完成链表的输出功能 void print(head) struct student *head; { struct student *p; p=head; if(__________) do

{ printf(\"%d,%f\n\" p->num,p->score); p=p->next; }while(__________) }

15.下面程序的输出结果是__________。 main( ) { int i=3,j=2; char *a=\"DCBA\"; printf(\"%s%s\n\ }

16.下列函数将删除数据num的结点,释放其存储空间,返回指向链表头的指针,请阅读程序并填空。

Strcut student *del(head,num) {Struct student *head; Long num;

struct student *delete,*link;

if(head= =NULL)printf(\"list null!\\n\"); else

{delete=______;

while(num!=delete->num&&delete->next!=NULL) {link=______;delete=delete->next;} if(num= =delete->num) {if(delete= =head)head=______; else______=delete->next; free______; } else

printf(#%1d not been found! \\n\}

return(head); }

17.以下程序的运行结果为__________。

#include main() {

struct example { union

{ int x;int y; }in; int a; int b; }e; e.a=1;e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b;

printf(\"%d,%d\ }

18.下面程序的输出结果是__________。 #include

funct(char *s1,char *s2,int n) { int k; k=0;

for(k=0;ks2[k]=(s1[k]-'A'-3+26)%26+'A'; s2[n]='\0'; } main() {

char s1[5]=\"ABCD\[5]; funct(s1,s2,4); puts(s2); }

19.下列程序的输出结果是__________。 #include main()

{ char b[]=\"ABCDEFG\"; char *chp=&b[7]; while(--chp>&b[0]) putchar(*chp); putchar('\n'); }

20.以下程序的运行结果是__________。 struct sampl { char name[10];int number; };

struct sampl test[3]= {{\"WangBing\ main()

{ printf(\"%c%s\n\[1].name[0], test[0].name+4); }

21.以下程序可以把从键盘上输入的十进制数(long型)以二到十六进制数的形式输出,补足所缺语句。

#include main()

{ char b[16]={'0','1','2','3','4','5','6','7','8','9','A', 'B','C','D','E','F'}; int c[64],d,i = 0 ,base; long n;

printf(\"Enter a number:\n\"); scanf(\"%ld\

printf(\"Enter new base:\n\"); scanf(\"%d\ do

{ c[i]=____(1)____; i++; n=n/base; }while(n!=0);

printf(\"Transmite new base:\n\"); for(--i;i>=0;--i) { d=c[i];

printf(\"%c\ } }

22.函数count(head)统计链表的结点个数,head为表头指针。阅读程序,要求将整个if语句改成while循环控制结构,其改写形式为______ #include int count(NODE *head) {int n=0; if(head!=NULL) do {n++;

head=head->next; }while(head!=NULL); return n; }

23.将下面函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。单向链表的头指针作为函数值返回,请填空 #include strcut list {char data; struct list * next; };

struct list * *creat() {struct list *h, *p, *q; char ch;

h=______malloc(sizeof(struct list)); p=q=h; ch=getchar(); while(ch!='?')

{p=______malloc(sizeof(struct list)); p->data=ch; q->next=p; q=p; ch=getchar(); }p->next='\\0'; ______ }

24.设有一个描述零件加工的数据结构为: 零件号pname;工序号 wnum;指针 next

下述程序建立一个包含10个零件加工数据的单向链表,请填空。 #include #include

#define LEN sizeof(struct parts) struct parts {char pname[10]; int wnum; }; void main()

{struct parts *head, *p; int I; head=______; for(I=0;I<10;I++) {p=______;

scanf(\"%s,%d\p->next=head; head=p; } }

25.函数creat按输入元素次序建立一个链表并返回表头指针,输入元素个数不定,如果输入的值为-1是结束的标志,请填空 #include #include typedef struct node {int data; struct node *next; }NODE;

NODE *creat(void) {int begin=1;

NODE head=NULL, *new,*end; While(1)

{new=(NODE *)malloc(sizeof(NODE)); scanf(\"%d\

if______ break;

new->next=null; if______ {head=end=new; begin=0; } else

{end->next=new; ______;} }

free______; return head; }

26.下列程序的执行结果是__________。 #include #include long fun(char s[]) { long n;int sign; for(; isspace(*s);s++); sign=(*s=='-')? -1:1; if(*s=='+'||*s=='-')s++; for(n=0;isdigit(*s);s++) n=10*n+(*s-'0'); return sign*n; } main() {

printf(\"%ld\ }

第十一章 位运算

一.单项选择题 1.设有以下语句:

char a=5,b=7,c;c=a|b>>3; printf(\"%d\n\则c的二进制值是__________。 (A) 00000101 (B) 00010100 (C) 00011100 (D) 00011000 2.执行下面的程序段 int x=40; char z='B'; int B;

B=((x&0xff)&&(z>'a')); 后,B的值为__________。

(A) 0 (B) 1 (C) 2 (D) 3

3.在位运算中,操作数每左移一位,其结果相当于________ A操作数乘以2 B操作数除以2 C操作数除以4 D操作数乘以4 4.以下程序的运行结果是__________。 main() {

char x=040;

printf(\"%d\n\ }

(A) 100 (B) 160 (C) 120 (D) 64

5.在c语言中,要求运算数必须是整型的运算符是________ A ^ B % C ! D >

6.在c语言中,要求运算数必须是整型或字符型的运算符是________ A && B & C! D ||

7.在位运算中,操作数每右移一位,其结果相当于________ A操作数乘以2 B操作数除以2 C操作数除以4 D操作数乘以4 8.Sizeof(float)是________

A 一种函数调用 B 一个不合法的表示形式 C 一个整型表达式 D 一个浮点表达式

9.若有运算符<<,sizeof,^,&=,则他们按优先级由高到低的正确排列次序是_ A sizeof,&=,<<,^ B sizeof,<<,^,&= C ^,<<,sizeof,&= D <<,^,&=,sizeof 10.以下运算符中优先级最低的是________。 A && B & C || D | 11.下列程序的执行结果是__________。 #include #define sum(10+20) main()

{ int a=0,b=0,c=0; a=sum;

b=5; c=sum*b; printf(\"%d\

(A) 100 (B) 110 (C) 70 (D) 150 12.以下程序的输出结果是__________。 f(int a) { int b=0; static int c=3; a=c++,b++; return(a); } main( ) { int a=2,i,k;

for(i=0; i<2; i++) k=f(a++); printf(\"%d\n\ }

(A) 3 (B) 6(C) 5 (D) 4

13.设a=00101101,若想通过a^b运算使a的高4位取反,低4为不变,则b的二进制数应是________ A 111100 B 111000 C 111001 D 110011 14.若有以下语句,则c的进值数是________ char a=3,b=6,c; c=a^b>>2;

A 00000010 B 00000100 C 00000011 D 00000110

15.二进制数10111100和11010000进行按位与运算的结果是__________。 (A) 00010000 (B) 10010000 (C) 11101101 (D) 11100001 16.若x=10010111, 则表达式(3+(int)(x))&(-3)的运算结果是________ A 10011000 B 10001100 C 10101000 D 10110000 17.表达式0x13|0x17的值是________

A 0x17 B 0x13 C 0xE8 D 0xc8 18.以下程序中c的二进制值是__________。 char a=3,b=6,c; c=a^b<<2;

(A) 00011011 (B) 00010100 (C) 00011100 (D) 00011000 19.表达式0x13^0x17的值是________

A 0x03 B 0x14 C 0xE8 D 0x17 20.表达式0x13&0x17的值是________ A 0x17 B 0x13 C 0xf8 D 0xec 21.以下程序的输出结果是________ A 0 B 1 C 2 D 3 main( )

{ int a=5,b=6,c=7,d=8,m=2,n=2; printf(\"%d\\n\}

22.若fp为文件指针,且文件已正确打开,以下语句的输出结果为________。

fseek(fp,0,SEEK-END); i=ftell(fp); printf(\"i=%d\

A fp所指文件的记录长度

B fp所指文件的长度,以字节为单位 C fp所指文件的当前位置,以字为单位 D fp所指文件的当前位置,以字节为单位 23.若x=2,y=3则x&y的结果是________

A 0 B 2 C 3 D 5 24.表达式~0x13的值是________

A 0xFFEC B 0XFF71 C 0XFF68 D 0xFF17

25.设有定义char a,b;若想通过a&b运算保留a的第三位和第六位的值,则b的二进制数应是________

A 00010100 B 00100100 C 00010010 D 00100010 26.以下程序的输出结果是________

A 0 B 1 C 2 D 3 main() { int x=35; char z='A';

printf(\"%d\\n\}

27.交换两个变量的值,不允许用临时变量,应该使用下列哪一个位运算符__________。 (A) ~ (B) & (C) ^ (D) | 28.若有以下程序段; int x=1,y=2; x=x^y; y=y^x; x=x^y;

则执行以上语句后x和y的值分别是________ A x=1,y=2 B x=2,y=2 C x=2,y=1 D x=1,y=1

29.已知小写字母a的ASCII码为97,大写字母A的ASCII码为65。以下程序结果为________ main()

{unsigned int a=32,b=66; printf(\"%c\\n\}

A 66 B 98 C b D B 30.以下叙述不正确的是________ A 表达式a&=b等价于a=a&b B表达式a|=b等价于a=a|b C表达式a!=b等价于a=a!b D表达式a^=b等价于a=a^b

31.对于文件包含处理,在编译时__________。

(A) 把用#include 命令指定的文件与本文件用link命令进行联接 (B) 把用#include 命令指定的文件与本文件用project命令进行联接 (C) 把用#include 命令指定的文件与本文件进行宏替换

(D) 把用#include 命令指定的文件与本文件作为一个源文件进行编译 32.若a=1,b=2则a|b的值是 A 0 B 1 C 2 D 3 33.以下程序的输出结果是________ A 100 B 160 C 120 D 64 main()

{ char x=040; printf(\"%d\\n\}

34.若有以下程序

int a=3,b=4; a=a^b; b=b^a; a=a^b; 则执行以上语句后a和b的值分别是________ A a=3,b=4 B a=4,b=3 C a=4,b=4 D a=3,b=3 二.填空题

1.与表达式?x^=y-2等价的另一书写形式是______ 2.对一个数进行左移操作相当于对该数__________。 3.二进制的进位方式是__________。

4.在c语言中,&运算符作为单目运算符时表示的是______运算;作为双目运算符时表示的是______运算;

5.测试char型变量a第六位是否为1的表达式是[____](设最右位是第一位)。 6.对一个数进行右移操作相当于对该数__________。 7.分析程序 main() { int i,bits,c; scanf(\"%x\ bits=i>>(16-4)&0x000f; c=i<<4; c=c|bits;

printf(\"i=%x,c=%x\ }

设i为16进制数,若输入为fe13,则运行结果为__________。 8.位运算是指__________。 9.按位与的用途有__________。

10.与表达式?a&=b等价的另一书写形式是______ 11.如果a=3,b=4,下列语句的执行结果是____________。 a=a^b;b=b^a;a=a^b;printf(\"a=%d,b=%d\

12.若a为任意整数,能将变量a清零的表达式是______。

13.若a为任意整数,能将变量a中的各二进制位均置成1的表达式是____。

14.设变量a的二进制数是00101101,若想通过运算a^b使a的高4位取反,低4位不变,则b的二进制数应是___。

15.设a=00101101,若想通过a^b运算使a的高4位取反,低4为不变,则b的二进制数应是______ 16.设有定义char,a,b;若想通过a&b运算保留a的第三位和第六位的值,则b的二进制数应是______

17.能将两个字节变量x的高8位置全1,低字节保持不变的表达式是____。 18.取一个整数 a从右端开始的4-7位,程序如下 main()

{ unsigned a,b,c,d; scanf(\"%o\ b=a>>4; c=~(~0<<4); d=b&c;

printf(\"%o,%o\n\ }

若输入a的值为331,则输出为__________。

19.设二进制数a是00101101,若想通过异或运算a^b使a的高4位取反,低四位不变,则二进制数b应是__________。

20.一个数与0进行按位异或运算,结果是__________。 21.以下程序的输出结果是__________。 main( )

{ int a=3,b=2,c=1; c-=++b; b*=a+c; { int b=5,c=12; c/=b*2; a-=c;

printf(\"%d,%d,%d,\ a+=--c; }

printf(\"%d,%d,%d\n\ }

22.若有以下语句,则c的进值数是______ char a=3,b=6,c;c=a^b>>2;

第十二章 文件操作

一.单项选择题

1.在C语言中,从计算机的内存中将数据写入文件中,称为________。 A 输入 B 输出 C 修改 D 删除 2.C语言可以处理的文件类型是________。

A 文本文件和数据文件 B 文本文件和二进制文件 C 数据文件和二进制文件 D 数据代码文件 3.C语言中系统的标准输入文件是指________。 A 键盘 B 显示器 C 软盘 D 硬盘

4.若要使指针变量p指向一个double类型的动态存储单元,在下划线处应 填入__________。 double *p;

p=__________malloc(sizeof(double)); (A) double (B) double* (C) (*double) (D) (double *)

5.下面的说法不正确的是__________。

(A) 使用宏的次数较多时,宏展开后源程序长度增长。而函数调用不会使 源程序变长

(B) 函数调用是在程序运行时处理的,分配临时的内存单元。而宏展开则 是在编译时进行的,在展开时不分配内存单元,不进行值传递 (C) 宏替换占用编译时间 (D) 函数调用占用编译时间

6.利用fseek函数可实现的操作是 __________。 (A) 改变文件的位置指针 (B) 辅助实现文件的顺序读写 (C) 辅助实现文件的随机读写 (D) 以上答案均正确

7.以下程序的输出结果是__________。 void fun(float *p1,float *p2,float *s) { s=(float*)calloc(1,sizeof(float) ); *s=*p1+*p2++; } main()

{ float a[2]={1.1,2.2},b[2]={10.0,20.0}, *s=a; fun(a,b,s);

printf(\"%5.2f\n\ }

(A) 11.10(B) 12.00(C) 21.10(D) 1.10

8.若在fopen函数中使用文件的方式是\"w\",该方式的含义是________。 A 为输出(写)打开一个文本文件 B 为输入(读)打开一个文本文件

C 向文本文件尾增加数据

D 为输出(写)打开一个进制文件 9.函数rewind的作用是 __________。 (A) 使位置指针重新返回到文件的开头 (B) 将位置指针指向文件中所要求的特定位置 (C) 使位置指针指向文件的末尾

(D) 使位置指针自动移至下一个字符位置 10.函数ftell(fp)的作用是 __________。

(A) 得到文件当前位置指针的位置 (B) 移动流式文件的位置指针 (C) 初始化流式文件的位置指针 (D) 以上答案均正确 11.下面__________不是C语言所提供的预处理功能。 (A) 宏定义 (B) 文件包含 (C) 条件编译 (D) 字符预处理

12.若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则符串应是__________。

(A) \"r\" (B) \"wb+\" (C) \"rb\" (D) \"ab\" 13.分析程序: #include main()

{ static int a[10]={1,2,3,4,5,6,7,8,9,0}; int *p=a; printf(\"%x\n\ printf(\"%x\n\

该程序有两个printf语句,如果第一个printf语句输出的是194,则第二 个printf语句的输出结果是__________。 (A) 203(B) 204(C) 1a4(D) 1a6

14.在C语言中,用于实现打开文件的库函数是________。 A fclose() B fopen() C fsead() D rewind()

15.下述关于C语言文件操作的结论中,________是正确的。 A对文件操作必须是先关闭文件 B对文件操作必须是先打开文件 C对文件操作顺序无要求

D对文件操作前必须先测试文件是否存在,然后再打开文件

16.在执行fopen函数时,若执行不成功,则函数的返回值是__________。 (A) TURE (B) -1 (C) 1 (D) NULL

17.若在fopen函数中使用文件的方式是\"ab\",该方式的含义是________。A 为读/写打开一个文本文件 B 向二进制文件尾增加数据 C 为输出打开一个文本文件 D 为读/写建立一个新的二进制文件 18.分析程序:

#include #include main()

文件打开时的方式字

{ float x,y,z;

printf(\"Please input x and y\"); scanf(\"%f%f\ z=x-y; while(1)

{ if(fabs(z)>0.5) { z=x-y; x=y; y=y+z/2; } else break; }

printf(\"%f\n\ }

若运行时从键盘上输入6 6.3(表示回车),则输出结果是 ________。

(A) 12.30000(B) 6.000000(C) 6.150000 (D) 6.300000

19.若在fopen函数中使用文件的方式是\"rb\",该方式的含义是________。 A 为输入(读)打开一个文本文件 B 为输出(写)打开一个进制文件 C 为输入(读)打开一个进制文件 D 向二进制文件尾增加数据

20.如果需要打开一个已经存在的非空文件\"FILE\"进行修改,正确的打开语句是________。 A fp=fopen(\"FILE\B fp=fopen(\"FILE\C fp=fopen(\"FILE\Dfp=fopen(\"FILE\

21.若调用fputc函数输出字符成功,则其返回值是__________。 (A) EOF (B) 1 (C) 0 (D) 输出的字符

22.若在fopen函数中使用文件的方式是\"wb+\",该方式的含义是________。 A为读/写打开一个文本文件 B为输出打开一个文本文件 C 为读/写建立一个新的文本文件 D为读/写建立一个新的二进制文件 23.以下程序的输出结果是__________。 #include

#define MAX(x,y) (x)<(y)? (y):(x) main() { int a,b,c; a=10;b=15; c=10*MAX(a,b); printf(\"%d\n\ }

(A) 15(B) 100 (C) 10(D) 150

24.以下叙述中正确的是__________。

(A) 用#include包含的头文件的后缀不可以是\".a\"

(B) 若一些源程序中包含某个头文件;当该头文件有错时,只需对该头文件 进行修改,包含此头文件所有源程序不必重新进行编译 (C) 宏命令行可以看做是一行C语句 (D) C编译中的预处理是在编译之前进行的

25.C语言库函数fgets(str,n,fp)的功能是______。 A 从文件fp中读取长度n的字符串存入str指向的内存 B 从文件fp中读取长度不超过n-1的字符串存入str指向的内存 C 从文件fp中读n个字符串存入str指向的内存 D 从串str读取至多n个字符到文件fp

26.fgets (str,n,fp)函数从文件中读入一个字符串,以下正确的叙述____。 A 字符串读入后不会自动加入'\\0' B fp是FILE类型指针

C fgets函数将从文件中最多读入n个字符 D fgets函数将从文件中最少读入n个字符 27.fseek函数的正确调用形式是 __________。 (A) fseek(文件类型指针,起始点,位移量); (B) fseek(文件类型指针,位移量,起始点); (C) fseek(位移量,起始点, 文件类型指针); (D) fseek(起始点,位移量,文件类型指针);

28.标准库函数fgets(str,n,file)的功能是___________。

(A) 从文件file中读取长度为n的字符串存入指针str所指的内存 (B) 从文件file中读取长度不超过n-1的字符串存入指针str所指的内存 (C) 从文件file中读取n个字符串存入指针str所指的内存 (D) 从文件file中读取长度为n-1的字符串存入指针str所指的内存 29.在C语言中,返回文件位置指针当前值的库函数是________。 A ftell() B fopen() C fread() D rewind()

30.在C语言中,把字符串输出到指定文件中的库函数是________。 A fgetc() B fputs() C fputc() D putw()

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

33.已知函数的调用形式为fread(buffer,size,count,fp),其中butter代表的是________。 A 存放读入数据项的存储区 B 一个指向所读文件的文件指针

C 存放读入数据的地址或指向此地址的指针 D 一个整型变量,代表要读入的数据项总数

34.在C程序中,可把整型数以二进制形式存放到文件中的函数是________。 A fprintf函数 B fread函数 C fwrite函数 D fputc函数 35.在C语言中,从二进制文件中读取数据项的库函数是________。

A fgetc() B getc() C fread() D fprintf() 36.函数调用语句fseek(fp,-10L,2);的含义是________。 A 将文件位置指针移动距离文件头10个字节

B将文件位置指针从当前位置向文件尾方向移动10个字节 C将文件位置指针从当前位置向文件头方向移动10个字节 D将文件位置指针从文件末尾处向文件头方向移动10个字节 37.以下程序向文件输出的结果是________。 #include void main ()

{ FILE *fp =fopen (\"TEST\

fprintf (fp ,\"%d%5.0f%c%d\ fclose (fp); }

A 58 76273 - 2278 B 5876273.000000-2278 C 5876273-2278 D因文件为二进制文件而不可读 38.以下程序中for循环执行的次数是__________。 #define N 2 #define M N+1

#define NUM (M+1)*M/2 main() { int i;

for(i=1; i<=NUM; i++); printf(\"%d\n\ }

(A) 5 (B) 6 (C) 8 (D) 9

39.在C语言中,要使文件位置指针重新置于文件开头的库函数是________。 A ftell() B fopen() C fread() D rewind()

40.若fp是指向某文件的指针,且已读到该文件的末尾,则C语言函数feof(fp)的返回值是__________。

(A) EOF (B) -1 (C) 非零值 (D) NULL 二.填空题

1.C语言为拥护建立和操作文件提供了缓冲文件系统函数。在这些函数中,用于打开文件的函数是______;关闭文件的函数是______;使文件位置指针重新置于文件开头的函数是______;返回文件位置指针的当前值的函数是______;把数据项写到指定文件中的函数是______;从指定文件中读取数据项的函数是______。

2.在C语言中,对文件的存取是以__________为单位,即以__________为单位。

3.在C语言中,文件的存取是以___________为单位的,这种文件被称作__________文件。 4.定义FILE *fp,这里fp是一个__________。

5.下面的findmax函数返回数组s中最大元素的下标,数组中元素的个数由t传入,补足所缺语句。 findmax(int s[],int t) { int k,p;

for(p=0,k=p;pif(s[p]>s[k])__________

return k; }

6.在C程序中,数据可以用__________和__________两种代码形式存放。 7.在C程序中,文件可以用__________方式存取,也可以用__________方式存取。 8.在C语言中,文件的打开使用函数__________。 9.分析下面程序: #include

main(int argc,char *argv[]) { int j;

for(j=0;j若该程序编译、连接生成C盘根目录下可执行文件名为test.exe,则在C盘根目录下输入以下命令行后(其中表示回车),程序的执行结果是__________。 test file1.c file2.c

10.当用fopen函数打开文件时,通常需要在该函数中指定文件使用方式。若要为输入打开一个文本文件,文件使用方式是\"r\";若要为输出打开一个文本文件,文件使用方式是______;若要为输出打开一个二进制文件,文件使用方式是______;若要为输入打开一个二进制文件,文件的使用方式是______;若要向文本文件尾增加数据,文件使用方式是______;若要向二进制文件尾增加数据,文件使用方式是______;若要为读/写建立一个新的二进制文件,文件的使用方式是______。 11.程序

#define FUN This is a C program main()

{ printf(\"First:This is FUN!\"); printf(\"Second:%s!\ 的执行结果是__________。

12.编写一程序,将从键盘输入的10个字符串输出到文本文件中,再从此文件中读入这10个字符串放在一个字符串数组中,最后把字符串数组输出到终端屏幕,补足所缺语句。 #include #include main() { FILE*fp;

char ch,str_temp[30],str[10][30]; int i;

fp=fopen(\"savefile.dat\ if(!fp)

{ printf(\"Can't open savefile.dat file\n\"); exit(0); }

strcpy(str_temp,\"\0\");

printf(\"Please Enter 10 strings(length less than 30)\");

for(i=0;i<10;i++) { gets(str_temp);

fprintf(fp,\"%s\n\ }

____(2)____ for(i=0;i<10;i++) { strcpy(str[i],\"\0\"); fgets(str[i],30,fp); printf(\"%s\[i]); } fclose(fp); }

13.下面程序由终端键盘输入字符,存放到文件中,用!结束输入。在空白处填入适当内容。 #include main( ) { FILE *fp;

char ch, fname[10];

printf(\"Input name of file\n\"); gets(fname); if((fp=fopen(fname,\"w\"))==NULL) { printf(\"cannot open\n\");exit(0);} printf(\"Enter data :\n\"); while(__________!='!') fputc(ch,fp); fclose(fp); }

14.有一磁盘文件,第一次使它显示在屏幕上,第二次把它复制到另一文件中,把该程序补充完整。 #inclued \"stdio.h\" main()

{ FILE *fp1,*fp2; fp1=fopen(\"file1.c\ if(!fp1) {

printf(\"Can't open file file1.c\"); exit(0); }

fp2=fopen(\"file2.c\ if(!fp2) {

printf(\"Can't open file file2.c\"); exit(0); }

while(!feof(fp1)) putchar(getc(fp1)); _____[1]_____;

while(!feof(fp1)) putc(_____[2]____,fp2); fclose(fp1); fclose(fp2);

15.在对文件进行操作的过程中,若要求文件的位置指针回到文件的开头,应当调用的函数是__________或fseek函数。

16.下面程序用变量count统计文件中字符的个数。在空白处填入适当内容。 #include main( )

{ FILE *fp; long count=0; if((fp=fopen(\"letter.dat\ { printf(\"cannot open file letter.dat \n\"); exit(0); } while (! feof(fp)) {__________;__________;} printf(\"count=%ld\n\ fclose(fp); }

17.以下程序用来统计文件中字符个数。请填空。 #include \"stdio.h\" main()

{ FILE *fp; long num=0L;

if((fp=fopen(\"fname.dat\ { pirntf(\"Open error\\n\"); exit(0);} while( )

{ fgetc(fp); num++;} printf(\"num=%1d\\n\ fclose(fp); }

18.在对文件进行操作的过程中,若要求文件的位置回到文件的开头,应当调用的函数是______. 19.在C语言中,能实现改变文件的位置指针的函数是__________。

20.函数调用语句:fgets(buf,n,fp);从fp指向的文件中读入________个字符放到buf字符数组中。函数返回值为__________。

21.下述程序实现文件的复制,文件名来自main函数中的参数。请填空。 #include

void fcopy(FIRE*fout,FILE*fin) { char k; do

{ k=fgetc______ if(feof(fin)) break; fputc______ }while(1); }

void main(int argc,char*argv[]) { FILE fin,fout; if(argc!=3) return;

if(fin=fopen(argv[2].\"rb\")==NULL) return; fout=______; fcopy(fout,fin); fclose(fin);

fclose(fout); }

22.rewind()函数的作用是__________。

23.以下程序段打开文件后,先利用 fseek函数将文件位置指针定位在文件末尾,然后调用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。 FILE *myf; ling f1;

myf= ________(\"test.t\

fseek(myf,0,SEEK_END); f1=ftel(myf); fclose(myf); printf(\"%d\\n\

24.下面程序的功能是将一个磁盘中的二进制文件复制到另一个文件中,两个文件名随命令行一起输入,输入时原有文件的文件名在前,新复制文件的文件名在后。在空白处填入适当内容。 #include

main(int argc, char *argv[]) {

FILE *old,*new; char ch; if(argc! =3) {

printf(\"You forgot to enter a filename or Enter error\n\"); exit(0); }

if((old=fopen__________)==NULL) { printf(\"cannot open infile\n\"); exit(0); }

if((new=fopen__________)==NULL) { printf(\"cannot open outfile\n\"); exit(0); }

while( ! feof(old)) fputc(__________,new); fclose(old); fclose(new); }

全国计算机等级考试二级C语言程序设计

习题集答案

第一章 C语言的结构

一.单项选择题

1.C 2.C 3.A 4.B 5.B 6.C 7.A 8.C 9.C 10.C 11.C 12.C 13.D 14.D 15.D 16.B 17.C 18.A 19.C 20.B 21.A 22.A 23.A 24.A 25.A 26.B 27.B 28.D 29.C 30.C 31.C 32.C 33.B 34.A 35.A 38.A 39.D 40.D 41.D 42.D 43.D 44.D 二.填空题 1.int * 2.省略

3.变量定义部分,执行部分 4.最外层的一对大括弧内的部分 5.Scanf;printf 6./* */ 7.主函数 8.函数

第二章 数据类型及其运算

一.单项选择题

1.D 2.D 3.D 4.C 5.C 6.A 7.C 8.C 11.B 12.A 13.B 14.B 15.C 16.A 17.C 20.B 21.B 22.B 23.B 24.B 25.B 26.B 29.A 30.D 31.D 32.D 33.A 34.A 35.A 38.A 39.D 40.A 41.C 42.B 43.A 44.D 47.D 48.A 49.A 50.A 51.A 52.A 53.C 56.B 57.D 58.B 59.B 60.B 61.A 62.B 65.A 66.A 67.A 68.A 69.B 70.D 71.D 74.D 75.D 76.D 77.B 78.D 79.C 80.D 83.D 84.D 85.D 86.D 87.D 88.B 89.B 92.B 93.B 94.B 95.B 96.C 97.B 98.C 101.B 102.B 103.C 104.C 105.B 106.B 二.填空题 1.7 2.常量 3.逗号 4.-10^38,10^38 5.字符形式,整数形式 6.单引号 7.'\\0' 8.10011001 9.小写

36.A 37.C 45.A 9.B 10.A 18.D 19.B 27.B 28.B 36.A 37.A 45.A 46.A 54.C 55.A 63.A 64.A 72.D 73.D 81.D 82.D 90.B 91.B 99.B 100.B

10.用一个标识符代表一个常量 11.十进制数形式,指数形式 12.l,L

13.整型常量,实型常量,字符常量,字符串常量 14.大写,小写 15.数值型常量

16.整型,字符型,实型,枚举类型 17.单精度,双精度 18.-32768,+32767 19.变量初始化

20.数组类型,结构体类型,共用体类型 21.a=1234 b=5 A或a=1234b=5 22.双引号 23.255 24.!,&&,|| 25.逗号 26.32 27.左结合 28.双目

29.主函数,main函数 30.2,1

31.其值可以改变的量 32.强制类型转换符 33.4,8 34.0.2

35.x=3.600000,i=3 36.A B 37.9,11,9,10 38.75.5 39.double

40.赋值,逗号,18,18,18,3 41.-3,4 42.a/(b*c) 43.1 44.4.0 45.###36 46.3,2,3 47.x>5||x<-5 48.246 49.表达式2

第三章 基本语句一.单项选择题

1.A 2.D 3.C 4.D 5.C 6.C 7.C 11.D 12.B 13.B 14.C 15.C 16.C 8.D 9.D 18.C 10.B 19.A

17.A

20.B 21.A 22.B 23.B 24.B 25.B 26.C 27.B 28.B 29.B 30.D 31.D 32.D 33.D 34.D 35.D 36.D 37.C 38.D 39.C 40.D 41.D 42.D 43.C 44.C 45.C 46.D 47.C 48.A 49.D 50.D 51.D 52.A 53.C 二.填空题 1.18 2.*s-*t 3.1 4.ABCDCD 5.int * , *z

6.\"bi.dat\说明:\"w\"内以w开头的字符串都可以) fclose(fp) 7.1.0/(i*i) 8.GFEDCB 9.0 1

10.输入和输出函数 11.x=2,y=3 12.变量地址,变量名 13.连续两个% 14.65 A

15.格式说明,普通字符

16.3216,154013,13 17.104044 18.10110 19.d,c,s

20.double a,b;,a+b,a-b,a*b,a/b 21.向终端输出一个字符 22.PEOPLEpeople and computer 23.0 24.标识符 25.使用

26.字母,数字,下划线,字母,下划线 27.'\\0',str+i-1

28.十进制,十六进制,八进制 29.2,3,CC,a=2,b=2,c=4

30.基本类型,构造类型,指针类型,空类型 31.(x>10&&x<100)||x<0 32.DDBBCC 33.3 34.a=1,b=2 35.3 2 3 3 36.a=1,b=2

37.整型变量,实型变量,字符型变量 38.数据类型,数据类型

第四章 选择结构程序设计

一.单项选择题

1.A 2.C 3.B 4.B 5.C 6.B 7.C 8.B 9.A 10.A 11.D 12.A 13.D 14.D 15.B 16.A 17.D 18.B 19.A 20.A 21.A 22.A 23.D 24.D 25.D 26.D 27.B 28.D 29.B 30.C 31.C 32.C 33.A 34.C 35.C 36.D 37.D 38.C 39.A 40.D 二.填空题 1.024 2.o246802468

3.由键盘输入一个数,打印出它的类型标识符 4.表达式1;While(表达式2){语句;表达式3;} 5.OK! 6.x=1 y=0 7.一个分号

8.先判断表达式,后执行语句,先执行语句,后判断表达式 9.包含它的函数,调用函数 10.花括弧 11.函数调用 12.字母,数字,下划线

13.与if语句构成循环结构,从循环体转到循环体外 14.一个循环体内包括另一个完整的循环结构 15.(a>10&&a<50)||(a<-10) 16.a==0,b==0,_derta<0 17.if(a<=b)

第五章 循环结构程序设计

一.单项选择题

1.C 2.B 3.C 4.B 5.B 6.B 7.B 8.C 11.D 12.D 13.D 14.A 15.A 16.B 17.A 20.B 21.A 22.B 23.C 24.B 25.B 26.B 29.C 30.C 31.C 32.B 33.D 34.D 35.C 38.A 39.D 40.D 41.D 42.A 43.D 44.D 47.D 48.C 49.B 50.B 51.C 52.C 53.C 二.填空题 1.k=10

2.ABCDBCDCDD 3.-1

4.x>=0,x5.else与它前面最近的一个if配对 6.1,0

7.程序无限循环,无输出结果 8.11 9.3,3

10.结束本次循环执行 11.switch-case语句,循环

9.B 10.A 18.B 19.B 27.B 28.C 36.C 37.A 45.D 46.C 54.D

12.______6 13.2*i-1

第六章 数组的定义和引用

一.单项选择题

1.C 2.C 3.C 4.C 5.C 6.C 7.B 8.C 9.A 10.C 11.A 12.C 13.A 14.C 15.C 16.A 17.A 18.B 19.B 20.B 21.B 22.B 23.A 24.B 25.B 26.B 27.B 28.C 29.D 30.D 31.D 32.C 33.D 34.D 35.A 36.D 37.D 38.A 39.D 40.D 41.D 42.A 43.D 44.D 45.C 46.C 47.C 48.C 49.A 56.A 57.B 58.A 65.A 66.A 67.A 74.C 75.C 76.C 83.D 84.D 85.D 92.B 93.B 94.C 101.C 102.B 103.B 二.填空题 1.9 2.12 3.m-1,n-1 4.s[i]=k,sum=0 5.2,3,4 6.80

7.可以不指定 8.58 9.a[k]a[k]a[k]

10.a a sum/n x[I]13.逐个引用,整个数组 14.*max<*p,*p;,*min>*p,*p; 15.常量,符号常量,变量 16.a[I-1]a[9-I]

17.从终端输入一个字符 18.*s-*t 19.XYZA 20.hELLO!

21.10,str1 is:qwertyabcd 22.SO

23.c1!=''&&c2=='' 24.2 25.4 26.2

27.A:\\ \\ PAS \\\\EX01.C

50.D 51.C 59.B 60.B 68.A 69.A 77.C 78.C 86.C 87.B 95.B 96.C 52.A 53.C 61.A 62.A 70.B 71.C 79.C 80.C 88.B 89.B 97.C 98.A 54.C 55.A 63.C 64.A 72.C 73.C 81.C 82.D 90.B 91.B 99.C 100.D

28.字符数组

29.表达式;while(表达式2)表达式3; 30.s[j++]=s[i] 31.Hello 32.how does she 33.9876 34.9876 876 35.s[I++]

第七章 函数

一.单项选择题

1.C 2.C 3.C 4.C 5.C 6.A 7.C 8.B 11.D 12.C 13.A 14.D 15.B 16.D 17.C 20.D 21.D 22.C 23.C 24.C 25.C 26.A 29.A 30.A 31.B 32.A 33.A 34.C 35.C 38.D 39.B 40.B 41.C 42.A 43.C 44.B 47.A 48.A 49.A 50.A 51.B 52.B 53.B 56.A 57.B 58.A 59.A 60.B 61.B 62.C 二.填空题 1.2

2.-72=-2*2*2*3*3 3.n=1,s

4.函数的说明部分,函数体 5.函数 6.0123401234 7.1,s*i,0,f(k) 8.10.funct result is:12

11.function running result is:9.0 12.The final result is:4 13.1 1 0 0 14.result is :720 15.2468 16.125 17.静态(static) 18.static 19.静态,外部

第八章 编译预处理

一.单项选择题

1.B 2.A 3.A 4.B 5.B 6.B 7.B 8.B 11.D 12.B 13.C 14.D 15.D 16.D 17.D 20.D 二.填空题 1.9.0

9.A 10.B 18.C 19.C 27.C 28.A 36.C 37.B 45.A 46.B 54.B 55.A 63.D 9.B 10.B 18.B 19.C

2.c

3.ar=9,ar=9,ar=11, 4.#undef

5.从定义命令之后到本源文件结束 6.7 1 7.文件包含

第九章 指针

一.单项选择题

1.C 2.D 3.D 4.B 5.D 6.C 7.B 8.D 9.D 10.D 11.D 12.A 13.D 14.A 20.D 21.B 22.B 23.B 29.B 30.C 31.C 32.B 38.A 39.A 40.A 41.A 47.A 48.C 49.B 50.B 56.D 57.C 58.D 59.C 65.D 66.C 67.C 68.C 74.A 75.D 76.B 77.D 83.D 84.D 85.D 86.C 92.B 93.C 94.D 95.D 二.填空题

1.地址,a在内存中的地址 2.指针变量 3.r+b[k],*x

4.struct node **phd,NULL,&head 5.p=p+7 6.33 7.fedcba 8.(int *),s,*b 9.p=p+7或p+=7 10.110

11.&a[i],a+i,*(a+i) 12.1,2,3 13.标志符 14.指针数组 15.数组的名称 16.efgh 17.*(p+5) 18.6 19.p++,w[i-1] 20.10

21.a*b=12,a/b=1 22.7

23.str[i++],'A'-'a' 24.a=9,b=6

15.D 16.D 24.B 25.B 33.D 34.A 42.A 43.B 51.A 52.D 60.C 61.C 69.D 70.D 78.D 79.B 87.D 88.D 96.D 97.A 17.A 18.B 26.B 27.B 35.A 36.A 44.A 45.C 53.C 54.C 62.D 63.C 71.C 72.D 80.C 81.B 89.C 90.D 98.B 19.A 28.B 37.A 46.C 55.D 64.D 73.C 82.D 91.B

25.7 1 26.4 27.5,18 28.2,2 29.j-1,str[j-1] 30.pc,pb,pc,pa,pa,pb 31.a=7,b=5

32.void fun(int *q),void fun(int q[]) 33.2 4 34.60 35.60

第十章 结构体(即“结构”)与共用体(即“联合”)

一.单项选择题

1.C 2.C 3.B 4.C 5.A 6.C 7.B 8.B 9.B 11.B 12.B 13.B 14.B 15.C 16.B 17.B 18.B 20.B 21.A 22.A 23.A 24.A 25.A 26.A 27.A 29.D 30.D 31.D 32.D 33.D 34.D 35.D 36.D 38.D 39.D 40.D 41.D 42.D 43.D 44.D 45.D 47.C 48.D 49.D 50.C 51.C 52.A 53.C 54.C 56.D 57.D 58.D 二.填空题 1.(*b).day,b->day 2.hi,no 3.22 4.struct

5.______struct node * 6.共用体 7.6 8.7,20

9.50*sizeof(struct st) 10.\"WB\11.10,x

12.num==p1->num,p2->next=p1->next; 13.p->next,m>p->data 14.p!=NULL,p!=NULL 15.ABA

16.Head,delete,delete->next,link->next,delete 17.3,3 18.XYZA 19.GFEDCB 20.LBing 21.n%base,[d] 22.while(head!=NULL) {n++;head=head->next}

10.B 19.B 28.B 37.C 46.D 55.D

23.______(struct list *) ______(struct list *) ______return(h)

24.struct parts *nextNULL或'\\0'( struct parts *)malloc(LEN) 25.new->data= = -1,begin,end=new,new 26.1234

第十一章 位运算

一.单项选择题

1.A 2.A 3.A 4.D 5.B 6.B 7.B 8.C 9.B 10.C 11.D 12.D 13.A 14.A 15.B 16.A 17.A 20.B 21.A 22.B 23.B 24.A 25.B 26.B 29.C 30.C 31.D 32.D 33.D 34.B 二.填空题

1.______x=x^y-2或x=x^(y-2) 2.乘以2 3.逢二进一 4.取地址;按位与 5.______a&040 6.除以2 7.i=fe13,c=e13f 8.进行二进制位的计算

9.清零、取一个数中某些指定位、保留某一数位 10.a=a&b 11.a=4,b=3 12.a=a&0 13.a=a|0xff 14.11110000 15.11110000 16.00100100 17.a=a|0xff00 18.331,15 19.11110000 20.原数 21.2,5,1,2,3,-2 22.00000010

第十二章 文件操作

一.单项选择题

1.B 2.B 3.A 4.D 5.D 6.D 7.D 8.A 11.D 12.B 13.D 14.B 15.B 16.D 17.B 20.D 21.D 22.D 23.D 24.D 25.B 26.B 29.A 30.B 31.C 32.C 33.C 34.C 35.C 38.D 39.D 40.C 二.填空题

1.fopen(),fclose(),rewind(),ftell(),fwrite(),fread()

18.A 19.A 27.C 28.C 9.A 10.A 18.D 19.C 27.B 28.B 36.D 37.D

2.字符,字节 3.字符,流式

4.指向FILE类型结构体的指针变量 5.k=p

6.二进制,ASCII 7.顺序,随机 8.fopen()

9.C:\est.exe file1.c file2.c 10.\"w\"\"wb\"\"rb\"\"a\"\"ab\"\"wb+\" 11.First:This is FUN!Second:FUN! 12.\"w+\13.(ch=getchar()) 14.rewind(fp1),getc(fp1) 15.rewind

16.\"r\17.!feof(fp) 18.rewind 或fseek 19.fseek()函数 20.n-1,buf的首地址

21.fin; k,fout; fopen(argv[1],\"wb\") 22.使文件位置指针回到文件的开头 23.fopen

24.(argv[1],\"rb\"),(argv[2],\"wb\"),(fgetc(old))

因篇幅问题不能全部显示,请点此查看更多更全内容

Top