C 语言复习题(2014)
一、选择题
请把答案填写在下面的横线上,否则不能得分。 1.
B
2.
D
3.
C
4.
D
5.
A
6.
B
7.
A
8.
D
9.
C
10. D 20. C 30. A 40. C 50. C 60. C
11. C 21. A 31. C 41. B 51. A 61. D
12. B 22. D 32. A 42. D 52. B 62. C
13. D 23. B 33. B 43. C 53. B 63. C
14. B 24. C 34. A 44. C 54. A
15. D 25. C 35. C 45. D 55. C
16. C 26. B 36. D 46. D 56. A
17. D 27. B 37. B 47. D 57. B
18. D 28. A 38. D 48. C 58. A
19. A 29. D 39. A 49. D 59. B
1. 下列关于 C 程序的说法错误的是(
A)一个程序必须有一个 main 函数 C)可以使用“/*
)。
B)函数首部后面必须有分号 D)每个语句的末尾必须有分号
*/”来注释一段代码
)。
2. 下列关于 C 程序的说法错误的是(
A)stdio.h 是输入输出头文件
B)一个 C 语句必须以分号结束 D)#define 命令不是预处理命令 )。 C)$123 C)123.4
D)abc )。 D)123.41
C)VC6.0 中可以使用“//”来注释一行 3. 下列选项中,不能作为 C 语言标识符的是(
A)_total A)12.3
B)p405 B)12.34
4. 若有“float x=123.41; printf(\”,则执行后的输出结果为(
4
5. 下列选项中,不能正确表示分式 的 C 语言表达式是(
3
A)4/3 A)1
B)4/3.0 B)2
)。
C)1.0*4/3
6. 若有定义“int x,y;”,则表达式“x=1,y=x+3/2”的值为(
C)2.0
7. 下列关于 C 程序的说法错误的是(
C)每条语句必须以分号结束 8. 以下关于标识符的说法错误的是(
C)首字符必须是字母或下划线 9. 表达式 7%4+7/2 的值是(
A)4
8,则正确的输入是( A)5 8↙
)。
C)6
B)4.5
)。 B)5,8↙
)。 )。
A)标识符由字母、数字和下划线组成
)。
D)4/(float)3
)。
D)2.5
A)C 语言程序的基本组成单位是语句 B)C 语言程序中一行可以写多条语句 D)一个语句可以写在多行上 B)标识符不能与系统的关键字同名 D)不区分大小写,s 和 S 是同一个变量
D)6.5
10. 已知变量 a 和 b 是 int 型,若有语句“scanf(\”,使 a 的值是 5,b 的值是
C)a=5 b=8↙
D)a=5,b=8↙
11. 若有定义“int a; float b;”,执行“scanf(\”语句时,从键盘输入: 1234 567.8↙,则 a 和 b 的值分别是(
A)1234 和 567.800000 C)123 和 4.000000
B)123 和 567.800000 D)234 和 567.800000
)。
12. 执行“printf (\” 语句后,正确的输出结果是(
第 1 页 共 20 页
)。
D)0.003%
A)0.3 B)0.333333% C)0.3% 13. 若要定义符号常量 PI 代表 3.14,正确的预处理命令是(
A)#define PI 3.14; C)define PI 3.14
14. 以下变量定义及初始化语句中正确的是( A)double a=0.5;b=1.5; C)int a=b=0;
B)#define PI=3.14
)。 15. 以下关于算法的描述中不正确的是(
A)算法中每一个步骤的含义都应该是确定的
B)算法中每一个步骤都应该能有效执行 C)正确的算法应在有限步骤内结束 D)正确的算法都必须有输入和输出
16. 当一个关系表达式成立时,该表达式的值为(
A)-1
B)0
)。
17. 关于 if 语句的说法正确的是(
)。 C)1
D)不确定的非 0 值
D)#define PI 3.14 )。
B)char a=97,b='b'; D)float a=1,b=&a;
A)双分支语句中有可能两个分支都不执行 B)if 多分支语句中不能没有最后的 else C)if 语句中可以使用 continue 语句
D)else 总是与前面最近的、没有与其它 else 配对的 if 配对 18. 要判断 x 是否满足表达式“-1≤x≤1”,正确的 C 语言表达式是(
A)-1<=x<=1 A)0
A)scanf(\A)int a,*p=&a; A)只能是 0 或者 1 C)只能是整型或字符型数据 A)10 A)值 A)a,pt
B)11 B)名 B)&a,*pt B)-1≤x≤1 B)-1
B)scanf(\B)int a,*p=*a;
C)x>=-1||x<=1 C)10
)。
D)x>=-1&&x<=1
)。
D)9 )。
19. 若有程序段“int x=10; while(x!=0) x=x-1;”,执行完该程序段后 x 的值是( 20. 若有定义“float x,*p=&x;”,能正确输入一个值给 x 的语句是( 21. 以下选项中,对变量的定义和初始化正确的是( 22. 逻辑运算符两侧运算对象的数据类型为(
)。
B)只能是 0 或非 0 正数 D)可以是任何类型的数据
)。
C)1 C)地址 C)&a,pt
)。
C)scanf(\)scanf(\C)int a,p=&a;
D)int a,*p=a;
23. 在 c 语言中,执行完语句“for (i=1;i<=10;i++);”后,i 的值是(
D)不确定
)。 D)一个标志 ) D)*pt,&pt
)。
24. 定义了指向某个变量的指针,其含义是指针变量里存放的是该变量的( 25. 若有语句“int *pt, a=4; pt=&a;”,则下面均代表地址的一组选项是(
26. 若有语句“float *p,m=3.14;”,想要建立如下图所示的存储结构,则正确的赋值语句是(
p
A)p=m; 赋值语句是(
)。
3.14 m
B)p=&m;
C)*p=m;
D)*p=&m;
27. 有语句“int a=3, b=5, *p, *q; p=&a; q=&b;”,若要实现下图中所示的存储结构,则可以使用的
第 2 页 共 20 页
p 3 a 5 b q
A)*p=*q; B)p=q; C)p=*q; D)*p=q;
28. 以下程序段中有个语句是错误的,则下列说法正确的是(
)。
int *p, i; char *q, ch; p=&i; q=&ch; *p=4; p=q;
A)p 和 q 的类型不一致,不能执行语句 p=q B)*p 中应该存放地址值,因此不能执行*p=4
C)q 虽然指向了具体的存储单元,但是该单元中没有具体的值,所以不能执行 p=q D)q 没有指向具体的存储单元,所以不能执行 p=q 29. 若输入字符串:abcde<回车>,则以下 while 循环体将执行(
)次。
while((ch=getchar( ))=='e')
printf(\A)5
B)4
C)6
D)0
30. 若 i,j 已定义为 int 类型,则以下循环嵌套程序段中循环体一共要执行的次数是(
for (i=5;i>0;i--)
for (j=0;j<4;j++) { ... } A)20
B)25
C)24
D)30
31. 关于函数的说法不正确的是(
)。
A)C 语言用函数实现模块的功能 B)可根据需要自己来编写函数 C)可以在一个函数内定义另一个函数 D)一个函数可以没有参数
32. C 程序中,若对函数类型未加显式说明,则函数类型默认为(
)。
A)int B)void C)double D)int *
33. 在函数内部定义的局部变量,若不对其存储类型进行说明,则默认为( )。 A)static B)auto C)extern
D)以上均不对
34. 若函数 fun 被调用 3 次,则最后一次的输出结果为(
)。
void fun( ) {
int a=1; a+=2;
printf(\} A)a=3 B)a=5
C)a=7
D)a=9
35. 若函数 fun 被调用 3 次,则最后一次的输出结果为(
)。
void fun( ) {
static int a=1; a+=2;
第 3 页 共 20 页
)。
printf(\} A)a=3
B)a=5
C)a=7
D)a=9 36. 如果在一个函数中的复合语句中定义了一个变量,则该变量(A)在该函数中有效
)。
C)在本程序范围内均有效
B)为非法变量
D)只在该复合语句中有效
37. C 语言规定,函数返回值的类型是由( )。
A)调用该函数时系统临时决定
B)在定义该函数时所指定的类型决定 C)return 语句中的表达式类型决定
D)调用该函数时主调函数类型决定
38. putchar 函数可以向终端输出一个(
)。
A)整型变量表达式值 B)实型变量值
C)字符串
D)字符或字符型变量值
39. 执行以下程序段的输出结果是(
)。
void fun(int x, int y) { x=10; y=20; }
void main(
)
{
int a=1, b=2; fun(a, b);
printf(\} A)1,2 B)10,20
C)10,2 D)1,20
40. 执行函数调用“fun('5')”得到的返回值为(
)。
int fun(char ch)
{ return(ch>='0'&&ch<='9'); } A)-1
B)0 C)1
D)2
41. 关于局部变量的说法正确的是(
)。
A)有效范围是从定义开始到程序结束的所有函数 B)有效范围是从定义开始到函数结束 C)形参不是局部变量,而是全局变量 D)复合语句中不能定义局部变量 42. 关于变量属性的说法错误的是(
)。
A)动态变量是在函数开始执行时分配内存单元,函数执行完毕后立即释放 B)静态变量是在函数的执行过程中始终占用同一内存单元,程序执行结束时才释放 C)全局变量都是静态变量,只有局部变量才有动态变量 D)动态变量若不赋初值,系统会自动赋值为 0
43. 若有变量定义“int x=5,*p=&x;”,则执行函数调用“ fun(p);”时,传递给 fun 函数的是(A)指针变量 p 的地址 C)变量 x 的地址
B)指针变量*p 的值
D)变量 x 的值 44. 以下数组的定义形式正确的是(
)。
A)int k=5,a[k]; B)int a[ ];
C)char c[]={'a'};
D)char a(10);
45. 以下一维数组的定义及初始化中,错误的是(
)。
A)int a[3]={0}; B)int a[3]={1,1,1}; C)static int a[3];
D)int n=3,a[n]={0};
46. 若有定义“int a[ ][3]={0,1,2,3,4,5,6,7};”,则元素 a[1][2]的值为(
)。
第 4 页 共 20 页
)。
A)1 B)2 C)4 D)5
)。 47. 若有说明语句“int a[2][4]={{1},{2,3}};”,则数组元素 a[1][1]的值为(
A)0 A)s1=s2; A)s>t A)a[4]
char s[ ]=\for (ptr=s; *ptr!='g'; ptr++)
printf(\A)Pro
int a[10]={6,7,8,9,10};
A)将 5 个初值依次赋给 a[1]至 a[5] B)将 5 个初值依次赋给 a[0]至 a[4] C)将 5 个初值依次赋给 a[6]至 a[10]
D)因为数组长度与初值的个数不相同,所以此语句不正确 53. 以下给字符数组 str 定义和赋值正确的是(
A)char str[10]; str={\
C)char str[10]; strcpy(str, \A)gets
B)getchar
)。
)。
B)char str[ ]={\D)char str[10]={\
)函数。
D)printf
C)scanf
B)Prog
)。
C)Proram
D)程序有错误
52. 对以下说明语句的正确理解是(
B)1
B)strcmp(s1,s2); B)strcmp(s,t)<0 B)a[5]
)。
C)2
C)strcpy(s1,s2);
)。
D)strcmp(s,t)>0
)。
D)a[7]
C)strcmp(s,t)==0 C)a[6]
D)3
)。
D)strcpy(s2,s1);
48. 若有定义“char s1[20],s2[ ]=\”,为使 s1 的值与 s2 相同,下列选项中正确的是( 49. 为了比较字符串 s 是否大于 t,条件表达式应该写成(
50. 若有语句“int a[10],*p=&a[2];”,则执行语句“p=p+4;”后,p 指向的数组元素是( 51. 执行以下程序段的输出结果是(
54. 当接受用户输入的含有空格的字符串时,应使用( 55. 执行以下程序段的输出结果是(
int a[ ]={1,8,2,8,3,8,4,8,5,8}; printf(\A)6,6
56. 以下说法正确的是(
A)p[i]等价于*(p+i) C)p[i]等价于 p+i A)(*s)[2] char s[ ]=\char *p;
for (p=s;p
)。
printf(\B)Prog
C)gorP
B)*(s+2)
)。
B)8,8 )。
C)6,8
D)8,6
B)&p[i]等价于*(p+i)
D)p[i]等价于*p+i
)。 D)*s+2
C)*s[2]
57. 设有定义“double a[10], *s=a”,以下能够代表数组元素 a[2]的是( 58. 执行下面程序段的输出结果是(
D)ProgProPrP
59. 若有定义“struct Student{int no; char name[20]; int score;}stu,*p=&stu;”,关于结构体的使用不
A)scanf(\C)p->score=98;
60. 已知如下定义,则下面叙述不正确的是(
B)printf(\D)strcpy((*p).name,\)。
第 5 页 共 20 页