C语言

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

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

《C语言程序设计》课程自测

1章 C语言概述 一、判断题

1. C语言程序中,任何英语单词均可以作标识符。( )答案为×

2. 在C语言的源程序中,注释使用越多,编译之后的可执行程序的执行效率越低。( )答案为×

3. C语言是一种面向过程的语言。( )答案为√

4. 当主程序执行完毕时,亦即程序执行完毕。 ( )答案为√ 5. C程序有且仅有一个main()函数。 ( )答案为√ 6. C语言中不区分大小写英文字母。 ( )答案为×

7. 用C语言编写的程序是一种需要经过编译和连接才能运行的程序。( )答案为√ 8. C语言是一门对标识符大小写敏感的程序设计语言。( )答案为√ 二、单选题

1. 一个C程序的组成部分可以是( )。

A) 一个主函数和一至若干个其他函数 B) 一至若干个主函数

C) 一个主程序和一至若干个其他函数 D) 一个主程序和一至若干个子程序 答案为A

2. 以下叙述的是( )。

A)在C程序中,main函数必须位于程序的最前面 B)C程序的每行中只能写一条语句 C)C语言本身没有输入输出语句

D)在对一个C程序进行编译的过程中,可发现注释中的拼写错 答案为C

3. C语言规定,C程序执行的开始处为( )。

A) 源程序中排列在最前面的函数 B) 一个指定的系统库函数 C) 用户指定的一个特定函数 D) 程序的主函数 答案为D

4. 一个C程序的执行是从( )。

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

(B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 (C)本程序的main函数开始,到本程序文件的最后一个函数结束 (D)本程序文件的第一个函数开始,到本程序main函数结束 答案为A

5. 一个C语言程序是由( )组成。

(A) 一个函数 (B) 一个或若干个函数(C) 一个过程 (D) 一个过程或若干个过程 答案为B

6. 下列说法中错误的是( )。

(A) 程序的执行总是从主函数开始。 (B) 主函数可以调用任何非主函数的其它函数 (C) 任何非主函数可以调用其它任何非主函数 (D) 程序可以从任何非主函数开始执行 答案为D

7. C程序的基本单位是( )。

A)函数 B)过程 C)语句 D)子程序

答案为A

8. C语言规定:在一个源程序中,main函数的位置( )。

A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后

答案为C

9. 下列四组选项中,均不是C语言关键字的选项是( )。 A) define B) gets C) include D) while IF char scanf go type printf case pow 答案为A

10. 以下叙述不的是( )。

A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C)C程序的基本组成单位是函数 D)在C程序中,注释说明只能位于一条语句的后面 答案为D

11. 以下的C语言标识符是( )。

A) abc1_ B) _abc1 C) ABC1_ D) Abc1 ABCD 错误 答案为ABCD

12. C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( )。 A) 必须为字母 B) 必须为下划线 C) 必须为字母或下划线 D) 可以是字母、数字和下划线中任一种字符 答案为C 三、多选题

1. 有关C语言特点的表述的是( )

(A)语言程序简洁、紧凑 (B)C语言可移植性强 (C)C语言可以实现直接对硬件进行操作

(D)C语言是一种面向对象的程序设计语言 (E)C语言是一种结构化的程序设计语言 答案为ABCE

2. 结构化程序设计的基本结构包括( )

A)从上到下的结构 B)选择结构 C)循环结构 D)顺序结构 E)分支结构 答案为BCD

2章 数据类型 运算符和表达式 一、判断题

1. 在C语言中,不同类型的数据不可以在一起进行算术运算。( )答案为× 2. 由于计算机的计算精度很高,所以在C语言中程序计算1.0/3*3的结果肯定等于1。( )答案为×

3. 当一个C语言表达式中同时含有字符型、整型、单精度和双精度类型数据参加运算时,按照\由低到高\的原则,所有的数据都必须先转换为双精度类型数据后方能参加运算。( )答案为×

4. 赋值运算符优先于条件运算符。( )答案为×

5. C语言与其他高级语言一样,对于所有的同级运算符均遵循左结合原则。( )答案为×

6. 如果被定义函数的返回值类型是整型或字符型,使用前可以不必进行说明。( )答案为√

7. 表达式128>>2的值是32。( )答案为√ 8. 若x为整型变量、j为实型变量,当执行语句:x=(int)j;后,j也变为整型变量。( )答案为×

9. int a=4,b=0; 则表达式~a&&!b的值是1.( )答案为√

10. 赋值运算符优先于条件运算符.( )答案为× 11. !''的优先级可以比''/''高。( )答案为√

12. 两个char 型数据相加,其结果为char型。( )答案为×

13. 若有定义int a; float b=2.1; 则a=int(b+3)是合法的赋值表达式。( )答案为×

14. 若有int a=4,b=0;则表达式a&&!b的值为0。( )答案为√ 15. 对于int n=3;执行n+=n-=n*n;后n 的值是9。( )答案为× 16. 表达式15>>2的值为2。 ( )答案为×

17. 用语句a=a+b,b=a-b,a=a-b;可以交换a,b两个变量的值。( )答案为√

18. 在C语言中,定义int a=b=c=5;是错0的,而int a,b,c; a=b=c=5;是的.( )答案为√

19. 表达式“5=3”是一个关系表达式,且其值为0。( )答案为×

20. 若有定义int a,b; 则下列语句可用于实现交换a,b的值。( )a=a^b;b=b^a;a=a^b;答案为√

21. 若有定义int a=3,b=4,c=5; 则a+b>c&&b= =c的值为1。( )答案为× 22. int x=3,y=2; 则表达式(y++==--x)?y++:x++的值为3。( )答案为√ 23. 设int x=3,y=2;表达式(y++==--x)?y++:x++的值是3。( )答案为√ 24. 已知int a=5,b=5; 则表达式: ++a>b?a:b-->++a?++b:a的值为6。( )答案为√ 25. 表达式~(~1<<3)的值是15。( )答案为√ 二、单选题

1. 下面四个选项中,均是合法整型常量的选项是( )。 A) 160 B)-0xcdf C) -0l D)-0x48a -0xffff 0la 986,012 2e5 011 0xe 0668 0x 答案为A

2. 设有定义:int m=1,n=-1;则执行语句printf(\后的输出结果是( )。 A) –1 B) 0 C) 1 D) 2

答案为B

3. 设x,y,z,t均为int型变量,则执行以下语句后,t的值为( )。 x=y=z=1;t=++x||++y&&++z;

(A)不定值 (B)2 (C)1 (D)0 答案为C

4. 执行下列程序段后,变量a,b,c的值分别是( )。 int x=10,y=9; int a,b,c;

a=(--x==y++)?--x:++y; b=x++;

c=y;

(A)a=9,b=9,c=9 (B)a=9,b=10,c=9 (C)a=1,b=11,c=10 (D)a=8,b=8,c=10 答案为D

5. 执行下面的程序段后,B的值为( )。 int x=35; char z=''A''; int B;

B=((x&15)&&(z<''a''));

(A) 0 (B) 1 (C) 2 (D) 3 答案为B

6. 表达式11&10的结果用二进制表示为( )。

A)11 B)3 C)1 D)10 答案为D

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

8. 在下列选项中,不的赋值语句是( )。

A)t/=5; B)n1=(n2=(n3=0)); C)k=i= =j; D)a=b+c=1; 答案为D

9. 设x为int型变量,则执行以下语句后,x的值为( )。 x=10;x+=x-=x-x;

A)10 B)20 C)0 D)-20 答案为B

10. 若有int a=1,b=2,c=3,d=4;则表达式: a++

11. 以下选项中( )是的C语言赋值语句。 A)x=3,y=5 B)a=b=6 C)i--; D)y=int(x); 答案为C

12. 设有如下的变量定义: int i =8,k ,a,b ;

unsigned long w=5; double x=1,42,y=5.2;

则以下符合C语言语法的表达式是( )。

A)a=a-=(b=4)*(a=3) B)x%(--3) C)a=a*3=2 D)y=float(i) 答案为A

13. 假定有以下变量定义:int k=7,x=12;则值为3的表达式是( )

A)x%=(K%=5) B)x%=(k-k%5) C)x%=k-k%5 D)(x%=k)-(k%=5) 答案为D

14. 设有如下定义:int a=1,b=2,c=3,d=4,m=2,n=2;则执行表达式:(m=a>b)&&(n=c>d)后,n的值为( )。

A)1 B)2 C)3 D)0 答案为B

15. 当c的值不为0时,在下列选项中能将c的值赋给变量a、b的语句是( )。 A)c=b=a; B)(a=c)‖(b=c); C)(a=c)&&(b=c); D)a=c=b;

答案为C

16. 设a、b、c、d、m、n均为int型变量,且 a=5,b=6,c=7,d=8,m=2,n=2,则逻辑表达式(m=a>b)||(n=c>d)运算后,n的值位为( )。 A) 0 B) 1 C)2 D) 3 答案为D

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

则该程序运行后,m的值是( )。

A) 4 B) 3 C) 2 D) 1 答案为D

18. 整型变量x和y的值相等,且为非0值,则以下选项中,结果为0的表达式是( )。 A) x || y B) x | y C) x & y D) x ^ y 答案为D

19. 下列( )表达式不满足:当x的值为偶数时值为\真\,为奇数时值\假\。 A)X%2= =0 B) ! x%2 !=0 C)(x/2 * 2-x)= =0 D) !(x%2) 答案为B

20. 设整型变量x的值为5,y的值为2,则值为1的表达式是( )。 A)!(y= =x/2) B)Y!=x%3 C)X>0&&y<0 D)X!=y||x>=y 答案为D

21. 假设整型变量a为2,使b的值为0的表达式是( )。

A)b=a/2 B)b=6-(--a) C)b=a%2 D)b=a>3? 0:1 答案为C

22. 若有int b=2;则表达式(b>>2)/(b>>1)的值是( )。 A) 0 B) 2 C) 4 D) 8 答案为A

23. 设int x=3,y=4,z=5; 则下面表达式中值为0的是( )。

A)x&&y B)x<=y C)x||y+z&&y-z D)!((x

24. 假设x=2.5,a=7,y=4.7,则表达式:x+a%3*(int)(x+y)%2/4的值为( )。 A)2.5 B)2.75 C)3 D)9.5 答案为A

25. 已知a=12,表达式a+=a-=a*=aA)A)144 B)-12 C)0 D)24 答案为C

26. 假设a=3,b=4,c=5,则逻辑表达式:

!(a+b)+c-1&&b+c/2的值是( )。 A)true B)false C)0 D) 1 答案为D

27. 若int a=3,b=4;则执行c=a++>2||b-->=4之后, b变量的值为( )。 A)3 B)0 C)4 D)2 答案为C

28. 以下( )表达式取值是正确

的。

A)1&&a的结果为1 B)3&5的结果为0 C)3|5的结果为0 D)3||''a''的结果为0 答案为A

29. 设有语句a=4;则执行语句a-=a+=a*a;后,变量a 的值是( )

A)4 B)0 C)20 D)16 答案为B

30. 设有int a=4,b=6;则表达式 a&b的值为( ) A)3 B)4 C)11 D)12 答案为B

31. 以下哪个表达式的值为4( )

A)11/3 B)11.0/3 C)(flaot)11/3 D)(int)(11.0/3+0.5) 答案为D 32. 表达式k=(12>10)?4:1?2:3的值为(A)1 B)2 C)3 D)4 答案为D

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

34. 下列程序的输出结果是 ( )。 main( )

{int a=016; a%=6-1;

printf(\ a+=a*=a/=3; printf(\

printf(\ }

A)403 B)402 C)424 D)413 答案为C

35. 数学 式4<|x|<10的C语言表达式为( )。

A)4-10&&x<-4

B)4-10&&x<-4

C)4-10||x<-4 D)4-10||x<-4 答案为A 36. 以下不正确的表达式是A)a>b B)c--,++b,a+=1 C)a=c+b>n-m=k D)p++ 答案为C

37. 有定义int a=3,b=4,c=5; 执行完表达式a++>--b&&b++>c--&&++c后,a,b,c的值分别为( )。 A)3 4 5 B) 4 3 5 C)4 4 4 D)4 4 5 答案为B

38. 在下面C语言的函数说明语句中,正确的是( )。 A) int fun(int x, int y); B) int fun(int x,y); C) int fun(x,y);

D) int fun(int x; int y); 答案为A

39. 2. 字符串常量“ab c\\nt\\012\\xa1*2”在内存中所占的存储空间数是( )。 A) 11 B) 13 C) 15 D) 18

)

( )。

答案为A

40. 设x,y分别为单精度和双精度类型变量,则下列选项( )可将表达式x+y的运算结果强制转换为整型数据。

A) (int)x+y B) int(x)+y C) int(x+y) D) (int)(x+y) 答案为D

41. 在执行语句if((x=y=2)>=x&&(x=5))y*=x;后变量x、y的值应分别为( )。 A) 2、2 B) 5、2 C) 5、10 D) 执行时报错 答案为C

42. 当z的值不为0时,不能地将z的值赋给变量x和y的是( )。 A) x=y=z B) x=z,y=z C) (x=z)||(y=z) D) (x=z)&&(y=z) 答案为C

43. 设有整型变量a, 实型变量f,双精度型变量x,则表达式10+''b''+x*f值的类型为( )。

(A) int (B) float (C) double (D) 不能确定

答案为C

44. 设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是( )。 (A) x && y; (B) x<=y; (C) x || y + z && y – z ; (D) !((x

45. 表达式 a < b || ~ c & d 的运算顺序是 ( )。 (A) ~, & , < , || (B) ~ , ||, &, <

(C) ~, & , || ,< (D) ~ , < , & , || 答案为D

46. 在位运算中,操作数每左移一位,其结果相当于 ( )。

(A)操作数乘以2 (B)操作数除以2 (C)操作数除以4 (D)操作数乘以4 答案为A

47. 若有int k=5; float x=1.2;则表达式(int)(x+k)的值是( )。 (A)5 (B)6.2 (C)7 (D)6 答案为D

48. 表达式k=(12<10)?4:1?2:3的值为( )。 (A) 1 (B) 2 (C) 3 (D) 4 答案为B

49. 字符串\的长度为( ) (A) 4 (B) 1 (C) 16 (D) 17 答案为A

50. 如a为int型,则与表达式a等价的C语言关系表达式是( ) (A) a>0 (B) a!=0 (C) a==0 (D) a<0 答案为B

51. C语言在判断一个量时,用( )表示逻辑真值。 (A) true (B) T (C) 整型值0 (D) 非0整型值 答案为D

52. 下列哪组运算符的优先级相同且运算次序从左到右( )。 A)() [] -> . B)++ -- += C)< & | ^ D)&& ||

答案为A

53. 已知:int x = 1, y = 2, z =0; 则执行:z = x > y ? 10 : 20 , z的值为( )。

A)10 B)20 C)1 D)2 答案为B

54. 若已定义x和y为double类型,则表达式x=2,y=x+10/4 的值是( ) 。 A) 2 B) 4 C) 4.0 D) 4.5 答案为C

55. sizeof(''a''+10)的值为( )类型。

A)int B) float C) double D)char 答案为A

56. 若有float x=2.5,y=4.7;int a=7; 则表达式x+a%3*(int)(x+y)%2/4的值为( )。 A)4.0 B)3.0 C)2.75 D)2.5 答案为D

57. int x=3,y=2;则条件表达式x>y?1:2.3的值为( )。 A)1 B)1.0 C)2.3 D)2

答案为B 58. 已知:int x = 1, y = 2, z ; 则执行:z = x > y ? ++x : ++y , z的值为( )。

(A) 1 (B) 2 (C) 3 (D) 4 答案为C

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

60. 若有关系x≥y≥z,应使用( )C语言表达式。

A)(x>=y)&&(y>=z) B)(x>=y)AND(y>=z) C)(x>=y>=z) D)(x>=y)&(y>=z) 答案为A

61. 以下能表示a≥10或a≤0的合法的C语言关系表达式是( )。

A)a>=10 or a<=0 B)a>=10│a<=0 C)a>=10||a<=0 D)a>=10||a<=0 答案为C

62. 若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是( )。 A)1 B)2 C)2.0 D)2.5 答案为C

63. 若t为double类型,表达式t=1,t+5,t的值是( ) 。 A)1 B)6.0 C)1.0 D)6 答案为C

64. 在以下一组运算符中,优先级最高的运算符是( )。 A)<= B)= C)% D)&& 答案为C

65. 若有以下定义: | char a;int b;

float c; double d;

则表达式a*b+d-c值的类型为( )。

A)float B)int C)char D)double 答案为D

66. 表示关系x≤y≤z的C语言表达式为( )。

A)(x<=y)&&(y<=z) B)(x<=y)AND(y<=z) C)(x<=y<=z) D)(x<=y)&(y<=z) 答案为A

67. 设x,y,z,t均为int型变量,则执行以下语句后,t的值为( ) 。 x=y=z=1; t=x||y&&z;

A)不定值 B)2 C)1 D)0 答案为C

A)4 B 16 C 32 D 52 答案为C 69. 以下合法的赋

68. 设x.y.z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为( )

值语句是( )

A) x=y=100 B) d--; C) x+y; D) c=int(a+b); 答案为B

70. 以下能表示a和b同时为正或同时为负的逻辑表达式是( )。 A)(a>=0||b>=0)&&(a<0||b<0) B)a>=0&&b>=0)&&(a<0&&b<0) C)(a+b>0)&&(a+b<=0) D)a*b>0 答案为D

71. 在以下的四个运算符中,优先级最低的运算符是( ) A)<= B)/ C)!= D)&& 答案为D

72. 在以下的四个运算符中,优先级最高的运算符为( )。

A)?: B)++ C)& D)+= 答案为B

73. 设a和b为int型变量,且a的值为15,b的值为240,则表达式(a&b)&b||b的值为( )

A)0 B)1 C)true D)False 答案为B

74. 假设有 int x=11; 则表达式 (x++ * 1/3) 的值是 ( ) A) 3 B) 12 C) 11 D) 0 答案为A

75. 以下关于运算符优先顺序的描述中,的是( ) A)关系运算符<算术运算符<赋值运算符 B)逻辑运算符<关系运算符<算术运算符 C)算术运算符<关系运算符<赋值运算符 D)赋值运算符<关系运算符<算术运算符 答案为D 76.

sizeof

(double)

A)整型表达式 B)实型表达式 C)不合法的表达式 D)函数 答案为A

77. 设有整型变量a,实型变量f,双精度型变量x,则表达式10+''b''+x*f的值的类型为( ) A)int B)float C)double D)不能确定

答案为D

78. 若有int k=5; flaot x=1.2; 则表达式(int)(x+k)的值是( ) A)5 B)6.2 C)7 D)6

答案为D

79. 下面对变量赋初值的是( )

A)int a=b=c=1; B)int a=1,b=c=2; C)int a=1,b=1,c=1; D)int a=b=1,c=2; 答案为C

80. 设有以下语句:int a=3,b=6,c; c=a^b<<2; 则c的二进制值是( )。 A)00011011 B) 00010100 C)00011100 D)00011000 答案为A

81. 当a=3,b=2,c=1时, 表达式f=a>b>cA)1 B)0 C)3 D)2 答案为B 82.

x=2,y=1,则表达式

执行完后

f

的值是(

)

x>y?1:1.5的值为( )

A)1 B)1.5 C)1.0 D)2 答案为C

83. 在位运算中,操作数每左移一位,其结果相当于( A)操作数乘以2 B)操作数除以2 C)操作数乘以4 D)操作数除以4 答案为A

84. 在位运算中,某操作数 右移3位,其结果相当于( A)操作数乘以6 B)操作数除以6 C)操作数乘以8 D)操作数除以8 答案为D

85. 在C语言中,若以下变量均为int型,则下面程序段的输出结果是( )。 s=6,u=6; u=s++; u++;

)

)

printf(\

A)7 B)6 C)5 D)4 答案为B

86. 若有定义:int x=3;double y; 则执行语句y=(double)x;后,变量x的数据类型为( )。

A)int B)char C)flaot D)double 答案为A

87. 若有定义double x,y; 则表达式x=1,y=x+3/2的值为( )。

A)1 B)2 C)2.0 D)2.5 答案为C

88. 若有定义int x,y,t; 则执行语句: x=y=3,t=++x||++y;后,y的值为( )。 A)不定值 B)4 C) 3 D)1 答案为C

89. 若x、i、j和k都是int型变量,则计算下面表达式后,x的值为( )。 x=(i=4,j=16,k=32)

A) 4 B) 16 C) 32 D) 52 答案为C

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

三、多选题 1. C语言中,若在一个复合语句和复合语句所在的函数中都定义了一个同名的变量,则该两变量( )。

A) 实际是同一变量 B) 是不同变量但作用域相同

C) 是不同变量且作用域不同 D) 是同一变量,但作用域不定 答案为C

2. C语言的函数定义中,如果函数的返回值为0~255之间的整数,则函数的返回类型可以定义为( )。 A) int B) float C) char D) double E) long 答案为ACE

3. 下列选项中,对变量的初始化定义的是( )。

(A)int a,b,c=3; (B)int a=3,b=3,c=3; (C)int a=b=c=3; (D)int a=3;b=3;c=3; (E)int a,b=c=3; 答案为AB

4. 下列赋值语句中的有( )

(A)a=1,b=3,c=5; (B)a=(b=10)/(c=2); (C)a+=a-=a*a; (D)a+=b; (E)a=1;b=2;c=3; 答案为BCDE

5. C语言中的语句中除了控制语句外,还应包括( )。

(A)函数调用语句 (B)表达式语句 (C)空语句(D)复合语句 (E)输入输出语句 答案为ABCD

6. 在下列说法中,的是()。

(A)和其它语言一样,C语言本身也提供了输入输出语句。

(B)在C语言中,赋值语句和赋值表达式不是两个等价的概念。 (C)语句x%=y+3;与x=x%y+3;的执行效果是一样的。

(D)在int a=3,b=3,c=3;中对变量的初始化不是在编译阶段完成的。 (E)语句x=a>b?a:b;与语句if(a>b) x=a;else x=b;的作用等价。 答案为BDE

7. 在C语言中,每个变量必须在使用前进行类型说明或定义,这样可以( )。 (A)为变量赋初值 (B)规定该变量的取值范围

(C)规定该变量所能进行的运算操作 (D)方便在编译时为其分配存储单元 (E)规定变量的个数 答案为BCD

8. 下列运算符中,属于单目运算符的有( )。

A)sizeof B)++ C)! D)!= E) , 答案为ABC

9. 变量x,y,z均为double型且已赋值,能够表示数学式子x/yz的C语言表达式是( )。 (A)x/y*z (B)x/y/z (C)x/y*1/z (D)x*(1/(y*z)) (E)1.0/y*1/z*x BCDE 错误 答案为BCDE

10. 下列哪些运算符的优先级相同且运算次序从左到右( )。

(A) () [] -> (B) ++ -- (C) < >= (D) && || (E) & | ^ 答案为ABC

11. 假设在程序中a、b、c均被定义为整型,并且已赋大于1的值,则下列能表示代数式1/abc的表达式是( )。

A)1.0/a*1.0/b*1.0/c B)1/a/b/(float)c C)1.0/(a*b*c) D)1.0/a/b/c E) 1.0/(float)(a*b*c)

答案为ACDE

12. 设有定义:int s,t=387;则可以改变变量t的值的语句有( ) (A)s=(char)t; (B)t=t/2*2; (C)t=t+65536; (D)t=-(t|32768); (E)t>>2; 答案为BD

13. 设a,b和c都是int型变量,且a=3,b=4,c=5,则值为0的表达式是( )。 A)a+b>c&&b==c

B)a||b+c&&b-c

C)!(a>b)&&!c||1

D)!(x=a)&&(y=b)&&0 E)!(a+b)+c-1&&b+c/2 答案为AD

14. 以下的叙述是( ) A)a&=b等价于a=a&b B)a|=b等价于a=a|b C)a!=b等价于a=a!b D)a^=b等价于a=a^b E)a&&=b等价于a=a&&b

答案为ABD

15. 下列各语句组中,可实现a,b两个整型变量值互换的是( )。

A)a=a+b;b=a-b;a=a-b; B)t=a;a=t;b=t;(int t;) C)a=b;b=a; D)a=a^b;b=a^a;a=a^b; E)b=a;a=b; 答案为ABD

16. 已知a为整型变量,则与表达式a!=0真假值相同的表达式有( ) A)a>0||a<0 B)a C)!a= =0 D)!a E)!a= =1 ABC 错误 答案为ABC

17. 对于char ch; 的赋值语句只( )。 A)ch=''3''+''5''; B)ch=''3+5''; C)ch=''\\035''; D)ch=3+57; E)ch=\ ; 答案为ACD

18. 以下说法中不的是( )。

A) c>a+b等效于c>(a+b) B) 若a,b均为真,则a&&b也为真 C 表达式''0''&&''1'' 的值为0 D) 逻辑运算符!的优先级比位运算符|高 E) 若a,b不同为真,则a||b的值为假

答案为CE

19. 以下语句组中,不能使i的值为4的是( ) 。

A)i=j=((i=3)++); B)i=1,j=1;i+=j+=2; C)i=0,j=0;(i=2,i+(j=2)); D)i= =j=4 ; E)i=0,j=1;(j= =1)?i+=3:i=2; 答案为ACDE

20. 假设所有变量均已定义并赋值,则以下合法的C语句有( )。

A)a:=b+1; B)a=b=c+=2; C)int 18.5%3; D)a=a+7=c+d; E)(flaot)3+2; 答案为BE

21. 假设有定义int a=12,n=5; 则值为 0 的表达式有( ) A)a/=a B)a%=a C)a/=a+a D)a%=(n%=2) E)a-=a*=a 答案为BCDE

22. 若a、b、sum 为整型,则计算a+|b|的值的方法可以是( )。 (A)sum=a>0?a+b:a-b; (B)sum=b>0?a+b:a-b;

(C)if a>0 then sum=a+b else sum=a-b; (D)if b>0 then sum=a+b else sum=a-b; (E)if b>0 then sum=a-b else sum=a+b;

答案为BD

23. 下列说法的是( )

(A)可以对两个实型表达式进行“相等”的判断 (B)不能够对两个实型表达式进行“相等”的判断 (C)一个关系表达式可以视为一个整型表达式 (D)字符数据能够作为整数参加运算

(E)整型数据和实型数据都可以进行“求余”运算

答案为BCD

24. 在x的值处于-2到2,4到8时值为“真”,否则为“假”的表达式是( ) A) (2>x>-2)||(4>x>8) B)!((x<=-2)||(x>=2)||(x>=8))

C)(x<2)&&(x>-2)&&(x>4)&&(x<8) D) (x>-2) && (x<2)|| (x<8) && (x>4) E)(x>-2) && (x<2)|| (x>4) && (x<8)

答案为DE

25. 设a=3,b=4,c=5;则值为0 的表达式有( )。

A)a/=a+a B)a+=a-=a*=a C)a+=a-=a*a D)a||b+c&&b-c E)!a&&b||a>b&&c 答案为ABE

3章 顺序程序设计 一、判断题

1. 格式字符%md中的m不能为负。( )答案为×

2. 实际上,可以用顺序、分支、循环三种结构构造任何算法。( )答案为√

3. printf(\其结果是4。( )答案为√

4. 在C语言中,任何一个表达式的最后加上一个分号就构成一个合法的语句。( )答案为√

5. 下面程序执行结果是32768。( ) main( ) {int a,b;

printf(\答案为× 二、单选题

1. 下述程序的输出结果是( ) #include void main() {int a,b,c=241; a=c/100%9; b=-1&&-1; printf(\

}

(A)2,0 (B)2,1 (C).6,1 (D)0,-1 答案为B

2. 若有定义:int x,y; char a,b,c;并有以下输入数据:x=1 2 A B C, 则能给x赋整数1,给赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的程序段是( )

A)scanf(\ y=%d\

a=getch();b=getch();c=getch(); B)scanf(\

a=getch();b=getch();c=getch();

C)scanf(\,&a,&b,&c);

D)scanf(\答案为D

3. 已有定义double d,f;

数据的输入方式为:3.45 1.2

根据定义和数据的输入方式,输入函数调用语句的形式为( ) A)scanf(\B)scanf(\C)scanf(\D)scanf(\答案为A

4. 如下程序: #include void main()

{ int m,n,k;

m=(n=4)+(k=10-7); printf(“m=%d\\n”,m); }

运行后m的值为( )。

(A)4 (B)3 (C)7 答案为C

5. 下面程序的输出是( )。 #include void main()

{ int x=10,y=3;

printf(“%d\\n”,y=x/y);

}

(A)0 (B)1 (C)3 答案为C

6. 下面程序运行情况是( )。 #include void main()

{ int x=3,y=0,z=0; if (x=y+z)

printf(“****”); else

printf(“####”);

}

(A)有语法错0不能通过编译 (C)可以通过编译,但不能通过连接,因而不能运行答案为D

7. 结构化程序的三种基本结构是( )。

(D)14 (D)不确定的值 (B)输出**** (D)输出#### (A)顺序结构、选择结构、循环结构 (B)递归结构、循环结构、转移结构 (C)嵌套结构、递归结构、顺序结构 (D)循环结构、转移结构、顺序结构 答案为A

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

{ int i=010,j=10; printf(\ }

(A) 11,10 (B) 9,10 (C) 010,9 (D) 10,9 答案为B

9. 运行完下列程序后,在屏幕上的内容是( )。 main ()

{ int a=0;

a+=(a=12);

printf (\

}

A)0 B)6 C)12 D)24 答案为D

10. 若x,y为实数类型的变量,要判断x,y相等,最好使用下列关系表达式(A) x==y; B)x-y==0;

C) fabs(x-y)<1e-8; D)labs(x-y)<1e-8; 答案为C

11. 语句printf(\的输出结果是( )。 A) s= com B)s=com C)s= ter D)s=ter 答案为B 12. 下面程序的输出是( main(

{int

printf(“%d\\n”,y=x/y);

}

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

答案为C

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

printf(“%d\\n”,(a=3*5,a*4,a5));

}

A)65 B)20 C)15 D)10 答案为C

14. 下列程序的输出结果是( )。 main( )

{int a=-1,b=1,c;

c=(a++<=0)&&!(b--<=0));

)。 ))x=10,y=3;)a;

printf(\

}

A)0,0,1 B)-1,1,1 C)0,1,0 D)0,0,0 答案为A

15. 以下程序运行后,m的值为( ) 。 #include void main( ) { int m,n,k;

m=(n=4)+(k=10-7); printf(\

}

A)4 B)3 C)7 D)14 答案为C

16. 下面程序的输出结果是( )。 main( ) {int x=10;

printf(\ }

A)9 B)-9 C)11 D)-11 答案为D

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

main( )

{int x=10,y=10;

printf(\ }

A)10,10 B)9,9 C)9,10 D)10,9 答案为D

18. printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列,如果字符串长度大于5,则输出按方式 ( )。

A) 从左起输出该字符串,右补空格 B) 按原字符长从左向右全部输出 C) 右对齐输出该字串,左补空格 D) 输出错0信息 答案为B

19. putchar函数可以向终端输出一个

A) 整型变量表达式值 B) 实型变量值 C) 字符串 D) 字符或字符型变量值 答案为D

20. 根据定义和数据的插入方式,输入语句的形式为( )。 已有定义:float f1,f2; 数据的输入方式:4.52 3.5 A)scanf(\B)scanf(\C)scanf(\ %2.1f\

D)scanf(\答案为B

21. 已知ch是字符型变量,下面不的赋值语句是( )。

A)ch=''a+b'' B) ch=''\\O''; C)ch=''7''+''9''; D)ch=5+9; 答案为A

22. 假设int a=4; 以下不的语句是( )。 A)a+1=4; B){a+++ D)printf(\答案为A

23. 如下程序的执行结果是( )。 main()

{ int x=023; printf(\

}

A) 17 B) 18 C) 23 D) 24 答案为B

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

{char x=040;

printf(\ }

A)100 B)80 C)120 D)64 答案为D

25. 假如一个整型变量的最大允许值为32767,那么运行如下程序后屏幕上会输出的结果是( ) main()

{ int a,b; a=32767; b=a+1;

printf(“%d,%d”,a,b); }

A) 32767,32768 B) 32767,-32768 C) 32767,0 D) 运行时报错 答案为B

26. 已知字母A的ASCII码为十进制的65,下面程序的输出是 main()

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

printf(\ }

A) 67,D B) B,C C) C,D D) 不确定的值 答案为A

27. 请读程序片段:int i=65536; printf(\

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

A) 65536 B) 0 C) 有语法错0,无输出结果 D) -1 答案为B

28. 在下列程序段中: int x, y ;

+4;a/=4}

C)

;

scanf(\

若输入的数据为:12345678,则x、y的值分别为( )。 A) 123,456 B)123,678 C)12345 678 D)无法得到的值 答案为B

29. 有如下程序,输入数据12 345后,y的值是( )。 #include main()

{ int x; float y;

scanf(\ }

(A)12.000000 (B)345.000000 (C)12345.000000 (D)0.000000 答案为B

30. 有如下程序,若要求a1,a2,c1,c2的值分别为10,20,A,B,的数据输入是( ) main() {int a1,a2; char c1,c2;

scanf(\ scanf(\ }

(A)1020AB (B)10 20AB (C)10 20 AB (D)10 20AB 答案为D

31. 下列语句的输出为( )。

int x=-1;

printf(\

A) -1,65535,177777 B)-1,-1,-1

C) -1,32767,-177777 D)-1,32768,177777

答案为A

32. 若有定义int a=3; 则执行完printf(\语句后,a 的值为( )。 A)-3 B)2 C)-2 D)3 答案为B

33. 以下程序的输出结果是( )。 int x=3,y=4; void main( ) { int x,y=5; x=y++;

printf(\ }

A)3 B) 4 C) 5 D) 6 答案为C

34. 设有如下定义:int x=10,y=3,z; 则语句: z=(x%y,x/y));

printf(“%d\\n”,Z); 的输出结果是( )

A)1 B)0 C)4 D)3

答案为D

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

main( ) { int a=3;

printf(\ ); }

A) -6 B)12 C) 0 D) –12 答案为D

36. 设有定义:int x=1,y=-1;则语句:

printf(\ 的输出结果是( ). A)1 B)0 C)-1 D)2 答案为B

37. 设有如下定义: int x=10,y=3,z; 则语句: printf(\ 的输

出结果是( )。 A)1 B)0 C)4 D)3 答案为D

38. (17) 下列程序的输出结果是( ) main( ) {

int x,y;

double

d=3.2;

x=1.2; y=(x+3.8)/5.0;

printf(\ \\n\ d*y);

} A) 3 B) 3.2 C) 0 D) 3.07 答案为A

39. 已知E的ASCII码是69,则执行以下语句的结果是( )。 printf(\

A)66 B)A C)B D)E 答案为A

40. 执行下面程序后,n的值为( ) 。 main( )

{int n,a=2,b=3,c=4; n=(n>b)?b:c;

n=(a

prefix

=

b)?a

/>

n=(n

A)5 B)4 C)3 D)2

41. 以下程序执行完后,a 的值为( ) #inlcude void main( ) {int a;

printf(\ }

A)65 B)20 C)15 D)10

答案为C

42. 下面程序的运行结果是( ) main( ) {int n;

(n=6*4,n+6),n*2; printf(\ }

A)30 B)24 C)60 D)48 答案为B

43. 下面程序的运行结果是( ) main( )

{int x=0,y=0;

while (!!x) y+=++x;

A)1 B)0 C)控制表达式非法 答案为B

44. 下面程序的运行结果是( ) main( )

{int n,a=2,b=3,c=4; n=(a

A)5 B)4 C)3 D) 2 答案为B

45. 以下程序的运行结果为( )。 main( )

{unsigned a=3,b=10;

printf(\ }

A)3 B)10 C) 13 D)14 答案为C

46. 以下程序的运行结果为( )。 main( )

{int x=17,y=26;

printf(\ A)5 B)8 C)2 D)26 答案为A

47. 以下程序的输出结果是( ) 。 main( ) {int a=-1,b=4,k;

k=(++a,0)&&!(b--<=0);

printf(\

A)1,0,4 B)1,0,3 C)0,0,3答案为D

48. 以下程序的输出是( ). main( )

{int a,b,d=241;

printf(\ D)程序执行无限次n=(n>b)?b:c;

D)0,0,4

}

}

}

a=d/100%9;

b=(-1)&&(-1);

printf(\

A)6,1 B)2,1 C)6,0 D)2,0 答案为B

49. 下列程序段的输出结果是()。 int x=1 , y=1 , z;

z=1||++x&&y--;

printf(\

A) 1,1,1 B) 2,0,1 C)2,1,1 D)2,0,0 答案为A

50. 下列程序的运行结果是( ). #include

main( ) {unsigned a,b,c; a=0x255; b=a<<4;

x=(~b)&0xff ; printf(\ A)0x55 B)0xaf C)0x50 D)0xda 答案为B

51. 若有定义int a=25,b=14,c=19;则以下三目运算符构成的语句的执行结果是( )

a++<=25&&b--<=2&&c++ ? pritnf(\

A)25,14,19 B)26,13,19 C)25,13,19 D)26,14,19 答案为B

52. 以下程序的输出结果是( ). main( )

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

k=(++a,1)&&!b-->=0;

printf(\

A)1,0,4 B)1,0,3 C)0,0 3 D)0,0,4 答案为C

三、多选题

1. 结构化程序设计思想应该包括( )。 (A)使用顺序、分支、循环三种基本结构; (B)限制使用goto语句;

(C)应该使用自顶向下、逐步求精的方法;

(D)应该使用模块化的方法;

(E)编码过程中,变量名的命名只要程序员自己明白就可以了; 答案为ABCD

2. 对于scanf()函数,下列说法的是( )。

A)如果相邻格式符之间没有数据分隔,则对应的输入数据之间可用空格、回车分隔。 B)输入数据时不能指定精度。

C)在用格式说明符\输入单个字符时,空格字符和转义字符是无效字符,即不能被输入。

D)遇到空格、或者回车时,系统认为一个数据输入结束。

答案为ABD

3. 已知ch是字符型变量,下面的赋值语句是( )。

A)ch=''123''; B) ch=''\\xff''; C)ch=''t''; D)ch=\; 答案为BC

4. 若有定义int a,b; float x;,则以下不的赋值语句是( )。 A)a=1,b=2, B)b++; C)a=b=5 D)b=int(x); 答案:A,C,D 答案为ACD

4章 条件语句 一、判断题

1. 在if...else语句中,else总是和它上面最近且未曾配对的if配对。( ) 答案为√ 2. 在if(<表达式>) <语句序列1> else<语句序列2>中的语句序列1和语句序列2可以为复合语句。( ) 答案为√ 3. C语言在判断一个量是否为真时,以非0值代表“真”,以0值代表“假”。( ) 答案为√

4. 与下列程序段等价的赋值语句是 y=x>0?1:x<0?-1:0 ( ) 答案为× if(x>0)y=1; else if(x<0) y=-1; else y=0; 二、单选题

1. 有如下程序 main( )

{ float x=4.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”,y); }

该程序的输出结果是 ( )

A) 0.0 B) 0.25 C) 0.5 D) 1.0 答案为B

2. 为了避免嵌套的if-else语句的二义性,C语言规定else总是与()组成配对关系。 (A)缩排位置相同的if (B)在其之前未配对的if (C)在其之前未配对的最近的if (D)同一行上的if 答案为C

3. 为了避免嵌套的if-else语句的二义性,C语言规定else总是与( )组成配对关系。 (A)缩进位置相同的if (B)在其之前未配对的if (C)在其之前最近的未配对的if (D)同一行上的if 答案为C

4. 设int a=0,b=5,c=2;选择可执行x++的语句是( )。 (A)if(a) x++ (B)if(a=b) x++; (C)if(a=

答案为B

5. 下列程序段运行后,x的值是( )。 int a,b,c,x; a=b=c=0;x=35; if(!a) x--; else if(b); if(c) x=3;

else x=4;

A)3 B)4 C)34 D)35 答案为B

6. 若要求在if后一对圆括号中表示a不等于0的关系,则能表示这一关系的表达式为 A)a<>0 B)!a C)a=0 D)a 答案为D

7. 假定所有变量均已定义, ok1=1; ok2=2; ok3=3; x=15; if(!ok1) x--;

else if (ok2) if (ok3) x=3; else x=4;

上面程序段运行后x的值是:( )

A)14 B)4 C)15 D)3 答案为D

8. 在C语言的if语句中,用作判断的表达式为( ).

A)关系表达式 B)逻辑表达式 C)算术表达式 D)任意表达式

答案为D

9. 以下程序的运行情况是( ) . #inlcude

void main( )

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

if (x=y+z) printf(\ else printf(\

A)有语法错0不能通过编译 B)输出**** C)可以通过编译, 不能通过连接, 不能运行 D)输出####

答案为D

10. 若要求在if后一对圆括号中表示count等于0的关系, 则能表示这一关系的表达式为( )

A) count B) ! count C) count=0 D) count!=0 答案为B

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

{ int a=1,b=4,c=2;

float y=4.0,z;

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

}

A)3.500000 B)3.700000 C)3.200000 D)4.400000 答案为C

12. 若有定义int x,y;下面选项中合法的if语句( ) (A)if(a==b)x++; (B)if(a=b)x++; (Cif(a=>b)x++; 答案为A

13. 下面程序的输出是( )。 #include main( )

{int x=100,a=10,b=20; int v1=5,v2=0; if (a

if (v2) x=10;

x=-1;

printf(\ }

(A)100 (B)-1 (C)1 (D)10 答案为B

14. 有一C语言源程序如下: main()

{ int a,b=-1;scanf(\

if(a) if(a>0) b=1; else b=0; }

该程序所表示的数学函数关系是( )

15. 运行下列程序并用键盘输入53,48,32 后,在屏幕上的内容是( main () {

int i,j,k;

scanf (\ &j, &k); if (i>50) printf(\ else if (i>40) printf(\ else if (i>30) printf(\ else printf(\}

。 ) A)53 B)48 C)32 D)Error 答案为A

16. 若有int i = 10,j=0; 并执行下列程序段: switch ( i ) {

case 9: i += 1; break; case 10:

case 11: i -= 2; break; default: j+= 3; break; }

则变量i的结果是( )。

A)13 B)10 C)11 D)8 答案为D

17. 若 int i = 10,执行下列程序: switch ( i )

{ case 9: i += 1; case 10:

case 11: i -= 1; default: i += 1; }

则变量i的结果是( )。

(A)10 (B)11 (C)12 (D)9 答案为A

18. 若给定条件表达式(m)?(a++): (a--),则其中表达式m( )。

A)和(m==0)等价 B)和(m==1)等价 C)和(m!=0)等价 D)和(m!=1)等价 答案为C

19. 以下程序段的运行结果是( )。 int a=7,b=8,c=9; if(a>b)

a=b,b=c;c=a;

printf(\ A)7,8,7 B)7,9,7 C)8,9,7 D)7,8,9 答案为A

20. 要判断字符变量ch中的值是否为数字字符,则的表达式是( )。 A)ch≥0&&ch≥9 B)ch>=0&&ch<=9 C)ch>=''0''&&ch<=''9'' D)ch≥''0''ch≥''9'' 答案为C

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

scanf(\

if(x++>5) printf(\

A)7和5 B)7 C)7和4 D)6和4 答案为B

22. 下面程序的输出是( )。 main( ) {int y=9; for(;y>0;y--)

if(y%3==0) {printf(“%d”,- -y);continue;} }

A)741 B)852 C)963 D)875421 答案为B

23. 假定所有变量均已说明,下列程序段运行后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 答案为B

24. 下面程序的运行结果是( )。 main( ) {int k=3;

if (k++>3) printf(\ else printf(\ } A)5 B) 4 C)3 D)2 答案为C

25. 下面程序的输出结果为( ) 。 main( )

{int x=0,a=10,b=20,c=15;

if (a>b) if(b

printf(\ }

A)0 B)1 C)2 D)不确定 答案为A

26. 下列程序的输出结果是( ) #include main( ) {int a,b,c; a=1;b=2 c=3;

a=(c=a>b)&&(b=c

A)1,2,3 B)0,2,0 C)1,2,0 D)1,0,0 答案为B 三、多选题

1. 如果t<>0,则把变量a的值赋给变量c,否则把变量b的值赋给变量c,能实现此功能

的语句有( )。

(A)c=t?a:b; (B)c=!t?a:b; (C)if(t)c=a;else c=b; (D)if(!t)c=a;else c=b; (E)c=t!=0?a:b; 答案为ACE

2. 以下叙述的有( )

A)if ((x=12;)!=0)?? B) if ((x=12)!=0)?? C) 赋值语句与赋值表达式是不同的 D)在if 语句中的表达式不能有赋值语句 E)在if 语句中不能有赋值表达式 答案为BCD

3. 若int a,b,sum; 则计算a+|b|的值的方法( ) 。

A) sum=a>0?a+b:a-b; B) sum=b>0?a+b:a-b; C) if (a>0) sum=a+b; else sum=a-b; D) if (b>0) sum=a+b; else sum=a-b; E) if (b>0) sum=a-b; else sum=a+b; 答案为BD

4. 已定义int a,b,x,下列语句中合法的条件语句是( )。 A)if(a=b) ++x; C)if(a!=b) ++x; D)if(a<>b) ++x; E)if(a>=b) ++x; 答案为CE

A)''A''<=c<=''Z'' B)''Z''>=c>=''A'' C)c>=''A''&& ''Z''>=c D)c>=''A''&&c<=''Z'' E)c>=''A''||c<=''Z'' 答案为CD

5章 循环结构 一、判断题

1. continue 语句可以用于switch结构中。( )答案为× 2. break语句只能用于循环语句中。( )答案为× 3. do......while循环语句至少要执行一次循环体。答案为√ 4. 语句while(!E);中的条件!E等价于E==0。( )答案为√

5. 语句for(; ; ) {循环体} 和 while(1) {循环体}是等价的。( )答案为√ 6. 在C语言中,for语句既可以用于计数类型循环又可以用于条件类型循环。( )答案为√ 二、单选题

1. 若N为整型变量,则for(N=10;N=0;N--);循环里的循环体被( )。

A) 无限循环 B) 执行10次 C) 执行一次 D) 一次也不执行 答案为D

2. 下列程序段运行后i的值是( )。 int i=10 switch(i+1)

{case 10:i++;break; case 11:++i;

case 12: ++i;break; default:i=i+1;

}

A)11 B)13 C)12 D)14 答案为C

3. 下面的程序,描述的是( )

5. 若变量c定义为char型,则能判断c为大写字母的有( )

main()

{ int x=3; do

{printf(\ while(!(--x));

}

(A)输出的是1 (B)输出的是1和-2 (C)输出的是3和0 (D)是死循环 答案为B

4. 执行下面程序后,a的值是( )。 #include void main ()

{ int a;

printf(“%d\\n”,(a=3*5,a*4,a+5));

}

(A)65 (B)20 (C)15 (D)10 答案为B

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

for (i=0;i<10; i++) ; printf(\}

(A) 0 (B) 123456789 (C) 0123456789 (D) 10 答案为D

6. C语句for(;;){ ??}是指( )。

(A)无意义 (B)无限循环 (C)循环执行1次 (D)循环执行0次 答案为B

7. 以下程序的输出结果是: main ( )

{ int n = 4

while (n--)printf (\ }

A)2 0 B)3 1 C)3 2 1 D)2 1答案为A

8. 设int a=1,则执行完循环While(a++<5);a的值是:

A)6 B)5 C)1 D)-264 答案为A

9. 在下列for循环中,其循环次数是( ) for(x=1,y=0;(y!=123)&&(x<4); x++);

A)4 B)3 C)1 D)无数多次 答案为B

10. 有如下程序

0 main( )

{ 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,b); }

该程序的输出结果是 ( ) A) a=2,b=1 B) a=1,b=1

C) a=1,b=0 D) a=2,b=2 答案为A

11. 若有定义float x,y;int a,b;则合法的switch语句是( ) (A)switch(a) {case 3+x:printf(\ case 4:printf(\ (B)switch(a)

case 3 printf(\

case 4 printf(\

(C)switch(b) {default: a++; case 1:printf(\ case 1+2:printf(\ }

(D)switch(a+b);

{case 1+2:printf(\ case 1:printf(\ default: a++; 答案为C

12. 循环语句for(x=0,y=0;(y!=123)||(x<4);x++);的循环次数是( )。 (A)3 (B)4 (C)无限次 (D)不确定次

答案为C

13. 下述程序的输出结果是( ) #include void main() {int x=9; for (;x>0;x--) {if (x%3= =0)

{printf(\

continue; } } }

(A)741 (B)852 (C)963 (D)875421 答案为B

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

(A)9 (B)-2 (C)-1 (D)8 答案为D

15. 循环语句for (x=0,y=0;(y!=123)||(x<4);x++);的循环执行( ) (A)无限次 (B)不确定次 (C)4次 (D)3次 答案为A

16. 设x和y均为int型变量,则执行下面的循环后,y的值为( ) for(y=1,x=1;y<=50;y++)

{if (x>=10) break;

if (x%2==1) {x+=5;continue;} x-=3; }

(A)2 (B)4 (C)6 (D)8 答案为C

17. 语句while(!e==0);什么时候将会陷入死循环( ) A)e==0 B)e!=0 C)e!=1 D)e!=-1 答案为B

18. 执行下面程序段的结果是( )。 int x=23;

do

{ printf(\

}while (!x);

(A)打印出321 (B)打印出23 (C)不打出任何内容 (D)陷入死循环 答案为B

19. 循环语句for(a=0,b=0;(b!=45)||(a<5);a++);的循环次数是( ) (A) 4 (B) 3 (C) 5 (D) 无数多次 答案为D

20. 以下不是死循环的语句( )。

(A) for ( ; ; x ++= i); (B) while (1) {x++;}

(C) for ( i = 10; ; i-- ) sum -= i;

(D) for ( ; (c = getchar()) != ‘\\n’;) sum -= i;

答案为D

21. 若 int x = 3; 且有下面的程序片段,则输出结果为( )。 do

{ printf ( \ , x -= 2 ); }while ( !( --x ));

(A) 1 (B) 30 (C) 1-2 (D) 死循环 答案为C

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

{ int n = 4 ; while (n--)

printf (\ }

A)20 B)31 C)321 D)210 答案为A

23. 语句while (!E);中的表达式!E等价于( ) 。

A)E= =0 B)E!=1 C)E!=0 D)E==1 答案为A

24. 以下程序段( )。 int x=-1; do {x=x*x;}

while A)是死循环 B)循环执行2次 C)循环执行1 次 D)有语法错0 答案为C

25. 对以下程序段,描述的是( ) 。 int k=5; while (k=0) k=k-1;

printf(\

A)循环体被执行了5次 B)循环体是无限循环 C)循环体一次也不执行 D)循环 体被执行一次 答案为C

26. 以下语句执行完后i 的值为( )。 for(x=0,y=3,i=0;(y>3)&&(x<4);x++,y++) i++; A)0 B)1 C)2 D)3 答案为A

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

{int x=0,y=0;

while (1) y=++x; printf(\

}

A) 1 B)控制表达式非法 C)无限循环 D)0 答案为C

28. 下面程序段的输出结果是( ) 。

(!x); int x=3;

do {printf(\ while

A) 1 B) 130 C)12 D) 死循环 答案为D

29. 执行下列程序段之后,b的值为( ) 。 int a=1,b=10; do {b-=a; a++;} while(b--<0);

A)9 B)-2 C)-4 D)8 答案为D

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

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

if (i>j)

{printf(\ break; }

s+=i; } }

(A)4 (B)7 (C)5 (D)6 答案为D 三、多选题

1. 在下列语句所构成的程序结构中,break语句和continue语句均可使用的是( ) (A)用goto语句和if语句构成的循环 (B)while循环 (C)do-while循环 (D)for循环 (E)switch语句构成的分支结构 答案为BCD

2. 与for(表达式1;;表达式3);语句等价的选项有( )。

(A)for(表达式1;1;表达式3); (B)for(表达式1;0;表达式3); (C)表达式1;while(1)表达式3; (D)表达式1;while(0)表达式3; (E)表达式1;while(3)表达式3;

答案为ACE

3. 在while(<表达式>)中,用于表达式等于0时循环,否则退出循环的表达式可以写成( )。

A) while(x!=0) B) while(x==0) C) while(x) D) while(!x) E) while(x=0) 答案为BD

4. 在C语言中,下列说法的有( )。

(A)\ 语句体 while(条件)\中的语句体可能一次也不会执行

(B)\ 语句体 while(条件)\中当条件为0时将结束循环

(C)for(表达式1;表达式2;表达式3);中的表达式1无论如何都会执行一次 (D)for循环只能用于循环次数已确定的情况

(!(--x));

(E)do-while语句和while语句在任何情况下完成的功能等价 答案为BC

5. 在下列选项中,构成死循环的程序段是( )。

A) int i=100; B) int k=100; C) int s=36; while(1) do while(s); { i=i0+1; { k++; --s; if(i>100) break; }while(k>=1000); }

D) int x=10; E) for(;;); for(;1;x--) if(x==0)break; 答案为ACE

6章 编译预处理 一、判断题

1. C语言预编译命令#include与#include\的功能是完全一样的。( )答案为×

2. 宏定义不是C语句,不必在行末加分号。( )答案为√

3. C语言的编译系统对宏命令的处理是在对源程序中其他成份正式编译之前进行的。( )答案为√

4. 若有宏定义:#define M(x,y,z) x*y+z,则宏引用M(2+3,4+5,6+7)通过宏展开后的表达式应为(2+3)*(4+5)+6+7。( )答案为×

5. #define与typedef的作用完全相同。( )答案为× 6. 宏定义后一定要有分号。( )答案为×

7. C语言的编译系统对宏命令的处理是在程序连接时进行的。( )答案为× 8. 宏定义不是C语句,不必在行末加分号。( )答案为√

二、单选题

1. 如果程序中有 #include \文件名\ 则意味着( )。

(A) 将\文件名\ 所指的该文件的全部内容,复制插入到此命令行处。 (B) 指定标准输入输出 (C) 宏定义一个函数 (D) 条件编译说明 答案为A

2. 以下有关宏替换的叙述不的是( )。

(A)宏替换不占用运行时间 (B)宏名无类型

(C)宏替换只是字符串替换; (D)宏替换是在运行时进行的 答案为D

3. 如果有#define f(x,y) x+y及int a=2,b=3;则执行printf(\ 后的值为( )。

(A)36 (B)25 (C)11 (D)13 答案为C

4. 若#include后面的文件名用双引号括起来,寻找被包含文件的方式是( )。 A) 先按系统设定的标准方式查找,再在当前目录中查找 B) 先在当前目录中查找,再按系统设定的标准方式查找 C) 只在当前目录中查找 D)只按系统设定的标准方式查找 答案为B

5. 若程序中有#include \文件名\则意味着( ) 。

A)将所指文件的全部内容,在次命令行出现的这一点上,插入原程序

B)指定标准输入输出 C)宏定义一个函数 D)条件编译说明 答案为A

6. 在宏定义#define PI 3.1415926中 ,用宏名PI代替一个( ) A)单精度数 B)双精度数 C)常量 D)字符串 答案为D

7. 执行下面的程序

#define SQR(X) X*X main()

{ int a=10,k=2,m=1; a/=SQR(k+m)/SQR(k+m); printf(\ } 后,a的值是( )。

(A)10 (B)9 (C) 1 (D)0 答案为C 8. 下面程序的#include#definemain({int

输出

SUB(x,y)

结果是

( )

\ (x)*y

)

a=3,b=4;printf(\

A)12 B)16 C)15 D)13 答案为D

9. 以下程序运行后,输出结果是( )。 #include \ #define PT 5.5 #define s(x) pt*x*x main( )

{int a=1,b=2; print (“%4.lf\\n”,S(a+b));}

A)49.5 B)9.5 C)22.0 D)45.0 答案为B

10. 下列程序执行后的输出结果是( ) 。 #define MA(x) x*(x-1) main ( ) { int a=1,b=2;

printf(\

\\n\

A) 6 B) 8 C) 10 D)12 答案为B

11. 以下有关宏替换的叙述不的是( ) 。

A)宏替换不占用运行时间 B)宏名无类型 C)宏替换只是字符串替换 D)宏替换是在运行是进行的

答案为D

12. 以下描述中,的是( ) 。

A)预处理是指完成宏替换和文件包含中指定的文件的调用

B)预处理命令只能位于C源程序的开始

C)凡是以\标识的控制行都是预处理命令 D)预处理是在编译之前处理 答案为D

13. 以下程序的输出结果为( )。 #define MIN(x,y) (x)<(y)?(x):(y) main( ) {int i,j,k; i=10;j=15;

k=10*MIN(i,j);

A)15 B)100 C)10 D)150 答案为A

14. 如果有#define f(x,y) x+y 及 int a=2,b=3; 则语句:printf(\的执行结果是( ) A)36 B)25 C)11 D)13 答案为C

15. 执行下面的程序后,a的值是( )。

#define SQR(X)X*X main()

{int a=10,k=2,m=3; a/=SQR(m)/SQR(k);

printf(“%d、n”a);}

printf(\

A)10 B)1 C)5 D)0 答案为B

16. 设有以下宏定义: #define N 3

#define Y(n) (N+1*n)

则执行语句: z=2 *(N*Y(5+1));后,z的值为( )。 A)30 B)72 C)48 D)54 答案为D

17. 以下程序的输出结果是 ( )。 #define M(x,y,z) x*y+z main( )

{ int a=1,b=2, c=3; printf(\

M(a+b,b+c,

c+a));

}

A) 19 B) 17 C) 15 D) 12 答案为D

18. 以下程序的执行结果为( )。 #inlcude #define N 2 #define M N+1

#define NUM (M+1)*M/2

main( )

A)5 B)6 C)8 D)9

{pirntf(\

答案为C

19. 以下程序中,printf语句执行的次数是( )。 #define N 2 #define M N+1

#define NUM 2*M+1 main( ) {int i;

for(i=0;i<=NUM;i++) printf(\ }

A) 5 B) 6 C) 7 D) 8 答案为C 三、多选题

1. 以下说法中不的是( )。

A)宏名必须大写 B)预处理时要检查宏定义中的拼写错0 C)程序中所有与宏名相同的字符串都要进行置D)可以用#undef命令终止宏定义的作用域 E)宏定义有带参数和不带参数两种 答案为ABC

7章 数组

一、判断题

1. 如果strcmp(s1,s2)的返回值为一个负数,则表明字符串s1一定小于字符串s2。( )答案为√

2. strlen(s1)+ strlen(s2)等于strlen ( strcat (s1,s2))。( )答案为√ 二、单选题

1. 在下面关于一维数组的定义中,其中( )有语法错0。 A) int x[ ] = {1,2,3,4,5}; B) int x[5] = {0}; C) int x[ ]; D) int x[5]; 答案为C

2. 设有字符数组a,则的输入语句是( )。

(A) gets(''a''); (B) scanf(\ (C) scanf(\ (D) gets(\答案为C

3. 函数strcat(str1,str2)的功能是( )

A)将字符串str1连接到字符串str2之后 B)将字符串str2连接到字符串str1之后 C)将str2复制到字符串str1中。 D)将str1复制到字符串str2中。 答案为B

4. 若有定义:char a[30]= “china\\0\\t\\’\\\\”;则strlen(a)和sizeof(a)的值是( )。 (A) 30 30 (B) 5 30 (C) 13 30 (D) 5 13 答案为B

5. 函数调用“strcat(strcpy(str1,str2),str3)” 的功能是( )。 (A)将字符串str1复制到字符串str2后再连接到字符串str3之后 (B)将字符串str1连接到字符串str2后再复制到字符串str3之后 (C)将字符串str2复制到字符串str1后再将字符串str3连接到str1之后 (D)将字符串str2连接到字符串str1后再将str1复制到字符串str3中 答案为C

6. 定义如下变量和数组: int i;

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

A)1 5 9 B)1 4 7 C)3 5 7 D)3 6 9 答案为C

7. 下述程序的输出结果是( )。 #include \void main()

{

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

for(i=0;i<=3;i++) rt*=x[i];;

printf(\

}

A) 120 B) 720 C) 24 D) 6 答案为A

8. 调用strlen(\的结果为( )。

(A) 4 (B) 5 (C) 8 (D) 10 答案为A

9. 在C语言中引用数组元素时,数组下标允许是( ) A)只能是整型变量 B)只能是整型表达式 C)整型常量或整型表达式 D)任何类型的表达式

答案为C

10. 已知:int a[3][4], p = a; p += 6; 那么与*p的值相同的是( )。 A)*(a+6) B)*(&a[0]+6) C)*(a[1]+2) D)*(&a[0][0]+6) 答案为D

11. 若有以下说明:

int a[12]={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] 答案为D

12. 在C语言中,下面关于数组的描述的是( )。 (A)数组的大小是固定的,但可以有不同类型的数组元素 (B)数组的大小是可变的,但所有数组元素的类型必须相同 (C)数组的大小是固定的,所有数组元素的类型必须相同 (D)数组的大小是可变的,可以有不同的类型的数组元素 答案为C

单选题共12道 0道 错误12道 率0% 三、多选题

1. 在下列有关C语言数组的描述中,的是( )。

(A)数组是按\行优先\的原则存取的 (B)数组下标的下界均默认为0

(C)数组名本身是一个常量 (D)在C语言里不能一次引用整个数组。 (E)数组名是一个指针 答案为ABCDE

2. 在C语言中,如下说法是的( )。 (A)数组在系统内存中按其下标的顺序连续存储元素值。

(B)对于没有初始化的静态整型数组,编译系统会为其元素自动设置初值。 (C)如果有char str[]=”abc”;则sizeof(str)的值为5,strlen(str)的值为4。 (D)如果有char str[]=”abc”,*ptr; 则语句ptr=str和ptr=str++都是合法的。 (E)可把二维数组看作是特殊的一维数组,它的每个元素又是一个一维数组。 答案为ABE

3. 下列说法的是( )

A)若某自定义函数中无return语句,则该函数一定没有返回值。

B)C语言的编译系统对宏命令的处理是在对源程序中其他成份正式编译之前进行的。 C)在C语言的源程序中,注释使用越多,编译之后的可执行程序的执行效率越低。 D)如果strcmp (s1,s2)的返回值为负数,则表明字符串s1一定小于字符串s2。 E)一个C程序可由多个源文件组成。 答案为BDE

4. strcpy库函数用于复制一个字符串。若有以下定义:

char *str1=”copy”,str2[10],*str3=”hijklmn”,*str4,*str5=”abcd”; 则对strcpy库函数的调用是( )。

(A) strcpy(str2,str1) (B) strcpy(str3,str1) (C) strcpy(str4,str1) (D) strcpy(str5,str1) (E) strcpy(str1, str5) 答案为ABCDE

5. 在下列定义中,的是( ).

(A) int a[10]={12,23}; (B) char *b[10]; (C) char s[20]=”china”; (D) int n=9,aa[n]; (E) int qq[3][]={1,2,34,45,676,7,69,9}; 答案为ABC

8章 函数

一、判断题

1. 在函数定义中,形参变量有时也可以是全局变量。( )答案为× 2. 在C程序中,函数调用可以作为函数的形参。( )答案为× 3. 在C程序中,函数调用可以作为函数的实参。( )答案为√

4. 在C程序中,函数的形式参数是指针类型时,调用时对应的实参也必须是指针类型。答案为×

5. 对任一变量一旦被指定为某一确定类型后,该变量在程序运行时所占存储空间的多少和所能参加的运算类型便已确定了。( )答案为√ 6. C语言程序必须包含库函数。( )答案为×

7. 如果被定义函数的返回值是整型,可以不必进行说明。( )答案为√ 8. 一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量。( )答案为√ 9. return语句可以带有表达式也可以不带。( )答案为√

10. 若某自定义函数中无return语句,则该函数一定没有返回值。答案为× 11. 在C语言中,变量的初始化都是在编译阶段完成的。答案为×

12. 在同一源文件中,全局变量与局部变量同名,在局部变量作用范围内,全局变量的值等于局部变量的值。答案为×

13. return语句作为函数的出口,在某一个函数体内必须唯一。( )答案为× 14. C语言程序必须包含库函数。( )答案为×

15. C语言中,任意两个函数间不能嵌套定义,但可以互相调用。( )答案为× 16. 在函数的定义中,若函数没有参数,则可以省略函数名后的括号。答案为× 17. 函数返回值的数据类型取决于return语句中表达式的数据类型。答案为× 18. 函数返回值的数据类型取决于主调函数传递过来的实参的数据类型。答案为× 19. 函数返回值的数据类型取决于函数定义时为函数指定的数据类型。答案为√ 20. 在C程序中,函数的形式参数是指针类型时,调用时对应的实参也必须是地址量。答案为√

21. C程序中,函数调用时用数组名作为函数的实参,则传递给形参的是整个数组。答案为×

22. C程序中,函数调用时用数组名作为函数的实参,则传递给形参的是数组的首元素值。答案为×

23. C程序中,函数调用时用数组名作为函数的实参,则传递给形参的是数组的首地址值。答案为√

24. 求n!既可以用递归的方式,也可以用递推的方式。 ( )答案为√

25. 递归函数在实现过程中,要使用“堆栈”这种数据结构来保存递归调用过程中的值。答案为√

26. 在C语言中,所有函数之间都可以相互调用。答案为×

27. 一个C程序无论有多少个源程序文件组成,在其中一个源程序文件中定义的全局变量的作用域默认为整个C程序。答案为×

28. 一个C程序无论有多少个源程序文件组成,在其中一个源程序文件中定义的全局变量的作用域默认为其所在的源程序文件。答案为√

29. 在C程序的主函数main中定义的变量就是全局变量。答案为× 30. 在C程序的主函数main中定义的变量也是局部变量。答案为√ 31. 在函数定义中,形参变量是局部变量。答案为√

32. 在函数定义中,形参变量可以是静态变量。答案为× 33. 在一个函数定义中,只能有一个return语句。答案为×

34. 在一个函数定义中,可以根据需要使用多个return语句。答案为√ 35. 在C程序中,函数可以嵌套定义,也可以嵌套调用。答案为× 36. 在C程序中,函数不能嵌套定义,但可以嵌套调用。答案为√ 37. 在C程序中,函数既不能嵌套定义,也不能嵌套调用。答案为× 38. 在C程序中,函数调用只能作为单独语句出现。答案为× 39. 在C程序中,函数调用不能作为单独语句出现。答案为× 40. 在C程序中,函数调用只能出现在表达式语句中。答案为×

41. 在C程序中,函数调用不能出现在表达式语句中。答案为×

42. 在C程序中,函数调用既可以出现在表达式语句中,也可以作为单独的语句出现。答案为√

43. 在C函数中,形参可以是变量、常量或表达式。答案为×

44. 在C程序中,实参可以是变量、常量或表达式。答案为√

45. C语言规定,函数调用时,若形参和实参都是简单变量,则它们之间的数据传递方式是双向值传递。答案为×

46. C语言规定,函数调用时,若形参和实参都是简单变量,则它们之间的数据传递方式是单向值传递。答案为√ 二、单选题

1. C语言中,以下叙述中错0的是( )。

A) 主函数中定义的变量是全局变量 B) 同一程序中,全局变量和局部变量可以同名 C) 全局变量的作用域从定义处开始到本源程序文件结束 D) 局部变量的作用域被限定在其所定义的局部范围中 答案为A

2. C语言中,以下叙述的是( )。

A) 函数不能嵌套定义但可以嵌套调用 B) 函数可以嵌套定义也可以嵌套调用 C) 函数可以嵌套定义但不能嵌套调用 D) 函数不能嵌套定义也不能嵌套调用 答案为A

3. C语言中,函数调用时若实参是数组名,则被调函数对应形参( )。 A) 可以是相应类型简单变量 B) 必须是相应类型数组名 C) 可以是相应类型数组名 D) 必须是相应类型的指针变量 答案为C

4. C语言中,函数调用时若实参是数组名,则被调函数对应形参( )。 A) 可以是相应类型简单变量 B) 必须是相应类型的指针变量 C) 必须是相应类型数组名 D) 可以是相应类型的指针变量 答案为D

5. 在下面C语言的函数说明语句中,的是( )。

A) int fun(int , int); B) int fun(int x,y); C) int fun(x,y); D)int fun(int x; int y); 答案为A

6. 在C程序中,如果限定一个局部变量只能在所定义的范围中起作用,那么这个变量的存储类型( )。

A) 只能是auto B) 只能是extern C) 可以是auto或static D) 可以是extern或static 答案为C

7. 在C语言中,若定义函数时未说明函数的类型,则该函数的数据类型为( )。 A) int B) float C) char D) double 答案为A

8. 在C语言中,函数默认的存储类型为( )。 A) auto B) register C) static D) extern 答案为D

9. C语言中规定,简单变量做实参时,它和对应形参之间的数据传递方式是( )。

(A)地址传递 (B)单向值传递 (C)有实参传给形参,再由形参传回给实参 (D)由用户指定传递方式

答案为B

10. 已知函数的调用形式: fread ( buffer , size , count , fp ) ; 其中buffer代表的是( )。

(A)一个整型变量,代表要读入的数据项总数 (B)一个文件指针,指向要读的文件

(C)一个指针,指向要读入数据的存放地址 (D)一个存储区, 存放要读的数据项 答案为C

11. 如果在C程序中有main(int argc,char *argv[]),那么( )是指命令行中的参数个数。

(A)argv (B)argv[] (C)argc,argv[] (D)argc 答案为D

12. 如果程序中有static char c; 则编译程序会对其自动设置初值为( )。 (A) ''\\n'' (B) \ (C) 0 (D) ''\\0'' 答案为D

13. 在C函数中,局部变量的隐含存储类型是( )。

(A) auto (B) static (C) register (D) extern 答案为A 14. C程序在( )可以使用答案为C

15. 在C语言中,函数返回值的数据类型取决于( )。

A) 函数的名字 B) return语句中表达式的数据类型 C) 在定义该函数时所指定的数据类型 D) 主调函数的数据类型 答案为C

16. 在一个源程序文件中定义的全局变量,其作用域为( )。 A) 整个源程序文件 B) 从定义处开始到本源程序文件结束 C) 整个主函数 D) 所处C程序的所有源程序文件中 答案为B

17. C语言中,以下叙述中错0的是( )。 A) 同一程序中,全局变量和局部变量可以同名

B) 局部变量的作用域被限定在其所定义的局部范围中 C) 同一程序中,全局变量和局部变量不能同名

D) 全局变量的作用域从定义处开始到本源程序文件结束 答案为C

18. 在C程序中,同一程序中的各函数之间( )。 A) 既允许直接递归调用也允许间接递归调用 B) 既不允许直接递归调用也不允许间接递归调用 C) 允许直接递归调用但不允许间接递归调用 D) 允许间接递归调用但不允许直接递归调用 答案为A

19. C语言中,以下叙述错0的是( )。

A) 函数调用可以是单独的语句 B) 函数调用可以出现在表达式中 C) 函数调用可以作为函数的实参 D) 函数调用可以作为函数的形参

答案为D

20. 在C语言中,函数调用时如果相应的形参和实参都是简单变量,则主调函数和被调函数之间传递数据的方式是( )。

A) 单向地址值传递 B) 双向地址值传递 C) 单向数值传递 D) 双向数值传递 答案为C

21. 在C程序的函数调用时,主调函数中的实参和被调函数中的形参( )。 A) 个数、次序必须相同,但数据类型可以不考虑 B) 个数、次序和对应参数的数据类型都应该相同 C) 个数、次序和数据类型均可以不相同

D) 对应参数数据类型应相同,但个数和次序可以不考虑

表达式

A)函数内部 B)函数外部 C)程序的任何地方 D)变量出现的地方

答案为B

22. C语言中,以下叙述错0的是( )。

A) 函数被调用时,系统才为形参分配内存 B) 实参和对应形参的数据类型必须一致 C) 实参可以是变量、常量或表达式 D) 形参可以是变量、常量或表达式 答案为C

23. C语言中,函数调用时若实参是数组名,则传递给被调函数对应形参的是( )。 A) 整个数组 B) 数组元素的个数

C) 数组占用的内存单元个数 D) 数组在内存中存放的首地址 答案为D

24. 在一个void类型函数的定义中,函数体中有return;语句,该语句( )。 A) 是错0的 B) 表示向主调函数返回程序控制 C) 在执行时不予理睬 D) 在执行时会中断程序运行 答案为B

25. 下列程序的输出结果是() viod f(int *m) {while((*m)--); printf(\ main()

{int x=50,*p=&x; f(p);}

(A)0 (B)1 (C)49 (D)50 答案为A

26. 下述函数的功能是( )。 int fun(char *x) {char *y=x; while(*y++); return y-x-1;

}

(A)将字符串x连接到字符串y的后面 (B)求字符串的存放位置 (C)比较两个字符串的大小 (D)求字符串的长度 答案为D

27. 以下对C语言函数的有关描述,的是( )。

(A) 在C中调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 (B) C函数既可以嵌套定义又可以递归调用

(C) 函数必须有返回值,否则不能使用函数

(D) C程序中有调用关系的所有函数必须放在同一个源程序文件中 答案为A

28. 以下程序的输出结果是( ) int m=4,n=6; max( int x,int y) {int max;

max=x>y?x:y; return(max); } main( )

{int m=10;

printf(\ }

A)4 B) 10 C)6 D)5 答案为B

29. 在C语言的函数概念中,以下叙述的是( )。

A) 函数调用时,形参和与其对应的实参各占独立的存储单元

B) 函数调用时,形参和与其对应的实参再不同名时才各占独立的存储单元 C) 形参在函数调用时不占存储单元

D) 函数没有被调用时,形参也要占据内存单元 答案为A

30. 在C语言的函数概念中,以下叙述的是( )。

A) 函数没有被调用时,形参不会占据内存单元

B) 函数调用时,形参和与其对应的实参再不同名时才各占独立的存储单元 E) 形参在函数调用时不占存储单元

F) 函数没有被调用时,形参也要占据内存单元

答案为A

31. C语言中,一个函数调用语句为fun((e1,e2,e3),(e4,e5),e6);,其实参个数为( A) 3个 B) 4个 C) 5个 D) 6个

答案为A

32. 在一个char类型的函数定义中,函数体中有return 0;语句,该语句( )。A) 是错0的 B) 能向主调函数返回整型数0 C) 在执行时不予理睬 D) 在执行时会中断程序运行 答案为B

33. 下面函数fun的功能是( )。 int fun(char *s,char *t) { while(*s==*t) if(*s=’\\0’) return 0; else s++,t++; return *s-*t;

}

A) 测字符串s和t的长度 B) 将字符串s拷贝到t C) 将字符串t拷贝到s D) 比较字符串s和t的大小 答案为D

34. 在下列程序中,调用f(8)的值是( ) int f(int n)

{ if(n==1) return(1); else if(n==2) return(2); else return(f(n-1)+f(n-2));

}

(A) 13 (B) 21 (C) 55 (D) 34 答案为D

。) 35. 在执行程序china.exe时,若输入的命令行为:china enlish Beijing,则程序执行结果为( )。

#include

void main(int argc,char *argv[])

{ while(argc>1){ printf(\ argc--;}}

(A) eB (B) ceB (C) china enlish Beijing (D)enlish Beijing 答案为A

单选题共35道 0道 错误35道 率0% 三、多选题

1. C语言中,若要限定一个全局变量只能在其所定义的源程序文件中使用,定义是必须使用关键字( )。

A) auto B) register C) extern D) static 答案为D

2. C语言中,形式参数不能使用的存储类型说明为( )。 A) auto B) register C) extern D) static E) static register 答案为BCDE

3. 一个函数的返回值类型为void,则函数体中( )。

A) 可以没有return语句 B) 可以有return;语句 C) 仍然需要return exp;语句 D) 可以有return 0;语句 E) 可以有return 0.0;语句 答案为AB

4. 一个函数的说明语句为int fun(int x);,a、b为整型变量且初值为0,则的函数调用语句为( )。

A) printf(“%d\\n”,fun(a+b)); B) b=fun(a); C) a=fun(b); D) fun(a); E) printf(“%d”,fun(a+b+10)); 答案为ABCDE 5. 以

(

)

A)形参类型定义属于函数的首部 B)凡是用{ }括起的部分称为函数体 C)任何 表达式加上一个分号均构成语句 D)一行可以写多个语句 E)C语言的输入输出是用输入输出语句实现

答案为ACD

6. 下列符号中可以用作自定义函数名的是( )。

(A)int (B)go_to (C)INT (D)Getchar (E)typedef 答案为BCD

7. 在C语言中,存储类有( )。

A) char B) extern C) static D) register E) auto 答案为BCDE

8. 在C语言中,对函数而言的概念有( )。

A) 函数可以嵌套定义 B) 函数不能嵌套定义 C) 函数可以嵌套调用 D) 函数可以递归调用 E) 函数可以没有返回值 答案为BCD

9. C语言中,对存储类型static而言,的是方法为( )。

A) 作用于局部变量 B) 作用于全局变量 C) 作用于数组 D) 作用于构造数据类型变量 E) 作用于形式参数

答案为ABCD

10. 一个函数定义中的形式参数如果为简单变量形式,调用时对应的实参可以是( )。 A) 同类型的简单变量 B) 同类型的常数 C) 同类型的数组元素 D) 同类型的地址量 E) 同类型的数组名

答案为ABCD

11. 在定义函数时,函数的存储类型可以( )。

A) 是static B) 是auto C) 是register D) 是extern E) 省略 答案为ADE

12. 假设变量a,i均已定义并赋值,则以下合法的C语句有( ) A)a= =1; B)++i C)a=(int)i+2.5; D)sqtr(a); E); 答案为ACDE

13. C语言规定,调用一个函数时,实参变量和形参变量之间的数据是( )。 (A)地址传递 (B)值传递 (C)由实参传给形参,并由形参传回给实参 (D)由用户指定传递方式 (E)类型必须一致 答案为BE

14. 在函数调用过程中,下列说法的是( ) (A)形式参数和实在参数各占一个独立的存储单元

(B)形式参数和实在参数存储空间都是在函数调用时分配的

(C)在函数的执行过程中,形参变量值的改变不会影响实参值的改变 (D)函数调用结束时,临时存储区被撤消

(E)在函数调用过程中,实在参数与形式参数在个数、类型上必须匹配 答案为ACDE

15. 以下的说法是( )

A)C语言有四种存储类:auto、register、static和extern。

B)C语言提供的for、while和do-while等三种循环语句可以做等价变换。 C)C语言提供的结构类型不允许其成员具有不同的数据类型。 D)C语言允许用typedef来定义一种新的数据类型。

E)C语言允许经常在程序中使用的常量用宏定义来定义。 答案为ABE

16. C语言中,局部变量默认的存储类型是( )。

A) auto B) register C) extern D) static 答案为A

17. 在下面C语言的函数说明语句中,的是( )。 A) int fun(int , int); B) int fun(int x,y);

C) int fun(x,y); D) int fun(int x; int y); E) int fun(int x,int y); 答案为AE

9章 指针 一、判断题

1. 若有定义:long int j, *p;,则操作j=(long int)p;是合法操作。答案为√ 2. 设有说明int (*ptr)[M]; 其中ptr是指向含有M个整型元素的一维数组的指针。( 答案为√

3. 对同一类型的两个指针变量而言,一个变量向另外一个变量赋值的结果是使得两个指针指向同一个对象。答案为√

4. 定义一个指向某种类型函数的指针后,就可以讲任何函数的首地址赋给这个指针变量。答案为×

5. 可以将一个整型指针变量的值赋给一个实型指针变量,但可能引起符号位扩展。答案为×

6. 可以将一个实型指针变量的值赋给一个整型指针变量,但可能影响指针的精度。答案为×

7. 由于指针的数据类型实际上是指定指针所能指向对象的数据类型,所以不通数据类型的指针变量不能相互赋值。答案为√

8. 函数中使用指针变量作为形式参数,就有可能在被调函数中操作主调函数中的实参。答案为√

9. 若有定义:int a[5],*p;,则操作p=a;是合法的操作。答案为√

10. 若有定义:int a[5],*p;,则操作p=&a[2];是合法的操作。答案为√ 11. 若有定义:int a[5][5],*p;,则操作p=a;是合法操作。答案为× 12. 若有定义:int a[5][5],*p;,则操作p=*a;是合法操作。答案为√ 13. 若有定义:int a[5][5],*p;,则操作p=a[0];是合法操作。答案为√ 14. 若有定义:int a[5][5],*p;,则操作p=&a[0][0];是合法操作。答案为√ 15. 若有定义:int a[5][5], (*p)[5];,则操作p=a;是合法操作。答案为√ 16. 若有定义:int a[5][5], (*p)[5];,则操作p=*a;是合法操作。答案为× 17. 若有定义:int a[5][5], (*p)[5];,则操作p=a[0];是合法操作。答案为×

18. 若有定义:int a[5][5], (*p)[5];,则操作p=&a[0][0];是合法操作。答案为× 19. 若有定义:double (*dd)[10];则dd是一个指向具有10个元素的double型数组的指针变量;( )答案为∨

20. 在C语言中,程序main(){int *ptr; *ptr=100; printf(\是的。( )答案为×

21. 如果指针占用的内存大小为2 Byte,那么指向它的二重指针占用内存大小为4 Byte。( )答案为×

22. 指针变量的值是无符号整型值,所以指针变量都是整型变量。答案为× 23. 凡是整型变量可以参加的运算,指针变量都可以参加。答案为× 24. 即使数据类型相同,两个指针变量也不能相互赋值。答案为× 25. 两个同类型的指针变量可以相互赋值。答案为√ 26. 指针变量可以与一个整型常量相加。答案为√ 27. 指针变量可以与一个整型常量相减。答案为√ 28. 指针变量可以与一个整型常量相乘。答案为× 29. 指针变量可以除以一个不为0的整数。答案为×

30. 对于指向同一个数组的两个变量而言,两个指针变量相减的操作是有意义的。答案为√

31. 若有定义:long int j, *p;,则操作p=j;是合法操作。答案为× 32. 若有定义:long int j, *p;,则操作j=p;是合法操作。答案为× 33. 若有定义:long int j, *p;,则操作p=(int)j;是合法操作。答案为× 34. 指针变量的类型确定了该指针能够指向的对象的数据类型。答案为√ 二、单选题

1. 有定义:int x,*p;,能使指针变量p指向变量x的语句是( )。

A) *p=&x; B) p=&x; C) *p=x; D) p=*&x; 答案为B

2. 有定义:int x,*p1=&x, *p2;,则能使得p2也指向x的语句是( )。 A) *p2=&x; B) p2=p1; C) p2=*p1; D) p2=&p1; 答案为B

3. 有定义:int x,y=10,*p=&y;,则能使得x的值也等于10的语句是( )。 A) x=p; B) x=&p; C) x=&y; D) x=*p; 答案为D

4. 有定义:int *p1,*p2;,则的赋值语句为( )。

A) p1*=p2; B) p1/=p2; C) p1+=p2; D) p1+=3; 答案为D

5. 有定义:int *p1,*p2;,则的赋值语句为( )。

A) p1=p2; B) p1/=p2; C) p1+=p2; D) p1*=p2; 答案为A

6. 有定义:int a[5][4], *p=a[0];,则*(p+2*4+3)等于( )。

A) a[2][0] B) a[2][1] C) a[2][2] D) a[2][3] 答案为D

7. 有定义:int a[5][4], (*p)[4]=a;,数组a的首地址为100,*(p+2)+3等于( )。 A)116 B) 118 C) 120 D) 122 答案为D

8. 有定义:int a[5][4], (*p)[4]=a;,则*(*(p+2)+3)等于( )。 A) a[2][0] B) a[2][1] C) a[2][2] D) a[2][3] 答案为D

9. 有定义:int a[]={1,3,5,7,9},*p=a;,则值为5的表达式是( )。

A) p+=2, *p++ B) p+=2, *++p C) p+=2, (*p)++ D) a+=2, *a 答案为A

10. 有如下定义:char *s1=\ 则表达式strcmp(s1+1,s2+1) 的值是( )

A.零 B.负数 C.正数 D.非零值,无法肯定符号 答案为C

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

{ printf (\ * s1 = s * \ \ printf (\ * s2 = %-5s * \ \ );

}

(A) * s1 = chinabeijing_ _ _ * (B) * s1 = chinabeijing_ _ _ * * s2 = * * chi * ; * s2 = chi_ _ *

(C) * s1 = * _ _ chinabeijing * (D) * s1 = _ _ _chinabeijing * * s2 = _ _chi ; * s2 = chi _ _ *; (注:备选答案中,-代表空格) 答案为D

12. 若有 int k=2; int *ptr1, *ptr2; ptr1=&k; ptr2=&k ;那么下列的语句是( )。

(A) k=*ptr1+*ptr2 (B) ptr2=ptr1*2 (C) ptr1=*(ptr1+ ptr2) (D)ptr1=*ptr1*(*ptr2)

答案为A

13. 设有如下的程序段:

char str[ ]=\ char *ptr; ptr=str;

执行上面的程序段后,*(ptr+5)的值为( )。

(A)o'' (B) ''\\0'' (C)不确定的值 (D) ''o''的地址 答案为B

14. 若有以下定义和语句,则输出结果是( )。 char *sp=\

printf(\

A) 12 B) 3 C) 17 D) 13 答案为B

15. 对于基类型相同的两个指针变量之间,不可进行的运算是( )。 A)== B)= C)+ D)– 答案为C

16. 已知:int *p( ); p是( )。

(A) 指向int型的指针变量 (B) int型的指针数组 (C) 一个指向函数的指针变量,函数的返回值是int型 (D) 一个函数,该函数的返回值是指向int型的指针变量 答案为D

17. 有定义:float y,*p=&y;,假定变量y在内存中所占地址为100~103。那么p的值为( )。 A) 100 B) 101 C) 102 D) 103 答案为A

18. 有定义:int x,*p=&x;,则能为变量x赋值的语句是( )。 A) scanf(“%d”,x); B) scanf(“%d”,p);

C) scanf(“%d”,*p); D) scanf(“%f”,&x); 答案为B

19. 有定义:int x=100,*p=&x;,则能输出变量x值的语句是( )。 A) printf(“%d\\n”,*x); B) printf(“%d\\n”,p); C) printf(“%d\\n”,*p); D) printf(“%d\\n”,&p);

答案为C

20. 有定义:int a[10], n, *p1=a,*p2=&a[9];,则的赋值语句为( )。 A) n=p2-p1; B) n=p2*p1; C) n=p2+p1; D) n=p1/p2; 答案为A

21. 有定义:int a[5], *p1=a, *p2=p1;,则能够表示元素a[2]的是( )。 A) *(p2+2) B) p2+2 C) *p1+2 D) *p2+2 答案为A

22. 有定义:int a[5],*p=a;,则不能表示元素a[4]地址的是( )。 A) p+4 B) &a+4 C) &a[0]+4 D) a+4 答案为B

23. 有定义:int a[5],*p=a;,则不能表示元素a[4]的是( )。

A) *(p+4) B) *(&a+4) C) *(&a[0]+4) D) *(a+4)

答案为B

24. 有定义:int a[5], *p=a;,数组a的首地址为100,则p+2等于( )。 A) 100 B) 102 C) 104 D) 106 答案为C

25. 有定义:int a[5], *p=a;,则*(p+2)等于( )。 A) a[0] B) a[1] C) a[2] D) a[3] 答案为C

26. 有定义:int a[5][4], *p=a[0];,数组a的首地址为100,则p+2*4+3等于( )。 A) 116 B) 118 C) 120 D) 122 答案为D

27. 有定义:int x, *p1=&x, **p2=&p1;,则能够表示变量x值的是( A) p1 B) p2 C) *p2 D) **p2 答案为D

28. 有定义:char *s=”\\t\\”Name\\\\Address\\”\\n”;,那么strlen(s)等于( A) 15 B) 16 C) 17 D) 18 答案为B

29. 已知定义:int b[ ]={1,2,3,4},y,*p=b;则执行y=*p++后,y的值应为((A)1 (B)2 (C)3 (D)4 答案为A

30. 设有以下语句:

char str[4][12]={\; char *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 答案为A

31. 假定ptr1和ptr2分别是指向某个字符串的指针, 则在下列选项中非法的语句中是( )。

(A)if(ptr1==ptr2) printf(\ (B)*ptr1=48+(ptr1-ptr2); (C)*(ptr1+=2)=*ptr2; (D)*(ptr1-1+ptr2)=getchar(); 答案为D

32. 执行下列程序片段后,变量m的值是( ) int a[]={7,4,6,3,10}; int m=10,k,*ptr=&a[0]; for (k=0;k<5;k++)

m=*(ptr+k),m?*(ptf+k):m; 答案为A

33. 下述程序执行后,变量i的结果是( ) int i;

char *s=\for (i=0;*s++;i++)

A.7 B.8 C.9 D.10 答案为B

34. 若有以下说明和语句,那么对c数组元素的引用是( )。

)。 )。 )。 int c[4][5],(*cp)[5];

cp=c;

(A) cp+1 (B) (cp+3) (C) *(cp+1)+3 (D) *(*cp+2) 答案为D

35. 设有如下程序: #include void main()

{ int **k,*j,i=100; j=&i; k=&j;

printf(“%d\\n”,**k); }

上述程序的输出结果是( )。

(A)运行错0 (B)100 (C)i的地址 (D)j的地址 答案为B

36. 已知:char s[4] = \ char *p; 执行语句序列p = s;printf(\后,其输出为( )。 A)字符’c’ B)字符’b’ C)字符’a’ D)字符’d’ 答案为D

37. 已有定义 int k=2; int *ptr1, *ptr2, 且ptr1和ptr2均已指向变量k , 下面不能执行的赋值语句是( )

A) k=*ptr1+*ptr2; B) ptr2=k;

C) ptr1=ptr2; D) k=*ptr1*(*ptr2); 答案为B

38. 若有定义int i=2,a[10],*p=&a[i];则与*p++ 等价的是( )。 A)a[i++] B)a[i]++ C)a[i] D)a[++i] 答案为A

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

{ int a=5,*p1,**p2; p1=&a,p2=&p1; (*p1)++;

printf(\

}

A)5 B)4 C)6 D)不确定

答案为C

40. 设有定义“int a=3,b,*p=&a;”,则下列语句中使b不为3的语句是( )。

(A) b=*&a; (B) b=*a; (C) b=a; (D) b=*p; 答案为B

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

p=_________malloc(sizeof(int)); 则下画线上应填入( ) A)int B)int * C)(* int) D)(int *) 答案为D

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

Top