C语言程序设计(青岛职业技术学院)智慧树知到章节测试答案

第一章测试

1、C语言是一种( )
A、机器语言
B、汇编语言
C、高级语言
D、低级语言
我的答案:C

2、下列各项中,不是C语言的特点是()。
A、语言简洁、紧凑,使用方便
B、数据类型丰富,可移植性好
C、能实现汇编语言的大部分功能
D、有较强的网络操作功能
我的答案:D

3、下列叙述错误的是( )。
A、C程序中的每条语句都用一个分号作为结束符
B、C程序中的每条命令都用一个分号作为结束符
C、C程序中的变量必须先定义,后使用
D、C语言以小写字母作为基本书写形式,并且C语言要区分字母的大小写
我的答案:B

4、一个C程序的执行是从( )。
A、本程序的main函数开始,到main函数结束
B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C、本程序文件的第一个函数开始,到本程序main函数结束
D、本程序的main函数开始,到本程序文件的最后一个函数结束
我的答案:A

5、以下叙述不正确的是( )。
A、一个C源程序必须包含一个main函数
B、一个C源程序可由一个或多个函数组成
C、C程序的基本组成单位是函数
D、在C程序中,注释说明只能位于一条语句的后面
我的答案:D

第二章测试

1、已知定义整形变量a,b,c的值分别是2、3、4,运算表达式a*=16+(b++) - (++c)以后,a值为( )
A、31
B、30
C、29
D、28
我的答案:D

2、在C语言中,要求参加运算的数必须是整数的运算符是( )。
A、++
B、
C、!
D、%
我的答案:D

3、合法的c标识符是( )。
A、5dm
B、a>b
C、h1
D、$s
我的答案:C

4、执行下列程序后,显示的结果是( ) main ( ) { int a; printf (“%d ”,(a=3*5,a*4, a+5));}
A、65
B、20
C、15
D、10
我的答案:B

5、执行下列程序中的输出语句后,x的值是( )。 main() {int x ; printf(“%d ”,(x=4*5,x*2,x+20));}
A、20
B、40
C、60
D、80
我的答案:A

6、判断:表达式1/4+2.75的值是3。
我的答案:X

7、下列转义字符不正确的是( )。
A、'/'
B、’’
C、’+’
D、’-’
我的答案:B

8、对于int n=3;执行n+=n-=n*n;后n的值是9。
我的答案:X

9、在C语言中8.9e1.2是不正确的实型常量。
我的答案:√

10、对任一变量一旦被指定为某一确定类型后,该变量在程序运行时所占存储空间的多少和所能参加的运算类型便已确定了。
我的答案:√

11、若x为整型变量、j为实型变量,当执行语句:x=(int)j;后,j也变为整型变量。
我的答案:X

12、“!”的优先级可以比“/”高。
我的答案:√

13、两个char 型数据相加,其结果为char型。
我的答案:X

14、若有 int i=10,j=2;则执行完i*=j+8;后ⅰ的值为28。
我的答案:X

15、在C程序中,%是只能用于整数运算的运算符。
我的答案:√

16、以下各数均不是合法的八进制数:256、03A2、-0127。
我的答案:X

17、C语言程序中,任何英语单词均可以作标识符。
我的答案:X

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

19、C语言中不区分大小写英文字母。
我的答案:X

20、程序中的变量代表内存中的一个存储单元,它的值不可以随时修改。
我的答案:X

21、0x173是正确的十六进制常数。
我的答案:√

22、逻辑表达式-5&&!8的值为1。
我的答案:X

23、下面程序的输出是________ #include<stdio.h> int main() { int k=11; printf("k=%d,k=%o,k=%x\n",k,k,k); return 1; }
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
我的答案:D

24、在下列选项中,不正确的赋值语句是_______.
A、++t;
B、n1=(n2=(n3=0));
C、k=i=j;
D、a=b+c=1;
我的答案:D

25、下面程序的输出的是_________. #include<stdio.h> void main() {int x=10,y=3; printf("%d\n",y=x/y); }
A、0
B、1
C、3
D、不确定的值
我的答案:C

26、已知字母A的ASCII码为十进制的65,下面程序的输出是_________. #include<stdio.h> void main() {char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3'; printf("%d,%c\n",ch1,ch2); }
A、67,D
B、B,C
C、C,D
D、不确定的值
我的答案:A

27、为表示关系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

28、下面程序的输出结果是_______. #include<stdio.h> void main() { int a=-1, b=4, k; k=(++a<=0)&&(b--<=0); printf("%d,%d,%d\n",k,a,b); }
A、1,1,2
B、1,0,3
C、0,1,2
D、0,0,3
我的答案:D

29、若有以下定义和语句: int a=010, b=0x10, c=10; printf("%d,%d,%d\n",a,b,c); 则输出结果是________.
A、10,10,10
B、8,16,10
C、8,10,10
D、8,8,10
我的答案:B

30、已知有double型变量x=2.5,y=4.7,整型变量a=7, 则表达式 x+a%3*(int)(x+y)%2/4 的值是________.
A、2.4
B、2.5
C、2.75
D、0
我的答案:B

31、假定w、x、y、z、m均为int型变量,有如下程序段: w=1;x=2;y=3;z=4; m=(w<x)?w:x; m=(m<y)?m:y; m=(m<z)?m:z; 则该程序段执行后,m的值是_______.假定w、x、y、z、m均为int型变量,有如下程序段: w=1;x=2;y=3;z=4; m=(w<x)?w:x; m=(m<y)?m:y; m=(m<z)?m:z; 则该程序段执行后,m的值是_______.
A、4
B、3
C、2
D、1
我的答案:D

32、有以下程序,其中k的初值为八进制数   #include <stdio.h>   main()   {int k=011;   printf("%d\n",k++);   } 程序运行后的输出结果是________
A、12
B、11
C、10
D、9
我的答案:D

33、有以下程序   #include   #define SUB(a) (a)-(a)   main()   { int a=2,b=3,c=5,d;   d=SUB(a+b)*c;   printf("%d\n",d);   }   程序运行后的输出结果是_______
A、0
B、-12
C、-20
D、10
我的答案:C

34、有以下定义语句,编译时会出现编译错误的是_______
A、char a=’a’;
B、char a=’\n’;
C、char a=’aa’;
D、char a=’\x2d’
我的答案:C

35、以下选项中,不正确的 C 语言浮点型常量是_______
A、160.
B、0.12
C、2e4.2
D、0.0
我的答案:C

36、以下选项中,_______是不正确的 C 语言字符型常量。
A、'a'
B、'\x41'
C、'\101'
D、"a"
我的答案:D

37、以下合法的标识符是_______。
A、int
B、_a12
C、3ce
D、stu#
我的答案:B

38、已知int x=023,表达式++x的值是_______。
A、17
B、18
C、19
D、20
我的答案:D

39、已知int x=10,表达式x+=x-=x-x的值是_______。
A、10
B、40
C、30
D、20
我的答案:D

40、在 C 语言中,字符型数据在计算机内存中,以字符的_______形式存储。
A、原码
B、反码
C、ASCII 码
D、BCD码
我的答案:C

41、若变量x、i、j和k都是int型变量,则计算下面表达式后,x的值是_______。 x=(i=4,j=16,k=32)
A、4
B、16
C、32
D、52
我的答案:C

42、下列不正确的转义字符是_______。
A、'\\'
B、'\' '
C、'074'
D、'\0'
我的答案:C

43、
A、a/b/c*e*3
B、3*a*e/b/c
C、3*a*e/b*c
D、a*e/c/b*3
我的答案:C

44、要为字符型变量 a赋初值,下列语句中哪一个是正确的_______。
A、char a="3";
B、char a=‘3’;
C、char a=%;
D、char a=*;
我的答案:B

45、字符串"ABC"在内存占用的字节数是_______。
A、3
B、4
C、6
D、8
我的答案:B

46、若有说明语句:char c='\72';则变量c在内存占用的字节数是_______。
A、1
B、2
C、3
D、4
我的答案:A

47、C语言中,要求运算对象只能为整数的运算符是_______。
A、%
B、/
C、>
D、*
我的答案:A

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

49、sizeof (double)的结果值是_______。
A、8
B、4
C、2
D、出错
我的答案:A

50、以下用户标识符中,合法的是_______。
A、int
B、nit
C、123
D、a+b
我的答案:B

51、表达式18/4*sqrt(4.0)/8值的数据类型是_______。
A、int
B、float
C、double
D、不确定
我的答案:C

第三章测试

1、以下选项中不是C语句的是( )
A、++t
B、;
C、k=i=j;
D、{a/=b=1;b=a%2;}
我的答案:A

2、以下语句的输出结果是 ( ) printf("%d ",strlen(" "65xff "));
A、5
B、14
C、8
D、输出项不合法,无法正常输出
我的答案:A

3、若变量已正确说明为float型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋予10.0,b赋予22.0,c赋予33.0,下列不正确的输入形式是( )
A、10<回车>22<回车>33<回车>
B、10.0,22.0,33.0<回车>
C、10.0<回车>22.0 33.0<回车>
D、10 22<回车>33<回车>
我的答案:B

4、调用getchar和putchar函数时,必须包含的头文件是( )。
A、stdio.h
B、stdlib.h
C、define
D、以上都不对
我的答案:A

5、使用scanf("a=%d,b=%d",&a,&b)为变量a,b赋值。要使a,b均为50,正确的输入是( )
A、a=50 b=50
B、50 50
C、a=50,b=50
D、50,50
我的答案:C

6、“putchar(70); ” 这一C语句输出的结果为( )
A、70
B、F
C、提示语法错误
D、C
我的答案:B

7、C 语言标准格式输入函数 scanf() 的参数表中要使用变量的地址值。
我的答案:√

8、表达式语句和表达式没有什么区别。
我的答案:X

9、C 语言标准输入操作中 ,gets() 函数一次只可读取一个字符。
我的答案:X

10、C 语言程序中可以有多个函数 , 但只能有一个主函数。
我的答案:√

11、C 语言标准输出操作中 ,putchar() 函数可以输出显示一个字符串。
我的答案:X

12、C 语言标准格式输出函数 printf() 的参数表是由若干个表达式组成。
我的答案:√

13、C 语言标准输入操作中 ,gets() 函数一次只可读取一个字符。
我的答案:X

14、以下叙述中正确的是
A、用C程序实现的算法必须要有输入和输出操作
B、用C程序实现的算法可以没有输出但必须要有输入
C、用C程序实现的算法可以没有输入但必须要有输出
D、用C程序实现的算法可以既没有输入也没有输出
我的答案:C

15、在C语言中,执行下面两个语句后,输出的结果为( )。 char c1=97, c2=98;printf("%d %c",c1,c2);
A、97 98
B、97 b
C、a 98
D、a b
我的答案:B

16、下列语句中符合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;
我的答案:D

17、在C语言语言中,退格符是 ( )
A、\n
B、\t
C、\f
D、\b
我的答案:D

18、putchar()函数可以向终端输出一个
A、整型变量表达式值
B、实型变量值
C、字符串
D、字符或字符型变量值
我的答案:D

19、以下选项中不是C语句的是( )。
A、++t
B、;
C、k=i=j;
D、{a/=b=1;b=a%2;}
我的答案:A

20、有定义语句:int a=5,b,不能给b赋2的赋值语句是( )。
A、b=a/2;
B、b=b+2;
C、b=2%a;
D、b=5;b=2;
我的答案:B

21、已有定义int a=-2;和输出语句printf("%8lx",a);以下正确的叙述是( )。
A、整型变量的输出形式只有%d一种
B、%x是格式符的一种,它可以适用于任何一种类型的数据
C、%x是格式符的一种,其变量的值按十六进制输出,但%8lx是错误的
D、%8lx不是错误的格式符,其中数字8规定了输出字段的宽度
我的答案:C

22、以下语句的输出结果是 ( )。 printf("%d\n",strlen("\t\"\065\xff\n"));
A、5
B、14
C、8
D、输出项不合法,无法正常输出
我的答案:A

23、若变量已正确说明为float型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋予10.0,b赋予22.0,c赋予33.0,下列不正确的输入形式是( )。
A、10<回车>22<回车>33<回车>
B、10.0,22.0,33.0<回车>
C、10.0<回车>22.0 33.0<回车>
D、10 22<回车>33<回车>
我的答案:B

24、使用scanf("a=%d,b=%d",&a,&b)为变量a,b赋值。要使a,b均为50,正确的输入是( )。
A、a=50 b=50
B、50 50
C、a=50,b=50
D、50,50
我的答案:C

25、调用getchar和putchar函数时,必须包含的头文件是( )。
A、stdio.h
B、stdlib.h
C、define
D、以上都不对
我的答案:A

26、以下叙述中不正确的是( )。
A、调用printf函数时,必须要有输出项
B、使用putchar函数时,必须在之前包含头文件stdio.h
C、在C语言中,整数可以以十进制、八进制或十六进制的形式输出
D、使用putchar函数可以不要输出项
我的答案:A

27、putchar()函数可以向终端输出一个( )。
A、整型变量表达式值
B、实型变量值
C、字符串
D、字符或字符型变量
我的答案:D

28、用getchar()函数可以从键盘读入一个( )。
A、整型变量表达式值
B、实型变量值
C、字符串
D、字符或字符型变量
我的答案:D

第四章测试

1、若要求在if后的圆括号中表示a不等于0的关系,能正确表示这一关系的表达式是( )。
A、a<>0
B、!a
C、a=0
D、a
我的答案:B

2、以下程序段,运行后的输出结果是( ) char m='b'; if(m++>'b') printf("%c ",m); else printf("%c ",m--);
A、a
B、b
C、c
D、d
我的答案:C

3、设a=1,b=2,c=3,d=4,则表达式a<b?b:c<d?a:b的结果为( )。
A、4
B、3
C、2
D、1
我的答案:C

4、下列叙述中正确的是(  )。
A、在switch语句中,不一定使用break语句
B、在switch语句中必须使用default
C、break语句必须与switch语句中的case配对使用
D、break语句只能用于switch语句
我的答案:A

5、以下程序段的输出结果是( )。 int a=13,b=21,m=0; switch(a%3) { case 0:m++;break; case 1:m++; switch(b%2) { default:m++; case 0:m++;break; } } printf("%d",m);
A、1
B、2
C、3
D、4
我的答案:C

6、逻辑表达式的值只能为1或0。
我的答案:√

7、在switch语句中,每一个的case常量表达式的值可以相同。
我的答案:X

8、在switch语句中,多个case可以共用一组执行语句。
我的答案:√

9、下列关于运算符优先顺序的描述中正确的是(  )。
A、关系运算符< 算术运算符< 赋值运算符< 逻辑与运算符
B、逻辑运算符< 关系运算符< 算术运算符< 赋值运算符
C、赋值运算符< 逻辑与运算符< 关系运算符< 算术运算符
D、算术运算符< 关系运算符< 赋值运算符< 逻辑与运算符
我的答案:C

10、能正确表示“当x的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是( )。
A、(x>=1)&&(x<=10)&&(x>=200)&&(x<=210)
B、(x>=1)||(x<=10)||(x>=200)||(x<=210)
C、(x>=1)&&(x<=10)||(x>=200)&&(x<=210)
D、(x>=1)||(x<=10)&&(x>=200)||(x<=210)
我的答案:C

11、在C语言中,设有如下定义: 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

12、设有如下定义: int a=2,b; 则执行b=a&&1;语句后,b的结果是( )。
A、0
B、1
C、2
D、3
我的答案:B

13、设a=3,b=4,c=5,则表达式 !(a>b)&&!c||1的结果是( )。
A、1
B、0
C、2
D、4
我的答案:A

14、能正确表示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

15、以下程序段的输出结果是( )。 int a=10,b=50,c=30; if(a>b) a=b; b=c; c=a; printf("a=%d b=%d c=%d\n",a,b,c);
A、a=10 b=50 c=10
B、a=10 b=30 c=10
C、a=50 b=30 c=10
D、a=50 b=30 c=50
我的答案:B

16、有如下程序 int main( ) { float x=2.0,y; if(x<0) y=0.0; else if(x<10.0) y=1.0/x; else y=1.0; printf(“%f\n”,y); return 0; } 该程序的输出结果是( )。
A、0.000000
B、0.250000
C、0.500000
D、1.000000
我的答案:C

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

18、有如下程序段: int x =1, y=1 ; int m , n; m=n=1; switch (m) { case 0 : x=x*2; case 1: { switch (n) { case 1 : x=x*2; case 2 : y=y*2;break; case 3 : x++; } } case 2 : x++;y++; case 3 : x*=2;y*=2;break; default:x++;y++; } 执行完成后,x和y 的值分别为( )。
A、x=6 y=6
B、x=2 y=1
C、x=2 y=2
D、x=7 y=7
我的答案:A

19、以下程序的输出结果是( ) int main() { int a=1,b=3,c=5,d=4,x; if(a<b) if(c<d) x=1; else if(a<c) if(b<d) x=2; else x=3; else x=6; else x=7; printf(“x=%d”,x); return 0; }
A、1
B、2
C、3
D、6
我的答案:B

20、在C语言中,设x=1, y=2, 执行表达式 (x>y)?x++:++y以后x和y的值分别为(  )。
A、1和2
B、1和3
C、2和2
D、2和3
我的答案:B

21、以下程序段,运行后的输出结果是( )。 char m='b'; if(m++>'b') printf("%c\n",m); else printf("%c\n",m--);
A、a
B、b
C、c
D、d
我的答案:C

22、以下程序段的输出结果是( )。 int a=13,b=21,m=0; switch(a%3) { case 0:m++;break; case 1:m++; switch(b%2) { default:m++; case 0:m++;break; } } printf("%d",m);
A、1
B、2
C、3
D、4
我的答案:C

第五章测试

1、若i为整型变量,则以下循环执行的次数是( )。(单选) for(i=0;i<=5;i++) printf("%d",i++);
A、5次
B、2次
C、3次
D、6次
我的答案:C

2、下面的程序对输入的每一个数字出现的次数进行计数,下划线处应填入的正确语句为( )。 #include "stdio.h" main() {int i,ch, n[10]; for(i=0;i<10;++i) n[i]=0; while((ch=getchar())!=‘ ’) if(ch>=‘0’ && ch<=‘9’) ________; for(i=0;i<10;++i) printf("数字%d出现的次数是:%d ",i,n[i]); }
A、n[ch-‘0’]++
B、n[ch]++
C、i++
D、n[i]++
我的答案:A

3、下列程序段的输出结果是( )。 int x=3; do {printf(“%3d”,x-=2);} while(!(--x));
A、1
B、0
C、-2
D、死循环
我的答案:C

4、若x是int型变量,且有下面的程序片段: for(x=5;x<8;x++) printf((x/2)?(“**%d”):(“##%d”),x); 该程序片段的输出结果是( )。
A、**5**6**7
B、##5**6##7**8
C、**5##6**7
D、**5##6**7##8
我的答案:A

5、C 语言中( )。
A、不能使用do-while语句构成的循环
B、do-while语句构成的循环必须用break语句才能退出
C、do-while语句构成的循环,当while语句中的表达式值为非零时结束循环
D、do-while语句构成的循环,当while语句中的表达式值为零时结束循环
我的答案:D

6、break语句只能用于循环语句中。
我的答案:X

7、continue语句可以用于switch结构中。
我的答案:X

8、在C语言中,为了结束由do-while语句构成的循环, while后一对圆括号中表达式的值应该能够为0
我的答案:√

9、三种循环(while语句、 for语句、 do-while语句)都可以用来处理同一个问题,一般它们可以相互代替。
我的答案:√

10、for(i=0,k=-1;k=1;k++,i++)printf("*\n"); 循环体一次也不执行。
我的答案:X

11、for(i=4;i>1;i--)for(j=1;j<i;j++)putchar('#');输出为######。
我的答案:√

12、对下面程序段描述正确的是______. int x=0,s=0; while (!x!=0) s+=++x; printf("%d",s);
A、运行程序段后输出0
B、运行程序段后输出1
C、程序段中的控制表达式是非法的
D、程序段循环无数次
我的答案:B

13、下面程序段的输出结果是______. x=3; do { y=x--; if (!y) {printf("*");continue;} printf("#"); } while(x=2);
A、##
B、##*
C、死循环
D、输出错误信息
我的答案:C

14、下面程序的输出结果是_______. #include<stdio.h> void main( ) { int n=4; while (n--) printf("%d ",n--); }
A、2 0
B、3 1
C、3 2 1
D、2 1 0
我的答案:B

15、以下程序运行后的输出结果是________. #include<stdio.h> void main() { int i=10,j=0; do { j=j+1; i--; }while(i>2); printf("%d\n",j); }
A、50
B、52
C、51
D、8
我的答案:D

16、下面程序的输出结果是________. main( ) { int i,k=0, a=0, b=0; for(i=1;i<=4;i++) { k++; if (k%2==0) {a=a+k; continue;} b=b+k; a=a+k; } printf("k=%d a=%d b=%d\n",k,a,b); }
A、k=5 a=10 b=4
B、k=3 a=6 b=4
C、k=4 a=10 b=3
D、k=4 a=10 b=4
我的答案:D

17、下面程序的输出结果是_______. #include<stdio.h> void 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

18、有以下程序 #include<stdio.h> main() { int i,j,m=1; for(i=1;i<3;i++) {for(j=3;j>0;j--) {if(i*j>3) break; m=i*j; } } printf("m=%d\n",m); }程序运行后的输出结果是_______.
A、m=1
B、m=2
C、m=4
D、m=5
我的答案:A

19、有以下程序 #include <stdio.h> main() { int c=0,k; for (k=1;k<3;k++) switch (k) { default: c+=k; case 2: c++;break; case 4: c+=2;break; } printf(“%d\n”,c); } 程序运行后的输出结果是_______
A、3
B、5
C、7
D、9
我的答案:A

20、for(i=1;i<9;i+=1);该循环共执行了_______次。
A、7
B、8
C、9
D、10
我的答案:B

21、int a=2;while(a=0) a--;该循环共执行了_______次。
A、0
B、1
C、2
D、3
我的答案:A

22、执行完循环 for(i=1;i<100;i++);后,i 的值为_______。
A、99
B、100
C、101
D、102
我的答案:B

23、以下 for语句中,书写错误的是_______。
A、for(i=1;i<5;i++)
B、i=1;for(;i<5;i++);
C、for(i=1;i<5;i++);
D、for(i=1;i<5;) i++;
我的答案:A

24、_______语句,在循环条件初次判断为假,还会执行一次循环体。
A、for
B、while
C、do-while
D、以上都不是
我的答案:C

25、有以下程序段,其运行结果是_______ int i=5; do{ if(i%3==1) if(i%5==2) {printf("*%d",i); break;} i++; }while(i!=0);
A、*2*6
B、*7
C、*5
D、*3*5
我的答案:B

26、i、j已定义为 int 类型,则以下程序段中内循环体的执行次数是_______。 for(i=5;i;i--) for(j=0;j<4;j++){…}
A、20
B、24
C、25
D、30
我的答案:A

27、以下不构成无限循环的语句或语句组是_______。
A、n=10; while(n);{n--;}
B、n=0; while(1){n++;}
C、n=0; do{++n;}while(n<=0);
D、for(n=0,i=1;;i++)n+=i;
我的答案:A

28、有以下程序段,其运行结果是_______。 Int y=9; for(;y>0;y--) if(y%3==0) printf("%d",--y);
A、875421
B、963
C、852
D、741
我的答案:C

29、有以下程序段,其运行结果是_______。 int i,j; for(i=3;i>=1;i--) {for(j=1;j<=2;j++) printf("%d",i+j); printf("\n");}
A、2 3 4 3 4 5
B、4 3 2 5 4 3
C、2 3 3 4 4 5
D、4 5 3 4 2 3
我的答案:D

第六章测试

1、以下不能对一维数组a进行正确初始化的语句是()
A、int a[10]={0,0,0,0,0};
B、int a[10]={};
C、int a[] = {0};
D、int a[10]={10*1} ;
我的答案:B

2、在C语言中,引用数组元素时,其数组下标的数据类型允许是( )
A、整型常量
B、整型表达式
C、整型常量或整型表达式
D、任何类型的表达式
我的答案:C

3、对以下说明语句,理解正确的是( )。 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、因为数组长度与初值的个数不相同,所以此语句不正确
我的答案:B

4、若有以下语句,则正确的描述是()。 char a[]="toyou"; char b[]={'t','o','y','o','u'};
A、a数组和b数组的长度相同
B、a数组长度小于b数组长度
C、a数组长度大于b数组长度
D、a数组等价于b数组
我的答案:C

5、若有说明int a[3][4];则a数组元素的非法引用是( )
A、a[0][2*1]
B、a[1][3]
C、a[4-2][0]
D、a[0][4]
我的答案:D

6、以下能对二维数组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}} ;
我的答案:B

7、下面叙述正确的是( )
A、两个字符串所包含的字符个数相同时,才能比较字符串
B、字符个数多的字符串比字符个数少的字符串大
C、字符串”STOP ”与”STOP”相等
D、字符串”That”小于字符串”The”
我的答案:D

8、数组名能与其它变量名相同。数组名后是用方括号括起来的常量表达式,不能用圆括号。
我的答案:√

9、在对数组全部元素赋初值时,可以省略行数,但不能省略列数
我的答案:√

10、数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量。
我的答案:√

11、C 语言中 , 字符串常量存放在字符数组中要有一个结束符 , 该结束符是0 。
我的答案:X

12、C语言允许用字符串的方式对数组作初始化赋值。
我的答案:√

13、在对数组全部元素赋初值时,不可以省略行数,但能省略列数
我的答案:X

14、对二维数组的正确说明是
A、int a[][]={1,2,3,4,5,6};
B、int a[2][]={1,2,3,4,5,6};
C、int a[][3]={1,2,3,4,5,6};
D、int a[2,3]={1,2,3,4,5,6};
我的答案:C

15、以下关于数组的描述正确的是
A、数组的大小是固定的,但可以有不同的类型的数组元素;
B、数组的大小是可变的,但所有数组元素的类型必须相同;
C、数组的大小是固定的,但所有数组元素的类型必须相同;
D、数组的大小是可变的,但可以有不同的类型的数组元素;
我的答案:C

16、在定义int a[10];之后,对a的引用正确的是
A、a[9]
B、a[6.3]
C、a(6)
D、a[10]
我的答案:A

17、以下对一维数组a进行不正确初始化的是
A、int a[10]=(0,0,0,0);
B、int a[10]={};
C、int a[]={0};
D、int a[10]={10*2};
我的答案:A

18、以下不能对一维数组a进行正确初始化的语句是()。
A、int a[10]={0,0,0,0,0};
B、int a[10]={};
C、int a[] = {0};
D、int a[10]={10*1} ;
我的答案:C

19、在C语言中,引用数组元素时,其数组下标的数据类型允许是( )。
A、整型常量
B、整型表达式
C、整型常量或整型表达式
D、任何类型的表达式
我的答案:C

20、对以下说明语句,理解正确的是( )。 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、因为数组长度与初值的个数不相同,所以此语句不正确
我的答案:B

21、若有说明:int a[][4]={0,0};则下面不正确的叙述是( )。
A、数组a的每个元素都可得到初值0
B、二维数组a的第一维大小为1
C、当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小
D、只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值
我的答案:A

22、若有说明int a[3][4];则a数组元素的非法引用是( )。
A、a[0][2*1]
B、a[1][3]
C、a[4-2][0]
D、a[0][4]
我的答案:D

23、以下能对二维数组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}} ;
我的答案:B

24、设有数组定义:char arr[]="China";则数组arr所占空间为( )。
A、4个字节
B、5个字节
C、6个字节
D、7个字节
我的答案:C

25、若有以下语句,则正确的描述是()。 char a[]="toyou"; char b[]={'t','o','y','o','u'};
A、a数组和b数组的长度相同
B、a数组长度小于b数组长度
C、a数组长度大于b数组长度
D、a数组等价于b数组
我的答案:C

26、下面叙述正确的是( )。
A、两个字符串所包含的字符个数相同时,才能比较字符串
B、字符个数多的字符串比字符个数少的字符串大
C、字符串”STOP ”与”STOP”相等
D、字符串”That”小于字符串”The”
我的答案:D

27、在定义int a[5][4];之后,对数组元素的引用正确的是
A、a[2][4]
B、a[5][0]
C、a[0][0]
D、a[0,0]
我的答案:C

28、在执行int a[][3]={1,2,3,4,5,6};语句后,a[1][0]的值是
A、1
B、2
C、4
D、5
我的答案:C

29、在定义int a[3][4][2];后,第10个元素是( )
A、a[2][1][2]
B、a[1][0][1]
C、a[2][0][1]
D、a[2][2][1]
我的答案:B

30、在C语言中,引用数组元素时,其数组下标的数据类型允许是
A、整型常量
B、整型表达式或整型常量
C、实型常量
D、任何类型 的表达式
我的答案:B

31、有字符数组a[80],b[80],则正确的输出语句是
A、puts(a,b);
B、printf(“%s,%s”,a[],b[]);
C、putchar(a,b);
D、puts(a);puts(b);
我的答案:D

32、以下不能正确进行字符串赋初值的语句是
A、char str[5]="good!";
B、char str[]="good!";
C、char *str="good!";
D、char str[5]={''g'',''o'',''o'',''d''};
我的答案:A

33、已有定义:char a[]="xyz",b[]={''x'',''y'',''z''};,以下叙述中正确的是 ( )。
A、数组a和b的长度相同
B、a数组长度小于b数组长度
C、a数组长度大于b数组长度
D、上述说法都不对
我的答案:C

34、在C语言中,能实现字符串连接的函数是( )
A、strcat()
B、strcmp()
C、strcpy()
D、strlen()
我的答案:A

35、在C语言中,有:char str[]="abcd"; printf(%d\n",strlen(str)); 上面程序片段的输出结果是( )
A、3
B、4
C、6
D、12
我的答案:B

36、在C语言中,不能把字符串 "Hello!" 赋给数组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!";
我的答案:B

37、函数调用:strcat(strcpy(str1,str2),str3)的功能是
A、将串str1复制到串str2中后再连接到串str3之后
B、将串str1连接到串str2之后再复制到串str3之后
C、将串str2复制到串str1中后再将串str3连接到串str1之后
D、将串str2连接到串str1之后再将串str1复制到串str3中
我的答案:C

38、不能把字符串:Hello!赋给数组b的语句是
A、char b[10]={'H','e','l','l','o','!',0};
B、char b[10];b="Hello!";
C、char b[10];strcpy(b,"Hello!");
D、char b[10]="Hello!";
我的答案:B

第七章测试

1、以下叙述中正确的是()
A、用户自己定义的函数只能调用库函数
B、实用的C语言源程序总是由一个或多个函数组成
C、不同函数的形式参数不能使用相同名称的标识符
D、在C语言的函数内部,可以定义局部嵌套函数
我的答案:B

2、以下程序的输出结果是( )。 #include <stdio.h> void funA (int n) { n++; } int main() { int a=1 ; funA (a) ; printf( "%d ", a ); funA (a) ; printf( "%d ", a ); return 0; }
A、1 2
B、1 1
C、2 2
D、2 1
我的答案:B

3、以下程序的输出结果是( )。 #include "stdio.h" int f(int x) { int y; if (x == 0 || x== 1) return (3); y = x*x - f(x-2); return y; } int main() { int z; z = f(3); printf("%d ", z); return 0; }
A、0
B、9
C、6
D、8
我的答案:C

4、以下程序的输出结果是( )。 #include <stdio.h> int fun(int x) { int p; if(x==0||x==1) return(3); p=x-fun(x-2); return p; } int main( ) { printf("%d ",fun(7)); return 0; }
A、2
B、3
C、7
D、0
我的答案:A

5、以下程序的输出结果是( )。 #include <stdio.h> int fun(int a,int b) { static int m=0, i=2; i +=m+1; m = i + a + b; return m; } int main( ) { int k=4, m=1, p; p = fun( k,m ); printf("%d,", p); p = fun( k,m ); printf("%d " ,p ); return 0; }
A、8,17
B、8,16
C、8,8
D、8,20
我的答案:A

6、函数的实参传递到形参有两种方式值传递和地址传递。
我的答案:√

7、如果函数定义出现在函数调用之前,可以不必加函数声明。
我的答案:√

8、函数的实参可以是常量,变量或表达式。
我的答案:√

9、以下叙述中正确的是()。
A、用户自己定义的函数只能调用库函数
B、C语言源程序总是由一个或多个函数组成
C、不同函数的形式参数不能使用相同名称的标识符
D、在C语言的函数内部,可以定义局部嵌套函数
我的答案:B

10、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。
A、函数调用可以作为独立的语句存在
B、函数调用可以作为一个函数的实参
C、函数调用可以出现在表达式中
D、函数调用可以作为一个函数的形参
我的答案:D

11、以下程序的输出结果是( )。 #include <stdio.h> void funA (int n) { n++; } int main() { int a=1 ; funA (a) ; printf( "%d ", a ); funA (a) ; printf( "%d\n", a ); return 0; }
A、1 2
B、1 1
C、2 2
D、2 1
我的答案:B

12、有以下程序,程序运行后的输出结果是( )。 #include <stdio.h> int new_div(double a, double b) { return a/b + 0.5; } int main( ) { printf("%d", new_div(7.8, 3.1)); return 0; }
A、1
B、2
C、3
D、0
我的答案:C

13、在一个C语言程序中,下列说法正确的是( )。
A、main函数必须出现在所有函数之前
B、main函数可以出现在其它函数之外的任何位置
C、main函数必须出现在所有函数之后
D、main函数必须出在固定位置
我的答案:B

14、以下叙述中正确的是( )。
A、函数名允许用数字开头
B、函数调用时,不必区分函数名称的大小写
C、调用函数时,函数名必须与被调用的函数名完全一致
D、在函数体中只能出现一次return语句
我的答案:C

15、以下程序的输出结果是( )。 #include "stdio.h" int f(int x) { int y; if (x == 0 || x== 1) return (3); y = x*x - f(x-2); return y; } int main() { int z; z = f(3); printf("%d\n", z); return 0; }
A、0
B、9
C、6
D、8
我的答案:C

16、有以下程序 #include <stdio.h> int main() { int findmax(int,int,int),m; ┋ m=findmax(a,b,c); ┋ } int findmax(int x,int y,int z) { … } 则以下叙述正确的是( )。
A、在main函数中声明了findmax函数
B、在main函数中定义了findmax函数
C、在main函数中两次调用了findmax函数
D、在main函数内、外重复定义了findmax函数
我的答案:A

17、设有函数定义:void sub(int k,char ch){ … } 则以下对函数sub的调用语句中,正确的是( )。
A、sub(1,97);
B、sub(2,'97');
C、n=sub(3,'a');
D、sub(4,"a");
我的答案:A

18、下列叙述中错误的是( )。
A、主函数中定义的变量在整个程序中都是有效的。
B、在其它函数中定义的变量在主函数中也不能使用。
C、形式参数也是局部变量。
D、复合语句中定义的变量只在该复合语句中有效。
我的答案:A

19、凡是函数中未指定存储类别的局部变量,其隐含的存储类型是( )。
A、自动(auto)
B、静态(static)
C、外部(extern)
D、寄存器(register)
我的答案:A

20、下面程序的输出结果是( )。 #include <stdio.h> int main( ) { int x=10; { int x=20; printf ("%d,", x); } printf("%d\n", x); return 0; }
A、10,20
B、20,10
C、10,10
D、20,20
我的答案:B

21、以下程序的输出结果是( )。 #include <stdio.h> int fun(int a,int b) { static int m=0, i=2; i +=m+1; m = i + a + b; return m; } int main( ) { int k=4, m=1, p; p = fun( k,m ); printf("%d,", p); p = fun( k,m ); printf("%d\n" ,p ); return 0; }
A、8,17
B、8,16
C、8,8
D、8,20
我的答案:A

22、下面程序的输出结果是( )。 int main() { int a=2,i; for(i=0;i<3;i++) printf("%4d",f(a)); return 0; } f(int a) { int b=0; static int c=3; b++; c++; return(a+b+c); }
A、7 7 7
B、7 10 13
C、7 9 11
D、7 8 9
我的答案:D

23、函数返回值的类型是由( )决定的。
A、调用函数时临时
B、return语句的表达式类型
C、调用该函数的主调函数类型
D、定义函数时,所指定的函数类型
我的答案:D

24、若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )。
A、函数的形参和实参分别占用不同的存储单元
B、形参只是形式上的存在,不占用具体存储单元
C、同名的实参和形参占同一存储单元
D、函数的实参和其对应的形参共占同一存储单元
我的答案:A

25、有如下函数定义: #include <stdio.h> int fun( int k ) { if (k<1) return 0; else if (k==1) return 1; else return fun(k-1)+1; } 若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是( )。
A、1
B、2
C、3
D、5
我的答案:C

第八章测试

1、下列程序的输出结果是( )。 main(){ int k=4,m=5,n=7; int *pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); printf(“%d ”,n); }
A、5
B、7
C、20
D、21
我的答案:C

2、对于类型相同的指针变量,不能进行的运算是( )。
A、+
B、-
C、=
D、==
我的答案:A

3、以下程序的输出结果是( )。 #include <stdio.h> int main() { char str[100]="ABCDEFG", *p=str; int i; for(i = 0; *p != ’’; p++,i++); printf("%d ",i); return 0; }
A、7
B、8
C、99
D、100
我的答案:A

4、已知有以下的说明, int a[]={8,1,2,5,0,4,7,6,3,9}; 那么a[*(a+a[3])]的值为( )。
A、5
B、0
C、4
D、7
我的答案:B

5、有以下程序: main() { char str[ ][10]={“China”,“Beijing”},*p=str; printf(“%s ”,p+10);} 该程序运行后的输出结果是( )。
A、China
B、Beijing
C、ng
D、ing
我的答案:B

6、下列关于指针定义的描述正确的有( )。
A、指针变量是一种变量,该变量是用来存放某个变量的地址值的
B、指针变量的类型与它所指向的变量类型一致
C、指针变量的命名规则与标识符相同
D、在定义指针时,”*”号表示指针变量的指向
我的答案:ABCD

7、设有定义语句: int x[6]={2,4,6,8,5,7},*p=x,i; 要求依次输出x数组中6个元素中的值,下列选项中能完成此操作的语句有( )。
A、for(i=0;i<6;i++)printf(“%2d”,*(p++));
B、for(i=0;i<6;i++)printf(“%2d”,*(p+i));
C、for(i=0;i<6;i++)printf(“%2d”,*p++);
D、for(i=0;i<6;i++)printf(“%2d”,(*p)++);
我的答案:ABC

8、int i=3,*p;p=&i;printf("%d",*p);是正确的。
我的答案:√

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

10、在C程序中,函数的形式参数是指针类型时,调用时对应的实参也必须是地址量。
我的答案:√

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

12、将一维数组a的第i个元素的地址赋给指针变量p的语句是p=&a[i-1];
我的答案:√

13、char *p="girl";的含义是定义字符型指针变量p,p的值是字符串"girl"。
我的答案:X

14、int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则p+5相当于a[5] 。
我的答案:X

15、有如下说明:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是 *(p+8) 。
我的答案:√

16、若有int a[3][4];*(a+1)+2表示a[1][2]元素的地址。
我的答案:√

17、C语言程序中,当调用函数时实参和形参各占一个独立的存储单元。
我的答案:X

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

19、若有定义:int a[5],*p;,则操作p=&a[2];是合法的操作。
我的答案:√

20、若有定义:int a[5][5],*p;,则操作p=a;是合法操作。
我的答案:X

21、若有定义:int a[5][5], (*p)[5];,则操作p=*a;是合法操作。
我的答案:X

22、若有定义:int a[5][5], (*p)[5];,则操作p=a[0];是合法操作。
我的答案:X

23、凡是整型变量可以参加的运算,指针变量都可以参加。
我的答案:X

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

25、对数组各元素的存取完全可以不用下标变量而用指针来代替。
我的答案:√

26、下列关于指针概念的描述中,错误的是( )
A、指针中存放的是某变量或对象的地址值
B、指针的类型是它所存放的数值的类型
C、指针是变量,它也具有一个内存地址值
D、指针的值是可以改变的
我的答案:B

27、已知:int a[5],*p=a;则与++*p相同的是( )。
A、*++p
B、a[0]
C、*p++
D、++a[0]
我的答案:D

28、已知:int a[ ]={1,2,3,4,5},*p=a;在下列数组元素地址的表示中,正确的是( )。
A、&(a+1)
B、&(p+1)
C、&p[2]
D、*p++
我的答案:C

29、若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。
A、p[i]
B、*(*(a+i))
C、a[p-a]
D、*(&a[i])
我的答案:B

30、下列语句组中,正确的是( )
A、char *s;s="Olympic";
B、char s[7];s="Olympic";
C、char *s;s={"Olympic"};
D、char s[7];s={"Olympic"};
我的答案:A

31、若有定义int(*pt)[3];,则下列说法正确的是( )
A、定义了基类型为int的三个指针变量
B、定义了基类型为int的具有三个元素的指针数组pt
C、定义了一个名为*pt、具有三个元素的整型数组
D、定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组
我的答案:D

32、有以下程序  #include <stdio.h> int f(int t[],int n); main() { int a[4]={1,2,3,4},s; s=f(a,4); printf("%d\n",s); } int f(int t[],int n) { if(n>0) return t[n-1]+f(t,n-1); else return 0; }  程序运行后的输出结果是( )
A、4
B、1O
C、14
D、6
我的答案:B

33、有以下程序 #include <stdio.h> main() { int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r; printf(“%d,%d,%d,%d\n”,m,n,*p,*q); } 程序运行后的输出结果是( )
A、1,2,1,2
B、1,2,2,1
C、2,1,2,1
D、2,1,1,2
我的答案:B

34、若有定义语句:int a[4][10],*p,*q[4];且0≤i<4,则错误的赋值是( )
A、p=a
B、q[i]=a[i]
C、p=a[i]
D、p=&a[2][1]
我的答案:A

35、有以下程序 #include <stdio.h> #include <string.h> main() { char str[ ][20]={“One*World”, “One*Dream!”},*p=str[1]; printf(“%d,”,strlen(p));printf(“%s\n”,p); } 程序运行后的输出结果是( )
A、9,One*World
B、9,One*Dream
C、10,One*Dream
D、10,One*World
我的答案:C

36、下列函数的功能是( ) fun(char * a,char * b) { while((*b=*a)!=’\0’) {a++,b++;} }
A、将a所指字符串赋给b所指空间
B、使指针b指向a所指字符串
C、将a所指字符串和b所指字符串进行比较
D、检查a和b所指字符串中是否有’\0’
我的答案:A

37、设有定义:char *c;,以下选项中能够使字符型指针c正确指向一个字符串的是( )
A、char str[ ]=”string”;c=str;
B、scanf(“%s”,c);
C、c=getchar();
D、*c=”string”;
我的答案:A

38、有以下程序 #include <stdio.h> void fun(int *a,int *b) {int *c; c=a;a=b;b=c; } main() {int x=3,y=5,*p=&x,*q=&y; fun(p,q);printf("%d,%d,",*p,*q); fun(&x,&y);printf("%d,%d\n",*p,*q); } 程序运行后的输出结果是( )
A、3,5,5,3
B、3,5,3,5
C、5,3,3,5
D、5,3,5,3
我的答案:B

39、已知char s[10],*p=s;,则在下列语句中,错误的语句是( )。
A、p=s+5;
B、s=p+s;
C、s[2]=p[4]
D、*p=s[0]
我的答案:B

40、已知char b[5],*p=b;,则正确的赋值语句是( )。
A、b=””;
B、*b=”abcd”;
C、p=”abcd”;
D、*p=”abcd”;
我的答案:C

41、已知char s[20]=”programming”,*ps=s;则不能引用字母o的表达式是( )。
A、ps+2
B、s[2]
C、ps[2]
D、ps+=2,*ps
我的答案:A

42、下列选项中,正确的语句组是( )。
A、char s[8];s={"Beijing"};
B、char *s;s={"Beijing"};
C、char s[8];s="Beijing";
D、char *s;s="Beijing";
我的答案:D

43、已知char *p,*q;下面语句正确的是( )。
A、p*=3;
B、p/=q;
C、p+=3;
D、p+=q;
我的答案:C

44、若说明int *p,n;则通过语句scanf能够正确读入数据n的程序段是( )。
A、p=&n;scanf("%d",&p);
B、p=&n;scanf("%d",*p);
C、scanf("%d",n);
D、p=&n;scanf("%d",p);
我的答案:D

45、若有定义:int x,*pb;则以下正确的表达式是( )
A、pb=&x
B、pb=x
C、*pb=&x
D、*pb=*x
我的答案:A

46、以下程序的输出结果是( ) #include<stdio.h> void main() {printf(“%d\n”,NULL);}
A、因变量无定义输出不定值
B、0
C、-1
D、1
我的答案:B

47、已知指针p的指向如图所示的a[1],则执行语句*p++;后,*p的值是( )。
A、20
B、30
C、21
D、31
我的答案:B

48、已知指针p的指向如图所示的a[1],则表达式*++p的值是( )。
A、20
B、30
C、21
D、31
我的答案:B

49、已知指针p的指向如图所示的a[1],则表达式++*p的值是( )。
A、20
B、30
C、21
D、31
我的答案:C

50、若有语句int *point,a=4;和 point=&a;下面均代表地址的一组选项是( )。
A、a,point,*&a
B、&*a,&a,*point
C、*&point,*point,&a
D、&a,&*point,point
我的答案:D

51、若有下面的程序段: char s[]="china";char *p; p=s; 则下列叙述正确的是( )。
A、s和p完全相同
B、数组s中的内容和指针变量p中的内容相等
C、s数组长度和p所指向的字符串长度相等
D、*p与s[0]相等
我的答案:D

52、已定义以下函数 fun(char *p2, char *p1) { while((*p2=*p1)!=’\0’){p1++;p2++;} } 函数的功能是( )。
A、将p1所指字符串复制到p2所指内存空间
B、将p1所指字符串的地址赋给指针p2
C、对p1和p2两个指针所指字符串进行比较
D、检查p1和p2两个指针所指字符串中是否有’\0’
我的答案:A

53、下面程序段中,输出*的个数是( )。 char *s="\ta\018bc"; for(;*s!=′\0′;s++)printf("*");
A、9
B、5
C、6
D、7
我的答案:C

54、阅读下列程序,则执行后的结果为( )。 #include "stdio.h" int main() { int c[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56}; printf("%x,%x\n",c[2][2],*(*(c+1)+1)); }
A、3e,6
B、62,5
C、56,5
D、3E,6
我的答案:A

55、现有int a,*b;,b=&a;,则下列运算错误的是( )。
A、*&a
B、&*a
C、*&b
D、&*b
我的答案:B

56、现有如下定义语句,表示数组元素s[i]的表达式不正确的是( )。 int*p,s[20],i; p=s;
A、*(s+i)
B、*(p+i)
C、*(s=s+i)
D、*(p=p+i)
我的答案:C

第九章测试

1、若有以下语句 typedef struct S { int g; char h; } T; 以下叙述中正确的是()。
A、可用S定义结构体变量
B、可用T定义结构体变量
C、S是struct 类型的变量
D、T是struct S类型的变量
我的答案:B

2、若已经定义: struct stu { int a, b; } student ; 则下列输入语句中正确的是( )
A、scanf("%d",&a);
B、scanf("%d",&student);
C、scanf("%d",&stu.a);
D、scanf("%d",&student.a);
我的答案:D

3、有以下程序 #include <stdio.h> struct ball { char color[10]; int dim; }; int main( ) { struct ball list[2] = {{"white", 2}, {"yellow", 3}}; printf("%s:%d ", (list+1)->color, list->dim); return 0; } 程序运行后的输出结果是( )
A、yellow:3
B、yellow:2
C、white:2
D、white:3
我的答案:B

4、以下叙述中正确的是()。
A、结构体数组名不能作为实参传给函数
B、结构体变量的地址不能作为实参传给函数
C、结构体中可以含有指向本结构体的指针成员
D、即使是同类型的结构体变量,也不能进行整体赋值
我的答案:C

5、有以下程序 #include <stdio.h> #include <string.h> struct S { char name[10]; }; void change(struct S *data, int value) { strcpy(data->name, "#"); value = 6; } int main( ) { struct S input; int num = 3; strcpy(input.name, "OK"); change(&input, num); printf("%s,%d ", input.name, num); return 0; } 程序运行后的输出结果是( )
A、8,17
B、8,16
C、8,8
D、8,20
我的答案:D

6、结构体成员的类型必须是基本数据类型。
我的答案:X

7、结构体数组中可以包含不同结构体类型的结构体变量。
我的答案:X

8、结构体类型本身不占用内存空间,结构体变量占用内存空间。
我的答案:√

9、以下关于C语言数据类型使用的叙述中错误的是( )。
A、若要准确无误差的表示自然数,应使用整数类型
B、若要保存带有多位小数的数据,应使用双精度类型
C、若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型
D、若只处理“真”和“假”两种逻辑值,应使用逻辑类型
我的答案:D

10、下面有关typedef语句的叙述中,正确的是( )
A、typedef语句用于定义新类型
B、typedef语句用于定义新变量
C、typedef语句用于给已定义类型取别名
D、typedef语句用于给已定义变量取别名
我的答案:C

11、若已经定义 typedef struct stu { int a, b; } student ; 则下列叙述中正确的是( )
A、stu 是结构体变量
B、student 是结构体变量
C、student 是结构体类型
D、a和 b是结构体变量
我的答案:C

12、C语言中结构体类型变量在程序执行期间( )
A、所有成员一直驻留在内存中
B、只有一个成员驻留在内存中
C、部分成员驻留在内存中
D、没有成员驻留在内存中
我的答案:A

13、以下叙述中正确的是( )
A、结构体中的成员不能是结构体类型
B、结构体的类型不能是指针类型
C、结构体中成员的名字可以和结构体外其他变量的名称相同
D、在定义结构体类型时就给结构体分配存储空间
我的答案:C

14、以下程序的运行结果是( ) #include<stdio.h> int main() { struct date { int year,month,day; }today; printf("%d",sizeof(struct date)); return 0; }
A、6
B、8
C、10
D、12
我的答案:D

15、已知: struct sk { int a; float b;}data,*p; 若有p=&data,则对data中的成员a的正确引用是( )
A、(*p).data.a
B、(*p).a
C、p->data.a
D、p.data.a
我的答案:B

16、若有以下定义语句: struct student { int num,age;}; struct student stu[3]={{101,20},{102,19},{103,18}},*p=stu; 则以下错误的引用是( )
A、(p++)->num
B、p++
C、(*p).num
D、p=&stu.age
我的答案:D

17、设有一结构体类型变量定义如下: struct date { int year; int month; int day; }; struct worker { char name[20]; char sex; struct date birthday; }w1; 若对结构体变量w1的出生年份进行赋值,下面正确的赋值语句是( )
A、year=1976
B、birthday.year=1976
C、w1.birthday.year=1976
D、w1.year=1976
我的答案:C

18、已知: struct person { char name[10]; int age; }class[10]={"LiMing",29,"ZhangHong",21,"WangFang",22}; 下述表达式中,值为72的一个是( )
A、class[0]->age + class[1]->age+ class[2]->age
B、class[1].name[5]
C、person[1].name[5]
D、clase->name[5]
我的答案:A

19、若已经定义: struct stu { int a, b; } student ; 则下列输入语句中正确的是( )
A、scanf("%d",&a);
B、scanf("%d",&student);
C、scanf("%d",&stu.a);
D、scanf("%d",&student.a);
我的答案:D

20、已知: struct st { int n; struct st *next; }; static struct st a[3]={1,&a[1],3,&a[2],5,&a[0]},*p; 如果下述语句的显示是2,则对p的赋值是( ) printf("%d",++(p->next->n));
A、p=&a[0];
B、p=&a[1];
C、p=&a[2];
D、p=&a[3];
我的答案:C

21、有如下定义: struct person { char name[9];int age;}; struct person class[10]={"John",17, "Paul",19, "Mary",18, "Jack",19}; 根据上述定义,能输出字母M的语句是( )
A、printf("%c\n",class[3].name);
B、printf("%c\n",class[3].name[1]);
C、printf("%c\n",class[2].name[1]);
D、printf("%c\n",class[2].name[0]);
我的答案:D

22、链表不具有的特点是( )
A、插入、删除不需要移动元素
B、可随机访问任一元素
C、不必事先估计存储空间
D、所需空间与线性长度成正比
我的答案:B

23、设有以下链表,则不能将q所指的结点插入到链表末尾的是( )
A、q->next=NULL;p=p->next;p->next=q;
B、p=p->next;q->next=p->next;p->next=q;
C、p=p->next;q->next=p;p->next=q;
D、p=(*p).next;(*q).next=(*p).next;(*p).next=q;
我的答案:C

24、在单链表指针为p的结点之后插入指针为 s的结点, 正确的操作是 ( )
A、p->next=s;s->next=p->next;
B、s->next=p->next;p->next=s;
C、p->next=s;p->next=s->next;
D、p->next=s->next;p->next=s;
我的答案:B

25、对于一个头指针为 head 的带头结点的单链表,判定该表为空表的条件 是( )
A、head==NULL
B、head->next==NULL
C、head->next==head
D、head!=NULL
我的答案:B

第十章测试

1、C语言中,系统的标准输入文件是指( )
A、键盘
B、显示器
C、软盘
D、硬盘
我的答案:A

2、C语言中,文件组成的基本单位为( )
A、记录
B、数据行
C、数据块
D、字符序列
我的答案:D

3、C语言中,能识别处理的文件为( )
A、文本文件和数据块文件
B、文本文件和二进制文件
C、流文件和文本文件
D、数据文件和二进制文件
我的答案:C

4、若调用fputc函数输出字符成功,则其返回值是( )
A、EOF
B、1
C、0
D、输出的字符
我的答案:D

5、已知函数的调用形式:fread(buf,size,count,fp),参数buf的含义是( )
A、一个整型变量,代表要读入的数据项总数
B、一个文件指针,指向要读的文件
C、一个指针,指向要读入数据的存放地址
D、一个存储区,存放要读的数据项
我的答案:C

6、当顺利执行了文件关闭操作时,fclose函数的返回值是( )
A、-1
B、TRUE
C、0
D、1
我的答案:C

7、如果需要打开一个已经存在的非空文件“Demo”进行修改下面正确的选项是( )
A、fp=fopen("Demo","r");
B、fp=fopen("Demo","ab+");
C、fp=fopen("Demo","w+");
D、fp=fopen("Demo","r+");
我的答案:D

8、函数fseek(pf, OL,SEEK_END)中的SEEK_END代表的起始点是( )
A、文件开始
B、文件末尾
C、文件当前位置
D、以上都不对
我的答案:B