c语言09-6省考2C习题集

更新时间:2024-04-21 08:46:01 阅读量: 综合文库 文档下载

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

计算机等级考试习题集

(二级C语言)

2009年10月25日

福建省高校非计算机专业

计算机等级考试2C习题集目录

第一部分:选择题(每题2分,20题/套,共40分) ................. 1

一、概述 ................................................... 1 二、语法基础 ............................................... 2 三、控制结构 ............................................... 8 四、数组 .................................................. 14 五、函数 .................................................. 21 六、指针 .................................................. 28 七、结构体和共用体 ........................................ 35 八、链表 .................................................. 39 九、枚举、自定义类型和位运算 ............................... 46 十、文件 .................................................. 49 第二部分:改错题(每题10分,2题/套,共20分) ................ 53

第1套 .................................................... 53 第2套 .................................................... 55 第3套 .................................................... 56 第4套 .................................................... 58 第5套 .................................................... 59 第6套 .................................................... 60 第7套 .................................................... 62 第8套 .................................................... 63 第9套 .................................................... 64 第10套 ................................................... 65 第11套 ................................................... 67 第12套 ................................................... 68 第三部分:填空题(每题10分,每套抽2题,共20分) ............ 70

第1套 .................................................... 70 第2套 .................................................... 71 第3套 .................................................... 73 第4套 .................................................... 75 第5套 .................................................... 77 第6套 .................................................... 79 第7套 .................................................... 81

第8套 .................................................... 85 第9套 .................................................... 87 第10套 ................................................... 89 第11套 ................................................... 91 第12套 ................................................... 94 第四部分:编程题(每题10分,2题/套,共20分) ................ 95

第1套 .................................................... 96 第2套 .................................................... 97 第3套 .................................................... 99 第4套 ................................................... 100 第5套 ................................................... 101 第6套 ................................................... 103 第7套 ................................................... 105 第8套 ................................................... 106 第9套 ................................................... 108 第10套 .................................................. 109 第11套 .................................................. 111 第12套 .................................................. 112 第五部分:参考答案 ........................................... 114

一、选择 ................................................. 114 二、改错 ................................................. 116 三、填空 ................................................. 118 四、编程 ................................................. 119 附录:福建省高等学校计算机应用水平等级考试二级(C语言)考试大纲 124

第一部分:选择题(每题2分,20题/套,共40分)

一、概述

1. 在C语言中,合法的字符常量是( )。 A. '字' B. \ C. \ D. '\\x41' 2. 下面叙述正确的是( )。 A. 程序中必须包含有输入语句 B. 变量按所定义的类型存放数据 C. main函数必须位于文件的开头 D. 每行只能写一条语句 3. 错误的叙述是( )。

A. 一个C语言源程序可由一个或多个函数组成 B. 若一条语句较长,也可分写在下一行上 C. C程序必须包含一个main( )函数

D. 构成C语言源程序的基本单元是算术表达式(x) 4. ( )是关于C语言数据类型的正确叙述。 A. 变量必须先定义后使用 B. 不允许使用空类型 C. 枚举类型不是基本类型 D. 数组并不是构造类型 5. main( )函数的位置( )。 A. 必须在自定义函数前面 B. 可以在自定义函数后面 C. 必须位于程序的最前面 D. 必须在自定义函数后面 6. C语言函数体由( )括起来。 A. < > B. ( ) C. { } D. [ ] 7. ( )是不正确的叙述。

A. 注释说明只能位于一条语句的后面 B. C源程序的基本组成单元是函数 C. C源程序可由一个或多个函数组成 D. 每条语句最后必须有一个分号 8. 一个C语言源程序是由( )。 A. 一个主程序和若干子程序组成 B. 函数组成 C. 若干过程组成 D. 若干子程序组成 9. 结构化程序设计的三种基本结构是( )。 A. 函数结构、判断结构、选择结构 B. 平行结构、嵌套结构、函数结构 C. 顺序结构、选择结构、循环结构 D. 判断结构、嵌套结构、循环结构 10. C源程序的调试是指对源程序进行( )。

A. 录入与编辑 B. 查错与编译 C. 查错与排错 D. 连接与运行 11. C语言中,可将一系列语句置于( )从而构成复合语句。 A. 一对尖括号\之间 B. 一对圆括号\之间

-1-

C. 一对花括号\之间 D. 一对方框号\之间 12. 构成C源程序的基本单位是( )。 A. 语句 B. 变量 C. 运算符 D. 函数 13. 以下叙述中正确的是( )。

A. C源程序中注释部分可以出现在程序中任意合适的地方 B. 一对花括号\只能作为函数体的定界符 C. C源程序编译时注释部分的错误将被发现

D. 构成C源程序的基本单位是函数,所有函数名都可以由用户命名

二、语法基础

14. C语言的下列运算符中,优先级最高的运算符是( )。 A. ++ B. += C. || D. != 15. ( )为正确的用户标识符。 A. Struct B. 5f C. _f0.6 D. _for 16. C语言基本数据类型包括( )。 A. 整型、实型、逻辑型 B. 整型、实型、字符型 C. 整型、字符型、逻辑型 D. 整型、实型、字符串型 17. ( )为合法的常量。 A. 52686L B. E-7 C. 1.2E-2.1 D. 'E12' 18. ( )为正确的变量名。 A. -k15 B. Int C. k_5 D. k.jeep 19. ( )为正确的字符常量。 A. ''\\\\'' B. \ C. \ D. 'M' 20. ( )为非法的字符串常量。 A. \ B. \ C. 'efg' D. \21. C语言整型数据在内存中的代码是用( )表示的。 A. 原码 B. 反码 C. 补码 D. BCD码 22. 以下选项中,合法的实型常数是( )。 A. E-3 B. .2E1 C. 1E.5 D. 1.5E 23. 下列C语言合法的数据类型关键字是( )。 A. Double B. Unsigned C. Integer D. Char 24. Turbo C中,int型数据占用的字节数( )。 A. 由用户自己定义 B. 为个字节2 C. 是任意的

D. 等于所用计算机的字长

-2-

25. A. B. C. D. 26. A. B. C. D. 27.

Turbo C中,基本数据类型存储空间长度的排列顺序是( )。 char

字符常量用一对单撇号' '作为单个字符的定界符 字符常量和字符串常量一样,都是用双引号括起来

字符常量存储时,自动在字符后加一个字符结束符号'\\0' 字符常量和字符串常量所分配的内存空间大小是一样的

已知'A'的ASCII码的十进制值为65,'0'的ASCII码的十进制值为48,则以下程序运行结果是( )。 main( )

{ char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3';

printf(\ } A. 67,D B. C,D C. C,68 D. 67,68 28. 若有定义 int m=6; 则正确的赋值表达式是( )。 A. m*7 B. m*5=8 C. m-=m*6 D. double(-m) 29. 语句 k=(m=5,n=++m); 运行之后,变量k、m、n的值依次为( )。 A. 5,5,6 B. 5,6,5 C. 6,6,5 D. 6,6,6 30. 语句 x=5%4+(4/5); 运行之后,整型变量x的值为( )。 A. 1 B. 2 C. 3 D. 0 31. ( )语句符合C语言语法。 A. float z=28,int x,y=18; B. int x=25,y=25,z=25; C. int x=25:y=25:z=25; D. int x+y=z;

32. 若有定义 int a,x; 则语句 a=(x=8,x+8); 运行后,变量a、x的值依次为( )。 A. 16, 8 B. 8, 8 C. 16, 16 D. 8, 16 33. 若变量 m, n, t已定义且赋予初值,则正确的表达式是( )。 A. m=m+1=t-n B. m=6+n+t,m++ C. m=m\\2 D. m=int(5.6%4) 34. 若有定义:int a,b; float x,则以下不符合C语言语法的表达式是( )。 A. x%7 B. x/=a-b C. a=b=2 D. x=(float)a/b

35. 若有定义:int m=4,n=5;float k;,则以下符合C语言语法的表达式是( )。 A. (m+n)*=k B. m=(n==5) C. k=float(n)/m D. n%2.5

-3-

36. 若有定义:int a=6; 则语句 a*=a-=a/=3; 运行后,a的值是( )。 A. 10 B. 0 C. 34 D. 24 37. 下面关于C语言变量的叙述中,错误的是( )。 A. 可以用define关键字定义变量

B. 变量名用大小写字母是有区别的

C. C语言允许不同基本类型的变量之间进行混合运算

D. C语言中要求对变量作强制定义的主要理由是:便于确定类型和分配空间 38. 若有定义:int a=5,b=2; 则表达式b= (a!=5)的值为( )。 A. 5 B. 0 C. 3 D. 2 39. 逗号表达式 (a=15,a*4),a+15 的值为( )。 A. 15 B. 30 C. 75 D. 60 40. 下列语句中,符合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; 41. ( )是正确的叙述。 A. (int)5.0/6 与 5/6 等价 B. 'G' 与\等价 C. 5/6 与 5.0/6.0 等价 D. ++3与4 等价 42. 下面叙述中,错误的是( )。

A. C语言中的表达式求值,是按其运算符的优先级先高后低的次序进行 B. 自增与自减运算符的结合方向为“自右至左” C. 关系运算符的优先级低于算术运算符 D. C语言算术运算符不包含模运算符“%” 43. ( )是正确的叙述。

A. 表达式 \是合法的

B. 若变量x, y为整型,则 (a+b)++是合法的 C. 强制类型转换运算的优先级高于算术运算 D. 表达式 'm' * 'n' 是不合法的

44. 若有定义 int i=1,j=9; 则表达式 (++j)*(i--) 的值为( )。 A. 0 B. 10 C. 9 D. 8

45. 设整型变量x为7,使整型变量y不为2的表达式是( )。 A. y=x%3 B. y = x/3 C. y =(++x)/3 D. y=8-(--x)

46. 若已定义 int a=3,b=2,c=1; 则语句 ++a||++b&&++c; 运行后b的值为(A. 0 B. 3 C. 1 D. 2

47. 若有定义:int i=5,j=4;则语句 i/=++j; 运行后i的值为( )。 A. 10 B. 1 C. 1.25 D. 0

48. 若已定义:int a=2,b=2; 则表达式 (a+(b++), b) 的值是( )。 A. 2 B. 3 C. 4 D. 6

)。 -4-

49. 若有定义:int r,x=245; 则语句 r=x/100%9; 运行后r的值为( )。 A. 2 B. 5 C. 0 D. 27

50. 若已定义:int i=6,t; 则语句 t=3+(--i); 运行后t的值为( )。 A. 9 B. 7 C. 8 D. 5 51. C语言的 % 运算符按运算对象的个数属( )。 A. 单目运算符 B. 四目运算符 C. 双目运算符 D. 三目运算符 52. 若已定义:int a=5,b=9,c=6; 则语句 b++; ++c; a=b-c; 运行后a的值为( )。 A. 5 B. 3 C. 2 D. 4

53. 以下程序运行时,若从键盘输入5,则输出结果是( )。 main() { int a;

scanf(\

if(a++>5) printf(\ else printf(\}

A. 7 B. 4 C. 5 D. 6

54. 若已定义 float x; 要从键盘输入数据36.582给变量x,则应选用( )语句。 A. scanf(\ B. scanf(\C. scanf(\ D. scanf(\

55. 若已定义 double y; 拟从键盘输入一个值赋给变量y,则正确的函数调用是( )。 A. scanf(\ B. scanf(\C. scanf(\ D. scanf(\56. 已有定义 char s; 使用scanf( )函数输入一个字符给变量s,不正确的函数调用是( )。 A. scanf(\ B. scanf(\C. scanf(\ D. scanf(\57. 函数putchar( ) 的功能是向终端输出( )。 A. 一个字符 B. 多个字符 C. 一个关系表达式 D. 一个实型变量值

58. 若已定义 int a=11; 执行以下语句后的输出结果是( )。 printf(\A. a=11, a=11, a=b B. a=11, a=13, a=b C. a=11, a=13, a=c D. a=11, a=12, a=13

59. 若有定义 int m=4321,n=123,k=21; 语句printf(\执行后的

输出结果是( )。

A. 4321432143211231231232121 B. 432112321 C. 4321+123+21 D. 432+123+021 60. 已有如下定义和输入语句, char c1,c2;int x;

-5-

scanf(\

若要求x、c1、c2的值分别为9、'K'和'H',正确的数据输入是( )。 A. K9H B. K 9 H C. K9 H D. 9KH 61. 以下程序段的运行结果是( )。 int a=1;

printf(\A. 3,3,1 B. 1, 2, 2 C. 1, 2, 3 D. 3, 2, 1 62. 以下程序的运行结果是( )。 void main() { int a=65; char c='A';

printf(\}

A. A+A=AA B. 65+A=65A C. 65+65=130 D. 65+A=130 63. 若已定义:int x=7;float y=7.0; 以下语句中能输出正确值的是( )。 A. printf(\ B. printf(\C. printf(\ D. printf(\64. putchar函数可以向终端输出一个( )。 A. 字符或字符型变量值 B. 整型变量表达式值 C. 实型变量值 D. 字符串

65. 若已定义:int a=6;float b=1.5; 要求输出形式为: 6 * 1.50=9.00 ,应选用的正确输

出语句是( )。

A. printf(\ B. printf(\C. printf(\ D. printf(\66. 有以下程序: main() { int c;

while((c=getchar())!= '\\n') { switch(c-'2') { case 0 :

case 1 : putchar(c+4);

case 2 : putchar(c+4); break; case 3 : putchar(c+3);

default: putchar(c+2); break; } }

printf(\}

-6-

当输入:247<回车>,程序的输出结果是( )。 A. 689 B. 6689 C. 66778 D. 66887

67. 若已定义 int x=5,y=9,z; 语句 z=x>=y; 运行后z的值为( )。 A. 1 B. .t. C. 0 D. .f. 68. 判定逻辑值为“真”的最准确叙述是( )。 A. 1 B. 大于0的数 C. 非0的整数 D. 非0的数 69. 若已定义 int x=-16,y=-12,z; 语句z=x<=y; 运行后z的值为( )。 A. .t. B. 1 C. .f. D. 0

70. 能正确表示数学关系式 100≤s<300的表达式为( )。 A. (s>=100) & (s<300) B. 100<= s<300 C. (s>=100) && (s<300) D. (s>=100) and (s<300) 71. 若定义 int a=2,b=3; 则表达式 !a||b 的值为( )。 A. 0 B. 1 C. 2 D. 3

72. 若定义 int a=-5,b=-8,c=-12; 则表达式 a>=b||b

73. 下列表达式( )不能用来判断整型变量x中的值是否为奇数。A. x%2==1 B. !(x%2==0) C. !(x%2) D. x%2 74. 若有定义:int a=3,b=2,c=3; 则值为0的表达式是( )。 A. (a-b)==(c/b) B. a>=c C. c-b||a+b&&(b*c-a-c) D. (b*c-a-c)&&(b*c-a-b)

75. 若已定义:int x=4,y=2,z=0; 则表达式 (x-y<=y)|| (y=z)的值是( A. 1 B. 0 C. 2 D. 4

76. 若有定义:int a=3,b=2,c=1,k; 则表达式k=a>b>c的值是( )。A. 0 B. 1 C. 2 D. 3 77. 以下运算符中优先级最高的是( )。 A. <= B. && C. || D. ! 78. 执行以下语句后,b的值是( )。 int a=5,b=6,c=1,x=2,y=3,z=4; (a=c>x) || (b=y>z); A. 0 B. 1 C. -1 D. 6 79. 以下程序运行后,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;

。 -7-

} }

A. 101 B. 100 C. 8 D. 7 80. 已定义 double k=3.6; 则正确的赋值表达式是( )。 A. k=double(-3.6) B. k%3 C. k=k*(-1.0)=-3.6 D. k+=k-=(k=1.2)*(k=3) 81. 已定义 char c = 'A' ; 则正确的赋值表达式是( )。 A. c=\\028 B. c=(c++)%4 C. c+1=66 D. c+=127-- 82. 已定义 int m ='A'; 则正确的表达式是( )。 A. 2*m=m++ B. m=int(-3.2) C. m%3 D. m=m-m=m-5 83. 设已定义 float a=2.0,b=3.0; 使a值为5.0的表达式是( )。 A. a+= b B. a*=b+2.0 C. a/=b+2.0 D. a-=b+2.0

84. 若已定义 int m=7;float k=5.5; 则表达式 k+ m%2/4 的值为( )。 A. 6.375 B. 6.75 C. 5.75 D. 5.5

85. 若已定义 int a=3,b=3,x=1,y=2; 表达式 (a=y>x)&&(x=b>a) 的值是( )。 A. 6 B. 1 C. 9 D. 0

86. 若有定义:int a=2,b=3; float x=5; 则表达式x*b/a的值是( )。 A. 7.5 B. 7 C. 6 D. 5

87. 若有定义:int x=8; float y=130;char z='A'; 则表达式x+z%(int)y的值是( )。 [已知'A'的ASCII码的十进制值为65] A. 运行时产生错误信息 B. 8 C. 73 D. 8.5

88. 若已定义:int m=7,n=4; float x=3.0,y=8.0,k; 则执行语句k=m/2+n*x/y;后,变量k

的值是( )。 A. 3 B. 4 C. 4.5 D. 5

89. 若有定义:float x=2,y=4,h=3; 下列表达式中与(x+y)*h/2.0计算结果不相符的是

( )。

A. (x+y)*h/2 B. (x+y)*h*1/2 C. (1/2)*(x+y)*h D. h/2*(x+y) 90. 表达式2+sqrt(16.0)/4结果的数据类型是( )。 A. Double B. int C. char D. void 91. 若有定义:int a=4,b=5,c=6; 则表达式 (1.0*a+b)/c的值是( )。 A. 1.5 B. 1 C. 4 D. 4.5

三、控制结构

92. 以下程序段的运行结果是( )。

int x=3; do{

-8-

A. 93.

printf(\}while(!(--x)); 1, B. 30, C. 死循环 D. 1, -2, 以下程序运行时,若从键盘输入6,则输出结果是( )。 void main() {int x;

scanf(\ if (x-->6)

printf(\ else

printf(\} A. 4 B. 5 C. 6 94.

以下程序的运行结果是( )。 void main() {int m,n=1,t=1; if(t== 0) t=-t; else

m=n>=0?7:3; printf(\} A. 3 B. -1 C. 7 95. 对于整型变量a,赋值语句 a=(a%3==0?1:0); 与(A. if (a%3= =0) a=1; else a=0; B. if (a%3!=0) a=0; else a=1; C. if (a%3) a=0; else a=1; D. if (a%3) a=1; else a=0;

96.

以下程序运行的结果是( )。 void main() {int x,y,z,a;

x=y=z=1;a=15; if(!x) a--; else if(y) ; if(z) a=3;

D. 3 D. 1

)语句不等价。-9-

else a+=4;

printf(\} A. 15 B. 3 C. 19 D. 14

97. 若已定义 int a=1,b=2,t=3; 则执行以下程序段后变量a,b,t的值分别为( )。 if(a

{ t=b; b=a; a=t; }

A. a=2,b=1,t=2 B. a=2,b=1,t=1 C. a=2,b=1,t=3 D. a=3,b=1,t=2

98. 以下程序段运行后变量k的值为( )。int a=3,b=2; int k;

k=(--a==b++)?a:b+1; A. 0 B. 1 C. 2 99. 以下程序的运行结果是( )。

void main() {

int n=9; switch(n--)

{ default: printf(\ \ case 8:

case 7: printf(\ \ case 6: printf(\ \ case 5: printf(\ \ } } A. 8 B. 7 C. 8 100. 以下程序的运行结果是( )。

void main() { int n=8; switch(n--)

{ default: printf(\ \ case 8:

case 6: printf(\ \

D. 9 D. 3 8 7 -10-

case 4: printf(\ \ case 2: printf(\ \ } } A. 8 B. 8 6 C. 7 D. 8 7 101. 以下程序的运行结果是( )。

void main( ) { int a; if(a=6)

printf(\ else if(a>6)

printf(\ else

printf(\}

A. 运行时产生错误信息 B. 9 C. 8 D. 6

102. 若有定义:int x=10,y=8,a; 则执行语句a=((--x==y)? x: y);后,变量a的值是( )。 A. 8 B. 9 C. 10 D. 0

103. 若有定义: int a=2,b=3,c=1; 则以下程序段的运行结果是( )。

if(a>b) if(a>c)

printf(\ \ else

printf(\ \ printf(\ \A. 3 1 B. 2 1 C. 3 D. 1 104. 以下条件语句中(其中s1和s2分别表示C语言的语句),( )与其他三条语句不等价。 A. if(a) s1; else s2; B. if(a == 0) s2; else s1; C. if(a != 0) s1; else s2; D. if(a == 0) s1; else s2; 105. 下列程序段中,非死循环的是( )。 A. int i=100;

while(1)

{ i=i0+1;

if(i>=100) break; }

B. int k=0;

do{

++k;

-11-

}while(k>=0); C. int s=10;

while(++s%2+s%2) s++; D. for(;;)

106. 若已定义 int a; 不会产生死循环的语句是( )。 A. for( ; ;a+= 2); B. for(a=10; ;a--); C. for( ;(a=getchar())!= '\\n'; ); D. while(-1) {a++;} 107. 在循环语句的循环体中,break语句的作用是( )。 A. 继续执行break语句之后的循环体各语句 B. 提前结束循环,接着执行该循环后续的语句 C. 结束本次循环 D. 暂停程序的运行

108. 以下程序段运行后,循环体中的 n+=3; 语句运行的次数为( )。

int i,j,n=0;

for(i=1;i<=3;i++) {for(j=1;j<=i;j++) {n+=3;

printf(\ } }

A. 6次 B. 9次 C. 12次 D. 1次 109. do?while循环与while循环的主要区别是( )。

A. while循环体至少无条件执行一次,而do?while循环体可能都不执行

B. do?while循环体中可使用continue语句,while循环体中不允许出现continue语句 C. do?while循环体中可使用break语句,while循环体中不允许出现break语句 D. do?while循环体至少无条件执行一次,而while循环体可能都不执行 110. 以下程序段运行后,循环体运行的次数为( )。 int i=8,a=0; for ( ;i<8;i++) a+= i; A. 0次 B. 1次 C. 8次 D. 无限 111. 以下程序段运行后变量a的值为( )。 int i=1,a=0; for( ;i<3;i++) { continue; a+=i; } A. 6 B. 3 C. 0 D. 5

-12-

112. 有以下程序: void main() { int i;

for(i=1; i<=3; i++) switch(i)

{ case 1: printf(\ case 2: printf(\ default : printf(\ } }

执行后输出结果是( )。 A. 1223 B. 1 C. 111223 113. 以下程序的运行结果是( )。 void main() {int s = 0, i = 0; while(i< 8) {i++;

if(i%2==0) continue; s+=i; }

printf(\ }

A. 36 B. 7 C. 16 114. 以下程序的运行结果是( )。 void main() {int s = 0, i = 0; while(i< 10) {i++;

if(i % 2==0) s += i; }

printf(\ }

A. 20 B. 30 C. 25 115. 以下程序的运行结果是( )。 void main() {int x = 5;

D. 123

D. 12

D. 45

-13-

do {

printf(\ } while(!x); }

A. 5 4 3 2 1 B. 4 3 2 1 0 C. 5 D. 4

116. 以下程序的运行结果是( )。 void main() {int i,j, k=0;

for(i= 3;i>=1;i--) {for(j=i;j<=3;j ++) k += i * j ; }

printf(\ }

A. 19 B. 29 C. 6 D. 25 117. 以下程序运行时,循环体的执行次数是( )。 void main() {int i,j;

for(i=0,j=1;i<=j+1;i=i+2,j--) printf(\ }

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

四、数组

118. 设已定义char s[ ]=\,则字符串所占的字节数是(A. 19 B. 16 C. 18 D. 14 119. 数组元素下标的数据类型为( )。 A. 整型常量、字符型常量或整型表达式 B. 字符串常量

C. 实型常量或实型表达式 D. 任何类型的表达式

120. ( )是正确的数组定义。

)。 -14-

A. int n=10,x[n];

B. int x[10]; C. int N=10;int x[N]; D.

int n;

scanf(\ int x[n];

121. 若已定义 int arr[10]; 则不能正确引用arr数组元素的是( )。 A. arr[0] B. arr[1] C. arr[10-1] D. arr[7+3] 122. 若已定义 int x[4]={2,1,3}; 则元素x[1]的值为( )。 A. 0 B. 2 C. 1 D. 3 123. 以下程序段运行后,x[1]的值为( )。

int x[5]={5,4,3,2,1};

x[1]=x[3]+x[2+2]-x[3-1]; A. 6 B. 0 C. 1 D. 5 124. ( )是合法的数组定义。 A. char str[ ]={48,49,50,51,52,53}; B. int a[5]={0,1,2,3,4,5}; C. int a[ ]=\D. char str[ ]=‘string’; 125. 若有以下程序: void main( )

{char s[10]= \ r=s;

printf(\ } 则( )。

A. 执行时输出:ajskdl B. 执行时输出:a C. 执行时输出:aj D. 编译不通过

126. 下面程序段的运行结果是( )。 int m[]={5,8,7,6,9,2},i=1; do{

m[i]+=2;

}while(m[++i]>5); for(i=0;i<6;i++)

printf(\ \A. 7 10 9 8 11 4

-15-

B. 7 10 9 8 11 2 C. 5 10 9 8 11 2 D. 5 10 9 8 11 4

127. 下面程序段的运行结果是( )。 int m[]={5,8,7,6,9,2},i=1; for(i=0;i<6;i++) {if(i % 2 !=0) m[i]+=10; }

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

printf(\ \A. 5 18 7 16 9 12 B. 15 18 17 16 19 12 C. 15 8 17 6 19 2 D. 5 8 7 6 9 2

128. 下面关于数组的叙述中,正确的是( )。

A. 定义数组后,数组的大小是固定的,且数组元素的数据类型都相同B. 定义数组时,可不加类型说明符

C. 定义数组后,可通过赋值运算符\对该数组名直接赋值 D. 在数据类型中,数组属基本类型 129. 以下程序段的运行结果是( )。 int a[]={1,2,3,4},i,j; j=1;

for(i=3;i>=0;i--) {a[i]=a[i]*j; j=j*3; }

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

printf(\ \A. 3 6 9 12 B. 18 12 9 4 C. 27 18 9 4 D. 54 18 9 4

130. 下面关于字符数组的叙述中,错误的是( )。 A. 可以通过赋值运算符“=”对字符数组整体赋值

B. 不可以用关系运算符对字符数组中的字符串进行比较 C. 字符数组中的字符串可以整体输入、输出 D. 字符数组可以存放字符串

-16-

131. 以下程序段的运行结果是( )。

main() { int i=4,j; j=i;

pic(i+2*j-2,'*'); putchar('\\n'); for(j-=2;j>=0;j--) { pic(3-j, ' '); pic(i+2*j, '*'); putchar('\\n'); } }

pic(int len,char c) { int k;

for(k=1;k<=len;k++) putchar(c); }

A. *

*** ***** ******* B. **********

********** ********** ********** C. ****

****** ******** ********** D. **********

******** ****** ****

132. 以下程序段执行后输出的结果是( )。int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; printf(\A. 2 B. 3 C. 6 133. 以下程序段执行后p的值是( )。

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

D. 7

-17-

int j,k,p=1;

for(j=0;i<2;i++)

for(k=j;k<4;k++) p*=a[j][k]; A. 108 B. 18 C. 12 D. 2 134. 不能对二维数组a进行正确初始化的语句是( )。 A. int a[3][2]={{1,2,3},{4,5,6}}; B. int a[3][2]={{1},{2,3},{4,5}}; C. int a[][2]={{1,2},{3,4},{5,6}}; D. int a[3][2]={1,2,3,4,5};

135. 若有定义:int s[3][4]={{1,2},{0},{3,4,5}};则s[2][1]的值为( )。 A. 3 B. 4 C. 0 D. 1 136. 若有定义:int a[3][4];则表达式&a[2][1]-a的值为( )。 A. 7 B. 8 C. 9 D. 10 137. 以下程序段运行后sum的值为( )。

int k=0,sum=0;

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; for(;k<3;k++)

sum+=a[k][k+1]; A. 9 B. 18 C. 19 D. 21 138. 若有定义int a[2][3];则合法引用数组元素的是( )。 A. a[0][1/2] B. a[2][1] C. a[2][3] D. a[1][3] 139. 在以下数组定义中,错误的是( )。 A. int a[2][]={1,2,3,4,5}; B. int a[][2]={{0},{1}}; C. int a[2][2]={{1,2},{3}}; D. int a[][2]={1,2,3,4};

140. 若定义int a[][4]={1,2,3,4,5,6,7,8};则表达式sizeof(a[0][1])的值为(A. 1 B. 2 C. 3 D. 4

141. 以下程序段运行后s的值是( )。 int a[3][3]={1,2,3,4,5,1,2,3,4}; int i,j,s=1;

for(i=0;i<3;i++) for(j=i+1;j<3;j++) s+=a[i][j]; A. 6

)。 -18-

B. 120 C. 7 D. 240

142. 设已定义: int a[][4]={0,0,0}; 则下列描述正确的是( )。 A. 数组a包含3个元素 B. 数组a的第一维大小为3 C. 数组a的行数为1

D. 元素a[0][3]的初值不为0

143. 在C语言中,若定义二维数组a[2][3],设a[0][0]在数组中位置为1,则a[1][1]在数组

中位置是( )。 A. 3 B. 4 C. 5 D. 6

144. 设有下列语句,则( )是对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+i))

145. 设已定义: char s1[8],s2[8]=\能将字符串\赋给数组s1的语句是

( )。 A. s1=s2;

B. strcpy(s2,s1); C. strcpy(s1,s2); D. s1=\

146. 以下程序段的运行结果是( )。 char str[3][2]={ 'a', 'b', 'c', 'd', 'e', 'f'}; str[2][0]= '\\0';

printf(\A. abcd B. ab C. abcd0 D. abcd0f

147. 有如下定义:

char str[10]={ \

则分配给数组str的存储空间是( )个字节。 A. 11

-19-

B. 10 C. 9 D. 8

148. 以下程序段运行后输出结果是( )。

char a[]=\char b[]=\ strcpy(a,b);

printf(\A. n B. u C. e D. m

149. 以下程序段运行后输出结果是( )。

char s[]=\printf(\A. 4 B. 5 C. 8 D. 9

150. 以下程序段运行后a的值为( )。

int a=2;

char s1=\a=strcmp(s1,s2); A. -1 B. 2 C. 1 D. 0

151. 以下对C语言字符数组描述中,错误的是( )。

A. 可以用strlen函数计算字符数组中字符串的长度 B. 可以在赋值语句中通过赋值运算符\对字符数组整体赋值 C. 存放在字符数组中的字符串,以'\\0'作为该字符串结束标志 D. 字符数组可以存放字符串或字符

152. 以下程序段运行后,屏幕的输出结果是( )。

char str[80];strcpy(str,\A. 7 B. 8 C. 9 D. 80

-20-

153. 若有定义:char str1[6]=\( )是错误的。 A. strcpy(str2,str1);

B. 表达式strcmp(str1,str2)的值小于0 C. str1=str2;

D. 表达式strlen(str1)的值为5 154. 已有定义

char str1[15]={\则语句用法正确的是( )。 A. str2=str1;

B. str2=\C. scanf(\D. printf(\

155. 设已定义: char str1[20]=\\ 若要形成字符串\

world!\正确语句是( )。 A. strcpy(str1,str2); B. strcat(str1,str2); C. strcpy(str2,str1); D. strcat(str2,str1);

156. 若有字符数组a[80]和b[80],则以下输入语句正确的是( ) A. gets(a,b)

B. scanf(\C. scanf(\D. gets(\

五、函数

157. 设有下列语句:

char str1[]=\

则( )是对库函数strcpy的不正确调用。此函数用来复制字符串。 A. strcpy(str3,\B. strcpy(str2,\C. strcpy(str1,\D. strcpy(str4,\

158. 用数组名作为函数的实参时,错误的说法是( )。 A. 定义形参数组时,元素的个数必须与实参相同 B. 可以使用数组名作为形参

C. 实参传递给形参的值是数组的首地址

-21-

D. 可以使用指针变量作为形参 159. 以下程序的运行结果是( )。

int fun(int a[4][4]) { int i;

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

printf(\ printf(\}

main()

{ int a[4][4]={1,1,2,2,1,9,0,0,2,4,0,0,0,5,9,8}; fun(a); }

A. 1 9 0 5 B. 2 0 0 0 C. 2 0 0 8 D. 2 0 0 9

160. 自定义函数中若缺省函数值类型,则隐含的类型是(A. int B. long C. float D. double

161. 以下程序运行后输出结果是( )。 #include int fun(int a, int b) { return(a-b); } main() { int x=5,y=3,k; k=fun(x,y); printf(\ } A. 0 B. x-y=2 C. 5-3=2 D. 2

162. 以下程序运行后输出结果是( )。

。-22-

#include int a=2,b=3,c=5; int fun(int a, int b) { int c;

c=a>b?a:b; return(c); } main() { int a=6; printf(\ } A. 5 B. 3,5 C. 6,5 D. 6

163. 以下程序运行后输出结果是(void fun(int i) { int m=2; m=i++;

printf(\ \}

main()

{ int m=7,n=5; fun(n);

printf(\}

A. 5 5 B. 6 6 C. 5 7 D. 6 7

164. 若有函数定义:

int func()

{static int m=0; return m++; }

以下程序段运行后屏幕输出为(

)。

)。

-23-

int i;

for(i=1;i<=4;i++) func();

printf(\A. 0 B. 1 C. 4 D. 5

165. 下面程序的输出结果是( )。 #include int num=10; func()

{int num=4; return ++num; }

void main()

{ printf(\ } A. 4 B. 5 C. 10 D. 11

166. 下列关于C语言函数的描述中,错误的是( )。A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B. 凡不加类型说明的函数,其返回值默认为整型 C. 函数的返回值可以通过函数中的return语句获得 D. 可以定义有参函数,也可以定义无参函数 167. 以下程序的运行结果是( )。 func(int a,int b) {int c;

c=(a>b)?(a-b):(a+b); return(c); }

main()

{int x=7,y=3;

printf(\ } A. 3

-24-

B. 4 C. 7 D. 10

168. 以下程序运行结果是( )。 void main( )

{int max(float a,float b); float x,y; int z;

x=-4.6; y=-3.7; z=max(x,y);

printf(\ }

int max(float a,float b) {float c; if(a>b) c=a; else c=b; return (c); } A. -3.7 B. -3 C. -4.6 D. -4

169. 下面函数调用语句含有实参的个数为(temp((a,b,c),(x,y)) A. 2 B. 3 C. 4 D. 5

170. 以下程序的运行结果是( )。

fun3(int x) { static int a=3; a+=x; return a; }

main()

{ int k=2,m=1,n;

)。-25-

n=fun3(k); n=fun3(m);

printf(\} A. 3 B. 4 C. 6 D. 9

171. 以下程序运行后输出结果是( )。

#define F(m,n) m*n main( )

{ int x=5,y=3,a1,a2; a1=F(x+y,x-y); a2=F(x-y,x+y);

printf(\ }

A. 16,16 B. 16,-16 C. -7,17 D. 17,-7

172. 以下叙述正确的是( )。

A. 编译预处理命令行必须以分号结束

B. 程序中使用带参数的宏时,参数类型要与宏定义时一致 C. 宏展开不占用运行时间,只占用编译时间 D. 宏名只能包含大写字母和数字字符 173. 以下叙述正确的是( )。

A. 一个源程序只能有一个编译预处理命令行 B. 编译预处理命令行都必须以\开头

C. \定义了与30等价的符号常量PRICE D. 使用带参数的宏定义时,应该说明每个参数的数据类型 174. 以下叙述错误的是( )。

A. 编译预处理命令行都必须以#号开始 B. 宏名可以用小写字母表示

C. 使用预处理命令\<文件名>\时,编译系统只在指定的系统目录下查找该文

D. 宏定义只能放在main()函数之前

175. 若有定义:#define N 3+2,则表达式N*2的值为( )。 A. 5

-26-

B. 7 C. 10 D. 0

176. 以下程序运行后输出结果是( )。

#define MIN(m,n) m

{ int a=3,b=5,c; c=2*MIN(a,b); printf(\} A. 3 B. 5 C. 6 D. 10

177. 下列#include命令中,正确的是( )。 A. #include \B. #include [math.h] C. #include (math.h) D. #include {math.h}

178. 下面程序的输出结果是( )。 #include #define MON 1

#define TUE 2*MON #define WED 3*TUE void main()

{printf(\ } A. 2 B. 3 C. 4 D. 5

179. 下面错误的叙述是( )。

A. 预处理命令行必须位于C源程序的起始位置 B. 在C语言中,预处理命令行都以\开头

C. C程序在开头可以不包含预处理命令行:#include D. C语言的预处理可以实现宏定义和条件编译的功能 180. 以下程序的运行结果是( )。 #define MUL(r) r*r

-27-

main()

{int a=2,b=3,c; c=MUL(a+b)*2; printf(\ } A. 10 B. 14 C. 36 D. 50

181. 下面程序的运行结果是( )。 #define N 10 #define K(x) x*x #define T(x) (x*x) main( ) {int a,b;

a=9%K(N); b=9%T(N);

printf(\ } A. 9,9 B. 9,90 C. 90,9 D. 90,90

182. 以下在任何情况下计算平方数时都不会引起二义性的宏定义是(A. #define XPF(x) x*x B. #define XPF(x) (x)*(x) C. #define XPF(x) (x*x) D. #define XPF(x) ((x)*(x))

六、指针

183. 下程序的运行结果是( )。

void ast (int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; }

main()

{ int a=4,b=3,c,d;

。 -28-

ast(a,b,&c,&d);

printf(\} A. 7,1 B. 1,7 C. 7,-1

D. c、d未赋值,编译出错 184. 有以下语句:

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

设0≤i<5,对a数组元素不正确的引用是( )。A. *(&a[i]) B. a[p-a] C. *(*(a+i)) D. p[i]

185. 若有定义int *p1,*p2; 则错误的表达式是( )。A. p1+p2 B. p1-p2 C. p1

186. 以下叙述错误的是( )。 A. 存放地址的变量称为指针变量

B. NULL可以赋值给任何类型的指针变量 C. 一个指针变量只能指向类型相同的变量 D. 两个相同类型的指针变量可以作加减运算

187. 以下程序段运行后,表达式*(p+4)的值为( )。 char a[]=\ char *p; p=a; A. 'n' B. 'a'

C. 存放'n'的地址 D. 存放'a'的地址

188. 以下程序段运行后,表达式*(p++)的值为( )。 char a[5]=\ char *p=a; A. 'w'

B. 存放'w'的地址

-29-

C. 'o'

D. 存放'o'的地址 189. 若有定义:

int *p,k=4; p=&k;

以下均代表地址的是( )。 A. k, p B. &k, &p C. &k, p D. k, *p

190. 若有定义:double *q,p;则能给输入项读入数据的正确程序段是( )。 A. q=&p;scanf(\B. q=&p;scanf(\C. *q=&p;scanf(\D. *q=&p;scanf(\

191. 若已定义: int q=5; 对① int *p=&q;和② p=&q; 这两条语句理解错误的是( )。 A. ①是对p定义时初始化,使p指向q;而②是将q的地址赋给p B. ①和②中的&q含义相同,都表示给指针变量赋值

C. ①是对p定义时初始化,使p指向q;而②是将q的值赋给p所指向的变量 D. ①和②的执行结果都是把q的地址赋给p 192. 下面语句错误的是( )。 A. int *p; *p=20;

B. char *s=\C. char *str=\D. char *str;str=\

193. 若有定义int a[2][3],*p=a;,则能表示数组元素a[1][2]地址的是( )。 A. *(a[1]+2) B. a[1][2] C. p[5] D. p+5

194. 若已定义: int a=5,*p; 且 p=&a; 则以下表示中不正确的是( )。 A. &a==&(*p) B. *(&p)==a C. &(*p)==p D. *(&a)==a

195. 若有以下程序段,则叙述正确的是( )。

char s[]=\char *p; p=s;

-30-

A. s和p完全相同

B. 数组s的长度和p所指向的字符串长度相等 C. *p与s[0]相等

D. 数组s中的内容和指针变量p中的内容相等 196. 以下程序段的运行结果是( )。

enum weekday{ aa,bb=2,cc,dd,ee }week=ee; printf(\A. ee B. 5 C. 2 D. 4

197. 若有以下程序段,则不能正确访问数组元素a[1][2]的是(int (*p)[3];

int a[][3]={1,2,3,4,5,6,7,8,9}; p = a; A. p[1]+2 B. p[1][2] C. (*(p+1))[2] D. *(*(a+1)+2)

198. 以下程序段的运行结果是( )。 int a[]={1,2,3,4,5,6,7},*p=a; int n,sum=0;

for(n=1;n<6;n++) sum+=p[n++]; printf(\A. 12 B. 15 C. 16 D. 27

199. 下面程序的运行结果是( )。

main( ) { int a,b;

int *p1=&a,*p2=&b,*t; a=10; b=20;

t=p1; p1=p2; p2=t;

printf(\ }

A. 10,20 B. 20,10

)。-31-

C. 10,10 D. 20,20

200. 以下程序段运行后变量s的值为( )。 int a[]={1,2,3,4,5,6,7}; int i,s=1,*p; p=&a[3]; for(i=0;i<3;i++) s*=*(p+i); A. 6 B. 60 C. 120 D. 210

201. 以下程序段运行后变量ans的值为( int a[]={1,2,3},b[]={3,2,1}; int *p=a,*q=b; int k,ans=0; for(k=0;k<3;k++)

if(*(p+k)==*(q+k)) ans=ans+*(p+k)*2; A. 2 B. 4 C. 6 D. 12

202. 以下程序运行结果是( )。

main( )

{ char a[]=\ for(p=a;p

A. abcbcc B. abc C. cbabaa D. cba

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

char *s=\

)。-32-

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

printf(\ } A. CD

BCD ABCD B. ABCD

BCD CD C. AB

ABC ABCD D. ABCD

ABC AB

204. 以下程序的输出结果是( )。 #include void main()

{char *p=\ printf(\ } A. A B. B C. C D. D

205. 下面程序执行时,若输入5 4 #include #define N 5 void main() {int a[N]; int *p=a; while(p

scanf(\ while(p>a)

printf(\ }

A. 5 4 3 2 1 B. 1 2 3 4 5

3 2 1<回车>,则输出为:

-33-

C. 3 4 5 1 2 D. 3 2 1 5 4

206. 下面程序段的运行结果是( )。 int a[]={1,2,3,4,5,6},*p=a; int i,sum=0;

for(i=1;i<6;i++) sum+=*(p++); printf(\A. 10 B. 12 C. 15 D. 20

207. 下面程序运行结果是( )。 main( )

{ int a[]={1,2,3,4,5},*p,*q,i; p=a; q=p+4; for(i=1;i<5;i++)

printf(\ }

A. 24334251 B. 51423324 C. 15243342 D. 42332415

208. 下面程序运行结果是( )。 main( )

{ static char a[]=\ char *p=a,*q=b; int i;

for(i=0;i<=6;i++) if(*(p+i)==*(q+i))

printf(\ } A. geca B. aceg C. bdf D. Fdb

-34-

七、结构体和共用体

209. 若定义如下结构,则能打印出字母M的语句是( )。

struct person{ char name[9]; int age; };

struct person class[10]={\

\ \

\ A. printf(\B. printf(\C. printf(\D. printf(\210. 以下程序段的运行结果是( )。 union { int n;

char str[2]; }t; t.n=80; t.str[0]='a'; t.str[1]=0;

printf(\A. 80 B. a C. 0 D. 97

211. 一个结构体变量占用的内存大小是( )。 A. 占内存容量最大的成员所需容量 B. 各成员所需内存容量之和 C. 第一个成员所需内存容量 D. 最后一个成员所需内存容量

212. 以下程序段的运行结果是( )。

union { int x; float y;

-35-

char c; }m,n; m.x=5; m.y=7.5; m.c='A'; n.x=8;

printf(\A. 5 B. 7.5 C. 65 D. 8

213. 若有定义:

struct student {int num;

char name[8]; char sex; float score; }stu1;

则变量stu1所占用的内存字节数是( )。 A. 15 B. 16 C. 8 D. 19

214. 定义结构体类型变量teach1,不正确的是(A. struct teacher

{ int num; int age; };

struct teacher teach1; B. struct teacher

{ int num;

int age; }teach1; C. struct

{ int num;

int age; }teach1; D. struct

。-36-

{ int num; int age; }teacher;

struct teacher teach1; 215. 若有定义:

struct stuent {int num; char sex; int age; }stu1;

下列叙述不正确的是( )。 A. student是结构体类型名

B. struct student是结构体类型名

C. stu1是用户定义的结构体类型变量名 D. num,sex,age都是结构体变量stu1的成员216. 下面程序的运行结果是( )。 #include union data { int i; char c; double d; }a[2];

void main()

{printf(\ } A. 16 B. 8 C. 4 D. 2

217. 下面程序的运行结果是( )。 #include union data {int i; char c; }; struct

{char a[2]; int i;

-37-

union data d; }p;

void main()

{printf(\ } A. 5 B. 6 C. 7 D. 8

218. 以下C语言共用体类型数据的描述中,正确的是( )。 A. 共用体变量占的内存大小等于所有成员所占的内存大小之和 B. 共用体类型不可以出现在结构体类型定义中

C. 在定义共用体变量的同时允许对第一个成员的值进行初始化 D. 同一共用体中各成员的首地址不相同 219. 设有如下语句: struct stu {int num; int age; };

struct stu s[3]={{101,18},{102,21},{103,19}}; struct stu *p=s;

则下面表达式的值为102的是( )。 A. (p++)->num B. (*++p).num C. (*p++).num D. *(++p)->num

220. 若有下面定义,能打印出字母'L'的语句是( )。 struct class {char name[8]; int age; };

struct class s[12]={\A. printf(\B. printf(\C. printf(\D. printf(\

221. 若有下面定义,对结构体变量成员不正确引用的语句是( )。 struct pup

-38-

{char name[20]; int age; int sex; }p[3],*q; q=p;

A. scanf(\B. scanf(\C. scanf(\D. scanf(\

222. 以下程序的输出结果是( )。

main()

{ printf( \}

fac(int n) { int s;

if(n==1) return 1; else return n*fac(n-1); } A. 120 B. 60 C. 6 D. 1

八、链表

223. 若有以下定义: struct node { int data;

struct node *next; };

struct node *p;

已建立如下图所示的链表:

┌──┬──┐ ┌──┬──┐ ┌──┬──┐ p →│data│next┼→│data│next┼→...─→│data│NULL│ └──┴──┘ └──┴──┘ └──┴──┘

指针p指向第一个结点,能输出链表所有结点的数据成员data的循环语句是(A. while(p!=NULL)

)。 -39-

{ printf(\ p++; }

B. while(p)

{ printf(\ p=p->next; }

C. for( ; p!=NULL; p++) printf(\D. for( ; p; p=p->next) printf(\224. 若有以下定义: struct node { int data;

struct node *next; }

struct node m,n,k, *head, *p; 已建立如下图所示的链表:

m n k

┌──┬──┐ ┌──┬──┐ ┌──┬──┐ head →│data│next┼→│data│NULL│ p → │data│next│ └──┴──┘ └──┴──┘ └──┴──┘ 指针head指向变量m, m.next指向变量n,p指向变量k,不能把结点k插到m和n之间形成新链表的程序段是( )。

A. m.next = p; p->next = head->next; B. (*head).next = p; (*p).next = &n;

C. head->next = &k; p->next = head->next; D. m.next = &k; k.next = &n; 225. 若有以下定义: struct node { int data;

struct node *next; }

struct node *head,*p;

已建立如下图所示的链表:

p ↓

┌──┬──┐ ┌──┬──┐ ┌──┬──┐

-40-

head →│data│next┼→│data│next┼→...─→│data│NULL│ └──┴──┘ └──┴──┘ └──┴──┘ 能删除指针p所指向结点的程序段是( )。 A. p = p->next; head->next=p->next; free(p); B. free(p); p = p->next; head->next=p->next; C. head->next = p->next; free(p); D. free(p); head->next = p->next; 226. 若有以下定义: struct node { int data;

struct node *next; } *p,*q;

已建立如下图所示的链表:

┌──┬──┐ ┌──┬──┐ ... p →│data│next┼→│data│NULL│ └──┴──┘ └──┴──┘

┌──┬──┐ q →│data│next│ └──┴──┘

不能将指针q所指结点连到上图所示链表末尾的语句是( )。 A. q->next=NULL; p=p->next; p->next=q; B. p=p->next; p->next=q; q->next=NULL; C. p=p->next; q->next=p->next; p->next=q; D. q->next=p->next; p=p->next; p->next=q; 227. 若有定义: struct node { int data;

struct node *next; };

已建立如下图所示的链表:

┌─┬─┐ ┌─┬─┐ ┌─┬─┐

head →│1 │ ┼→│3 │ ┼→ ? →│25│ ┼→NULL └─┴─┘ └─┴─┘ └─┴─┘ 指针head指向链表首结点,以下函数的功能是( )。 void fun(struct node * head) { struct node * p = head; while(p)

-41-

{

printf(\ \ p = (*p).next; break; } }

A. 显示并删除单向链表

B. 显示单向链表中的第一个结点的数据 C. 显示单向链表中的所有数据

D. 显示单向链表中除第一个结点外的所有数据 228. 若有定义: struct node { int data;

struct node *next; };

已建立如下图所示的链表:

┌─┬─┐ ┌─┬─┐ ┌─┬─┐

head →│2 │ ┼→│4 │ ┼→ ? →│28│ ┼→NULL └─┴─┘ └─┴─┘ └─┴─┘ 指针head指向链表首结点,以下函数的功能是( )。 void fun(struct node * head) { struct node * p = head; while(1)

{ p = p->next;

printf(\ \ if(p) break; } }

A. 显示单向链表中第一个结点的数据 B. 显示单向链表中最后一个结点的数据 C. 显示单向链表中的所有数据

D. 显示单向链表中除第一个结点外的所有数据 229. 若按如下定义,则函数link的功能是( )。其中head指向链表首结点,整个链表结

构如下图:

┌──┬─┐ ┌──┬─┐ ┌──┬──┐ head →│data│ ┼→│data│ ┼ → ?→│data│NULL│ └──┴─┘ └──┴─┘ └──┴──┘ struct node

-42-

{int data;

struct node *next; };

int link(struct node* head) {int k=1;

struct node *p=head; while(p!=NULL) {p=p->next; k++; }

return k-1; }

A. 删除链表head中的一个结点 B. 插入一个新元素到链表head中 C. 统计链表head中结点的个数 D. 创建新链表head

230. 若按如下定义,函数link的功能是( )。其中head指向链表首结点,整个链表结构

如下图:

┌──┬─┐ ┌──┬─┐ ┌──┬──┐ head →│data│ ┼→│data│ ┼→? → │data│NULL│ └──┴─┘ └──┴─┘ └──┴──┘ struct node {int data;

struct node *next; };

void link(struct node* head) {struct node *p=head; while(p!=NULL)

{if(p->data%2==1)

printf(\ p=p->next; } }

A. 计算链表head中结点的个数

B. 遍历链表head,输出表中值为奇数的元素 C. 删除链表head中的所有结点 D. 插入一个新元素到链表head中 231. 以下程序的输出结果是( )。

-43-

#include #include typedef struct node {int data;

struct node *next; }Node;

Node list[4]={{4,&list[1]},{3,&list[2]},{2,&list[3]},{1,0}}; void output(Node *head) {Node *p=head; while(p!=NULL)

{printf(\ p=p->next; } }

void main() {output(list); }

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

232. 若按以下定义: struct node {int data;

struct node *next; } *head, *p;

并已建立如下图所示的链表结构,指针p和q分别指向图中所示结点: p q ↓ ↓

┌──┬──┐ ┌──┬──┐ ┌──┬──┐ ... →│data│next┼→│data│NULL│ │data│ │ └──┴──┘ └──┴──┘ └──┴──┘ 则可以将指针q所指的结点连接到链表末尾的程序段是( )。 A. q->next=NULL; p=p->next; p->next=q; B. q->next=p->next; p=p->next; p->next=q; C. p=p->next; q->next=p; p->next=q;

D. (*q).next=(*p).next; p=(*p).next; (*p).next=q; 233. 若有定义:

-44-

struct node {int data;

struct node *next; };

float link(struct node *head) {int m=0,n=0;

struct node *p=head; while(p!=NULL) {m+=p->data; n++;

p=p->next; } if(n>0)

return 1.0*m/n; else

return 0 }

调用link函数时head是指向链表首结点的指针,整个链表结构如下图: ┌──┬──┐ ┌──┬──┐ ┌──┬──┐ head →│data│next┼→│data│next┼→...─→│data│NULL│ └──┴──┘ └──┴──┘ └──┴──┘ 则函数link( )的功能是( )。

A. 统计链表head中结点的个数

B. 遍历链表head,计算表中各结点成员data的平均值 C. 遍历链表head,计算表中各结点成员data的总和 D. 创建一个新链表head 234. 若有以下定义:

struct node {int data;

struct node *next; } *p,*q,*t;

指针p、t和q分别指向图中所示结点:

p t q

↓ ↓ ↓ ┌──┬──┐ ┌──┬──┐ ┌──┬──┐ │data│next┼→│data│next┼→│data│next┼→... └──┴──┘ └──┴──┘ └──┴──┘

-45-

现要将t和q所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是( ) A. t->next=q->next;p->next=q;q->next=t; B. p->next=q;t->next=q->next;q->next=t; C. q->next=t;t->next=q->next;p->next=q; D. t->next=q->next;q->next=t;p->next=q;

九、枚举、自定义类型和位运算

235. 以下程序中的循环执行了( )次。

#define N 2 #define M N+1

#define NUM (M+1)*M/2 main() { int i,n=0;

for(i=0;i

236. 错误的枚举类型定义语句是( )。 A. enum car {A, B, C}; B. enum car {1, 2, 3};

C. enum car {X=0, Y=5, Z=9}; D. enum car {D=3, E, F}; 237. 假定已有如下定义: int k ;

enum colors {red, green, blue, pink} ; int a[3];

( )是对以下语句是否符合语法规则的正确判断。 a[red]=pink; /* 语句1 */ red=1; /* 语句2 */ k=green+blue; /* 语句3 */ A. 语句1和语句2正确,语句3错误 B. 语句1和语句3正确,语句2错误 C. 语句2和语句3正确,语句1错误

-46-

D. 语句1正确,语句2和语句3错误 238. 设有如下定义: typedef int *INTEGER; INTEGER p,*q;

下列叙述正确的是( )。

A. 程序中可用INTEGER代替int类型名 B. 不能用INTEGER来定义变量

C. p是int型变量,q是基类型为int的指针变量 D. p是基类型为int的指针变量

239. 在对无符号数的位运算中,操作数左移三位相当于( )。 A. 操作数除以6 B. 操作数乘以6 C. 操作数除以8 D. 操作数乘以8

240. 以下程序段运行后变量k的值为( )。

int m=7,n=2,k; k=(m^n)<<1; A. 0 B. 98 C. 20 D. 10

241. 若有定义:int m=7,n=10,k; 则执行语句k=m&n;后k的值为(A. 2 B. 1 C. 17 D. 15

242. 以下程序的输出结果为( )。 #include void main()

{enum Weekday{sun=7,mon=1,tue,wed,thu,fri,sat}; enum Weekday day=wed; printf(\ } A. 2 B. 3 C. 4 D. 5

243. 若按如下类型说明,则( )是错误的叙述。

)。 -47-

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

Top