admin 管理员组

文章数量: 1184232


2024年12月31日发(作者:dos网络命令大全及用法)

C语言程序设计试题

第1、2、3章 概述、类型、表达式

一、选择题

1、一个C程序由若干个C函数组成,各个函数在文件中的位置顺序为:( )

A、任意

B、第一个函数必须是主函数,其他函数任意

C、必须完全按照执行的顺序排列

D、其他函数可以任意,主函数必须在最后

2、下列四个叙述中,正确的是:( )

A、C程序中的所有字母都必须小写

B、C程序中的关键字必须小写,其他标示符不区分大小写

C、C程序中的所有字母都不区分大小写

D、C语言中的所有关键字必须小写

3、下列四个叙述中,错误的是:( )

A、一个C源程序必须有且只能有一个主函数

B、一个C源程序可以有多个函数

C、在C源程序中注释说明必须位于语句之后

D、C源程序的基本结构是函数

4、下面不是C语言合法标识符的是:( )

A、abc B、5n C、_4m D、x3

5、以下叙述不正确的是:( )

A. 分号是C语句的必要组成部分 B. C程序的注释可以写在语句的后面

C. 函数是C程序的基本单位 D. 主函数的名字不一定非用main来表示

6、 C语言中允许的基本数据类型包括:( )

A. 整型、实型、逻辑型 B. 整型、实型、字符型

C. 整型、字符型、逻辑型 D. 整型、实型、逻辑型、字符型

7、 C语言中能用八进制表示的数据类型为:( )

A、字符型、整型 B、整形、实型

C、字符型、实型、双精度型 D、字符型、整型、实型、双精度型

8、 下列属于C语言合法的字符常数是:( )

A、’97’ B、”A” C、’t’ D、”0”

9、 在C语言(VC环境)中,5种基本数据类型的存储空间长度的排列顺序为:( )

A、char

B、char=int

C、char

D、char=int=

10、 在C语言中(VC环境),一定是长整型常数的是:( )

A、0L B、4962710 C、0412765 D、0xa34b7fe

11、 若有以下定义语句char c1=’b’, c2=’e’;

printf(“%d,%cn”,c2-c1,c2-‘a’+’A’);则输出结果是:( )

A、2,M B、3,E

C、2,E D、输出项与相应的格式控制不一致,输出结果

不确定

12、 以下合法的赋值语句是:( )

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

13、 设变量t为int型,下列选项中不正确的赋值语句是:( )

A、++t; B、n1=(n2=(n3=0)); C、k=i==m; D、a=b+c=1;

14、 在以下一组运算符中,优先级最高的是:( )

A、<= B、== C、% D、&&

15、 下列能正确表示a≥10或a≤0的关系表达式是:( )

A、a>=10 or a<=0 B、a<=10 || a>=0

C、a>=10 || a<=0 D、a>=10 && a<=0

16、 下列只有当整数x为奇数时,其值为“真”的表达式是:( )

A、x%2==0 B、!(x%2==0) C、(x-x/2*2)==0 D、!(x%2)

17、 设a为整型变量,不能正确表达数学关系10

A、1 0< a < 15 B、!(a<=10 || a>=15)

C、a>10 && a<15 D、!(a<=10) && !(a>=15)

18、 已知x=43, ch=’A’,y=0;则表达式(x>=y&&ch<’B’&&!y)的值是:( )

A、0 B、语法错 C、1 D、“假”

19、 表达式17%4 /8的值为:( )

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

20、 语句printf(“%d”,(a=2)&&(b= -2));的输出结果是:( )

A、无输出 B、结果不确定 C、-1 D、1

21、 一个可执行的C程序的开始执行点是:( )

A. 程序中的第一个语句 B. 包含文件中的第一个函数

C. 名为main的函数 D. 程序中的第一个函数

22、 组成C语句的一个必不可少的符号是:( )

A. 逗号 B. 引号 C. 冒号 D. 分号

23、 若将int、long、float等类型的数据进行混合运算,其结果的数据类型是:(

A. int B. long C. float D. double

24、 下述是C语言中有关变量定义的几个说法,正确的是:( )

A. 变量可以不定义直接使用

B. 一个说明语句只能定义一个变量

C. 几个不同类型的变量可在同一语句中定义

D. 变量可以在定义时进行初绐化

25、 与x * = y + z等价的赋值表达式是:( )

A. x = y + z B. x = x * y + z

C. x = x * (y + z) D. x = x + y * z

26、 当代电子计算机能够自动地处理指定的问题是因为:( )

A.计算机是电动的

B.有解决该问题的计算机程序

C.事先存储了解决该问题的程序

D.以上都不是

27、 以下叙述中最准确的是:( )

A.计算机程序是处理某一问题所有指令的集合

B.计算机程序是处理某一问题所用到的所有数据的集合

C.计算机程序是处理某一问题的所有指令及其数据的集合

D.计算机程序是处理某一问题的所有指令及其数据的有序集合

28、 关于计算机程序设计,以下描述最准确的是:( )

A.程序设计就是用语言来编写程序

B.程序设计就是用计算机语言来编写程序

C.程序设计就是用计算机程序设计语言来编写程序

D.程序设计就是用计算机能识别的语言来编写程序

29、 目前编写计算机程序一般采用的是:( )

A.机器语言 B.汇编语言 C.高级语言 D.英语

30、 设计一个计算机程序最基本的工作是:( )

A.制定正确的算法 B.选择合理的数据结构

C.制定正确的算法和选择合理的数据结构 D.以上都不是

31、 算法具有五个特性,以下选项中不属于算法特性的是:( )

A.有穷性 B.简洁性 C.可行性 D.确定性

32、 下述哪一个不是结构化程序基本结构:( )

A.顺序 B.选择 C.循环 D.嵌套

33、 C语言是一种:( )

A.机器语言 B.汇编语言 C.高级语言 D.以上都不是

34、 C语言源程序的扩展名为:( )

A..exe B..c C..obj D..cpp

35、 C程序编译后最终产生(即计算机执行)的文件的扩展名为( )

A..exe B..c C..obj D..cpp

36、 下列各项中,不是C语言的特点是:( )

A.语言简洁、紧凑,使用方便

B.程序执行效率高,可移植性好

C.能实现汇编语言的大多数功能

D.有较强的网络操作功能

37、 构成C语言源程序的基本单位是:( )

A.子程序 B.过程 C.文本 D.函数

38、 下列叙述正确的是:( )

A.C语言源程序可以直接在DOS环境中运行

B.编译C语言源程序得到的目标文件可以直接在DOS环境中运行

C.C语言源程序经过编译、连接得到的可执行程序可以直接在DOS环境中运行

D.C语言源程序可以直接在VC++环境中运行

39、 某C程序由一个主函数main()和一个自定义函数max()组成,则该程序:( )

A.写在前面的函数先开始执行

B.总是从main()函数开始执行

C.总是从max()函数开始执行

D.写在后面的函数先开始执行

40、 以下叙述不正确的是:( )

A.分号是C语句的必要组成部分

B.C程序的注释可以写在语句的后面

C.函数是C程序的基本单位

D.主函数的名字不一定用mian表示

41、 以下为C语句的是:( )

A.a=8 B.a++; C.if(a>8) D. #include

以下不是C语句的是:( )

A.a=8; B.a++; C.if(a>8); D.for(i=1;i<5;i++)

42、 以下所列语句中,合法的语句是:( )

A.a=1,b=2 B.++a; C.a=a+1=5 D.y=int(a);

43、 C程序中的复合语句指的是:( )

A.并列的多个C语句 B.写在同一行中的多个C语句

C.用一对大括号对括的多个C语句 D.就是函数体中的语句

44、 当一个很长的C语句(中间无字符串)在一行写不下(超出屏幕的宽度)时,应该:( )

A.由系统自动换行

B.立即按回车键换行

C.在任意一个空格处按回车键换行

D.输入一个分号后并按回车键换行换行

45、 在x值处于-2~2,4~8时值为“真”,否则为“假”的表达式是:( )。

A.( 2> x> -2 )||(4 > x > 8)

B.!((( x < -2 )||( x >2 )&&(( x <= 4 )||( x > 8 ))

C.( x < 2 )&&( x >= -2 )&&( x > 4 )&&( x < 8 )

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

二、判断题

1. ( )C语言是严格区分大写和小写的,因次主函数不能写成main()以外的其他形式。

2. ( )C语言程序是从源文件的第一条语句开始执行的。

3. ( )C语言对其数据在内存中所占用的实际字节数是有明确规定的。

4. ( )C语言中/*..*/之间的注释内容是不能跨行的。

5. ( )C语言中多个以“;”结束的语句不能放在同一行。

6. ( )以下常数:'101',e3,’78’,(2+3)e(4-2)都是不合法的。

7. ( )变量说明语句int a=b=c=23;是正确的。

8. ( )字符型数据不可以和整数数据一起进行算术运算。

9. ( )C语句:3*x*x+4*x+1+6sin(x)=y.是可以允许的。

10. ( )表达式m=(a=4,4*5)和m=a=4,4*5的值是相等的。

11. ( )C语言中强制类型转换不会改变原变量的原有数据类型。

12. ( )表达式j=-i++和j=-(i++)不相等

13. ( )程序段:i=8,j=10;printf("%d,%d,%d,%dn",i,j,++i,j++);其结果9,10,9,10.

14. ( )C语言中放在“”之间的内容都被视为字符串的一个构成部分,都可以在屏幕上原样

显示。

15. ( )计算机程序的基本组成是:指示计算机如何去解决某一问题的一组指令。

16. ( )计算机程序的执行过程实际上是对程序所表达的数据进行处理的过程。

17. ( )目前程序设计的理念已经从“面向过程的程序设计”向“面向对象的程序设计”方

面转变。

18. ( )任何一个计算机程序都可以用机器语言、汇编语言和高级语言来编写。

19. ( )有人曾提出:计算机程序=算法+数据结构。

20. ( )在程序设计中提到的算法就是“解决问题的方法和步骤”

21. ( )在程序设计中提到的数据结构就是“程序处理的对象的表示方法”

22. ( )计算机程序的算法就是解决“做什么”和“怎么做”的问题。

23. ( )结构化程序设计的基本理念是:将一个较大的问题细分成若干个较小问题的组合。

24. ( )C程序的编译是从程序的第一行开始,到程序的最后一行结束。

25. ( )C程序的编译是从主函数的第一行开始,到主函数的最后一行结束。

26. ( )C程序的执行是从程序的第一行开始,一直到程序的最后一行结束。

27. ( )C程序的执行是从主函数的第一行开始,一直到主函数的最后一行结束。

28. ( )设x、t均为int型变量,则执行语句"x = 10;t = x && x > 10;"后,t的值为0

29. ( )若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不

30. ( )在C程序中,%是只能用于整数运算的运算符

31. ( )在C语言中,逻辑“真”等价于不等于0的数

32. ( )C语言中字符型、整型、实型都能用八进制表示

33. ( )在VC语言中,5种基本数据类型的存储空间长度的排列顺序为:char

34. ( )变量的三要素是:变量名、变量类型、变量的值。

三、多选题

1. 目前程序设计采用的基本方法有:

A.面向过程的程序设计 B.面向对象的程序设计

C.面向问题的程序设计 D.面向机器的程序设计

第4章 顺序结构

一、选择题

1、下面程序的输出是:( )

main()

{ int k=11;

printf("k=%d,k=%o,k=%xn",k,k,k);

}

A) k=11,k=12,k=13 B) k=11,k=13,k=13

C) k=11,k=013,k=oXb D) k=11,k=13,k=b

2、以下合法的C语言赋值语句是:( )

A)a=b=58 B)k=int(a+b) ; C)a=58,b=58 D)-- i;

3、以下程序的输出结果是:( )

main()

{ int x=10,y=3;

printf(“%dn”,y=x/y);

}

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

4、若变量已正确说明为int类型,要给a,b,c输入数据,以下正确的输入语句是:(

A)read (a,b,c); B)scanf(“%d%d%d”,a,b,c);

C)scanf(“%D%D%D”,%a,%b,%c); D)scanf(“%d%d%d”,&a,&b,&b);

5、执行下面程序段后,c3中的值是:( )

int c1=1 , c2=2 , c3;

c3=c1/c2;

A)0 B)1/2 C)0.5 D)1

6、若执行以下程序段,其输出结果是:( )

int a=0 , b=0 , c=0;

c=(a-=a-5) , (a=b,b+3) ;

printf(“%d , %d , %dn” , a,b,c);

A)0,0,0 B)0,0,5 C)5,0,5 D)-10,0,-10

7、以下程序段的输出是:( )

float a=57.666;

printf(“*%2.2f*n”, a);

A)*57* B)*58* C)*57.66* D)*57.67*

8、若有以下定义和语句:( )

int a=5,b

b=a++;

此处b的值是:( )

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

9、若有以下定义和语句:( )

char c1='b',c2='e';

printf("%d,%cn",c2-c1,c2-'a'+'A')

则输出结果是:( )

A) 2,M B) 3,E C) 2,e D) 输出结果不确定

10、以下程序的输出结果是:( )

main()

{ int x=10,y=10;

printf("%d%dn",x--,--y);

}

A) 10 10 B) 9 9 C) 9 10 D) 10 9

11、在C语言中,如果下面的变量都是int类型,则输出结果是:( )

sum=pad=5;

pad=sum++,pad++,++pad;

printf("%dn",pad);

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

12、以下程序的输出结果:( )

#include

main()

{

int i=010,j=10;

printf("%d,%dn",++i,j--);

}

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

13、在C语言中,short类型数据的范围是-32768~32767,下面程序段的输出结果是:(

short i =65536;

printf("%dn",i);

A) 65536 B) 0

C) 1 D)超出取值范围,无输出结果

14、已知字符A的ASCII码为十进制的65,下面程序的输出是:( )

main()

{

char ch1,ch2;

ch1='A'+'5'-'3';

ch2='A'+'6'-'3';

printf("%d,%cn",ch1,ch2);

}

A) 67,D B) B,C

C) C,D D) 不确定的值

15、若有定义和语句:

char s; s="abcd"; printf("%dn",s);

则结果是:( )

A) 输出 97 B) 输出 a

C) 输出 adcb D) 编译不能通过

16、若有定义:int x,y; char a,b,c; 并有以下输入数据(此处代表换行,代表空格):

12

ABC

则能给x赋整数1,给y赋数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程

序段是:( )

A) scanf("x=%d y=%d",&x,&y); a=getchar(); c=getchar();

B) scanf("%d%d",&x,&y); a=getchar(); b=getchar(); c=getchar();

C) scanf("%d%d%c%c%c",&x,&y,&a,&b,&c);

D) scanf("%d%d%c%c%c%c%c%c",&x,&y,&a,&a,&b,&b,&c,&c);

17、两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是:( )

main()

{

int x;

scanf("%d",&x);

if (x++>5)

printf("%d",x)

else

printf("%dn",x--);

}

A) 7和5 B) 6和3 C) 7和4 D) 6和4

18、若执行下面的程序从键盘输入3和4,则输出是:( )

main()

{ int a,b,s;

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

s=a;

if (a

s=s*s;

printf("%dn",s);

}

A) 14 B) 16 C) 18 D) 20

19、设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值

scanf("i=%d,f=%f",&i,&f);

为了把100和765.12分别赋给i和f,则正确的输入为:( )

A) 100<空格>765.12<回车> B) i=100,f=765.12<回车>

C) 100<回车>765.12<回车> D) x=100<回车>,y=765.12<回车>

20、以下程序的输出结果是:( )

#include

main()

{ int n;

printf("%dn",n);

}

A) -1 B) 0 C) 1 D) 不确定

二、判断题

1.( )在C语言中,实型数据在内存都中占4个字节。

2.( )在C语言中,参加算术(+,-,*,/,%)运算的数据可以是任何类型的数据。

3.( )若有定义和语句:int a;char c;scanf("%d,%c",&a,&c);当通过键盘输入:

10,‘A’之后,则变量a中存放的是10,变量c中存放的是‘A’。

4.( )C语言中,变量名只能是小写字母表示,符号常量名可用大写表示

5.( )在C语言中,变量可以不要定义,直接使用

6.( )一个C语言程序总是从主函数开始执行的

7.( )注释语句必须用/*和*/括起来,且只能位于某一语句的后面

8.( ) “a”和‘a’均是占用1个字节的内存空间 的数据

三、多选题

1. 以下所列语句中,不合法的语句是:( )

A、a=1,b=2 B、++a; C、a=a+1=5;

D、y= (int) a; E、a=b=c=10;

2. 下列描述正确的是:( )

A. putchar函数的作用是向屏幕输出一个字符

B. putchar函数能在屏幕上输出控制字符

C. putchar(c)函数中,c只能是字符型变量,不能是整型变量

D. putchar函数能在屏幕上输出转义字符

E.putchar函数的使用需要包含“stdio.h”头文件

3. 下列描述正确的是:( )

A. getchar函数只能接收一个字符

B. getchar函数得到的字符可以赋给一个字符变量

C. getchar函数得到的字符可以赋给一个整型变量

D. getchar函数得到的字符可以作为表达式的一部分

E.getchar函数是编程者自定义的函数

4. printf函数中,关于格式字符描述正确的是:( )

A.格式字符o表示以八进制无符号形式输出整数

B.格式字符u 表示以无符号十进制形式输出整数

C.格式字符x 表示以无符号十六进制形式输出整数

D.格式字符f 表示以实数形式输出单、双精度数

E.格式字符e 表示以浮点数形式输出单、双精度数

5. 假设int x,y,z;若从键盘给x、y、z输入数据,下列不正确的输入语句是:

( )

A.input x、y、z;

B.scanf("%d%d%d",&x,&y,&z);

C.scanf("%d%d%d",x,y,z);

D.read("%d%d%d",&x,&y,&z);

E.scanf("%d%d%d,&x,&y,&z");

6. 假设float x,y,z;,并通过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.0︻22.0︻33.0<回车>

E、10︻22︻33<回车>

7. 若有int a,c;char b;并通过scanf("%f%c%f ",&a,&b,&c);对a赋于整数

10,b赋予字符M,c赋予整数33的值,下面正确的输入形式是:( )(注:

符号︻代表空格)

A、10<回车>M<回车> 33<回车>

B、10M33<回车>

C、 10︻M︻33<回车>

D、10M<回车>33<回车>

E、10M︻<回车>33<回车>

8. 若有 char ch;,下面可以对变量c正确赋值的语句是:( )

A.ch =‘A’;

B.getchar(ch);

C.ch = getchar();

D.scanf(“%c”,&ch);

E.printf(“%c”,ch=‘B’);

9. 下面属于转义符的有:( )

A.‘t ’ B.‘n’ C.‘%d’ D.‘376’ E.‘x20’

10.若a为整型变量,则下列表达式的值为0的是( ),

A.a % a

B.a != a

C.3/4

D.3 && 0

E.a = 0

第5、6章 选择与循环结构

一、选择题

1. 有以下程序

main( )

{ int i;

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

switch ( i )

{ case 1 : printf("%d ", i);

case 2 : printf("%d ", i);

default : printf("%d ", i);

}

}

执行后输出结果是:( )

A)011122 B)012 C)012020 D)120

2. 有以下程序

main()

{ int i=1, j=1, k=2;

if ( (j++ || k++) && i++)

printf("%d,%d,%dn", i, j, k);

}

执行后输出结果是:( )

A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3

3. 有以下程序

main()

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

if (a>b>c)

printf("%dn", d);

else if ( (c-1 >= d) ==1)

printf("%dn", d+1);

else

printf("%dn", d+2);

}

执行后输出结果是:( )

A)2 B)3 C)4 D)编译时有错,无结果

4. 有以下程序

main()

{ int i=0,s=0;

do {

if (i%2)

{ i++; continue; }

i++;

s += i;

} while( i<7 );

printf("%dn", s);

}

执行后输出结果是:( )

A)16 B)12 C)28 D)21

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

main()

{ int a=5,b=4,c=6,d;

printf("%dn",d=a>b?(a>c?a:c):(b));

}

A) 5 B) 4 C) 6 D) 不确定

6. 以下程序中,while循环的循环次数是:( )

main()

{ int i=0;

while(i<10)

{ if(i<1) continue;

if(i==5) break;

i++;

}

}

A) 1 B) 10 C) 6 D) 死循环,不能确定次数

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

main( )

{ int a=0,i;

for(i=1;i<5;i++)

switch(i)

{ case 0:

case 3: a+=2;

case 1:

case 2: a+=3;

default: a+=5;

}

printf("%dn",a);

}

A) 31 B) 13 C) 10 D) 20

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

main()

{ int a=4,b=5,c=0,d;

d=!a && !b || !c;

printf("%dn",d);

}

A) 1 B) 0 C) 非0的数 D) -1

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

#include

main()

{ int i=0,a=0;

while(i<20)

{ for( ; ; )

{ if((i%10)==0) break;

else i--;

}

i+=11; a+=i;

}

printh("%dn",a);

}

A) 21 B) 32 C) 33 D) 11

10.阅读以下程序:( )

main()

{ int x;

scanf("%d",&x);

if(x--<5) printf("%d"x);

else printf("%d"x++);

}

程序运行后,如果从键盘上输人5,则输出结果是:(

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

11.假定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

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

main()

{ int a, b;

for(a=1, b=1; a<=100; a++)

{ if(b>=10) break;

if (b%3==1)

{ b+=3; continue; }

}

printf("%dn",a);

}

A) 101 B) 6 C) 5 D) 4

13.若执行以下程序时从键盘上输入9,则输出结果是:( )

main()

{ int n;

scanf ("%d",&n);

if(n++<10)

printf ("%dn",n);

else

printf("%dn",n--);

}

A) 11 B) 10 C) 9 D) 8

14.有以下程序段

int k=0

while(k=1)

k++;

则while 循环执行的次数是:( )

A) 无限次 B) 有语法错,不能执行 C) 一次也不执行

15.以下程序执行后sum的值是:( )

main()

{ int i , sum;

for(i=1;i<6;i++) sum+=i;

printf("%dn",sum);

}

A)15 B)14 C) 不确定 D)0

16.有以下程序段

int x=3

do

{ printf ("%d",x -=2);

}while (!(--x));

其输出结果是:( )

A) 1 B) 3 0 C) 1 -2 D) 死循环

17.若变量c为char类型,能正确判断出c为小写字母的表达式是:(

A) 'a'<=c<= 'z'

B) (c>= 'a')||(c<= 'z')

C) ('a'<=C)and ('z'>=c)

D) (c>= 'a')&&(c<= 'z')

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

D) 执行1次

main()

{ float x=0.5; char z='a';

printf("%dn", (x>1) && (z<'z') );

}

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

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

main()

{ int x=10,y=10,i;

for(i=0;x>8;y=i )

printf(“%d %d ”,x--,y);

}

A)10 1 9 2 B)9 8 7 6 C)10 9 9 0 D)10 10 9 0

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

main()

{ int i;

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

{ if(i%2)

{ printf(“#”);

continue;

}

printf(“*”);

}

printf(“n”);

}

A)#*#*# B)##### C)***** D)*#*#*

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

main()

{ int i;

for(i='A';i<='I';i++)

printf(“%c”,i+32);

printf(“n”);

}

A)编译不通过,无输出 B) aceg C)acegi D)abcdefghi

22.以下程序输出结果是:( )

main ()

{ int m=5;

if (m>5)

printf (“%dn”,m);

else

printf (“%dn”,m--);

}

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

23.运行以下程序后,如果从键盘上输入china#《回车》,则输出结果为:( )

#include

main()

{ int v1=0,v2=0; char ch ;

while ((ch=getchar())!='#')

switch (ch )

{ case 'a':

case 'h':

default:v1++;

case '0':v2++;

}

printf(“%d,%dn”,v1,v2);

}

A) 2,0 B)5,0 C) 5,5 D)2,5

24.设有如下定义:

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

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

main()

{ int i,j,x=0;

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

{ x++;

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

{ if (j%2)

continue;

x++;

}

x++;

}

printf(“x=%dn”,x);

}

A)x=4 B)x=8 C)x=6 D)x=12

26.设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

27.假定a和b为int型变量,则执行以下语句后b的值为:( )

a=1;b=10;

do

{ b-=a; a++;

}while (b--<0);

A)9 B)-2 C)-1 D)8

28.设j为int型变量,则下面for循环语句的执行结果是:(

for (j=10;j>3;j--)

{ if(j%3) j--;

--j;--j;

printf(“%d ”,j);

}

A)6 3 B)7 4 C)6 2 D)7 3

29.有以下程序

main()

{ int x, i;

for(i=1;i<=50;i++)

{ x=i;

if(x%2==0)

{ x++;

if(x%3==0)

{ x++;

if(x%7==0)

{ x++;

printf("%d ",i);

}

}

}

}

}

输出结果是:( )

A)28 B)27 C)42 D)26

30.假定所有变量均已正确说明,下列程序段运行后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

31.执行表达式k = ( 10>12 ? 15 :6>5 ? 8 :9 )后,变量k的值为:( )

A. 9 B. 8 C. 15 D. 1

32.以下程序运行后,如果从键盘上输人5,则输出结果是:( )

main( )

{

int x;

scanf("%d",&x);

if(x--<5)

printf("%d",x);

else

printf("%d",x++);

}

A、3 B、4 C、5

33.以下程序段的输出结果是:( )

int k, j , s ;

for(k=2;k<6;k++,k++)

{ s=1;

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

s+=j;

}

printf(“%dn”,s);

A)9 B)1 C)11

34.以下程序段的输出是:( )

int i,j,m=0;

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

for (j=3;j<=19;j+=4)

m++;

printf(“%dn”,m);

A)12 B)15 C)20

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

int i, sum;

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

sum+=sum;

printf(“%dn”,sum);

A)15 B)14 C)不确定

36.下面程序的输出是:( D )

main()

{ int x=3,y=6,a=0;

、6

D)10

D)25

)0

D

D

while (x++!=(y-=1))

{ a++;

if (y

}

printf("x=%d,y=%d,a=%dn",x,y,a);

}

A) x=4,y=4,a=1 B) x=5,y=5,a=1

C) x=5,y=4,a=3 D) x=5,y=4,a=1

37.定义如下变量:int n=10;则下列循环的输出结果是:( )

while (n>7)

{ n--; printf("%3d",n);

}

A) 10 9 8 B) 9 8 7

C) 10 9 8 7 D) 9 8 7 6

38.以下程序段的输出结果是:( )

int x=3;

do

{ printf("%3d",x-=2;

} while (!(--x));

A) 1 B) 3 0 C) 1 -2 D) 死循环

39.执行下面的程序后,a的值为:( )

main()

{ int a,b;

for (a=1,b=1;a<100;a++)

{

if (b>=20) break;

if (b%3==1)

{ b+=3; continue; }

b-=5;

}

}

A) 7 B) 8 C) 9 D) 10

40.读程序:

main()

{ int num=0;

while (num<=2)

{ num++; printf("%3d",num);}

}

上面程序的输出结果是:( )

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

41.以下循环体的执行次数是:( )

main()

{ int i,j;

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

printf("%d n",i);

}

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

42.在C语言的循环语句for,while,do-while语句中,用于直接中断最内层循环的语句是:

( )

A) switch B) continue

C) break D) if

二、判断题:

1. ( )用1作while循环的判断条件,则循环一次也不执行。

2. ( )for循环表达式的括号内的3个表达式均不可以省略。

3. ( )语句while(!E);中的条件!E等价于E==0。

4. ( )语句while(E);中的条件E等价于E!=0。

5. ( )若有for( ; ; ){……},是指循环体执行0次。

6. ( )程序有死循环的时候,上机编译不能通过。

7. ( )强制终止死循环可以使用CTRL+BREAK组合键。

8. ( )执行for(I=0;I<3;I++);后I的值为2。

9. ( )执行for(I=0,j=0;I<2;I++);j=j+1;后j的值为1。

10. ( )所有类型的循环都可以进行嵌套使用。

11. ( )利用break语句可以提前终止循环的执行。

12. ( )利用continue语句可以提前终止循环的执行。

13. ( )break语句和continue语句不可以同时出现在同一个循环体内。

14. ( )switch语句中,每一个case的冒号后面都必须至少跟有一条语句

15. ( ) 关于if语句中,条件表达式只能是关系表达式或逻辑表达式

三、多选题

1、 关于if语句,下列叙述正确的是:( )

A.if语句中,条件表达式只能是关系表达式或逻辑表达式

B.if语句中,条件表达式的括号不可以省略

C.else子句不能作为一个独立的语句单独使用,必须是if语句的一部

分。

D.if和else后面可以包含多个操作语句,此时要用一对大括号把这多

个语句对括起来成为一个复合语句。

2、 以下4条语句,没有语法错误的是()

A.if (a>b) m =a; B.if (a);

C.if ((a=b)>=0) m=a; D.if ((a=b;)>=0) m=a;

3、 如果不加花括号表示else与if的配对关系,则else与if的匹配方法,不正确的是

A.else与它上面最远的if配对

B.else与它上面最近的if配对

C.else与离它最近的if配对

与它上面最近的且没有和其他else配对的if配对

4、 关于条件运算符的叙述正确的是

A.条件运算符的优先级别比关系运算符和算术运算符都低

B.条件运算符是C语言中惟一的一个三目运算符

C.条件运算符的结合方向是“自右至左”

D.条件运算符可以替代任何if语句的功能

5、 关于switch语句叙述正确的是

A.语句中,case的冒号后面允许没有语句。

B.switch语句中,每一个case的冒号后面都允许跟有多条语句。

C.在与switch语句配套的case语句中所使用的表达式可以是变量或常

D.switch语句中,可以没有default语句。

6、 在计数循环for(表达式1;表达式2;表达式3)中,可以省略的表达式是:(

A.表达式1 B.表达式2 C.表达式3

D.三个表达式都可以 E.一个都不能少

7、 下列语句段是死循环的是( )

A.n=100; B.s=33;

while(n) n=n%100+1; while(s++%2+s%2) s++;

C.for(;;); D.for(i=1;;)

if(--i)break;

E.x=0;

do{ x++;

}while(x>=0);

第7章 数组

一、选择题

1、若有以下说明语句:

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]

2、假设int型变量占两个字节的存储单元,若有定义:

int x[10]={0,2,4};

则数组x在内存中所占字节数为:( )

A、3 B、6 C、10 D、20

3、下列合法的数组定义是:( )

A、int a[]=”string”; B、int a[5]={0,1,2,3,4,5};

C、char a=”string”; D、char a[]={0,1,2,3,4,5};

4、若给出以下定义:

char x[]=”abcdefg”;

char y[]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’};

则正确的叙述为:( )

A、数组x和数组y等价 B、数组x和数组y的长度相同

C、数组x的长度大于数组y的长度 D、数组y的长度大于数组x的长度

5、下面程序段的输出结果是:( )

int j;

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

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

printf(“%d”,x[j][2-j]);

A、1 5 9 B、1 4 7 C、3 5 7 D、3 6 9

6、下列程序运行后的输出结果是:( )

main()

{ int n[3],t,j,k;

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

n[t]=0;

k=2;

for(t=0;t

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

n[j]=n[t]+1;

printf(“%dn”,n[1]);

}

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

7、有以下程序

main()

{ int p[7]={11,13,14,15,16,17,18}, i=0,k=0;

while(i<7 && p[i]%2) { k =k+ p[i]; i++; }

printf("%dn", k);

}

执行后输出结果是:( )

A、58 B、56 C、45 D、24

8、以下能正确定义数组并正确赋初值的语句是:( )

A、int N=5,b[N][N]; B、int a[1][2]={{1},{3}};

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

9、有以下程序

main()

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

int i,j,k=2;

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

{ printf("%d ",m[k][i]); }

}

执行后输出结果是:( C )

A、4 5 6 B、2 5 8 C、3 6 9 D、7 8 9

10、以下能正确定义一维数组的选项是:( )

A、int num[]; B、int num[0..100];

C) #define N 100 D) int N=100;

int num[N]; int num[N];

11、下列选项中正确的语句组是:( )

A、char s[8]; s={"Beijing"}; B、char *s; s={"Beijing"};

C、char s[8]; s="Beijing"; D、char *s; s="Beijing";

12、有以下程序段

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

b=p[5];

b中的值是:( )

A、5 B、6 C、8 D

13、有以下程序

main( )

{ char a[]="abcdefg",b[10]="abcdefg";

printf("%d %dn",sizeof(a),sizeof(b));

}

执行后输出结果是:( )

A、7 7 B、8 8 C、8 10

10 10

14、有以下程序的输出结果是:( )

void swap1(int c[])

{ int t;

t=c[0];c[0]=c[1];c[1]=t;

}

void swap2(int c0,int c1)

{ int t;

t=c0;c0=c1;c1=t;}

main( )

{ int a[2]={3,5},b[2]={3,5};

swap(a); swap2(b[0],b[1]);

printf("%d %d %d %dn",a[0],a[1],b[0],b[1]);

}

A、5 3 5 3 B、 5 3 3 5

3 5 3 5 D、3 5 5 3

15、有以下程序

int f(int b[][4])

{ int i,j,s=0;

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

{ i=j;

if(i>2) i=3-j;

、9

D、

C、

s+=b[i][j];

}

return s;

}

main( )

{ int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}};

printf("%dn",f(a));

}

执行后的输出结果是:( )

A、12 B、11 C、18 D、16

、有以下程序

void sort(int a[],int n)

{ in t i,j,t;

for(i=0;i

for(j=i+2;j

if(a[i]

{ t=a[i];a[i]=a[j];a[j]=t;}

}

main()

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

sort(aa,10);

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

printf("%d",aa[i]);

printf("n");

}

其输出结果是:( )

A、1,2,3,4,5,6,7,8,9,10, B

C、9,2,7,4,5,6,3,8,1,10, D

、有以下程序

void f(int a[],int i,int j)

{ int t;

if(i

{ t=a[i]; a[i]=a[j];a[j]=t;

f(a,i+1,j-1);

}

}

main( )

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

f(aa,0,4);

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

printf("%d,",aa[i]);

printf("n");

}

执行后输出结果是:( )

、10,9,8,7,6,5,4,3,2,1,

、1,10,3,8,5,6,7,4,9,2,

16

17

A、5,4,3,2,1, B、5,2,3,4,1, C、1,2,3,4,5, D、1,2,3,4,5,

18、 以下程序的输出结果是:( )

main()

{ char cf[3][5]={"AAAA","BBB","CC"};

printf(""%s"n",ch[1]);

}

A、"AAAA" B、 "BBB" C、 "BBBCC" D、 "CC"

19、 以下程序的输出结果是:( )

main()

{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;

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

for(j=i;j<=i;j++) t=t+b[i][b[j][j]];

printf("%dn",t);

}

A、 3 B、 4 C、 1 D、 9

20、有以下程序

main()

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

int i,s=0;

for(i=0;i<4;i++) s+=aa[i][1];

printf("%dn",s);

}

程序运行后的输出结果是:( )

A、 11 B、 19 C、 13 D、、20

21、若有以下定义语句:

char s[10],s=”abcd”;printf(“%sn”,s);

则运行结果是:( )

A、输出abcd B、输出a C、输出ab cd D、编译不通过

22、不能把字符串“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!”;

23、若有以下程序段:

char str[]=”abn012””; printf(“%d”,strlen(str));

该程序段的输出结果是:( )

A、 3 B、 4 C、 6 D、12

24、函数调用strcat(strcpy(str1,str2),str3)的功能是_:( )

A、将串str1复制到串str2中后在连接到串str3之后

B、将串str1连接到串str2之后再复制到串str3之后

C、将串str2复制到串str1中后再将串str3连接到串str1之后

D、将串str2连接到串str1中后再将串str1复制到串str3中

25、下列程序的输出结果是:( )

main()

{ char ch[7]={“65ab21”};

int j,s=0;

for(j=0;ch[j])>=’0’&&ch[j]<=’9’;j+=2)

s=10*s+ch[j]-‘0’;

printf(“%dn”,s);

}

A、12ba56 B、66521 C、6 D、62

26、设已定义char s[]=””NameAddress”n”;,则字符串s所占的字节数是:(

A、19 B、18 C、15 D、14

27、设已定义char c[8]=”Tianjin”和int j,则下面的输出函数调用中错误的是:(

A、printf(“%s”,c); B、for(j=0;j<8;j++) printf(“%c”,c[j]);

C、puts(c); D、for(j=0;j<8;j++) puts(c[j]);

28、设已定义char a[10]和 int j,则下面输入函数调用中错误的是:( )

A、scanf(“%s”,a); B、for(j=0;j<9;j++) scanf(“%c”,a[j]);

C、gets(a); D、for(j=0;j<9;j++) scanf(“%c”,&a[j]);

29、设已定义char x[8]和int j,为了给该数组赋值,下面语句中正确的是:( )

A、x[8]=”Turbo C”; B、x=” Turbo C”;

C、x[]=”Turbo C”; D、for(j=0;j<7;j++) x[i]=getchar();

30、有如下程序,

main()

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

for(j=0;j

printf(“%dn”,n[k]);

}

该程序的输出结果是:( )

A、不确定的值 B、2 C、1 D、0

31. 在C语言中,一维数组的定义方式为:类型说明符 数组名( )。

A.[常量表达式] B.[整型表达式]

C.[整型常量]或[整型表达式] D.[整型常量]

32. 若有说明:int a[10];,则对a数组元素的正确引用是:( )。

A.a[10] B.a[3.5] C.a(5) D.a[10-10]

33. 在C语言中,引用数组元素时,其数组下标的数据类型允许是:( )。

A.字符常量 B.浮点型常量

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

34. 下列数组定义、初始化或赋值语句中,正确的是:( )。

A.int x[5]={1,2,3,4,5,6}; B.int n=8; int score[n];

C.int a[8]; a[8]=100; D.int x[]={1,2,3,4,5,6};

35. 合法的数组说明语句是:( )。

A.int a[]=“string”; B.char a[]={0,1,2,3,4,5};

C.char a =“string”; D.int a[5]={0,1,2,3,4,5};

36. 已知int a[][3]={1,2,3,4,5,6,7};,则数组a的第一维的大小是:( )。

A.2 B.3 C.4 D.无确定值

37. 若有说明:int a[3][4];,则对a数组元素的非法引用是:( )。

A.a[0][2*1] B.a[1][3] C.a[4-2][0] D.a[0][4]

38. 已有定义:char a[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是:( )。

A.数组a和数组b的长度相同 B.a数组长度小于b数组长

C.a数组长度大于b数组长度 D.数组a和数组b等价

39. 对两个数组a和b进行如下初始化:

char a[]=“ABCDEF”;

char b[]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’};

则以下叙述正确的是:( )。

A.数组a与数组b完全相同 B.数组a与数组b长度相同

C.数组a与数组b中都存放字符串 D.数组a比数组b长度长

40. 有下面的程序段:

char a[3],b[]=“China”;

a=b;

printf(“%s”,a);

A.运行后将输出China B.运行后将输出Ch

C.运行后将输出Chi D.编译出错

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

char c[5]={‘a’, ‘b’, ‘0’, ‘c’, ‘0’};

printf(“%s”,c);

A.ab B.abc C.ab0 D.ab0c0

42. 设有数组定义:char array[]=“china”;,则数组array所占的空间为:( )。

A.4个字节 B.5个字节 C.6个字节 D.7个字节

43. 判断字符串s1是否大于字符串s2,应当使用:( )。

A.if(s1>s2) B.if(strcmp(s1,s2))

C.if(strcmp(s2,s1)>0) D.if(strcmp(s1,s2)>0)

44. 若有说明:int a[][4]={0,0};,则下面不正确的叙述是:( )。

A.数组a的每个元素都可得到初值0

B.二维数组a的第一维大小为1

C.因为二维数组a中初值的个数不能被第二维大小的值整除,则第一维的大小等于

所得商数再加1,故数组a的行数为1

D.只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值

45. 下列语句中,不正确的是:( )。

A.char str[5]="hello";

B.char str[]={'h','e','l','l','o','0'};

C.char str[5]={"hi"};

D.char str[100]="";

46. 下面错误的初始化语句是:( )。

A.char str[]="hello";

B.char str[100]="hello";

C.char str[]={'h','e','l','l','o'};

D.char str[]={'hello'};

47. 定义了一维int型数组a[10]后,下面错误的引用是:( )。

A.a[0]=1;

B.a[10]=2;

C.a[0]=5*2;

D.a[1]=a[2]*a[0];

48. 下面的二维数组初始化语句中,错误的是:( )。

A.float b[2][2]={0.1,0.2,0.3,0.4};

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

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

D.float a[2][2]={0};

49. 引用数组元素时,数组下标可以是:( )。

A.整型常量 B.整型变量 C.整型表达式 D.以上均可

50. 定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为:(

A.24 B.25 C.18 D.17

51. strlen("A0B0C")的结果为:( )。

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

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

main()

{

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

printf("%d",a[1][1]);

}

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

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

。 )

main()

{

char s1[20]="Good!";

char s2[15]="AB";

printf("%d",strlen(strcpy(s1,s2)));

}

A.20 B.15 C.5 D.2

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

main()

{

char s1[20]="ABCDEF";

int i=0;

while(s1[i++]!='0')

printf("%c", s1[i++]);

}

A.ABCDEF B.BDF C.ABCDE D.BCDE

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

main()

{

int n[2]={0},i,j,k=2;

for(i=0;i

for(j=0;j

n[j]=n[i]+1;

printf("%dn",n[k]);

}

A.不确定的值 B.3 C.2 D.1

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

main()

{

int x[]={22,33,44,55,66,77,88};

int k,y=0;

for (k=1;k<=4;k++)

if (x[k]%2==1)

y++;

printf("%d",y);

}

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

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

main()

{

int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;

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

for(j=0;j

s+=a[i][j];

printf("%d",s);

}

A.14 B.19 C.20 D.21

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

main()

{

char ch[7]= {"12ab56"};

int i,s=0;

for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)

s=10*s+ch[i]-'0';

printf("%d",s);

}

A.1 B.1256 C.12ab56 D.l2

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

main()

{

char s[]="ab1c2d4e";

int i;

i=0;

while(s[i]!='0')

{

if(s[i]>='a'&&s[i]<='z')

printf("%c",s[i]);

i++;

}

}

A.ab B.ab1c2d4e C.abcde D.a

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

main()

{

int i=0,n=0;

char s[10]="298h01";

for(i=0;s[i]!='0';i++)

if(s[i]<='9'&&s[i]>='0')

n=n*10+(s[i]-'0');

else

break;

printf("%dn",n);

}

A.298h01 B.29801 C.01 D.298

二、判断题:

1. ( )在程序中可以对数值数组中的数据进行整体使用。

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

3. ( )字符数组的输出不能一次性的整体输出。

4. ( )用scanf函数输入的字符串不可以带空格。

5. ( )用gets函数输入的字符串可以带空格。

6. ( )实现两个字符串的复制可以使用str1=str2;语句。

7. ( )使用strcpy函数可以实现两个字符串的复制。

8. ( )使用strcat函数可以实现两个字符串的连接。

9. ( )使用strlen函数可以求出一个字符串的实际长度(包含‘0’字符)。

10. ( )如有定义char a[]=”student”;则数组a的长度为7。

11. ( )如有定义char a[20];则可以通过a=“I am a boy”;给a赋值。

12. ( )如有定义int a[2][3];则数组a的最后一个元素为a[1][2]。

13. ( )如有定义int a[3][4]={0}; 则数组a的所有元素初值均为0。

14. ( )C语言中数组名实质上是数组的首地址,是一个变量地址,可对其进行赋值。

15. ( )构成数组的各个元素可以有不同的数据类型。

16. ( )若有说明:int a[10];,则可以a[10]引用数组a的第10个元素。

17. ( )引用数组元素时,其数组下标的数据类型允许的是:整型常量或整型表达式。

18. ( )若有int a[10]={6,7,8,9,10};,则是将5个初值依次赋给a[0]至a[4]。

19. ( )一个一维数组,它的每一个元素也是类型相同的一维数组时,便构成二维数组。

20. ( )在C语言中,允许用字符串来直接初始化字符数组。

21. ( )字符数组的输出不能一次性的整体输出。

22. ( )使用strcat函数可以实现两个字符串的复制。

三、多选题

1、 以下关于数组的描述中,正确的有:( )。

在定义数组时,有时可以将该数组的维数省略

数组名实质上是数组的首地址,是一个变量地址,可对其进行赋值

构成数组的各个元素可以有不同的数据类型

有定义:int a[3]; 则定义了a[0]、a[1]、a[2]三个数组元素

在程序中可以对数值数组中的数据进行整体使用

2、 以下关于数组的描述中,错误的有:( )。

引用数组元素时,其数组下标的数据类型允许的是:整型常量或整型表达式

可以通过数组名来整体引用一个数组

在程序中可以对数值数组中的数据进行整体使用

若有说明:int a[10];,则可以a[10]引用数组a的第9个元素

若有说明:int a[10];,则可以a[10]引用数组a的第10个元素

3、 以下关于数组的描述中,错误的有:( )。

可以通过如下语句来完成对一个数组的输入:int a[10]; scanf("%d",a);

可以通过如下语句来完成对一个数组的输入:int a[10]; scanf("%d",&a);

若有int a[10]={6,7,8,9,10};,则是将5个初值依次赋给a[0]至a[4]

数组元素可以像普通变量一样使用

int a[9]; 则数组a的下标范围是1-9

4、 以下关于数组的描述中,正确的有:( )。

数组名实质上是数组的首地址,是一个常量,不能对其赋值

在定义数组时,有时可以将该数组的维数省略

一个一维数组,它的每一个元素也是类型相同的一维数组时,便构成二维数组

如有定义int a[3][4]={0}; 则数组a的所有元素初值均为0

可以通过数组名来整体引用一个数组

5、 以下关于数组的描述中,错误的有:( )。

如有定义int a[2][3];则数组a的最后一个元素为a[1][2]

一个一维数组,它的每一个元素也是类型相同的一维数组时,便构成二维数组

若有说明:static int a[3][3]; 那么数组a中每个元素初值为0

在定义二维数组时,可以将该数组的两个维数全部省略

如有定义char a[20]; 则可以通过a="I am a boy"; 给a赋值

6、 若有说明:int a[][4]={0,0};,则下面正确的叙述有:( )。

数组a的每个元素都可得到初值0

二维数组a的第一维大小为1

因为二维数组a中初值的个数不能被第二维大小的值整除,则第一维的大小等于所得

商数再加1,故数组a的行数为1

只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值

只有元素a[1][1]和a[1][2]可得到初值0,其余元素均得不到初值

7、 以下关于数组的描述中,正确的有:( )。

若有定义char a[]="hello";,则数组a的长度为6

有定义char a[3]; 则定义了a[1]、a[2]、a[3]三个数组元素

构成字符数组的各个元素必须是字符类型的数据

可以通过数组名来整体引用一个数组

设有数组定义char array [ ]="China"; 则数组array所占的空间为5个字节

8、 以下关于数组的描述中,正确的有:( )。

在C语言中,允许用字符串来直接初始化字符数组

若有定义char a[20];,则可以通过a="I am a boy";给a赋值

若有char a[10]={1,2,3};,则是将3个初值依次赋给a[1]至a[3]

构成字符数组的各个元素必须是字符类型的数据

数组名实质上是数组的首地址,是一个常量,不能对其赋值

9、 以下关于数组的描述中,错误的有:( )。

字符数组的输出不能一次性的整体输出

若有char a[10]={1,2,3};,则是将3个初值依次赋给a[0]至a[2]

构成字符数组的各个元素可以是不同数据类型的元素

构成字符数组的各个元素必须是字符类型的数据

若有定义char b[]="hello";,则数组b的长度为6

10、 下列语句中,正确的有:( )。

char str[5]="hello";

char str[]={'h','e','l','l','o','0'};

char str[5]={"hi"};

char str[100]="";

char str[3]="this";

11、 函数调用strcat(strcpy(str1,str2),str3)的功能,以下说法错误的有:( )。

将串str1复制到串str2中后在连接到串str3之后

将串str1连接到串str2之后再复制到串str3之后

将串str2复制到串str1中后再将串str3连接到串str1之后

将串str2连接到串str1中后再将串str1复制到串str3中

将串str2连接到串str1中后再将串str3复制到串str1中

12、 以下关于数组的描述中,正确的有:( )。

在定义数组时,有时可以将该数组的维数省略

数组元素可以像普通变量一样使用

若有int a[10]={6,7,8,9,10};,则是将5个初值依次赋给a[0]至a[4]

如有定义char a[]="student"; 则数组a的长度为7

若有定义double x[3][5]; 则x数组中行下标的下限为0,列小标的上

限为4

13、 定义了一维int型数组a[10]后,下面正确的引用有:( )。

a[0]=1;

a[10]=2;

a[0]=5*2;

a[1]=a[2]*a[0];

a[2]=a[1]+a[0];

第8章 函 数

一、选择题

1. 若调用一个函数,且此函数中没有RERUrn语句,则关于该函数正确的说法是:(

A. 没有返回值

B. 返回若干个系统默认值

C. 能返回一个用户所希望的函数值

D. 返回一个不确定的值

2. 在c语言中以下不正确的说法是:( )

A. 实参可以是常量、变量、或表达式

B. 形参可以是常量、变量或表达式

C. 实参可以为任意类型

D. 形参应与其对应的实参类型一致

3. 以下程序有语法性错误,有关错误原因的正确说法是:( )

main()

{ int G=5,k;

void prt_char();

……

k=prt_char(G);

……

}

A. 语句void prt_char();有错,它是函数调用语句,不能用void说明

B. 变量名不能使用大写字母

C. 函数说明和函数调用语句之间有矛盾

D. 函数名不能使用下划线

4. 以下正确的说法是:( )

A. 函数的定义可以嵌套,但函数的调用不可以嵌套

B. 函数的定义不可以嵌套,但函数的调用可嵌套

C. 函数的定义和调用均不可以嵌套

D. 函数的定义和调用均可以嵌套

5. 若使用一个数组名作函数实参,则以下正确的说法是:( )

A. 必须在主调函数中说明此数组的大小

B. 实参数组类型与形参数组类型可以不匹配

C. 在被调用函数中,不需要考虑形参数组的大小

D. 实参数组名与形参数组名必须一致

6. 在一个函数内部定义的变量是:( )

A、 简单变量 B、 局部变量 C、 全局变量 D、 标准变量

7. 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是:( )

A)函数调用可以作为独立的语句存在

B)函数调用可以作为一个函数的实参

C)函数调用可以出现在表达式中

D)函数调用可以作为一个函数的形参

8. 已定义以下函数

fun(int*p)

{ return *p; }

该函数的返回值是:( )

A)不确定的值 B)形参p中存放的值

C)形参p所指存储单元中的值 D)形参p的地址值

9. 以下所列的各函数首部中,正确的是:( )

A、 void play(var :Integer,var b:Integer)

B、 void play(int a,b)

C、 void play(int a,int b)

D、 Sub play(a as integer,b as integer)

10. 当调用函数时,实参是一个数组名,则向函数传送的是:( )

A、 数组的长度 B、 数组的首地址

C、 数组每一个元素的地址 D、 数组每个元素中的值

11. 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是:(

A、 地址传递 B、 单向值传递

C、 由实参传给形参,再由形参传回实参 D、 传递方式由用户指定

12. 以下函数值的类型是:( )

fun ( float x )

{ float y;

y= 3*x-4;

return y;

}

A、 int B、 不确定 C、 void D、 float

13. 下列函数的功能是:( )

int fun1(chat* x)

{ char *y=x;

while(*y++);

return(y-x-1);

}

A)求字符串的长度 B、比较两个字符串的大小

C、将字符串X复制到字符串Y D、将字符串X连接到字符串Y后面

14. 下面程序的输出结果是:( )

void prty(int * x)

{ printf("%dn",++*x);}

main()

{ int a=25; prtv(&a); }

A、23 B、24 C、25 D、26

15. 以下对C语言函数的有关描述中,正确的是:( )

A、只能把实参的值传送给形参,形参的值不能传送给实参

B、C函数既可以嵌套定义又可以递归调用

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

D、C程序中所有函数都可以嵌套调用

16. 以下叙述中不正确的是:( )

A)在C中,函数体中定义的动态变量可以赋初值,每调用一次,赋一次初值.

B、 在C中,函数体中定义的静态变量可以赋初值,每调用一次,赋一次初值.

C、 在C中,局部变量的隐含类别是自动存储类别.

D)在C中,在调用函数时,实在参数和对应形参在类型上只需赋值兼容.

17. 以下叙述中不正确的是:( )

A) 在不同的函数中可以使用相同名字的变量

B) 函数中的形式参数是局部变量

C) 在一个函数内定义的变量只在本函数范围内有效

D)在一个函数内的复合语句中定义的变量在本函数范围内有效

18. 有以下程序

void fun (int a,int b,int c)

{ a=456; b=567; c=678;}

main()

{ int x=10, y=20,z=30;

fun (x,y,z);

printf("%d,/%d,%dn",x,y,z);

}

输出结果是:( )

A、30,20,10 B、10,20,30 C、456,567,678 D、678,567,456

19. 有以下程序 ( )

int fun(int x,int y,int *cp,int *dp)

{ *cp=x+y; *dp=x-y; }

main()

{ int a, b, c, d;

a=30; b=50;

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

printf("%d,%dn", c, d);

}

输出结果是:( )

A、50,30 B、30,J50 C、80,-20 D

20. 下列程序执行后的输出结果是 ( )。

void func(int *a,int b[])

{ b[0]=*a+6; }

main()

{ int a,b[5];

a=0; b[0]=3;

func(&a,b); printf(“%d n”,b[0]);

}

A、 6 B、 7 C、 8 D

21. 一个完整的可运行的C源程序中,( )。

A、 可以有一个或多个函数

B、 必须有且仅有一个主函数

C、 可以没有主函数

D、 必须有主函数和其他函数

22. 下述函数定义形式正确的是( )。

A、 int f(int x; int y) B、 int f(int x,y)

C、 int f(int x, int y) D、 int f(x,y: int)

23. 关于函数参数,说法正确的是( )。

A、 实参与其对应的形参各自占用独立的内存单元

B、 实参与其对应的形参共同占用一个内存单元

C、 只有当实参和形参同名时才占用同一个内存单元

D、 形参是虚拟的,不占用内存单元

24. 一个函数的返回值由( )确定。

A、 return语句中的表达式 B、 调用函数的类型

C、 系统默认的类型 D、 被调用函数的类型

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

、80,20

、 9

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

B、 在C语言程序中,要调用的函数必须在main()函数中定义

C、 C语言程序总是从main()函数开始执行

D、 C语言程序中的main()函数必须放在程序的开始部分

26. 以下函数

fff(float x)

{

printf(“%dn”,x*x);

}

的类型是( )。

A、 与参数x的类型相同 B、 void类型

C、 int类型 D、 无法确定

27. 以下对C语言函数的描述中,正确的是( )。

A、 C程序由一个或一个以上的函数组成

B、 C函数既可以嵌套定义又可以递归调用

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

D、 C程序中调用关系的所有函数必须放在同一个程序文件中

28. 以下叙述中不正确的是( )。

A、 在C语言中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参

B、 在C的函数中,最好使用全局变量

C、 在C语言中,形式参数只是局限于所在函数

D、 在C语言中,函数名的存储类别为外部

29. 在一个源文件中定义的外部变量的作用域为( )。

A、 本文件的全部范围

B、 本程序的全部范围

C、 本函数的全部范围

D、 定义该变量的位置开始至本文件结束

30. 有以下函数调用语句:

func((exp1,exp2),(exp3,exp4,exp5));

其中含有的实参个数和是( )。

A、 1 B、 2 C、 4 D、 5

31. C语言中形参的默认存储类别是( )。

A、 自动(auto) B、 静态(static)

C、 寄存器(register) D、 外部(extern)

32. 以下正确的函数形式是( )。

A、 double fun(int x,int y)

{ z=x+y; return z; }

B、 fun(int x,y)

{ int z; return z; }

C、 fun(x,y)

{ int x,y; double z; z=x+y; return z; }

D、 double fun(int x,int y)

{ double z; z=x+y; return z; }

33. 在一个源程序文件中定义的全局变量的有效范围为( )。

A、 一个C程序的所有源程序文件

B、 该源程序文件的全部范围

C、 从定义处开始到该源程序文件结束

D、 函数内全部范围

34. 下列函数中,能够从键盘上获得一个字符数据的函数是( )。

A、 puts( ) B、 putchar( ) C、 getchar( ) D、 gets( )

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

fun(int a,int b,int c)

{

c=a+b;

}

main()

{

int c;

fun(2,3,c);

printf(“%dn”,c);

}

A、 2 B、 3 C、 5 D、 无定值

36. 分析以下程序的运行结果( )。

func(int a,int b)

{

int temp=a;

a=b; b=temp;

}

main()

{

int x,y;

x=10; y=20;

func(x,y);

printf((“%d,%dn”,x,y);

}

A、 10,20 B、 10,10 C、 20,10 D、 20,20

37. 下面程序的输出是( )。

fun(int x)

{

static int a=3;

a+=x;

return(a);

}

main()

{

int k=2,m=1,n;

n=fun(k);

n=fun(m);

printf(“%d”,n);

}

A、 3 B、 4 C、

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

int func(int a,int b)

{

return(a+b);

}

main()

{

int x=2,y=5,z=8,r;

r=func(func(x,y),z);

printf(“%dn”,r);

}

A、 12 B、 13 C、

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

int a,b

void fun()

{

a=100; b=200;

}

main()

{

int a=5,b =7;

fun();

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

A、 100200 B、 57

C、 200100 D、 75

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

int x=3;

main()

{

int i;

for(i=1;i

incre();

6 D、

)。

14 D、

)。

)。

9

15

}

incre()

{

static int x=1;

x*=x+1;

printf(“%d”,x);

}

A、 33 B、 22

C、 26 D、 25

二、判断题

1、 ( ) 函数定义void max(int a,int b)表示该函数的返回值不确定。

2、 ( )在C语言中,函数体中变量的隐含存储类别是自动变量auto。

3、 ( )return语句作为函数的出口,在一个函数体内只能有一个。

4、 ( )在C程序中,函数不能嵌套定义,但可以嵌套调用。

5、 ( ) C语言的源程序中必须包含库函数。

6、 ( )在C程序中,函数调用不能出现在表达式语句中。

7、 ( )在C函数中,形参可以是变量、常量或表达式。

8、 ( )在主函数main( )中定义的变量都可以在其它被调函数中直接使用。

9、 ( )在C语言中,一个函数一般由两个部分组成,它们是函数说明和函数体。

10、 ( )C语言程序中的main( )函数必须放在程序的开始部分。

11、 ( )若定义的函数没有参数,则函数名后的圆括号可以省略。

12、 ( )函数的函数体可以是空语句。

13、 ( )函数的实参和形参可以是相同的名字。

14、 ( )函数调用中,形参与实参的类型和个数必须保持一致。

15、 ( )C语言中函数返回值的类型由return语句中的表达式的类型决定。

16、 ( )外部类型的变量只能定义一次,但可在不同地方声明多次。

17、 ( )外部类型的变量作用范围大,编程中应多用外部变量。

三、多选题

1. 以下叙述中正确的有( )。

一个C语言程序有且仅有一个main函数

C语言程序中,main函数是没有参数的

一个函数通过其他函数间接的调用了自身,这种情况也是一种递归调用

main函数是由系统调用的

若要通过函数参数带回多个返回值,则应使用按地址传送的参数结合方式

2. 下面叙述中,正确的有( )。

函数的定义不能嵌套,但函数调用可以嵌套

为了提高可读性,编写程序时应该适当使用注释

变量定义时若省去了存储类型,系统将默认其为静态型变量

函数中定义的局部变量的作用域在函数内部

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

3. 以下不正确的说法有( )。

定义函数时,形参的类型说明可以放在函数体内

return后边的值不能为表达式

函数返回值的类型可能会与函数的计算结果类型不一致

在不同的函数中可以使用相同名字的变量

如果形参与实参的类型顺序不一致,以实参顺序为准

4. 以下叙述中,正确的描述是有( )。

函数之内定义的变量称为内部变量,内部变量是全局变量

在一个函数中既可以使用本函数中的局部变量,又可以使用外部变量

外部变量定义和外部变量说明的含义不同

外部变量与局部变量的作用范围不同

在C的函数中,最好使用全局变量

5. 以下正确的说法有( )。

C语言程序的基本组成单位是函数

函数必须要有返回值

一个函数的类型为void,在定义时,可以省略void

函数声明是一条C语句

return语句只能返回一个值

6. 以下叙述中正确的有( )。

调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参

函数的实参可以是常量、变量和表达式

形式参数只是局限于所在函数

函数定义时的函数首部不是语句,后面不能跟分号

函数名的存储类别为外部

7. 以下对C语言函数的有关描述中,正确的有( )。

调用函数时,实参与形参应该数量相同,类型一致

函数可以嵌套定义

函数必须有返回值,否则不能正确使用

程序中有调用关系的所有函数必须放在同一个源程序文件中

C程序由一个或一个以上的函数组成

8. 以下对C语言函数的有关描述中,正确的有( )。

在C程序中,函数调用不能出现在表达式语句中

在C语言中,一个函数一般由两个部分组成,它们是函数说明和函数体

函数的实参和形参可以是相同的名字

在main()中定义的变量都可以在其它被调函数中直接使用

外部类型的变量只能定义一次,但可在不同地方声明多次

9. 一个数据类型为void的函数在被调用后,下列错误的描述有( )。

A、 函数没有返回值 B、 函数可以返回一个系统默认值

C、 函数返回值由用户临时决定 D、 函数可以返回一个不确定的值

10. 下列函数中,能够输出字符数据的函数有( )。

A、 puts( ) B、 printf( ) C、 scanf( ) D、 putchar( ) E、

put( )

第9章 编译预处理

一、 选择题

1、若有宏定义“#define PI =3.14159 ”,且在程序中有语句 s +PI; 其中宏名PI代替的

是:( )

A、PI的值 B、3.14159 C、=3.14159 D、宏定义错误,编译通不过

2、设有以下宏定义:#define N 3

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

执行语句z=2*(N+Y(5+1));后,z的值为:( )

A、出错 B、42 C、48 D、54

3、以下说法正确的是:( )

A、#define和printf都是C语句

B、#define 是C语句,而printf不是

C、printf是C语句,但#define不是

D、#define 和printf都不是C语句

4、编译预处理命令以___________结尾。

A、 ; B、 . C、 D、回车

5、用C语言编写的程序是一种_________能运行的程序。

A、只需要经过编译就 B、只需要经过连接就

C、需要经过编译和连接才 D、不需要作任何处理就

6、以下叙述中正确的是( )。

A、 用#include包含的头文件的后缀不可以是“.a”

B、 若一些源程序中包含某个头文件,当该头文件有错时,只需对该头文件进行修改,包

含此头文件的所有源程序不必重新进行编译

C、 宏命令行可以看做是一行C语句

D、 C编译中的预处理是在编译之前进行的

7、下面是对宏定义的描述,不正确的是( )。

A、 宏不存在类型问题,宏名无类型,它的参数也无类型

B、 宏替换不占用运行时间

C、 宏替换时先求出实参表达式的值,然后代入形参运算求值

D、 其实,宏替换只不过是字符替代而已

8、以下正确的描述为( )。

A、 每个C 语言程序必须在开头使用预处理命令#include

B、 预处理命令必须位于C源程序的首部

C、 在C语言中预处理命令都以“#”开头

D、 C语言的预处理命令只能实现宏定义和条件编译的功能

9、下列选项中不会引起二义性的宏定义是( )。

A、 #define POWER(x) x*x B、 #define POWER(x) (x)*(x)

C、 #define POWER(x) (x*x) D、 #define POWER(x) ((x)*(x))

10、以下程序的输出结果是( C )。

#define f(x) x*x

#include

main()

{

int a=6,b=2,c;

c=f(a)/f(b);

printf(“%dn”,c);

}

A、 9 B、 6 C、 36

11、以下程序运行后,输出结果是(

#define PT 5.5

#defme S(x) PT*x*x

#include

main()

{

int a=1,b=2;

printf(“%4.1fn”,S(a+b));

}

A、 49.5 B、 9.5 C、22.0

12、下列程序执行后的输出结果是(

#define MA(x) x*(x-1)

#include

main()

{

int a=1,b=2;

printf(“%dn”,MA(1+a+b));

}

A、 6 B、 8 C、 10

13、以下程序的输出结果为( D

#include

#define SQR(x) x*x

main()

{

int a,k=3;

a=++SQR(k+1);

printf(“%dn”,a);

}

D、18

)。

D、45.0

B )。

D、12

A、6 B、l0 C、 8 D、 9

14、对下面程序段,正确的判断是( )。

#define A 3

#define B(a) ((A+1)*a)

...

x=3*(A+B(7));

A、 程序错误,不许嵌套宏定义 B、 x=93

C、 x=21 D、 程序错误,宏定义不许有参数.

15、以下程序的输出结果为( )。

#include

#define F(y) 3.84+y

#define PRINT(a) PR(a);putchar(‘n’)

main()

{

int x=2;

PRINT(F(3)*x);

}

A、 8 B、 9 C、 10 D、 11

二、判断题

1、 ( )预处理命令行必须以#开头,且最后要用分号结尾。

2、 ( )宏命令的处理占用编译时间,而不占用运行时间。

三、多选题

1、 下面是对宏定义的描述,正确的有( )。

A、 宏不存在类型问题,宏名无类型,它的参数也无类型

B、 宏替换不占用运行时间

C、 宏替换时先求出实参表达式的值,然后代入形参运算求值

D、 预处理命令行必须以#开头,且最后要用分号结尾

E、 宏命令的处理占用编译时间,而不占用运行时间

2、 以下叙述中不正确的是( )。

A、 用#include包含的头文件的后缀不可以是“.a”

B、 宏不存在类型问题,宏名无类型,它的参数也无类型

C、 宏命令行可以看做是一行C语句

D、 C编译中的预处理是在编译之前进行的

E、 在C语言中预处理命令都以“#”开头

第10章 指 针

一、 选择题

1、 有以下程序

void fun(char *a, char *b)

{ a=b; (*a)++; }

main()

{ char c1='A',c2='a',*p1,*p2;

p1=&c1; p2=&c2; fun(p1,p2);

printf("%c%cn",c1,c2);

}

程序运行后的输出结果是:( A )

A)Ab B)aa C)Aa D)Bb

2、 下列选项中正确的语句组是:( )

A)char s[8]; s={"Beijing"}; B)char *s; s={"Beijing"};

C)char s[8]; s="Beijing"; D)char *s; s="Beijing";

3、 已定义以下函数

fun(int *p)

{ return *p; }

该函数的返回值是:( )

A)不确定的值 B)形参p中存放的值

C)形参p所指存储单元中的值 D)形参p的地址值

4、 若有定义:int *p[3];,则以下叙述中正确的是:( )

A)定义了一个类型为int的指针变量p,该变量具有三个指针

B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针

C)定义了一个名为*p的整型数组,该数组含有三个int类型元素

D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素

5、 已定义以下函数

fun(char *p2, char *p1)

{ while((*p2=*p1)!='0'){ p1++;p2++; } }

函数的功能是:( )

A)将p1所指字符串复制到p2所指内存空间

B)将p1所指字符串的地址赋给指针p2

C)对p1和p2两个指针所指字符串进行比较

D)检查p1和p2两个指针所指字符串中是否有'0'

6、 有以下程序:

main()

{ int p[7]={11,13,14,15,16,17,18},i=0,k=0;

while(i<7&&*(p+i)%2) {k=k+*(p+i); i++;}

printf("%dn",k);

}

执行后输出的结果是:( )

A) 58 B) 56 C) 45 D) 24

7、 若有如下定义char a[10],*p=a,则对a数组中元素的不正确的引用是:( )

A)*&a[5] B)a+2 C)*(p+5) D)*(a+5)

8、 有以下程序

int *f(int *x,int *y)

{ if(*x<*y)

return x;

else

return y;

}

main()

{ int a=7,b=8,*p,*q,*r;

p=&a; q=&b;

r=f(p,q);

printf("%d,%d,%dn",*p,*q,*r);

}

执行后输出结果是:( B )

A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8

9、 有以下程序

main()

{ char *s[]={"one","two","three"},*p;

p=s[1];

printf("%c,%sn",*(p+1),s[0]);

}

执行后输出结果是:( C )

A) n,two B) t,one C) w,one D) o,two

10、 有以下程序

main()

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

s=x+3;

printf("%dn",s[2]);

}

执行后输出结果是:( B )

A) 随机值 B) 0 C) 5 D) 6

11、 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。

#define N 10

void arrin(int x[N])

{ int i=0;

while(i

scanf("%d",_________);

}

在下划线处应填入的是:( )

A) x+i B) &x[i+1] C) x+(i++) D) &x[++i]

12、 有以下程序

main()

{ char *s="n123";

printf("%d,%dn",strlen(s),sizeof(s));

}

执行后输出结果是:( )

A) 5,4 B) 5,6 C) 6,7 D) 7,8

13、 阅读以下函数

fun(char *sl,char *s2)

{ int i=0;

while( sl[i]==s2[i] && s2[i]!='0') i++;

return( sl[i]=='0' && s2[i]=='0' );

}

此函数的功能是:( )

A) 将s2所指字符串赋给s1

B) 比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0

C) 比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0

D) 比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0

14、 有以下程序

main()

{ char str[ ]="xyz",*ps=str;

while(*ps) ps++;

for(ps--;ps-str>=0;ps--) puts(ps);}

执行后输出结果是:( C )

A) yz B) z C) z D) x

xyz yz yz xy

xyz xyz

15、 有以下程序

void fun(int *a,int i,int j)

{ int t;

if (i

{ t=a[i];a[i]=a[j];a[j]=t;

fun(a,++i,--j);

}

main()

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

fun(a,0,5);

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

rintf("%d",a[i]);

}

执行后输出结果是:( )

A) 6 5 4 3 2 1 B) 4 3 2 1 5 6

C) 4 5 6 1 2 3 D) 1 2 3 4 5 6

16、 下列程序的输出结果是:( C )

main()

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

printf("%d",*--p);

}

A) 非法 B)a[4]的地址 C)5 D

17、 下列程序的运行结果是:( B )

void fun(int *a, int *b)

{ int *k;

k=a; a=b; b=k;

}

main()

{ int a=3, b=6, *x=&a, *y=&b;

fun(x,y);

printf("%d %d", a, b);

}

A) 6 3 B) 3 6 C) 0 0 D)

18、 下面程序的输出结果是:( C )

main()

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

p=a;

printf("%dn",*p+9);

}

A) 0 B) 1 C) 10 D) 9

19、 以下程序的输出结果是:( C )

main()

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

for(i=0;i<3;i++) printf("%d,",x[i][2-i]);

}

A) 1,5,9 B) 1,4,7 C) 3,5,7 D

20、 以下程序的输出结果是:( A )

)3,6,9

)3

编译出错

main()

{ int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0;

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

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

s+=a[i][j];

printf("%dn",s);

}

A) 18 B) 19 C) 20 D)21

21、 若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是:( )

A) i = *p; B) *p = *&j; C) i = &j; D) i = **p;

22、 以下定义语句中,错误的是:( )

A) int a[]={1,2}; B) char *a[3];

C) char s[10]="test"; D) int n=5,a[n];

23、 以下程序的输出结果是:( B )

char cchar(char ch)

{

if(ch>='A'&&ch<='Z') ch=ch-'A'+'a';

return ch;

}

main()

{ char s[]="ABC+abc=defDEF",*p=s;

while(*p)

{ *p=cchar(*p);

p++;

}

printf("%sn",s);

}

A) abc+ABC=DEFdef B) abc+abc=defdef

C) abcaABCDEFdef D) abcabcdefdef

24、 以下程序段的输出结果是:( )

char s[]="141141abct";

printf ("%dn",strlen(s));

A) 9 B) 12 C) 13 D) 14

25、 以下程序调用findmax函数返回数组中的最大值。

findmax(int *a,int n)

{ int *p,*s;

for(p=a,s=a; p-a

if ( _______ ) s=p;

return(*s);

}

main()

{ int x[5]={12,21,13,6,18};

printf("%dn",findmax(x,5));

}

在下划线处应填入的是:( )

A) p>s B) *p>*s C) a[p]>a[s] D) p-a>p-s

26、 以下程序的输出结果是:( B )

main()

{ char cf[3][5]={"AAAA","BBB","CC"};

printf(""%s"n",ch[1]);

}

A) "AAAA" B) "BBB" C) "BBBCC" D) "CC"

27、 以下不能正确进行字符串赋初值的语句是:( )

A) char str[5]="good!"; B) char str[]="good!";

C) char *str="good!"; D) char str[5]={'g','o','o','d'};

28、 以下程序的输出结果是:( A )

f(int *b , int m, int n)

{ int i,s=0;

for(i=m;i

return s;

}

main()

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

x=f(a,3,7);

printf("%dn",x);

}

A) 10 B)18 C) 8 D) 15

29、 以下程序的输出结果是:( D )

#include

#include

main()

{ char b1[8]="abcdefg",b2[8],*pb=b1+3;

while (--pb>=b1) strcpy(b2,pb);

printf("%dn",strlen(b2));

}

A) 8 B) 3 C) 1 D) 7

30、 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是:( )

A) p=q; B) *p=*q; C) n=*q; D) p=n;

答案:D

31、 有以下程序

void fun(char *c,intd)

{ *c=*c+1;d=d+1;

printf("%c,%c,",*c,d);

}

main()

{ char a='A',b='a';

fun(&b,a); printf("%c,%cn",a,b);

}

程序运行后的输出结果是:( D )

A) B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b

32、 以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序 ,

void sort(int a[],int n)

{ int i,j,t;

for(i=0;i

for(j=i+1;j

if(a[i]

{ t=a[i];a[i]=a[j];a[j]=t; }

}

main()

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

sort(&aa[3],5);

for(i=0;i<10;i++) printf("%d,",aa[i]);

printf("n");

}

程序运行后的输出结果是:( C )

A) 1,2,3,4,5,6,7,8,9,10,

B) 10,9,8,7,6,5,4,3,2,1,

C) 1,2,3,8,7,6,5,4,9,10,

D) 1,2,10,9,8,7,6,5,4,3,

33、 有以下程序

main()

{ char a[]={'a','b','c','d','e','f','g','h','0'}; int i,j;

i=sizeof(a); j=strlen(a);

printf("%d,%dn",i,j);

}

程序运行后的输出结果是:( D )

A) 9,9 B) 8,9 C) 1,8 D) 9,8

34、 以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。

void reverse(int a[],int n)

{ int i,t;

for(i=0;i

{ t=a[i];a[i]=a[n-1-i];a[n-1-i]=t; }

}

main()

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

reverse(b,8);

for(i=6;i<10;i++) s+=b[i];

printf("%dn",s);

}

程序运行后的输出结果是:( A )

A) 22 B) 10 C) 34 D) 30

35、 有以下程序

main()

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

int i,s=0;

for(i=0;i<4;i++) s+=aa[i][1];

printf("%dn",s);

}

程序运行后的输出结果是:( B )

A) 11 B) 19 C) 13 D) 20

36、 有以下程序

#include

main()

{ char *p="abcde0fghjik0";

printf("%dn",strlen(p));

}

程序运行后的输出结果是:( D )

A) 12 B) 15 C) 6 D) 5

37、 有以下程序

void ss(char *s,char t)

{ while(*s)

{ if(*s==t) *s=t-'a'+'A';

s++;

}

}

main()

{ char str1[100]="abcddfefdbd",c='d';

ss(str1, C); printf("%sn",str1);

}

程序运行后的输出结果是:(B )

A) ABCDDEFEDBD

B) abcDDfefDbD

C) abcAAfefAbA

D) Abcddfefdbd

38. 变量的指针,其含义是指该变量的______.

a)值 b)地址

c)名 d)一个标志

39.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_______.

a)a,point,*&a b)&*a,&a,*point

c)*&point,*point,&a d)&a,&*point ,point

40.若有说明;int *p,m=5,n;以下正确的程序段的是____.

a)p=&n; b)p=&n;

scanf("%d",&p); scanf("%d",*p);

c)scanf("%d",&n); d)p=&n;

*p=n; *p=m;

41.下面程序段的运行结果是_______.

char *s="abcde";

s+=2;printf("%d",s);

a)cde b)字符'c' c)字符'c'的地址 d)无确定的输出结果

42.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确

执行的赋值语句是______.

a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);

43.以下正确的程序段是______.

a)char str[20]; b)char *p;

scanf("%s", str); scanf("%s",p);

c)char str[20]; d)char str[20],*p=str;

scanf("%s",&str[2]); scanf("%s",p[2]);

44.若有说明语句

char a[]="It is mine";

char *p="It is mine";

则以下不正确的叙述是_____.

a)a+1表示的是字符t的地址

b)p指向另外的字符串时,字符串的长度不受限制

c)p变量中存放的地址值可以改变

d)a中只能存放10个字符

45.下面程序的运行结果是____.

#include

#include

main()

{

char *s1="AbDeG";

char *s2="AbdEg";

s1+=2;s2+=2;

printf("%dn",strcmp(s1,s2));

}

a)正数 b)负数 c)零 d)不确定的值

46.下面程序的运行结果是_C__.

#include

#include

fun(char *w,int n)

{char t,*s1,*s2;

s1=w;s2=w+n-1;

while(s1

}

main()

{char *p;

p="1234567";

fun(p,strlen(p));

puts(p);

}

a)7654321 b)1714171 c)1711717 d)7177171

47.若有以下定义,则对a数组元素的正确引用是______.

int a[5],*p=a;

a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)

48.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为_____

a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j

49.若有以下定义,则p+5表示___.

int a[10],*p=a;

a)元素a[5]的地址 b)元素a[5]的值

c)元素a[6]的地址 d)元素a[6]的值

50. 以下程序的输出结果是__A______.

#include

void fun(int x);

int main()

{

int x = 3;

fun(x);

printf(“x = %dn”, x);

}

void fun(int x)

{

x = 5;

}

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

51. 以下程序的输出结果是__B______.

#include

void fun(int *p);

int main()

{

int x = 3;

fun(&x);

printf(“x = %dn”, x);

}

void fun(int *p)

{

*p = 5;

}

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

52. 以下count函数的功能是统计substr在母串str中出现的次数。

int count(char *str,char *substr)

{ int i,j,k,num=0;

for(i=0; ① ;i++)

{for( ② ,k=0;substr[k]==str[j];k++,j++)

if(substr[ ③ ]==’0’)

{num++;break;}

}

return num;

}

① A) str[i]==substr[i] B) str[i]!=‘0’

C) str[i]==‘0’ D) str[i]>substr[i]

② A) j=i+1 B) j=i C) j=i+10 D) j=1

③ A) k B) k++ C) k+1 D) ++k

53. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行

符)。

void Delblank(char *s)

{ int i,t;

char c[80];

for(i=0,t=0; ① ;i++)

if(!isspace( ② ))c[t++]=s[i];

c[t]=‘0’;

strcpy(s,c);

}

① A) s[i] B) !s[i] C) s[i]=‘0’ D) s[i]==‘0’

② A) s+i B) *c[i] C) *(s+i)=‘0’ D) *(s+i)

54. 以下conj函数的功能是将两个字符串s和t连接起来。

char *conj(char *s,char *t)

{ char *p=s;

while(*s) ① ;

while(*t)

{*s= ② ;s++;t++;}

*s=‘0’;

③ ;

}

① A) s-- B) s++ C) s D) *s

② A) *t B) t C) t-- D) *t++

③ A) return s B) return t C) return p D) return p-t

55. 下列程序的输出结果是 。

#include

main()

{int **k,*a,b=100;a=&b; k=&a;printf(“%dn”,**k);}

A) 运行出错 B) 100 C) a的地址 D) b的地址

56. 下列程序的输出结果是 。

SS

A)出错 B) 18, 5 C) 5, 9 D) 5, 18

57. 若定义了以下函数:

void f(……)

{……

p=(double *)malloc(10*sizeof(double));

……

}

p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正

确定义应当是 。

A) double *p B) float **p C) double **p D) float *p

二、判断题

1.(F)指针变量里存放的是地址值,因此指针变量只能是int型的。

2.(T)在C语言中,所谓指针型数据,即指该数据是一个地址。

3.(T)有一个一维数组a[10],那么a与&a[0]等价。

4.(F)如有说明:int b[10], *p = b;表明在使用时b与p就完全等价了。

5.(T)数组中的每一个元素相当于一个变量。若要让一个指针变量指向它,必须用“&数组元

素”的方法向该指针变量赋值。

6.(F)有如下程序段:int i, j = 2, k, *p = &i;k = *p + j;这里出现的两个“*”号,含

义是一样的。

7.(F)在C语言中,每一个变量在内存里占用的单元数都是相同的。

8.(T)通过指针变量,就能间接地得到它所指向的变量的内容。

9.(T)说明语句:int *p, p1, p2;只说明了一个能指向int型变量的指针。

10.(F)有说明:int *p;且p指向地址为1500的内存单元,那么经过操作“p++;”后,p将

指向1501的内存单元。

11.(F)数组元素可以是不同数据类型的。

12.(F)如果初值表中的初值个数少于数组长度,那么C语言编译程序会自动把剩余的元素初

始化为初值表中的最后一个值。

13.主调函数把单个数组元素传递给修改该元素值的被调函数时,主调函数就能够得到修改

后的值。(F)

14.(T)设p是指向数组a的指针变量,则a[i]和p[i]等价。

15.(T)一个变量的指针就是该变量的地址。

16.(F)若定义int **p;则程序中调用*p时,它代表的是p的地址。

17.(F)若指针占用的内存大小为2Byte,则指向它的二重指针占用内存大小为4Byte .

18.(F)带参main函数中的形参的值可以在程序中得到。

19.(F)main(argc,argv)中的参数argv的定义格式为char argv[]。

20.(F)int **p;表示定义一个*p指针变量。

21.(F)在C语言中允许将一个整数赋给指针变量。

22.(F)一个指针变量加1表示将该指针变量的原值(地址)加1。

23.(F)int *p();表示定义一个指向函数的指针变量p。

24.(F)当函数实参中使用指针变量时,形参变量也必须使用指针变量。

25.(F)*p++等价于(*p)++。

26.(F)使用指针技术,可以通过修改形参变量的值达到修改实参变量的值的目的。。

27.(F)因为用字符数组和字符指针变量都能实现字符串的存储和运算,因此它们二者是完全

等价的。

28.(T)对指向函数的指针变量,像p+n、p++、p- -等运算是无意义的。

29.(T)main(int argc,char *argv[])中的参数argc表示命令行只参数的个数。

30.(T)在int a[3][4];中a+i和*(a+i)的含义是不一样的。

31.(F)char *p[10];定义了一个指向字符数组的指针变量。

32.(F)将指向函数的指针作为函数的参数,虽然可以提高效率,但是容易造成混乱,所以不

符合结构化程序设计的原则。

33.(F)数组名实际上是此数组的首地址,所以数组名相当于一个指针变量。

34.(F)若定义数组a[2][3],则a+1和*(a+1)完全等价。

35.(T)函数的形参为一个数组,则调用此函数时将数组名作为对应的实参。

《C语言程序设计》( 卷)考核班级

学生数 印数 考核方式 闭卷 考核时间 120 分钟

(本试卷包括第一卷和第二卷,答卷时间总共120分钟)

第一卷

第一部分:基础知识(20项,共40分)

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

A.主程序 B.子程序 C.函数 D.过程

2.转换说明符%x的输出形式是( )。

A.十进制 B.八进制 C.十六进制 D.二进制

3.若a、b均为int型变量,且a=100,则关于循环语句for(b=100;a!=b;++a,++b)

printf ( “ ------------“) ;的正确说法是( ) 。

A.循环体只执行一次 B.死循环

C.循环体一次也不执行 D.输出-----------

4.若x、y、z均为int 型变量,则执行下列语句后的z值为 ( )。

x=1; y=2; z=3; z=(x>y)?z :y ; z = (z

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

5.下面标识符中,合法的用户标识符为( )。

A.P#Ad B.12a C.char D._int

6. ‘A’ + 3 的结果是( )。

A.’A’ B.’D’的ASCⅡ码 C.65 D.3

7.语句char str[20];说明str是一个字符串,最多能表示 ( ) 。

A.20个字符 B.19个字符 C.18个字符 D.21个字符

8.将int 型变量n转换成float型变量的方法是 ( )。

A.float n B.(float)n C.float(n) D.21个字符

9.以下不正确的描述是 ( )。

A. 使用while和do-while循环时,循环变量初始化的操作应在循环语句之前完成

B. while循环是先判断表达式后执行循环体语句

C. do-while和for循环均是先执行循环体语句,后判断表达式

D. for、while、do-while循环中的循环体均可以由空语句构成

10.在循环中使用break 语句的功能是( )。

A. 使程序的执行跳出break所在的那一重循环

B. 使程序执行结束

C. 跳出包含此break语句的所有循环

D. 终止本次循环,继续下次循环

11.下面是一个初始化指针的语句:int *px = &a;其中指针变量的名字应该是( )。

A.*pz B.a C.px D.&a

12.若指针 px为空指针,则 ( )。

A.px指向不定 B.px的值为零

C.px的目标为零 D.px的地址为零

13.对于语句int *px[10],以下说法正确的是( ) 。

A. px是一个指针,指向一个数组,数组的元素是整数型。

B. px是一个数组,其数组的每一个元素是指向整数的指针。

C. A和B均错,但它是C语言的正确语句。

D. C语言不允许这样的语句。

14.具有相同基类型的指针变量P和数组变量Y,下列写法中不合法的是 ( ) 。

A.P = Y B.*P = Y[i]

C.P + &Y[i] D.P = &Y

15.已知static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p,则表达式 *(p[0]+1)+**(q+2)的值

是( )。

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

16.已知for(;n>=1;n--),下列语句实现将S2所指字符数组中前n个字符复制到S1所指字符数

组中,其中代码不正确的是( )。

A.*S1++=*S2++ B.S1[n-1]=S2[n-1]

C.*(S1+n-1)=*(S2+n-1) D.*(++S1)=*(++S2)

17.调用函数的实参与被调用函数的形参应该有如下关系( ) 。

A.只要求实参和形参个数相等 B.只要求形参和实参顺序相同

C.只要求实参和形参数据类型相同 D.上述三点均需具备

18.联合体成员的数据类型 ( )。

A.相同 B.可以不同也可以相同

C.长度一样 D.是结构体变量

19.由系统分配和控制的标准输出文件为( ) 。

A.键盘 B.磁盘 C.打印机 D.显示器

20.C语言标准库函数fread(fd,buffer,n)的功能是( )。

A.从文件fd中读取长度不超过n个字节的数据送入buffer指向的内存区域

B.从文件fd中读取长度不超过n-1个字节的数据送入buffer指向的内存区域

C.从文件fd中读取长度不超过n个字符送入buffer指向的内存区域

D.从文件fd中读取长度不超过n-1个字符送入buffer指向的内存区域

第二部分:简单程序(12项,共30分)

21.下列程序

main()

{ int x,y,z;

x=y=2;z=3;

y=z++-1;

printf(“%dt%dt”,x,y);

y=++x-1;

printf(“%d t%dn”,x,y);

y=z---1;

printf(“%dt%dt”,z,y);

y=--z-1;

printf(“%dt%dn”,z,y);

}

运行后输出的数据为¬¬¬_______。

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

2 4 1 3 2 4 2 2 3 3 2 1 1 3 1 2

22.下列程序

main()

{ int i,j;char *a,c;

a=”computer”;

printf(“%s”,a);

for(i=0,j=7;i

{ c=a[i];

*(a+i)=*(a+j);

a[j]=c;

}

printf(“->%sn”,a);

c=a[j-1,i=2+j];

printf(“a[%d]=%cn”,i,c);

}

运行后输出的数据为___ .

A. computer->computer B. computer->retupmoc

a[3]=u a[5]=m

C. computer->retupmoc D. computer->retupmoc

a[4]=p a[2]=t

23.下列程序

int sum(int n)

{ int p=1,s=0,i;

for(i=1;i<=n;i++) s+=(p*=i);

return s;

}

main()

{ printf(“sum(5)=%dn”,sum(5));

}

运行后输出的数据为_ ___

(5)=151 (5)=152 (5)=153 Dsum(5)=155

24.下列程序

main()

{ static int a[]={5,6,7,3,2,9};

int s1,s2,i,*ptr;

s1=s2=0;

ptr=&a[0];

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

{ s1+=*(ptr+i);

s2+=*(ptr+i+1);

}

printf(“s1=%d,s2=%dn”,s1,s2);

}

运行后输出的数据为_____

A.s1=18,s2=14 B.s1=14,s2=32 C.s1=14,s2=18 D.s1=15,s2=19

25.下列程序

int c=1;

main()

{static int a=5;int b=6;

printf(“a=%d b=%d c=%dn”,a,b,c);

func();

printf(“a=%d,b=%d,c=%dn”,a,b,c);

func();

}

func()

{ static int a=4;int b=10;

a+=2;

c+=10;

b+=c;

printf((“a=%d,b=%d,c=%dn”,a,b,c);

}

运行后输出的数据为_ ___.

A. a=5 b=6 c=1 B. a=5 b=6 c=1

a=6 b=21 c=11 a=7 b=17 c=11

a=5 b=6 c=11 a=5 b=6 c=11

a=8 b=31 c=21 a=9 b=17 c=21

C. a=5 b=6 c=1 D. a=5 b=6 c=1

a=6 b=21 c=11 a=7 b=17 c=11

a=6 b=21 c=11 a=7 b=17 c=11

a=8 b=31 c=21 a=9 b=38 c=21

26.已知

struct student

{char ﹡name;

int student_n;

char grade;

};

struct student temp,*p=&temp;

=”chou”;

则下面不正确的是_______。

表达式 值

A.p→name chou

B.(*p)→name+2 h

C.*p→name+2 e

D.*(p→name+2) o

27.下列程序

#define MAX 10

main()

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

sum=1;

for(i=0;i

sum-=a[i];

printf(“SUM=%d”,sum);

}

程序运行结果是:

=55 =-54 =-55 =54

28.下列程序

void inv(int*x,int n)

{int *p,t,*i,*j,m=(n-1)/2;

i=x;

j=x+n-1;

p=x+m;

for(;i

{ t=*i;

*i=*j;

*j=t;

}

return;

}

main( )

{ static int i,a[10]={3,7,9,11,0,6,7,5,4,2};

inv(a,10);

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

printf(“%d,”,a[i]);

}

程序运行结果:

A.0,2,3,4,5,6,7,7,9,11 B.11,9,7,7,6,5,4,3,2,0

C.3,7,9,11,0,6,7,5,4,2 D.2,4,5,7,6,0,11,9,7,3

29.下列程序

main()

{ int a[10],b[10],*pa,*pb,i;

pa=a;pb=b;

for(i=0;i<3;i++,pa++,pb++)

{*pa=i;*pb=2*i;

printf(“%dt%dn”,*pa,*pb);

}

printf(“n”);

pa=&a[0];

pb=&b[0];

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

{*pa=*pa+i;

*pb=*pb*i;

printf(“%dt%dn”,*pa++,*pb++);

}

}

运行后输出的数据为______。

A. 0 0 B.0 0 C. 0 0 D. 0 0

1 2 1 2 1 2 2 2

2 4 2 4 2 4 2 4

0 0 0 0 0 0 0 0

2 2 2 2 1 2 1 2

4 8 2 4 2 4 4 8

30.下列程序

copy_string(from,to)

char *from,*to;

{ while(*from) *to++=*from++;

*to=’0’;

}

main()

{ static char s1[ ]=”c_program.”;

static char s2[80];

copy_string(s1,s2);

printf(“%sn”,s2);

copy_string(“123”,s2);

printf(“%sn”,s2);

}

运行后输出的数据为( )。

A. c_program 123 B.123 C. c_program123 D. c_program

123

31.下列程序:

#include

main()

{ char a[40],b[40];

int i,j;

printf(“Enter the string:”);

scanf(“%s”,a);

i=j=0;

while(a[i]!=’0’)

{ if(!(a[i]>=’0’&&a[i]<=’9’))

{ b[j]=a[i]; j++;

}

++i;

}

b[j]=’0’;

printf(“%s”,b);

}

运行后输出的结果是( ) 。

A. 把键盘输入的字符串显示在屏幕上

B. 把键盘输入的字符串中的数字字符删掉,然后显示该字符串

C. 把键盘输入的字符串中的字符0和9删掉,然后显示该字符串

D. 只保留由键盘输入的字符串中的字母数字,然后显示该字符串

32.下列程序

#include

main()

{ char a[80];

int i,j;

printf(“Enter the string:”);

scanf(“%s”,a);

i=0;

while(a[i]!=’0’)

{ if(a[i]>=’A’&&a[i]<=’Z’)

a[i]=a[i]-‘A’+’a’;

}

printf(“%s”,a);

}

运行后输出的结果是( )。

A. 把键盘输入的字符串中的大写字母变换成小写字母,然后显示变换后的字符串。

B. 把键盘输入的字符串中的数字字符删除掉,然后显示该字符串。

C. 把键盘输入的字符串中的小写字母变换成大写字母,然后显示变换后的字符串。

D. 把键盘输入的字符串原封不动地显示在屏幕上。

第二卷

说明:(1)第二卷含二大题,均属填空题,每题各有5个空栏,在阅读和理解原题程序的基

础上,在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。

(2)每空栏填对得3分,两大题共10个空栏,全填对得30分。

试题一

一个整数称为完全平方数,是指它的值是另一个整数的平方。如81是个完全平方数,因为它

是9的平方。下列程序是在三位的正整数中寻找符合下列条件的整数:它既是完全平方数,

且三位数字中又有两位数字相同:例如144(12*12)、676(26*26)等,从程序中找出并输

出所有满足上述条件的三位数。

程序如下:

main()

{ int n,k,a,b,c;

for(k=1; ;k++)

{______①______

if(n<100) _____②_____

if(n<999) _____③_____

a=n/100;

b=_____④_____

c=n%10,

if(flag(a,b,c))

printf(“n=%d=%d*%dn”,n,k,k);

}

}

flag_____⑤_____

{ return(!(x-y)*(x-z)*(y-z));

}

试题二

以下程序所列函数replace(char *s1,char *s2,char str1,char *str2)的功能是将已知字符串s1中的

所有与字符串str1相同的子串替换成字符串str2,并将替换后所生成的新的字符串存于字符

数组s2中。

说明:生成字符串s2的过程是一个循环,顺序访问字符串s1的每个字符;当从某个字符开

始不能构成与str1相同的子字符时,就把该字符拷贝到数组s2,当从某个字符开始能构成一

个与str1相同的子字符串时,就将字符串str2的各字符拷贝到字符数组s2,并继续访问字符

串s1中那个子串之后的字符,直至字符串s1被访问完毕,字符复制即告结束。

下列程序运行的结果是输出:

ABCXYZdefg abABCXYZd abab

程序如下:

replace(char *s1,char *s2,char *str1,char *str2)

{ char *t0,*t1,*t2;

while( ⑥ )

{ for(t0=s1,t1=str1;*t1!=’0’&& ⑦ ;t0++,t1++);

if(*t1!=’0’)

*s2++= ⑧ ;

else { for(t1=str2;*t1!=’0’;)

*s2++= ⑨ ;

⑩ ;}

}

*s2=’0’;

}

main()

{ char s1[]=”abcdefg ababcd abab.”;

char s2[80];

replace(s1,s2,”abc”,”ABCXYZ”);

printf(“%sn”,s2);

}

参考答案

第一卷

一.基础知识(20项,共40分)

1.C 2.C 3.C 4.A 5.D 6.B 7.B 8.B 9.C 10.A 11.C 12.B 13.B 14.D 15.A 16.D 17.D 18.B 19.D

20.A

二.简单程序

21.C 22.B 23.C 24.C 25.A 26.B 27.B 28.D 29.A 30.D 31.B 32.A

第二卷 试题一:①n=k*k ②continue③break④n%100/10或(n-100*a)/10或n/10-(n/100)*10⑤int

x,int y,int z

试题二:

⑥*s1或s1!=’0’ ⑦*t0==*t1或*t1==*t0 ⑧*s1++

⑨*t1++ ⑩s1=t0或s1=s1+strlen(str1)

《C语言程序设计》( 卷)考核班级

学生数 印数 考核方式 闭卷 考核时间 120 分钟

(本试卷包括第一卷和第二卷,答卷时间总共120分钟)

第一卷

说明:(1)第一卷全部为选择题,每题可供选择的答案中,只有一个正确答案。

(2)答本卷的题目时,要在标准答题纸上编号对应的栏口中,用铅笔将正确答案涂黑。

在试题上直接勾划不得分。

(3)本卷共分70分,其中第1—26题每题2分,第27—32题每题3分。

第一部分:基础知识(20题,共40分)

1、一个C语言的源程序中,( ) 。

(A)必须有一个主函数 (B)可以有多个主函数

(C)必须有主函数和其他函数 (D)可以没有主函数

2、下列数据中,为字符串常量的是( ) 。

(A)‘A’ (B)“house” (C)How do you do. (D)’$abc’

3、若有定义:int a=8,b=5,c;,执行语句c=a/b十0.4;后,c的值为( ) 。

(A)1.4 (B)1 (C)2.0 (D)2

4、设有int x=11;则表达式(x++*l/3)的值为( )。

(A)3 (B)4 (C)11 (D)12

5、执行x=5>1+2&&2||2*4<4-!0后,x的值为( )。

(A)-l (B)O (C)1 (D)5

6、以下变量x、y、z均为double类型且已正确赋值,不能正确表示数学式子:(x)/(y×z)的c

语言表达式是( )。

(A)x/y*z (B)x*(1/(y*z)) (C) x/y*1/z (D)x/y/z

7、设有以下说明语句

struct ex

{int x;float y; char z;}example;

则下面的叙述不正确的是( )。

(A)struct是结构体类型的关键字 (B)example是结构体类型名

(C)x,y,z都是结构体成员名 (D)struct ex是结构体类型

8、假定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

9、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( ) 。

(A) 地址传递 (B) 单向值传递

(C) 由实参传给形参,再由形参传回实参 (D) 传递方式由用户指定

10、以下定义语句中,错误的是 ( )。

(A)int a[]={1,2}; (B) char *a[3];

(C)char s[10]="text"; (D) int n=5,a[n];

11、下列程厅执行后的输出结果是( ) 。

main()

{ char arr[2][4]; strcpy(arr,"you");strcpy(arr[1],"me");

arr[0][3]='&';

printf("%sn",arr);

}

(A)you&me (B)you (C) me (D)err

12、标有/* */的语句的执行次数是( )。

int y,i;

for(i=O;i<20;i++)

{ if(i%2==0)

continue;

y+=i; /* */

}

(A) 20 (B) 19 (C) 10 (D) 9

13、若用数组名作为函数调用的实参,传递给形参的是( )。

(A) 数组的首地址 (B) 数组第一个元素的值

(C) 数组中全部元素的值 (D) 数组元素的个数

14、下列语句执行后的结果是( )。

y=5;p=&y;x=*p++;

(A) x=5,y=5 (B) x=5,y=6 (C) x=6,y=5 (D) x=6,y=6

15、执行下面的语句后,表达式*(p[0]+1)+**(q+2)的值为 ( )。

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

(A) 8 (B) 7 (C) 6 (D) 5

16、经过下面的语句后

int i,a[10],*p;

定义后,下列语句中合法的是 ( )。

(A) p=100: (B) p=a[5]; (C) p=a+2; (D) p=&(i+2);

17、若有以下说明和语句,则对pup中sex域的正确引用方式是( )。

struct pupil

{char name[20];

int sex;

}pup,*p;

p=&pup;

(A) (B)p-> (C)(*p). (D)(*p).sex

18、若已定义了如下的共用体类型变量x,则x所占用的内存字节数为( ) 。

union data

{ int i;

char ch;

double f;

}x;

(A) 7 (B) 11 (C)8 (D) 10

19、若有下面的说明和定义:

struct test

{ int m1;char m2;float m3;

union uu{ char u1[5];int u2[2];}ua;

} myaa;

则sizeof(struct test)的值是 ( ) 。

(A) 12 (B) 16 (C) 14 (D)9

20、若要打开:A盘上user子目录下名为的文本文件进行读、写操作,下面符合此要

求的函数调用是( ) 。

(A)fopen("A:","r") (B) fopen("A:","r+")

(C)fopen("A:","rb") (D) fopen("A:","w")

第二部分:简单程序(12题,共30分)

21、以下程序的运行情况是( ) 。

main()

{int i=1,sum=0;

while(i<10)

sum=sum+1;

i++;

printf("i=%d,sum=%d",i,sum);

}

(A) i=10,sum=9 (B) i=9,sum=9 (C) i=2,sum=l (D) 运行出现错误

22、若输入B,以下程序的运行结果为( ) 。

main()

{ char grade; scanf("%c",&grade);

switch(grade)

{case 'A':printf(">=85");

case 'B':

case 'C':printf(">=60");

case 'D':printf("<60");

default:printf("error");}

}

(A)>=85 (B)>=60 (C)>=60<60error (D) error

23.有如下程序 main()

{ int x=23;

do

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

}

该程序的执行结果是( ) 。

(A)321 (B)23 (C)不输出任何内容 (D)陷入死循环

24.有如下程序

int func(int a,int b)

{ return (a+b);}

main()

{int x=2,y=5,z=8,r;

r=func(func(x,y),z); printf("%dn",r);

}

该程序的输出结果是 ( ) 。

(A) 12 (B) 13 (C)14 (D)15

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

main()

{ int a,b;

for(a=1,b=1;a<=100;a++)

{ if(b>=10) break;

if(b%3==1)

{ b+=3;continue;}

}

printf("%dn",a);

}

(A)101 (B) 6 (C)5 (D)4

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

int a,b;

void fun()

{ a=100;b=200;}

main()

{ int a=5,b=7;

fun();

printf("%d%dn",a,b);

}

(A) 100200 (B)57 (C)200100 (D)75

27.下面的程序执行后,文件test.t中的内容是 ( ) 。

#include

void fun(char *fname,char *st)

{ FILE *myf; int i;

myf=fopen(fname,"w");

for(i=0;i

fclose(myf);

}

main()

{ fun("test.t","new world");fun("test.t","hello,");}

(A) hello, (B)new,worldhello (C) new,world (D)hello,rld

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

#include

main(){

static char s[30]="abcdefg";

static char t[]="abcd";

int i,j;

i=0;

while(s[i]!='0')

i++;

j=0;

whi1e(t[j]!='0')

{ s[i+j]=t[j];

j++; }

s[i+j]='0';

printf("%sn",s);

}

(A) abcdabcdefg (B)abcdefg (C)abcd (D)abcdefgabcd 29.有如下程序

main()

{ char ch[2][5]={"6937","8254"},*p[2];

int i, j, s=0;

for(i=0;i<2;i++) p[i]=ch[i];

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

for(j=0;p[i][j]>'0';j+=2)

s=10*s+p[i][j]-'0';

printf("%dn",s);

}

该程序的输出结果是( ) 。

(A)69825 (B)63825 (C)6385 (D)693825

30.若已建立如下图所示的单向链表结构

在该链表中,指针p,s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成

单向链表的语句组是( ) 。

(A) p=p->next;s->next=p;p->next=s;

(B) p=p->next;s->next=p->next;p->next=s;

(C) s->next=NULL;p=p->next;p->next=s

(D) p=(*p).next;(*s).next=(*p).next; (*p).next =s;

31.请选择正确的运行结果填入( ) 中。

include

int x,y;

num()

{

int a=15,b=10;

int x,y;

y=a-b;

y=a+b;

return;

}

main()

{ int a=7,b=5;

x=a+b;

y=a-b;

num(); printf("%d,%dn",x,y);

}

(A) 12,2 (B) 5,25 (C)2,12 (D)不确定

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

#define M(x,y,z) x*y+z

main()

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

printf("%dn",M(a+b,b+c,c+a)); }

(A)19 (B)17 (C)15 (D)12

第二卷

说明:(1)第二卷含两大题,均属填空题,每题各有5个空栏,在阅读和理解原题程序的基础

上,在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。

(2)每空栏填对得3分,两大题共10个空栏,全对得30分。

试题一:

有一函数,实参传来一个字符串,统计此字符串中字母、数字、空各和其他字符的个数,

在主函数中输入字符串以及输出上述的结果。

int letter,digit,space,others; /*是全局变量*/

main()

{int count(char _____(1)_____);

char text[80];

printf("nlnput string:n");

____(2)___;

printf("string:");

puts(text);

letter=O;

digit=O;

space=O;

others=O;

_____(3)_____;

printf("letter:%d,digit:%d,space:%d,other:%dn",letter,digit,

space,others); }

int count(char str[])

{int i;

for(i=O;str[i]!='0';i++)

if((____(4)____>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))

letter++; else if(str[i]>='0'&&str[i]<='9')

digit++;

else if(str[i]==' ')

space++;

else

____(5)____;

}

试题二:

把下列程序补充完整,实现两个字符串的比较,即自己写个strcmp函数,函数原型

为:int strcmp(char *p1,char *p2)

设p1指向字符串s1,p2指向字符串s2。要求:当s1=s2时,返回值为0。当sl<>s2时,返

回它们两者的第一个不同的字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不同,

“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如果sl

main()

{ int m;

char ___(6)____,str2[20],*p1,*p2;

printf("Input two string:n");

scanf("%s",strl);

scanf("%s",___(7)______);

p1=&strl[0];

p2=_____(8)_____;

m=strcmp(p1,p2);

printf("result:%d,n",m);

}

strcmp(char ___(9)_____,char *p2)

/*两个字符串比较的函数*/

{ int i;

____(10)______;

while(*(pl+i)==*(p2+i))

if(*(p1+i++)=='0') return(0);

return(*(pl+i)-*(p2+i)); /*不等时返回结果为第一个不等字符ASCII码的差值*/

}

参考答案

第一卷

第一部分:基础知识

1.A 2.B 3.B 4.A 5.C 6.A 7.B 8.D 9.B 10.D

11.A 12.C 13.A 14.A 15.D 16.C 17.D 18.C 19.A 20.B

第二部分:简单程序

21.D 22.C 23.B 24.D 25.D 26.B 27.A 28.D 29.C 30.A 31.A 32.D

第二卷

试题一:

1、str[] 2、gets(text)或scanf(“%s”,text) 3、count(text)

4、str[i] 5、others++

试题二:6、str1[20] 7、str2 8、&str2[0] 9、*p1 、i=0 10

C语言程序设计》( 卷)考核班级

学生数 印数 考核方式 闭卷 考核时间 120 分钟

(本试卷包括第一卷和第二卷,答卷时间总共120分钟)

第一卷 本卷共70分,其中第1~26题每题2分,第27~32题每题3分。

第一部分:基础知识

1、 一个C语言程序是从______开始执行的。

A、程序中的第一个语句 B、包含文件(头文件)的第一个函数

C、名为main的函数 D、程序中的第一个函数

2、 语句while(!E) { ……}中的条件!E等价于_____

A、E==0 B、E!=1 C、E!=0 D、~E

3、 若有以下类型说明语句:

char w;

int x;

float y;

double z;

则表达式w*x+z-y的结果为_____类型。

A、float B、double C、int D、char

4、 一个函数返回值的类型是由____决定的

A、return语句中的表达式类型; B、定义函数时所指定的函数类型

C、调用该函数的函数的类型 D、调用函数时临时类型

5、 设x、y、z和k都是int型变量,则执行下列表达式后,变量x的值为_____.

x=(y=4,z=16,k=32);

A、4 B、16 C、32 D、52

6、 有以下程序:

main( )

{ int i=10,j=1;

printf(“%d,%dn”,i--,++j);

}

执行后输出的结果是________

A、9,2 B、10,2 C、9,1 D、10,1

7、 以下指针s的指字符串的长度为_______

char *s=”t’Name Addressn”;

A、19 B、15 C、18 D、-12

8、 设有语句int a=3;则执行了语句a+=a-=a*a;后,变量a的值是____

A、3 B、0 C、9 D、-12

9、 对于下面的for循环语句,可以断定它____。

for(x=0,y=0;(y!=123)&&(x<4);x++)

printf(“--------“);

A、是无限循环(死循环) B、循环次数不定

C、共执行4次循环 D、共执行3次循环

10、 设有以下语句,则_______不是对a数组元素的正确引用,其中0 i10.

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

int *p=a;

A、a[p-5] B、*(&a[i]) C、a[i] D、*(a+i)

11、 为了判断两个字符串s1和s2是否相等,应当使用______

A、if(s1==s2) B、if(s1=s2)

C、if(strcmp(s1,s2)) D、if(strcmp(s1,s2)==0)

12、 对于C语言程序中的函数,下列叙述中正确的是______

A、函数的定义不能嵌套,但函数调用可以嵌套

B、函数的定义可嵌套,但函数的调用不能嵌套

C、函数的定义和调用均不能嵌套

D、函数的定义和调用均可嵌套

13、 有以下程序

main()

{ int i;

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

switch(i)

{ case 1: printf(“%d”,i);

case 2: printf(“%d”,i);

default: printf(“%d”,i);

}

}

执行后输出的结果是______

A、011122 B、012 C、012020 D、120

14、 假定有以下变量定义: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)

15、 以下程序的输出结果是_____

main()

{ int x=4,y=8;

x+=y;y+=x;

printf(“%d %dn”,x,y);

}

A、12 20 B、4 8 C、12 12 D、8 4

16、 有以下程序执行后输出的结果是_____

main()

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

s=x+3;

printf(“%dn”, s[2]);

}

A、随机值 B、0 C、5 D、6

17、 以下函数的功能是______

fun(char *s1,char *s2)

{ int i=0;

while(s1[i]==s2[i] &&s2[i]!=’0’)

i++;

return(s1[i]==’0’&&s2[i]==’0’);

}

A、将s2所指字符串赋给s1

B、比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0

C、比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0

D、比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0

18、 以下叙述中正确的是____

A、全局变量的作用域一定比局部变量的作用域范围大

B、静态(static)类型变量的生存期贯穿于整个程序的运行期间

C、函数的形参都属于全局变量

D、未在定义语句中赋初值的auto变量和static变量的初值都是随机值

19、 有以下程序,执行后输出的结果是____

main()

{ int i=1,j=1,k=2;

if ((j++||k++)&&i++)

printf(“%d, %d,%dn”,i,j,k);

}

A、1,1,2 B、2,2,1 C、2,2,2 D、2,2,3

20、 以下函数abc的功能是____

int abc(char *ps)

{ char *p;

p=ps;

while(*p++);

return (p-ps);

}

A、比较两个字符串的大小 B、求字符串的长度

C、将串ps复制到串p中 D、以上三种说法都不对

第二部分:简单程序

21、 以下程序的输出结果是:_____

main( )

{ int i=10,j=10;

printf(“%d ,%dn”,++i+j++,j--);

}

A、21,10 B、20,10 C、21,9 D、20,9

22、 以下程序的输出结果是:__________

main( )

{ int m=5;

if (m++>5)

printf(“%dn”,m);

else

printf(“%d n”,m--);

}

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

23、 当a=1, b=3, c=5, d=4时,执行下面一段程序后,x的值为____

if (a

if(c

x=1;

else if(a

if(b

x=2;

else

x=3;

else

x=6;

else x=7;

A、1 B、2 C、3 D、6

24、 以下程序企图把从终端输入的字符输出到名为的文件中,直到从终端读入字符#

号时结束输入和输出操作,但程序有错。出错的原因是_______

#include

main( )

{ FILE *fout;

char ch;

fout=fopen( ‘’,’w’);

ch=fgetc(stdin);

while(ch!=’#’)

{fputc(ch,fout);

ch=fgetc(stdin);

}

fclose(fout);

}

A、函数fopen调用形式有误 B、输入文件没有关闭

C、函数fgetc调用形式有误 D、文件指针stdin没有定义

25、 有以下程序,执行后输出结果是______

main()

{union {unsigned int n;

unsigned char c;

}ul;

ul.c=’A’;

printf(“%cn”,ul.n);

}

A、产生语法错 B、随机值 C、A D、65

26、 有以下程序,执行后输出结果是_____

main()

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

int i,k=2;

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

printf(“%d ”, m[k][i]);

}

A、4 5 6 B、2 5 8 C、3 6 9 D、7 8 9

27、 以下程序运行后,输出结果是_______

int func(int a, int b)

{ static int m=0,i=2;

i+=m+1;

m=i+a+b;

return(m);

}

main()

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

n=func(k, m);

printf(“%d, ”, n);

n=func(k, m);

printf(“%d ”, n);

}

A、8, 15 B、8, 16 C、8, 17 D、8, 8

28、 在执行以程序时,如果从键盘上输入:ABCdef,则输出结果为:____

#include

main( )

{ char ch;

while((ch=getchar())!=’n’)

{ if(ch>=’A’&&ch<=’Z’)

ch=ch+32;

else if(ch>=’a’ && ch<=’z’)

ch=ch-32;

printf(“%c”,ch);

}

printf(“n”);

}

A、ABCdef B、abcDEF C、abc D、DEF

29、 有以下程序,执行后输出结果是____

int *f(int *x, int *y)

{ if(*x<*y)

return x;

else

return y;

}

main( )

{ int a=7,b=8,*p,*q,*r;

p=&a;

q=&b;

r=f(p,q);

printf(“%d,%d,%dn”,*p,*q,*r);

}

A、7, 8, 8 B、7, 8, 7 C、8, 7, 7 D、8, 7, 8

30、 下面程序的输出结果是_____

fun(char *s, int p1, int p2)

{ char c;

while (p1

{ c=s[p1];

s[p1]=s[p2];

s[p2]=c;

p1++;p2--;

}

}

main( )

{ char a[ ]=”ABCDEFG”, k, *p;

fun(a, 0, 2);

fun(a, 4, 6);

printf(“%sn”,a);

}

A、ABCDEFG B、DEFGABC C、GFEDCBA D、CBADGFE

31、 以下程序的运行结果是____

#include

long func(int x)

{ long p;

if(x==0||x==1)

return (2);

p=x*func(x-1);

return (p);

}

main( )

{

printf(“%d n”,func(4));

}

A、8 B、12 C、24 D、48

32、 下面的程序运行后,全局量t.x和t.s的正确结果为__________

struct tree

{ int x;

char *s;

}t;

func(struct tree t)

{ t.x=10;

t.s=”computer”;

return(0);

}

main()

{ t.x=1;

t.s=”minicomputer”;

func(t);

printf(“%d, %s ”, t.x, t.s);

}

A、10, computer B、1, computer C、1, minicomputer D、10, minicomputer

第二卷

说明:(1)第二卷均为填空题,在阅读和理解原题程序的基础上,在空栏处填入适当的字符、

语句以构成一个正确的C语言程序。

(2)答本卷的题目时,要在本卷答题纸上编号对应的栏目中,用钢笔或圆珠笔书写。用铅笔

答题无效,在试题上直接答题者无效。请勿在第一卷的答题卡上填写本卷答案。

(3)每空栏3分,共10个空栏,共30分。

试题一 下列程序是求1+1/2+1/4+……+1/50的值。

#include “stdio.h”

main( )

{ int i=2;

float sum=1;

while (___(1)_____)

{ sum=sum+1.0/i;

_____(2)_______;

}

printf(“sum=%f”, sum);

}

试题二 下列函数用于统计一行字符中的单词个数,单词之间用空格分隔。

word_num(char str[ ])

{

int i, num=0, word=0;

for(i=0; str[i]!=____(3)___; i++)

if(____(4)______==’ ‘)

word=0;

else if(word==0)

{ word=1;

______(5)______;

}

return(num);

}

试题三 以下函数的功能是删除字符串s中的所有数字字符。

void dele (char *s)

{ int n=0,i;

for(i=0; s[i]; i++)

if(____(6)_____)

s[n++]=s[i];

s[n]=____(7)_____;

}

试题四 以下程序的功能是:从键盘输入若干个学生的成绩,统计计算出平均成绩,并输出

低于平均分的学生成绩,用输入负数结束输入。

main( )

{ float x[1000], sum = 0.0, ave, a ;

int n=0, i;

printf(“Enter mark:n”);

scanf(“%f”,&a);

while(a>=0.0 && n<1000)

{

sum =____(8)____;

x[n]=___(9)_____;

n++;

scanf(" % f ", &a);

}

ave= sum / n ;

printf(“Output: n”);

printf(“ave=%fn”,ave);

for(i=0; i

if_____(10)______

printf("% fn”,x[i]);

}

参考答案

第一卷

一、基础知识 1.C 2.A 3.B 4.B 5.C 6.B 7.B 8.D 9.C 10.A

11.D 12.A 13.A 14.D 15.A 16.B 17.C 18.B 19.C 20.B 二、简单程序 21.B 22.B

23.B 24.A 25.C 26.C 27.C 28.B 29.B 30.D

31.D 32.C

第二卷

1、 i<=50

2、 i+=2或i=i+2

3、 ‘0’

4、 str[i]

5、 num++

6、 !(s[i]>='0'&&s[i]<='9')

7、 '0'

8、 sum+a

9、 a

10、 (x[i]

《C语言程序设计》( 卷)考核班级

学生数 印数 考核方式 闭卷 考核时间 120 分钟

一、选择题(每小题2分,共70分)

下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在

答题卡相应位置上,答在试卷上不得分。

(1)数据的逻辑结构可以分为 ( ) 。

A)静态结构和动态结构 B)物理结构和存储结构

C)线性结构和非线性结构 D)紧凑结构和松散结构

(2)对线性表,采用顺序存储的优点是( ) 。

A)便于随机存取 B)便于进行插入和删除操作

C)需要的存储空间不必连续 D)方便线性表的扩充

(3)设具有n个结点的完全二叉树的第1层为根结点,若一个结点i满足2i>n,则该结点没

有( ) 。

A)左子结点 B)右子结点

C)左子结点和右子结点 D)左子结点、右子结点和兄弟结点

(4)快速排序算法的平均时间复杂度为 ( ) 。

A)O(n) B)O(n2) C)O(nlog2n) D)O(log2n!)

(5)在面向对象的程序设计方法中,描述对象静态和动态特征的三要素是 ( )。

A)封装、继承和重载 B)属性、事件和方法

C)数据、代码和接口 D)内聚、耦合和驱动

(6)软件测试的目的是( ) 。

A)证明软件的正确性 B)找出软件系统中存在的所有错误

C)证明软件系统中存在错误 D)尽可能多地发现软件系统中的错误

(7)软件开发范型的作用是( )。

A)为了控制软件需求的易变性 B)作为一种软件工程方法学

C)作为一种项目管理方法 D)作为需求分析的指导

(8)在数据库三级模式结构中,描述数据库中全体数据的全局逻辑结构和特征的是 (

A)外模式 B)内模式 C)存储模式 D)模式

(9)在数据库技术中,面向对象数据模型是一种( ) 。

A)概念模型 B)结构模型 C)物理模型 D)逻辑模型

(10)数据库(DB)、数据库系统(DBS)、数据库管理系统(DBMS)三者之间的关系是(

A)DBS包括DB和DBMS B)DBMS包括DB和DBS

C)DB包括DBS和DBMS D)DBS就是DB,也就是DBMS

(11)阅读以下程序

main()

{ int x;

scanf(”%d”,&x);

if(x - - <5)printf(”%dn”,x);

else prinff(”%dn”,x++); }

程序运行后,如果从键盘上输入5,则输出结果是 ( ) 。

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

(12)假定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

(13)t为int型变量,进入下面的循环之前,t的值为0。

while(t-1)

{……}

则以下叙述中正确的是( )。

A)循环控制表达式的值为0 B)循环控制表达式的值为1

C)循环控制表达式不合法 D)以上说法都不对

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

main()

{ int num=0;

while(num<=2)

{ num++;printf(”%dn”,num);} }

A)1 B)1 C)1 D)l

2 2 2

3 3

4

(15)以下各选项企图说明一种新的类型名,其中正确的是 ( ) 。

)。

A)typedef vl int; B)typedef v2=int;

C)typedef int v3; D)typedef v4:int;

(16)在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( )。

A)地址传递 B)单向值传递

C)由实参传给形参,再由形参传给实参 D)传递方式由用户指定

(17)以下函数值的类型是( )

fun(float x)

{ float y;

y=3*x-4:

return y; }

A)int B)不确定 C)void D)float

(18)设有以下函数:

f(int a)

{ int b=0;

static int c=3;

b++;c++;

return(a+b+c); }

如果在下面的程序中调用该函数,则输出结果是( )。

main()

{ int a=2,i;

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

printf("%dn",f(a)); }

A)7 B)7 C)7 D)7

8 9 10 7

9 11 13 7

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

main()

{ char c='Z';

printf("%c",c-25); }

A)a B)Z C)z-25 D)Y

(20)以下选项中,非法的字符常量是 ( ) 。

A)'t' B)'17' C)"n" D)'xaa'

(21)若有说明int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是 ( ) 。

A)i=*p; B)*p=*&j; C)i=&j; D)i=**p;

(22)以下定义语句中,错误的是( ) 。

A)int a[ ]={1,2}; B)char *a[3]; C)char s[10]="test";D)int n=5,a[n];

(23)假设int型变量占两个字节的存储单元,若有定义int x[10]={0,2,4};,则数组x在

内存中所占字节数为 。

A)3 B)6 C)10 D)20

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

main()

{ int i,a[10];

for(i=9;i>=0;i- -)

a[ i ]=10 - i:

printf("%d%d%d",a[2],a[5],a[8]); }

A)258 B)741 C)852 D)369

(25)以下数组定义中不正确的是( ) 。

A)int a[2][3]; B)int b[][3]={0,1,2,3};

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

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

main()

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

prinff("%d%d%d%dn",a[0][3],a[1][2],a[2][1],a[3][0]); }

A)0650 B)1470 C)5430 D)输出值不确

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

#include

main()

{char st[20]="hello0t’";

printf("%d%dn",stden(st,sizeof(st));

A)9 9 B)5 20 C)13 20 D)20 20

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

amovep(int *p,int (*a)[3],int n)

{ int i,j;

for(i=0;i

for(j=0;j

{*p=a[i][j];p++;}

}

main()

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

p=(int *)malloc(100);

amovep(p,a,3);

printf("%d%dn",p[2],p[5]);

free(p);

}

A)56 B)25 C)34 D)程序错误

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

struct HAR

{ int x,y;

struct HAR *p;} h[2];

main()

{ h[0].x=l;h[0].y=2;

h[1].x=3;h[1].y=4;

h[0].p=&h[1];h[1].p-h;

printf("%d%dn",(h[0].p)->x,(h[1].p)->y);

}

A)12 B)23 C)14 D)32

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

main()

{ int a,b;

for(a=l,b=l;a<=100;a++)

{ if(b>=10)break;

}

if(b%3==1)

{ b+=3;continue;}

}

printf("%dn",a);

}

A)101 B)6 C)5 D)4

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

union myun

{ struct { int x,y,z;}u;

int k;}a;

main()

{ a.u.x=4;a.u.y=5;a.u.z=6;

a.k=0;

printf("%dn",a.u.x);

}

A)4 B)5 C)6 D)0

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

int a,b;

void fun()

{ a=100;b=200;}

main()

{ int a=5,b=7;

fun();

printf("%d%dn",a,b);

}

A)100200 B)57 C)200100 D)75

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

#define M(x,y,z) x*y+z

main()

{ int a=l,b=2,c=3;

printf("%dn",M(a+b,b+c,c+a));

}

A)19 B)17 C)15 D)12

(34)整型变量X和Y的值相等,且为非0值,则以下选项中,结果为0的表达式是(

A)x||y B)x|y C)x&y D)x^y

(35)下面的程序执行后,文件test.t中的内容是( ) 。

#include

#include

void fun(char *fname,char *st)

{ FILE *myf;

int i;

myf=fopen(fname,"w");

for(i=0;i

fputc(st[i],myf);

fclose(myf);

}

。 )

main()

{ fun("test.t","new world");

fun("test.t","hello,");

}

A)hello, B)new worldhello, C)new world D)hello,world

二、填空题(每空2分,共30分)

请将每一个空的正确答案写在答题卡[1]至[15]序号的横线上,答在试卷上不得分。

(1)算法的复杂性指的是 [1] 和空间复杂性。

(2)设栈S的初始状态为空,队列Q的初始状态如下图所示:

a1 a2 a3 a4

↑ ↑

队头 队尾

对栈S和队列Q进行如下两步操作:①Q中的元素依次出队,并压入栈S中,直至Q为空;

②依次弹出S中的元素并进入Q,直至S为空。在上述两步操作后,队列Q的状态是 [2] 。

(3)面向对象程序设计使用的对象是 [3] 的封装体。

(4)在关系数据库中,关系模型的三类完整性是指 [4] 、参照完整性和用户定义的完

整性。

(5)为数据库建立索引,是一种以牺牲 [5] 换取提高数据库访问速度的策略。

(6)以下函数的功能是求x的y次方,请填空。

double fun(double x,int y)

{ int i;

double z;

for(i=1,z=x;i

z=z* [6] ;

return z;

}

(7)设有以下程序:

main()

{ int a,b,k=4,m=6,*pl=&k,*p2=&m;

a=p1==&m:

b=(*p1)/(*p2)+7;

printf("a=%dn",a);

printf("b=%dn",b);

}

执行该程序后,a的值为 [7] ,b的值为 [8] 。

(8)若已定义int a[10],l;,以下fun函数的功能是:在第一个循环中给前10个数组元

素依次赋1,2,3,4, 5,6,7,8,9, 10;在第二个循环中使a数组前10个元素中的值对称

折叠,变成1, 2,3,4,5,5,4, 3,2, 1。请填空。

fun(int a[ ])

{ int i;

for(i=l;i<=10;i++) [9] =i;

for(i=0;i<5;i++) [10] =a[i]:

}

(9)以下程序运行后的输出结果是 [11] 。

main()

{ char s[ ]="9876",*p;

for(p=s;p

printf("%sn",p);

}

(10)若有定义语句char s[l00],d[100];int j=0,i=0;,且s中已赋字符串,请填空以实

现字符串拷贝。(注意:不得使用逗号表达式。)

while(s[i])

{ d[j]= [l2] ;

j++;

d[j]=0;

}

(11)以下程序段用于构成个简单的单向链表,请填空。

struct STRU

{ int x,y,

float rate;

[13] p;

}a,b;

a.x=0;a.y=0;=0;a.p=&b;

b.x=0;b.y=0;=0;b.p=NULL;

(12)若有如下结构体说明:

struct STRU

{ int a,b;

char c;

double d;

struct STRU pl,p2;

};

请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型。

[14] t[20];

(13)以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调用

ftell函数返回当前文件位置指针的具体位置,从而确定立件长度,请填空。

FILE *myf;

long fl;

myf= [15] ("test.t","rb");

fseek(myf,0,SEEK_END);

fl=ftell(myf);

fclose(myf);

printf("%ldn",f1);

参考答案

一、选择题

1. C 2.A 3. A 4.C 5.B 6.D 7.D 8. D 9.B 10.A

11.B 12.D 13.B 14.B 15.C 16.B 17.A 18.A 19.A 20.C

21.B 22.D 23.D 24. C 25.D 26.A 27.B 28.A 29.D 30.D

31.D 32.B 33.D 34.D 35.A

二、填空题

[1] 时间复杂性 [2] a4a3a2a1 [3] 数据和代码 [4] 实体完整性

[5] 存储空间 [6] x [7]0 [8] 7

[9] a[i-1] [10] a[i-9] [11] 9876 [12] s[i++]

[13] struct STRU * [14] struct STRU [15] fopen

《C语言程序设计》( 卷)考核班级

学生数 印数 考核方式 闭卷 考核时间 120 分钟

一、选择题(每小题2分,共70分)

(1)在数据结构中,数据的存储结构可以是 ( )。

A)线性结构和非线性结构 B)内部结构和外部结构

C)顺序结构和链式结构 D)静态结构和动态结构

(2)下面关于线性表的叙述中,错误的是( ) 。

A)线性表采用顺序存储,必须占用一片连续的存储单元

B)线性表采用顺序存储,便于进行插入和删除操作

C)线性表采用链接存储,不必占用一片连续的存储单元

D)线性表采用链接存储,可以动态分配存储空间

(3)在一棵树中,若一个结点是叶结点,则它没有( ) 。

A)左子结点 B)右子结点

C)左子结点和右子结点 D)左子结点、右子结点和兄弟结点

(4)成功的二分查找算法的时问复杂度为 ( ) 。

A)O(log2n) B)O( log2n) C)O(n) D)O( )

(5)结构化程序设计方法使用的三种基本程序控制结构是 ( ) 。

A)顺序、选择和循环 B)输入、处理和输出

C)模块、函数和过程 D)入口、出口和接口

(6)在软件质量因素中,软件在异常条件下仍能运行的能力称为软件的( ) 。

A)安全性 B)健壮性 C)可靠性 D)有效性

(7)白盒测试法重视 ( )的度量。

A)测试用例多少 B)测试路径多少 C)测试覆盖率 D)测试出错误的多少

(8)在数据库设计中用关系模型来表示实体与实体间的联系。关系模型的结构是 ( )

A)层次结构 B)二维表结构 C)网络结构 D)封装结构

(9)数据库管理系统能实现对数据库中数据的查询、插入、修改和删除,这类功能称为

A)数据定义功能 B)数据管理功能 C)数据操纵功能 D)数据控制功能

(10)在关系数据库标准语言SQL中,实现数据检索的语句或命令为 ( ) 。

A)SELECT B)LOAD C)FETCH D)SET

(11)以下程序执行后,sum的值是 ( ) 。

A)15 B)14 C)不确定 D)0

main()

{ int i,sum;

for(i=l;i<6;i++)sum+=i;

printf("%dn",sum);

}

(12)有以下程序段

int x=3;

do

{ printf("%d",x -=2);}while(!(--x));

其输出结果是 ( ) 。

A)1 B)3 0 C)l-2 D)死循环

(13)若变量c为char类型,能正确判断出c为小写字母的表达式是 ( ) 。

A)'a'<=c<='z' B)(c>='a')||(c<='z')

C)('a'<=c)and('z'>=c) D)(c>='a')&&(c<='z')

(14)以下所列的各函数首部中,正确的是( ) 。

A)void play(var a:Integer var b:Integer) B)void play(int a,b)

C)void play(int a,int b) D)sub play(a as integer b as integer)

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

A)0 B)29 C)31 D)无定值

fun(int x int y,int z)

{z=x*x+y*y;}

main()

{ int a=31;

fun(5,2,a);

printf("%d",a);

}

(16)下列程序段的输出结果是( )

A)2 l 4 3 B)1 2 1 2 c)1 2 3 4 D)2 1 1 2

void fun(int *x,int *y)

{ printf("%d%d",*x,*y);*x=3;*y=4;}

main()

{ int x=1,y=2;

fun(&y,&x);

printf("%d%d",x,y);

}

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

A)非法 B)a[4]的地址 C)5 D)3

main()

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

printf("%d",*-- p);

}

(18)下列程序的运行结果是 ( ) 。

A)6 3 B)3 6 C)编译出错 D)0 0

void fun(int *a, int *b)

{ int *k;

k=a ; a=b ; b=k; }

main()

{ int a=3,b=6,*x=&a,*y=&b;

fun(x,y);

printf("%d%d",a,b);

}

(19) 下面程序的输出结果是( )。

A)0 B)1 C)10 D)9

main()

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

p=a;

printf("%dn",*p+9);

}

(20)当调用函数时,实参是一个数组名,则向函数传送的是 (

A)数组的长度 B)数组首地址 C)数组每一个元素的地址

(21)设有以下说明语句:

) 。

D)数组每个元素的值

struct ex

{ int x;float y; char z;}example;

则下面的叙述中不正确的是 ( ) 。

A)struct是结构体类型的关键字 B)example是结构体类型名

C)x,y,z都是结构体成员名 D)struct ex是结构体类型名

(22)以下只有在使用时才为该类型变量分配内存的存储类说明是( ) 。

A)auto和static B)auto 和register C)register和static D)extern和register

(23)若fp是指向某文件的指针,且已读到文件末尾,则库函数feof(fp)的返回值是 。

A)EOF B)-1 C)非零值 D)NULL

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

A)20 B)21 C)22 D)23

main()

{ int i,k,a[10],p[3];

k=5;

for(i=0;i<10;i++)a[i]=i;

for(i=0;i<3;i++)p[i]=a[i*(i+1)];

for(i=0;i<3;i++)k+=p[i]*2;

printf("%dn",k);

}

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

A)1,5,9, B)1,4,7, C)3,5,7, D)3,6,9,

main()

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

for(i=0;i<3;i++)printf("%d,",x[i][2-i]);

}

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

A)14 B)19 C)20 D)21

main()

{ int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;

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

for(j=0;j

printf("%dn",s);

}

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

A)ABCD B)A C)REFG D)EFGH

FGH EFG JK IJKL

KL IJ O

M

main()

{ char w[][10]={"ABCD","EFGH","IJLKL","MNOP"},k;

for(k=1;k<3;k++)printf("%sn",w[k]);

}

(28) 当执行下面的程序时,如果输入ABC,则输出结果是 ( )。

A)ABC6789 B)ABC67 C)12345ABC6 D)ABC456789

#include "stdio.h"

#include "string.h"

main()

{ char ss[10]="12345";

gets(ss);strcat(ss,"6789");printf("%sn",ss);

}

(29)假定以下程序经编译和连接后生成可执行文件,如果在此可执行文件所在

目录的DOS提示符下键入:PROG ABCDEFGH IJKL〈回车〉,则输出结果为( ) 。

A)ABCDEFG B)IJKL

C)ABCDEFGHIJKL D)IJKLABCDEFGH

main(int argc,char *argv[ ])

{ while( - - argc>0)printf("%s",argv[argc]);

printf("n");

}

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

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

long fun(int n)

{ long s;

if(n==1||n==2)s=2;

else s=n-fun(n-1);

return s:

}

main()

{ printf("%ldn",fun(3)); }

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

A)16 B)2 C)9 D)1

#define SQR(X) X*X

main()

{ int a=16,k=2,m=l;

a/=SQR(k+m)/SQR(k+m);

printf("%dn",a);

}

(32)若定义了以下函数:

void f(……)

{ ……

*p=(double *)malloc(10*sizeof(double));

}

p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的

正确定以应当是 ( ) 。

A)double *p B)float **p C)double **P D)float *p

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

A)10 B)11 C)51 D)60

struct st

{ int x; int *y;}*p;

int dt[4]={10,20,30,40};

struct st aa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]};

main()

{ p=aa;

printf("%dn",++(p->x));

}

(34)假定建立了以下链表结构,指针p和q分别指向如图所示的结点,则以下可以将q所

从链表中删除并释放该结点的语句组是 ( ) 。

A)free(q);p->next=q->next;

B)(*p).next=(*q).next;free(q);

C)q=(*q).next;(*p).next=q;free(q);

D)q=q->next;p->next=q;p=p->next;free(p);

data next

head……

↑p ↑q

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

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

main()

{ int x=05;char z='a';

printf("%dn",(x&1)&&(z<'Z'));

}

二、填空题(每空2分,共30分)

请将每一个空的正确答案写在答题卡[ 1 ]至[15]序号的横线上,答在试卷上不得分。

(1)算法是求解某个问题所用的一系列操作规则的精确描述。一个算法必须具有 [ l ]、确定

性、可行性和输入输出。

(2)用一维数组表示线性表L=(a1,a2,……an),假定向表中插入任一元素的概率相同(都

为1/n),则插入一个元素平均需移动的元素个数为 [2] 。

(3)结构化程序设计使用顺序、选择和循环三种基本控制结构,它们的共同特点是[3] 。

(4)数据模型有概念数据模型和结构数据模型两类。实体联系模型(E—R模型)属于[4] 数

据模型。

(5)关系数据库的规范化理论要求关系数据库中的关系必须满足起码的要求,即每个属性都

是 [5] 的。

(6)下列程序的输出结果是 [6] 。

main()

{ int a=l, b=2;

a=a+b;b=a-b;a=a-b;

printf("%d%dn",a,b);

}

(7)用以下语句调用库函数malloc使字符指针st指向具有11个字节的动态存储空间,

请填空。

st=(char *) [7] ;

(8)下列程序段的输出结果是 [8] 。

int n='c';

switch (n++)

{ default:printf("error");break;

case 'a': case 'A': case 'b': case 'B':printf("good"); break;

case 'c': case 'C':printf("pass");

case 'd': case 'D':printf("warn");

}

(9)下程序的输出结果是 [9] 。

void fun(int *n)

{ while((*n)--);

printf("%d",++(*n));

}

main()

{ int a=100;

fun(&a);

}

(10)以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。

struct st

{ char name[20];double score;};

main()

{ struct st, ex;

printf("ex size:%dn",sezeof( [10] );

}

(11)下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为的新文

件中。请填空。

#include "sidio.h"

FILE *fp;

main()

{ char ch;

if(fp=fopen([ l1 ]))==NULL)exit(0);

while((ch=getchar())!='@')fputc(ch,fp);

fclose(fp);

}

(12)若变量n中的值为24,则prnt函数共输出[ l2] 行,最后一行有 [l3] 个数。

void prnt(int n, int aa[ ])

{ int i;

for(i=l;i<=n;i++)

{ printf("%6d",aa[i]);

if(!(i%5))printf("n");

}

printf("n");

}

(13)以下程序中,主函数调用了LineMax函数,以实现在N行M列的二维数组中找出每

一行上的最大值。请填空。

#define N 3

#define M 4

void LineMax(int x[N][M])

{ int i,j,p;

for(i=0;i

{ p=0;

for(j=1;j

if(x[i][P]

printf("The max value in line%d is %dn",i,x[i][p]);

}

}

main()

{ int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};

[l5] ;

}

参考答案

一、选择题

1.C 2.B 3.C 4.A 5.A 6.B 7.C 8.B 9.C 10.A

11.D 12.C 13.D 14.C 15.C 16.A 17.C 18.B 19.C 20.D

21.B 22.B 23.C 24.B 25.C 26.A 27.D 28.A 29.D 30.A

31.B 32.C 33.C 34.B 35.B

二、填空题

[1] 有穷性 [2] n/2 [3] 单入口单出口 [4]概念

[5] 不可分解 [6] 2,1 [7] malloc或malloc(sizeof(char*11))

[8] passwarn [9] 0 [10] struct st或x

[11] "","w"或"","w"或"bi.dat","W+t"

[12] 5 [13] 4 [14] p=j [15] LineMax(x)


本文标签: 函数 程序 输出 数组