C语言程序设计试题及答案解析[精选多篇]

时间:2019-05-12 18:33:20下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言程序设计试题及答案解析》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言程序设计试题及答案解析》。

第一篇:C语言程序设计试题及答案解析

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、””

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

A、char

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=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.2.3.4.5.6.7.8.9.()C语言是严格区分大写和小写的,因次主函数不能写成main()以外的其他形式。()C语言程序是从源文件的第一条语句开始执行的。

()C语言对其数据在内存中所占用的实际字节数是有明确规定的。()C语言中/*..*/之间的注释内容是不能跨行的。()C语言中多个以“;”结束的语句不能放在同一行。

()以下常数:'101',e3,’78’,(2+3)e(4-2)都是不合法的。()变量说明语句int a=b=c=23;是正确的。

()字符型数据不可以和整数数据一起进行算术运算。()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

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

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 表示以无符号十六进制形式输出整数

B、++a;

C、a=a+1=5;

D、y=(int)a;

E、a=b=c=10;

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

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)一次也不执行 D)执行1次

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.以下程序的输出结果是:()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 D、6

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

D)10

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

D)25

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

int i, sum;for(i=1;i<6;i++)sum+=sum;printf(“%dn”,sum);

A)15

B)14

C)不确定

D)0

36.下面程序的输出是:(D)main(){ int x=3,y=6,a=0;while(x++!=(y-=1)){ a++;if(y

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.2.3.4.5.6.7.8.9.()用1作while循环的判断条件,则循环一次也不执行。()for循环表达式的括号内的3个表达式均不可以省略。()语句while(!E);中的条件!E等价于E==0。()语句while(E);中的条件E等价于E!=0。

()若有for(;;){„„},是指循环体执行0次。()程序有死循环的时候,上机编译不能通过。()强制终止死循环可以使用CTRL+BREAK组合键。()执行for(I=0;I<3;I++);后I的值为2。

()执行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配对

D.else与它上面最近的且没有和其他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

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、9

13、有以下程序

main(){ char a[]=“abcdefg”,b[10]=“abcdefg”;

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

执行后输出结果是:()

A、7 7

B、8 8

C、8 10

D、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

C、3 5

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;

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

D、16、3 5 5 3

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、10,9,8,7,6,5,4,3,2,1, C、9,2,7,4,5,6,3,8,1,10,D、1,10,3,8,5,6,7,4,9,2,17、有以下程序

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”);}

执行后输出结果是:()

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[]=”abn12””;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

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

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

A.[常量表达式]

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

A.a[10]

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

A.字符常量

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

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

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

A.int a[]=“string”;C.char a =“string”;

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

A.2

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

A.a[0][2*1]

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

A.数组a和数组b的长度相同 C.a数组长度大于b数组长度

B.a数组长度小于b数组长度 D.数组a和数组b等价 B.a[1][3]

C.a[4-2][0]

D.a[0][4] B.3 C.4

D.无确定值 B.char a[]={0,1,2,3,4,5};D.int a[5]={0,1,2,3,4,5};

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

B.浮点型常量 D.任何类型的表达式 C.整型常量或整型表达式 B.a[3.5]

C.a(5)

D.a[10-10]

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

D.[整型常量]

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

char a[]=“ABCDEF”;char b[]={„A‟, „B‟, „C‟, „D‟, „E‟, „F‟};则以下叙述正确的是:()。A.数组a与数组b完全相同

40.有下面的程序段:

char a[3],b[]=“China”;a=b;printf(“%s”,a);A.运行后将输出China C.运行后将输出Chi

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

char c[5]={„a‟, „b‟, „‟, „c‟, „‟};printf(“%s”,c);A.ab

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

A.4个字节

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

A.if(s1>s2)

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',''};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]后,下面错误的引用是:()。

B.if(strcmp(s1,s2))D.if(strcmp(s1,s2)>0)C.if(strcmp(s2,s1)>0)B.5个字节

C.6个字节

D.7个字节 B.abc

C.ab

D.abc

B.运行后将输出Ch

D.编译出错

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

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.整型常量

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

A.24

51.strlen(”ABC“)的结果为:()。

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

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

main(){

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

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

main(){

} A.20

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

main(){

} A.ABCDEF B.BDF C.ABCDE D.BCDE char s1[20]=”ABCDEF“;int i=0;while(s1[i++]!='')printf(”%c“, s1[i++]);B.15 C.5 D.2 char s1[20]=”Good!“;char s2[15]=”AB“;printf(”%d“,strlen(strcpy(s1,s2)));int a[][3]={1,2,3,4,5,6};printf(”%d“,a[1][1]);B.25 C.18

D.17 B.整型变量

C.整型表达式

D.以上均可

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

main(){

} A.不确定的值

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

main(){

} A.0

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

main(){

} A.14

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

main(){

} A.1

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

main(){ char s[]=”ab1c2d4e“;int i;B.1256

C.12ab56

D.l2 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);B.19

C.20

D.21 int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)for(j=0;j

D.3 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++;B.3

C.2

D.1 int n[2]={0},i,j,k=2;for(i=0;i

} A.ab

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

main(){

} A.298h01

二、判断题: 1.2.3.4.5.6.7.8.9.()在程序中可以对数值数组中的数据进行整体使用。

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

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

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

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

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

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

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

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

C.01

D.298 int i=0,n=0;char s[10]=”298h01“;for(i=0;s[i]!='';i++)

if(s[i]<='9'&&s[i]>='0')else break;n=n*10+(s[i]-'0');B.ab1c2d4e

C.abcde

D.a i=0;while(s[i]!=''){

} if(s[i]>='a'&&s[i]<='z')i++;printf(”%c“,s[i]);printf(”%dn“,n);

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

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、80,20

20.下列程序执行后的输出结果是()。

void func(int *a,int b[]){ b[0]=*a+6;} main()在不同的函数中可以使用相同名字的变量 函数中的形式参数是局部变量

在一个函数内定义的变量只在本函数范围内有效

D)在一个函数内的复合语句中定义的变量在本函数范围内有效

{ int a,b[5];a=0;b[0]=3;func(&a,b);printf(“%d n”,b[0]);} A、6 B、7 C、8 D、9

21.一个完整的可运行的C源程序中,()。

A、可以有一个或多个函数 B、必须有且仅有一个主函数 C、可以没有主函数 D、必须有主函数和其他函数

22.下述函数定义形式正确的是()。

23.关于函数参数,说法正确的是()。

A、实参与其对应的形参各自占用独立的内存单元 B、实参与其对应的形参共同占用一个内存单元 C、只有当实参和形参同名时才占用同一个内存单元 D、形参是虚拟的,不占用内存单元

24.一个函数的返回值由()确定。

A、return语句中的表达式 C、系统默认的类型

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

A、C语言程序总是从第一个定义的函数开始执行

B、在C语言程序中,要调用的函数必须在main()函数中定义 C、C语言程序总是从main()函数开始执行

D、C语言程序中的main()函数必须放在程序的开始部分

26.以下函数

fff(float x){ } 的类型是()。

A、与参数x的类型相同

B、void类型 C、int类型

27.以下对C语言函数的描述中,正确的是()。

A、C程序由一个或一个以上的函数组成 B、C函数既可以嵌套定义又可以递归调用 C、函数必须有返回值,否则不能使用函数

D、C程序中调用关系的所有函数必须放在同一个程序文件中

D、无法确定 printf(“%dn”,x*x);

B、调用函数的类型 D、被调用函数的类型 A、int f(int x;int y)C、int f(int x, int y)B、int f(int x,y)D、int f(x,y: int)

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

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

fun(int a,int b,int c){ c=a+b;}

。、gets())

main(){

} A、236.分析以下程序的运行结果()。B、3C、5

D、无定值 int c;fun(2,3,c);printf(“%dn”,c);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

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

38.以下程序输出的结果是(int func(int a,int b){ return(a+b);} main(){

C、20,10

C、6)。

D、20,20

D、9

int x=2,y=5,z=8,r;r=func(func(x,y),z);} A、12

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

int a,b void fun(){ a=100;b=200;} main(){ int a=5,b =7;fun();printf(“%d%d n”,a,b);B、57 D、75 A、100200 C、200100

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

int x=3;main(){

} incre(){ static int x=1;x*=x+1;} A、33 C、26

二、判断题

1、()函数定义void max(int a,int b)表示该函数的返回值不确定。

2、()在C语言中,函数体中变量的隐含存储类别是自动变量auto。

3、()return语句作为函数的出口,在一个函数体内只能有一个。

4、()在C程序中,函数不能嵌套定义,但可以嵌套调用。

5、()C语言的源程序中必须包含库函数。

6、()在C程序中,函数调用不能出现在表达式语句中。

7、()在C函数中,形参可以是变量、常量或表达式。B、22 D、25 printf(“%d”,x);int i;for(i=1;i

C、14

D、15 printf(“%dn”,r);

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 C、#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

11、以下程序运行后,输出结果是()。#define PT 5.5 #defme S(x)PT*x*x #include main(){ B、6 C、36

D、18

B、#define POWER(x)(x)*(x)D、#define POWER(x)((x)*(x))

int a=1,b=2;printf(“%4.1fn”,S(a+b));} A、49.5

12、下列程序执行后的输出结果是(B)。#define MA(x)x*(x-1)#include main(){ int a=1,b=2;printf(“%dn”,MA(1+a+b));} A、6

13、以下程序的输出结果为(D)。#include #define SQR(x)x*x main(){ int a,k=3;a=++SQR(k+1);printf(“%dn”,a);} A、6

14、对下面程序段,正确的判断是()。#define A 3 #define B(a)((A+1)*a)...x=3*(A+B(7));A、程序错误,不许嵌套宏定义

C、x=21

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

B、x=93

D、程序错误,宏定义不许有参数.B、l0 C、8

D、9 B、8 C、10

D、12 B、9.5

C、22.0

D、45.0

二、判断题

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)!=''){ p1++;p2++;} } 函数的功能是:()

A)将p1所指字符串复制到p2所指内存空间 B)将p1所指字符串的地址赋给指针p2 C)对p1和p2两个指针所指字符串进行比较 D)检查p1和p2两个指针所指字符串中是否有''

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

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]!='')i++;return(sl[i]=='' && s2[i]=='');} 此函数的功能是:()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

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;)3

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)3,6,9

20、以下程序的输出结果是:(A)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

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

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

34、以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。void reverse(int a[],int n){ int i,t;for(i=0;i

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);

第二篇:C语言程序设计试题集及其答案

第一章 基础知识

一.填空 1.每个C程序都必须有且仅有一个________ 函数。

2.C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载 和执行。

3.软件是程序,以及______、使用和维护所需要的所有文档。

4.国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。

5.程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类。

6.C语言是由________组成的。

7.C语言的函数可分为主函数main、标准库函数和_________。

8.一个函数是由两部分组成的,即:________和 函数体。

9.编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。

10.程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动 化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程 序,统称为_________。

11.机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻 译可以直接识别和执行的程序设计语言。

12.与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对

象,也可以用标号和符号来代替地址、常量和变量。13.在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。

14.C程序的执行均是由执行_________开始。

15.函数体即为包含在{ }内的部分。它分为________和为完成功能任务由若干个C语句

组成的执行部分。

16.C语言程序中一条简单语句是以________字符作为结束符的。

17.18.C语言是结构化、________的程序设计语言。

由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。

19.用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以

说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。

20.第一个系统体现结构化程序设计思想的教学工具语言是_______语言。

解答: 1.main()2.编译

3.开发

4.指令序列

5.高级语言

6.函数

7.自定义函数

8.函数首部

9.翻译

10.应用软件

11.二进制代码

12.助记符

13.#

14.main函数

15.声明部分

16.;(或分号)

17.模块化

18.翻译

19.执行速度

20.PASCAL

二.阅读程序写结果 解答: 三.补充程序 解答: 四.改错题 解答: 五.编程一 解答: 六.编程二 解答: 第二章 常量、变量和表达式

一.填空

1.以16位计算机为例,若定义long int a;则变量a占______个字节的内存空间。

2.以16位计算机为例,若定义double a;则变量a占______

个字节的内存空间。

3.以16位计算机为例,若定义long double;则变量a占 ______ 个字节的内存空间。

4.在______

位机,int型占4个字节。

5.C语言的数据类型有:基本数据类型、构造数据类型、枚举类型、______

、空类型。

6.在C语言中,基本数据类型有:______。

7.整型常量046转换为十进制数等于______。

8.整型常量054转换为十进制数等于______。

9.整型常量0x125转换为十进制数等于

______。

10.整型常量0x7C转换为十进制数等于

______。

11.整型常量39转换为八进制等于

______。

12.实数473.468写成规范化指数形式,则应为

______。

13.实数0.0453写成规范化指数形式,则应为

______。

14.将0x123转换为二进制等于

______。

15.字符’A’表示成十六进制等于

______。

16.在C语言中,称代表常量的标识符为

______。

17.C语言中是用编译预处理命令______

来定义符号常量

18.在C语言中,以反斜杠符()开头,后跟字符的字符序列,称之为 ______

,主

要用来表示控制及不可见的字符或者一些图形符号

19.语句printf(“106”)执行的结果输出是

______。

20.语句printf(“b”)执行的结果输出是______。

21.语句printf(“b”)执行的结果输出是

______。

22.语句printf(“102”)执行的结果输出是 ______。

23.若有char ch1;ch1='a'+4;则语句printf(“%c”,x)的输出结果为

______。

24.字符串常量“Hello, everyone!”占据的内存空间为______

个字节

25.字符串常量“Hello,Bob!”占据的内存空间为 ______

个字节

26.十进制整型常量由0~9个数据组成,但不能以______

开始,没有小数部分

27.十六进制常量由0~9和______

组成

28.unsigned long类型常量通常以______

为后缀

29.实型常量通常有小数形式和______

两种表达方式

30.C语言中是用编译预处理命令______

来包含其他源文件

31.为了表示字符串的结束,系统自动在字符串的最后加一个______

,但不被输出

32.C语言中,其值可被改变的量称为变量,它具有三个基本要素:变量名、______

和变量值

33.C语言规定,变量的标识符只能由字母、数字和下划线组成,且不能以______

开 头。34.在16位机中,sizeof(“hellon”)等于 ______。

35.在16位机中,printf(““hello””)等于

______。

36.字符变量在内存中占用______

个字节的存储空间。

37.若有定义int x=27, y=6;则表达式 x/y的值为

______。

38.若有定义int x=47, y=8;则表达式 x%y的值为

______。

39.若有定义char ch1='A',ch2,ch3;执行ch2=ch1++;ch3=++ch1;printf(“ch1=%c, ch2=% c”,ch1,ch2);则输出为

______。

40.若有定义char ch1='A',ch2,ch3;执行ch2=ch1++;ch3=++ch1;printf(“ch2=%c, ch3=% c”,ch2,ch3);则输出为

______。

41.若有定义int i=5, j, k;执行j=i--;k=--i;printf(“i=%d, j=%dn”, i, j);则输 出为

______。

42.表达式(int)(13.7+25.6)/4%5 的值是

______。

43.表达式 3.6-5/2+1.2+5%3 的值是______。

44.表达式54%10/2+4.0*(8/5)的值是

______。

45.若定义int x;double b=5.45;执行x=b后,则x的值为______。

46.若定义int y;char c='A';执行y=c后,则y的值为

______。

47.若定义 int a=8;float b=2.5;则a/(int)(b)的值为

______。

48.若a=5,则执行a*=7-3语句后,a的值是

______。

49.若int a=1,b=0,c=4,d=2;则表达式(a>b ? a:b)&&(c-d)的值为______。

50.已知a = 0,表达式 a = 1?b = 1:b = 0;执行后,b的值是

______。

51.若定义int m=7,n=12;则表达式n%=m-m%5的值是

______。

52.若定义int a=8;float b=4.5;执行a*=a/=a-b后,a的值为 ______。

53.int a=2;!a++的值为

______。

54.int a=0;!a++&++a的值为

______。

55.int a=7;float b=4.5;则printf(“%d”,a*=a/=a-b)的值为 ______。

56.int k=7;float a=2.5,b=4.7;则表达式a+k%3*(int)(a+b)%2/4的值为 ______。

57.#define Max(a,b)(((a)-(b))&0x80000000)?(a):(b),int a=2,b=6;printf(“%dn”,M ax(a,b))的值为

______。

58.在32位机中,int a=4,b=7;printf(“%0x”,a-b)的值为:______。

59.int x,y,z;x=y=2;z=3;y=x++-1;printf(“%d,%d”,x,y)的值为: ______。

60.int i=2,j;printf(“%d”,j=i<1)的值为:______

解答: 1.0 2.4 3.10 4.32

5.指针类型

6.int、float、double、char 7.38 8.44

9.293

10.124

11.047

12.4.734680e+002

13.4.530000e-002

14.100100011

15.x41/41H

16.符号常量

17.#define

18.转义字符常量

19.F 20.b

21.b

22.B 23.e

24.16

25.11 26.0

27.A~F

28.U

29.指数形式

30.#include

31.“”

32.变量类型

33.数字

34.7

35.“hello”

36.1 37.4 38.7

39.ch1=C, ch2=A

40.ch2=A, ch3=C

41.i=3, j=5 42.4

43.4.800000

44.7.000000 45.5

46.65 47.4

48.20 49.1 50.1 51.2 52.4 53.0 54.0 55.4

56.2.500000 57.2

58.fffffffd 59.3,1 60.0

二.阅读程序写结果 解答: 三.补充程序 解答: 四.改错题 解答: 五.编程一 解答: 六.编程二 解答: 第三章 顺序结构

一.填空

1.C语言的语句可分为5类,它们是:控制语句、____________、函数语句、符合语句和空 语句。

2.常用于字符输入的函数为:________________。

3.常用于字符输出的函数为:________________。

4.常用于字符串输入的函数为:________________。

5.常用于字符串输出的函数为:________________。

6.格式输入函数的一般形式为:________________。

7.格式输出函数的一般形式为:________________。

8.printf和scanf是标准的库函数,它们的函数原型在头文件________________中。

9.有char ch,则从键盘给ch赋值的格式输入语句为:________________。

10.如果要输出字符串常量“HelloWord!”,则格式输出语句为:________________。

11.设有定义:long x=-123456L;,请写出能够正确输出变量x值的语句________________。

12.若有int a,b;,想通过scanf(“%d%d”,&a,&b);输入语句给a赋于1,给b赋于2,则从键盘 输入数据的形式是________________。

13.若有int i,j;scanf(“i=%d,j=%d”;&i,&j);,要求给i赋10,给j赋20,则应该从键盘 输入_______。

14.已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为

1、j的值为

2、k 的值为3,请写出正确的输入语句________________。

15.有int m,n,p;scanf(“m=%dn=%dp=%d”,&m,&n,&p);printf(“%d%d%dn”,m,n,p);若想 从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是_____ ___________。

16.有 int a;float b, c;scanf(“%2d%3f%4f”,&a,&b,&c);printf(“na=%d, b=%f, c= %fn”, a, b, c);,若运行时从键盘上输入9876543210<回车>,则程序的输出结果是___________________ __。

17.有 int m=0256,n=256;则 printf(“%o %on”,m,n);的输出结果是__________________ ___。

18.有int x=102,y=012;,则printf(“%2d,%2dn”,x,y);的输出结果是______________ _______。

19.有定义和语句:int a;char c=10;float f=100.0;double x;a=f/=c*=(x=6.5);,则

printf(“%d %d %3.1f %3.1fn”,a,c,f,x);的输出结果是_____________________。

20.若有定义和语句:int m=0xabc,n=0xabc;m-=n;则printf(“%on”,m);的输出结果是___ __________。

21.若有int m=32,n=032;,则printf(“%d,%xn”,m,n);执行后输出结果是______________ _____。

22.若有 int a=1234;,则 printf(“%2dn”,a);的输出结果是_____________________。

23.若变量已正确说明为float类型,要通过语句scanf(“%f %f %f ”,&a,&b,&c);给a赋于1 0.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<回车> 24.若有 int x=3,y=1;则printf(“%d %dn”,x++,y+2);的输出结果是__________________ ___。

25.若有定义和语句:double d;float f;long l;int i;i=f=l=d=20/3;则 printf(“% d %ld %f %f n”, i,l,f,d);的输出结果是(小数点后只写一位)_____________________。

26.以下说法中正确的是 _____________________。

A)#define和printf都是C语句

B)#define是C语句,而printf不是

C)printf是C语句,但#define不是

D)#define和printf都不是C语句

27.若有 int k=17;,则 printf(“%d,%o,%x n”,k,k,k);的输出结果是_________________ ____。

28.以下叙述中正确的是_____________________。

A)输入项可以是一个实型常量,如:scanf(“%f”,3.5);B)只有格式控制,没有输入项,也能正确输入数据到内存,例如:scakf(“a=%d,b=%d”);C)当输入数据时,必须指明变量地址,例如:scanf(“%f”,&f);

29.若有定义和语句:int u=010,v=0x10,w=10;则printf(“%d,%d,%dn”,u,v,w);输出结果是 _____________________。

30.若有int a=1,b=4,c=2;float x=10.5, y=4.0, z;z=(a+b)/c+sqrt((double)y)*1.2/c+ x;,则printf(“%fn”,z);的输出结果是_____________________。

31.若有int a=2,c=5;,则printf(“a=%%d,b=%%dn”,a,c);的输出结果是________________ _____。

32.有char c;int n=100;float f=10;double x;x=f*=n/=(c=50);则printf(“%d %f n”,n,x);的输出结果是_____________________。

33.有int i=0,j=0,k=0;scanf(“%d%*d%d”,&i,&j,&k);printf(“%d%d%dn”,i,j,k);若 从键盘输入:10 20 30<回车>。输出结果是_____________________。

34.若有int a,b,c;a=25;b=025;c=0x25;,则printf(“%d %d %dn”,a,b,c);的输出结果 是___________。

35.有以下语句段

int n1=10,n2=20;

printf(“________________”,n1,n2);

要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。

n1=10 n2=20

36.若有语句int i=-19,j=i%4;则printf(“%dn”,j);的输出结果是_____________________。

37.有int a=0;a+=(a=8);则printf(“%dn”,a);的输出结果是_____________________。

38.有int a=1, b=2;a=a+b;b=a-b;a=a-b;则printf(“%d,%dn”, a, b);的输出结果是 ______________。

39.有unsigned short a=65536;int b;,则printf(“%dn”,b=a);的输出结果是________ ______。

40.语句printf(“10289n”);的数据结果为:__________________。

解答: 1.表达式语句

2.getchar()

3.putchar()

4.gets()

5.puts()

6.scanf(“格式控制字符串”,地址表列);

7.printf(“格式控制字符串”,输出表列);

8.stdio.h

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

10.printf(“%s”,HelloWord!);或者:printf(“HelloWord!”);

11.printf(“x=%1dn”,x);

12.1 2 或者 1

13.i=10,j=20

14.scanf(“%d,%d,%d”,&i,&j,&k);

15.m=123n=456p=789

16.a=98, b=765.000000, c=4321.000000

17.256 400

18.102,10

19.1 65 1.5 6.5 20.0

21.32,1a

22.1234

23.B

24.3 3

25.6 6 6.0 6.0

26.D

27.17,21,11

28.C

29.8,16,10

30.13.700000

31.a=%d,b=%d

32.2 20.000000

33.10300

34.25 21 37

35.n1=%dnn2=%d

36.-3

37.16

38.2,1 39.0

40.B89

二.阅读程序写结果 解答: 三.补充程序 解答: 四.改错题 解答: 五.编程一 解答: 六.编程二 解答: 第四章 选择结构

一.填空

1.在if, while, case, do, else 等关键字中,用于选择结构的有().2.已知 a = 1;那么 if(a = 2)printf(“%d”, 2);else printf(“%d”, 1);的输出结 果是().3.已知 char a = 'A';那么 if(a > 65)printf(“%s”, “bigger”);else printf(“%s” , “smaller”);的输出结果是().4.表示“x≥ y≥ z”的C语言表达式是()。

5.在C语言中,用于实现选择结构的语句有()语句和()语句。

6.判断两个浮点型变量x和y是否相等一般用:if(<1e-6)„。

7.设有程序段: t=6;a=7;b=8;if(a=b)t=a;,这段程序执行后,t的结果是()。

8.设a=1,b=2,c=3,d=4,则表达式:a>b?a:c>d?a:d的结果为()。

9.表达式98 && 8 && 31 &&(9812;

printf(“%dn”, y);

return 0;} 输入:12<回车>

17.#include int main(){

float x, y;

char op;

double r;

scanf(“%c%f%f”,&op,&x,&y);

switch(op)

{

case '+': r = x + y;break;

case '-': r = x-y;break;

case '*': r = x * y;break;

case '/': r = x / y;break;

}

printf(“%.1f”, r);

return 0;}

输入:3.5<回车>

18.#include “stdio.h” void main(){

int a=7;

if(a>9 || a<10)

a=a/3;

a=a%3;

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

else

19.#include void main(){

int a=20;

switch(a%3)

{

case 0: printf(“0”);

case 1: printf(“1”);

case 2: printf(“2”);

default: printf(“3”);

}

printf(“4”);}

20.#include void main(){

int a=2,b=5,c=8,t;

if(a < b){ t = a;a = b;b = t;}

if(b < c){ t = b;b = c;c = t;}

if(a < b){ t = a;a = b;b = t;}

printf(“%d,%dn”, a++,--c);}

解答: 1.运行结果:

9,7

2.a=1,b=3

3.ch1= F

4.3,5

5.m=21

6.ch3=D

7.y=31.600000

8.Good!Best!9.A B C

10.***

11.q=35

12.**0****2**

13.*&

14.d=20

15.**1** 16.0

17.0.6

18.a=2

19.234

20.8,1

三.补充程序

1.根据输入字符的ASCII码来判别字符的类别。由ASCII码表可知ASCII值小于32的为控制字

符。在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母,在“a”和“z”之 间为小写字母,其余则为其它字符。

#include“stdio.h”

#include“string.h” int main(){ char c;printf(“input a character: ”);

_____________________________________________

if(c<32)printf(“This is a control charactern”);

_____________________________________________

printf(“This is a digitn”);else if

_______________________________________

printf(“This is a capital lettern”);else if(c>='a'&&c<='z')

printf(“This is a small lettern”);

____________________________________________

printf(“This is an other charactern”);

return 0;}

2.计算器程序。用户输入运算数和四则运算符,输出计算结果.#include“stdio.h” int main(){ float a,b;____________________________________________;printf(“input expression: a+(-,*,/)b n”);scanf(“%f%c%f”,&a,&c,&b);switch(c){ case '+': printf(“%fn”,a+b);____________________________________________ case____________________________________________ printf(“%fn”,a-b);break;case '*': printf(“%fn”,a*b);break;case '/': ____________________________________________;break;default: printf(“input errorn”);} return 0;}

3.输入三个整数,输出最大数和最小数(注:max总是记录最大数,而min总是记录最小数).#include“stdio.h” int main(){ int a,b,c,max,min;printf(“input three numbers: ”);scanf(“%d%d%d”,&a,&b,&c);if(a>b){ _______________________________________ _______________________________________ } else {max=b;min=a;} ____________________________________________ max=c;if(min>c)_____________________________________ printf(“max=%dnmin=%d”,max,min);return 0;}

4.#include“stdio.h” int main(){ int a;printf(“input integer number: ”);scanf(“%d”,&a);_____________________________________________ { case 1:printf(“Mondayn”);break;_____________________________________________ printf(“Tuesdayn”);break;case 3:printf(“Wednesdayn”);break;case 4:printf(“Thursdayn”);_____________________________________________ case 5:printf(“Fridayn”);break;case 6:printf(“Saturdayn”);break;case 7:printf(“Sundayn”);break;_____________________________________________ printf(“errorn”);} return 0;}

5.判断a>b、a

#include“stdio.h” int main(){ int a,b;printf(“please input a,b: ”);scanf(“%d%d”,&a,&b);_____________________________________________ printf(“A=Bn”);_____________________________________________ printf(“A>Bn”);_____________________________________________ printf(“A

6.根据以下函数关系,对输入的每个x值,计算出相应的y值。

#include“stdio.h” int main(){ int x,c,m;float y;scanf(“%d”,&x);

_________________________________________c=-1;c=_____________________________________________;switch(c){ case –1 : y=0;break;case 0 : y=x;break;case 1 : y=10;break;case 2 : case 3 : y=-0.5*x+20;_____________________________________________;

else

7.default : y=-2;} if(c!=2)printf(“y=%f”,y);

_____________________________________________ printf(“error!”);return 0;}

找出x,y,z三个数中的最小数,并判断该数是否等于b。#include“stdio.h” int main(){ int x=4,y=5,z=8 ,b;int u,v;scanf(“%d”,&b);u = x

8.输入两个运算数x,y和一个运算符号op,输出该运算结果的值,例如输入3+5↙得到结果8.#include“stdio.h”

int main()

{

float x,y,r;

char op;

scanf(“%f,%c,%f”,&x,&op,&y);

switch(op)

{

case '+': r=x+y;_____________________________________________;

_____________________________________________ r=x-y;break;

case '*' :_____________________________________________;break;

_____________________________________________ r=x/y;break;

}

printf(“%f”,r);

return 0;}

9.根据输入字符的ASCII码来判别字符的类别。由ASCII码表可知ASCII值小于32的为控制字

符。在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母,在“a”和“z”之 间为小写字母,其余则为其它字符。

#include“stdio.h” int main(){ char c;printf(“input a character: ”);c=getchar();_____________________________________________ printf(“This is a control charactern”);

if(c>='0'&&c<='9')

printf(“This is a digitn”);_____________________________________________

printf(“This is a capital lettern”);_____________________________________________

printf(“This is a small lettern”);_____________________________________________ printf(“This is an other charactern”);return 0;}

10.找出a,b,c三个数中的最大数,并判断该数是否等于x。

#include“stdio.h” int main(){ int a=8,b=4,c=12,x;int u,v;scanf(“%d”,&x);

u = a

}

解答: 1.c=getchar();

(c>='0'&&c<='9')

(c>='A'&&c<='Z')

else

2.char c;

break;

'-':

printf(“%fn”,a/b);

3.max=a;

min=b;

if(max

min=c;

4.switch(a)

case 2:

break;

default:

5.if(a==b)

else if(a>b)

else if(a

else

6.if(x<0)c=x/10;

break;

else

7.x:y;

u:z;

(v==b)

else

8.break;

case '-':

r=x*y;

case '/':

9.if(c<32)

else if(c>='A'&&c<='Z')

else if(c>='a'&&c<='z')

else

10.b:a

c:u

(v==x)

else

四.改错题 解答: 五.编程一

1.求分段函数的值,输入x值,输出结果。

2.从键盘上输入一个数x,计算并输出下列分段函数y的值。

3.某运输公司运费计算时根据运输距离打折计算,折扣的计算方法如下:

(其中,discount表示折扣,S表示运输距离)。

编写一完整程序,输入运输距离,统计运费并输出。每公里的运费通过符号常量定义为2.5。

4.编程输入一元二次方程的三个系数,求解一元二次方程的实根,无实根时不用求虚根,给出相应提示信息即可。

5.给定三条边,判断其是否能构成三角形,若能构成,判断其是等腰三角形、等边三角形、直角三角形还是普通三角形。

6.从键盘输入一个三角形的三条边,判断是否能组成三角形,若能组成三角形,则输出它 的面积。7.从键盘输入一个百分制的学生成绩,输出其对应的分数等级,其中90~100为A,80~89 为B,70~79为C,60~69为D,60以下为E。

8.编写一个程序,从键盘输入三个整数给a,b,c,然后交换它们中的数,把a中原来的值 给b,把b中原来的值给c,把c中原来的值给a。

9.输入一个字符,判断其是否为英文字母,若是英文字母,则将其大小写进行转换,若不 是英文字母,则不变。

10.给定三个整数型x,y,z,输出三个数中的最大值和最小值。

解答: 1.#include “stdio.h” #include “math.h” void main(){ float x,y;printf(“input xn”);scanf(“%f”,&x);if(x<0)

y=1;else if(x<=5)

y=2*x;else

y=sqrt(x);printf(“x=%5.1fy=%8.3fn”,x,y);}

2.#include “stdio.h” #include “math.h” void main(){ float x,y;printf(“input xn”);scanf(“%f”,&x);if(x>20||x>1&&x<10){

printf(“无定义n”);

return;} if(x<0)

y=-x;else if(x<=1)

y=sin(x)+x;else if(x>=10&&x<=20)

y=x*x*x;printf(“x=%5.1fy=%8.3fn”,x,y);}

3.#include “stdio.h” #include “math.h” #define price 2.5 void main(){ float discount,cost,s;printf(“input distancen”);scanf(“%f”,&s);if(s<250)

discount=0;else if(s<800)

discount=0.02;else if(s<1500)

discount=0.05;else

discount=0.08;cost=s*(1-discount)*price;printf(“distance=%5.1f;cost=%5.1fn”,s,cost);}

4./*功能:求一元二次方程的解。*/ #include “math.h” #include “stdio.h” main(){float a,b,c,disc,x1,x2;

scanf(“%f,%f,%f”, &a, &b, &c);

disc=b*b-4*a*c;

if(disc==0)

printf(“x1=x2=%7.2fn”,-b/(2*a));/*输出两个相等的实根*/

else if(disc>0)

{ x1=(-b+sqrt(disc))/(2*a);/*求出两个不相等的实根*/

x2=(-b-sqrt(disc))/(2*a);

printf(“x1=%7.2f,x2=%7.2fn”, x1, x2);

}

else

printf(“无实根n”);}

5.#include “stdio.h” void main(){ float a,b,c;printf(“输入三条边:n”);scanf(“%f%f%f”,&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){ if(a==b&&b==c)

printf(“等边三角形n”);

else if(a==b||b==c||c==a)

printf(“等腰三角形n”);

else if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==b*b+a*a)

printf(“直角三角形n”);} else

printf(“不能构成三角形 n”);}

6.#include “stdio.h” #include “math.h” void main(){ float a, b, c, s, area;printf(“输入三条边:n”);scanf(“%f%f%f”,&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){ s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf(“area=%7.2fn”,area);} else

printf(“不能构成三角形 n”);}

7.#include void main(){

int score;

char d;

printf(“Input scoren”);

scanf(“%d”,&score);

if(score>100||score<0)

{ printf(“data error!n”);

return;

}

switch(score/10)

{ case 10:

case 9:d='A';break;case 8:d='B';break;

case 7:d='C';break;

case 6:d='D';break;default : d='E';break;

}

printf(“score=%3ddengji=%cn”,score,d);}

8.#include void main(){

int a,b,c,t;

printf(“Input a,b,cn”);

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

t=a;

a=b;

b=c;

c=t;

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

9.#include void main(){

char c1,c2;

printf(“Input a

letter: ”);

c1=getchar();

if(c1>='a'&&c1<='z')

c2=c1+'A'-'a';

else if(c1>='A'&&c1<='Z')

c2=c1+'a'-'A';

else

c2=c1;

printf(“原字符:%c转换后为:%cn”,c1,c2);} 10.#include void main(){

int a,b,c,max,min;

printf(“Input a,b,cn”);

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

max=a;min=a;

if(b>max)max=b;

else if(b

if(c>max)max=c;

else if(c

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

printf(“max=%d;min=%dn”,max,min);}

六.编程二 解答: 第五章 循环结构

一.填空

1.C语言中提供了三种循环控制语句,它们是:()、do-while语句、()。

2.break语句在C程序中只能出现在两种场合:一是用于()语句中,二是用于()语句中。

3.以下程序段中的语句printf(“***”)要执行5次,请在空白处填入合适的数。

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

printf(“***”);

4.定义int k=10;执行语句 while(k<20)k += 1 ;

后,k的值为()。

5.在循环控制结构中break语句的作用是()。

6.在循环控制结构中continue语句的作用是:()。

7.若已知int a[5][5];并在运行过程中a数组已经赋值;要打印次对角线元素,在空白处 填入合适的值/表达式;

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

for(j =();j >=0;j--)

printf(“%5d”, a[i][j]);8.执行完语句sum = 0;for(i = 0;i < 10;i++){ if(i % 5 = = 0)sum += i;sum =()。

9.在使用while 语句中需要注意,为了防止“死循环”的发生,在循环体中一定要有()语句。

10.do-while 语句中,判断循环条件在(),执行循环体在()。(填“先”“后 ”)

解答: 1.2.3.4.5.6.7.8.9.10.二.阅读程序写结果 1.#include void main(){

int number , digit;

number = 1234;

while(number!= 0)

{

digit = number%10;

printf(“%d” , digit);

number = number / 10;

} }

2.#include #define N 5 void main(){

int i;

for(i=1;i

printf(“%dn”,i*i);}

3.#include void main(){

int i,s,x;

s=0;

x=15;

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

if(x%i==0)

s= s + i;

printf(“i=%d,s=%dn”,i,s);}

4.#include void main(){

int counter=1;

while(counter <= 5)

printf(“%d n”, counter);

counter++;

} }

5.#include int main(){

int i,sum,m,a;

sum=0;

m=5;

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

{

scanf(“%d”,&a);

if(a>m)

sum+=a;

}

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

return 0;}

{

输入:2 10 8 3<回车>

6.#include int main(){

int i,j,k;

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

{

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

printf(“ ”);

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

printf(“*”);

printf(“n”);

}

return 0;}

7.#include int main(){

int i,j;

i=1;

while(i<5)

{

for(j=1;j<2*i+1;j++)

printf(“%c”,'#');

printf(“n”);

i++;

}

return 0;}

8.#include int main(){

int i=10,m=0,n=0;

do

{

if(i%2!=0)

m=m+i;

else

n=n+i;

i--;

}while(i>=0);

printf(“m=%d,n=%dn”,m,n);

return 0;}

9.#include void main(){

int sum=0,n;

scanf(“%d”,&n);

while(n<=5)

{

sum+=n;

n++;

}

printf(“sum=%d”,sum);} 输入:1<回车>

10.#include void main(){

int i, j;

for(i=2;i>=0;i--)

{

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

printf(“*”);

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

printf(“!”);

printf(“n”);

} }

11.#include void main(){

int a,b;

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

{

if(b>20)break;

if(b%4==1)

b=b+4;

}

b=b-5;

}

printf(“a=%dn”,a);}

12.#include void main()

{

continue;

{

char k;

int i;

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

{

scanf(“%c”,&k);

switch(k)

{

case '0': printf(“anothern”);

case '1': printf(“numbern”);

}

} } 输入:01<回车>

13.#include int main(){

int i, s = 0;

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

{

s += i * i;

if(s > 10)break;

}

printf(“i=%d, s=%dn”, i, s);

return 0;}

14.#include void 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);

} } 输入:ABCdef<回车>

15.#include int main(){

int a, b;

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

{

if(b >= 9)break;

if(b % 3 == 1)

{

b += 3;

continue;

}

b-= 5;

}

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

return 0;}

16.#include int main(){

int i = 0,j = 0;

while(i < 10)i++;

while(j++ < 10);

printf(“i=%d,j=%dn”,i,j);

return 0;}

17.#include “stdio.h” void main(){

int i,j,t;

for(i=1,j=10;i<3;i++,j--)

t=i+j;

t++;

printf(“%d,%d”,j,t);}

18.#include “stdio.h” void main(){

int i=10,j;

do

{

j = i%2;

printf(“%d”,j);

i--;

} while(i> 4);}

19.#include “stdio.h” void main(){

int i=7,j;

while(i> 2)

{

j = i%2;

printf(“%d”,j);

i--;

}

printf(“%d”,i);}

20.#include void main(){

int i,j,t=0;

for(i=3;i>0;i--)

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

t+=j;

printf(“t=%d”,t);}

解答: 1.4321 2.1 4 9 16

3.i=6,s=9 4.1 2 3 4

5.sum=18

6.*

**

*** **** 7.## #### ######

# 8.m=25,n=30

9.sum=15

10.**!*!!!

11.a=6

12.another number number

13.i=3, s=14

14.abcDEF

15.4,10

16.i=10,j=11

17.8,12

18.010101

19.101012

20.t=18

三.补充程序

1.输出100以内能被3整除的数

#include“stdio.h” int main(){ _____________________________________________;for(_________________________;n<=100;________________________){ if(n%3!=0)________________________ printf(“%d ”,n);} return 0;}

2.输出100以内的素数。素数是只能被1 和本身整除的数。为减少循环次数,只需对数n用2 ~ 去除来判断该数是否素数。

#include“stdio.h” ________________________ int main(){ int n,i,k;for(n=2;n<=100;________________________){ k=sqrt(n);for(i=2;i<=k;________________________)if(n%i==0)________________________ if(i>k)printf(“t%2d”,n);} return 0;}

3.输出200以内能被5整除的数

#include“stdio.h” int main(){ ________________________ for(________________________;n<=200;________________________){ if(n%5!=0)________________________ printf(“%d ”,n);} return 0;}

4.求输入的十个整数中正数的个数及其平均值

#include int main(){

int i,num=0,a;float sum=0;

for(i=0;________________________;________________________){

scanf(“%d”,&a);if(a>=0){ ________________________;________________________;}

}

printf(“%d plus integer's sum: %6.0fn”,num,sum);printf(“Mean value:%6.2fn”,sum/num);return 0;} 5.求输入的十个整数中负数的个数及其平均值

#include int main(){

int i,num,a;float sum=0;________________________;________________________;while(i<10){

scanf(“%d”,&a);if(a<=0){ ________________________;num++;} ________________________;

}

printf(“%d plus integer's sum: %6.0fn”,num,sum);printf(“Mean value:%6.2fn”,sum/num);return 0;}

6.分解并打印出X的各个素数因子.如18=1*2*3*3.#include int main(){

int i,x;

scanf(“%d”,&x);

printf(“%d=1”,x);

for(________________________;i<=x;________________________){

while________________________ { printf(“*%d”,i);

________________________;} } return 0;}

7.输出九九乘法表.#include int main(){

int i,j;

for(i=1;________________________;________________________)

{

for(________________________;________________________;j++)

printf(“%2d*%2d=%2d”, j, i ,i*j);

printf(“nn”);

} return 0;} 8.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

#include “stdio.h” int main(){ int n,t,number=20;float a=2,b=1, ________________________;for(n=1;________________________;________________________){ s=s+a/b;t=a;

a=a+b;________________________;} printf(“sum is %9.6fn”,s);return 0;}

9.求1+2!+3!+...+20!的和.#include “stdio.h” int main(){ float n, ________________________,t=1;for(n=1;________________________;________________________;){ t*=n;________________________;} printf(“1+2!+3!...+20!=%en”,s);return 0;}

10.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

#include “stdio.h” int main(){ int n,t,number=20;float a=2, ________________________,s=0;for(________________________;________________________;n++){ s=s+a/b;t=a;

________________________;b=t;} printf(“sum is %9.6fn”,s);return 0;}

解答: 1.int n;

n=1;

n++

continue;

2.#include“math.h”

n++

i++

break;

3.int n;

n=1

n++

continue;

4.i<10

i++

num++

sum+=a

5.i=0;

num=0;

sum+=a;

i++;

6.i=1

i++

(x%i==0)

x=x/i;

7.i<=9

i++

j=1

j<=i

8.s=0

n<=20

n++

b=t;

9.s=0

n<=20

n++

s+=t;

10.b=1

n=1

n<=20

a=a+b

四.改错题 解答:

第三篇:《C语言程序设计》精品试题(附讲解答案)

《C语言程序设计》精品试题

一、单项选择题(答案P12)

导读:单项选择题要求从给出的四个备选答案中,选出一个最符合题意的答案。本类习题主要检查对C语言基本概念的掌握情况,读者可根据学习进度选做部分习题。在完成习题的过程中,不但要选出正确的答案,而且要清楚不正确的选项错在何处,以加深对概念的理解。对于掌握不准的问题,应该通过上机实验来检验。

【1.1】以下不正确的C语言标识符是____。A)int B)a_1_2 C)ab1exe D)_x

【1.2】以下是正确的C语言标识符是____。A)#define B)_123 C)%d D)n

【1.3】下列四组字符串中都可以用作C语言程序标识符的一组是。••• A)print B)iam C)Pxq D)str_l ••• _3d one_half My->book Cpp ••• oodb start$it line# pow ••• aBc 3pai His.age while

【1.4】下面各选项组中,均是C语言关键字的组是。A)auto,enum,include B)switch,typedef,continue C)signed,union,scanf D)if,struct,type

【1.5】下列不属于C语言关键字的是。A)default B)register C)enum D)external

【1.6】C语言程序从main()函数开始执行,所以这个函数要写在____。A)程序文件的开始 B)程序文件的最后

C)它所调用的函数的前面 D)程序文件的任何位置

【1.7】下列关于C语言的叙述错误的是____ A)大写字母和小写字母的意义相同 B)不同类型的变量可以在一个表达式中

C)在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型

D)同一个运算符号在不同的场合可以有不同的含义

【1.8】在C语言中,错误的int类型的常数是。A)32768 B)0 C)037 D)0xAF

【1.9】执行语句 printf(“%x”,-1);屏幕显示____。A)-1 B)1 C)-ffff D)ffff

【1.10】已知 long i=32768;执行语句printf(“%d”,i);屏幕显示____。A)-1 B)-32768 C)1 D)32768

【1.11】已知 long i=65539;执行语句printf(“%d”,i);屏幕显示____。A)65539 B)-3 C)3 D)程序不能执行

【1.12】在C语言中,整数-8在内存中的存储形式是。A)1111 1111 1111 1000 B)1000 0000 0000 1000 C)0000 0000 0000 1000 D)1111 1111 1111 0111

【1.13】C语言中字符型(char)数据在内存中的存储形式是____。

A)原码 B)补码 C)反码 D)ASCII码

【1.14】将字符g赋给字符变量c,正确的表达式是。A)c=147 B)c=“147” C)c='147' D)c='0147'

【1.15】下列转义字符中错误的一个是____。A)'00' B)'014' C)'x111' D)'2'

【1.16】将空格符赋给字符变量c,正确的赋值语句是____。A)c='' B)c=NULL C)c=0 D)c=32

【1.17】已知:char a='70';则变量a中。

A)包含1个字符 B)包含2个字符 C)包含3个字符 D)说明非法

【1.18】字符串“"EOFn=-61”“的长度是____。A)8 B)9 C)14 D)非法字符串

【1.19】字符串”“的长度是____。A)0 B)1 C)2 D)非法字符串

【1.20】已知:char a;int b;float c;double d;执行语句”c=a+b+c+d;“后,变量c的数据类型是。

A)int B)char C)float D)double

【1.21】温度华氏和摄氏的关系是: C=-(F-32)。已知:float C,F;由华氏求摄氏的正确的赋值表达式是____。

A)C=5/9(F-32)B)C=5*(F-32)/9

C)C=5/9*(F-32)D)三个表达式都正确

【1.22】逗号表达式”(a=3*5,a*4),a+15“的值是____。A)15 B)60 C)30 D)不确定

【1.23】如果int a=1,b=2,c=3,d=4;则条件表达式”a

【1.24】为求出s=10!的值,则变量s的类型应当为。A)int B)unsiged C)long D)以上三种类型均可

【1.25】已知int i=10;表达式”20-0<=i<=9“的值是____。A)0 B)1 C)19 D)20

【1.26】已知int x=1,y;执行下述语句后变量x的值是____。y=++x>5&&++x<10;A)1 B)2 C)3 D)4

【1.27】为判断字符变量c的值不是数字也不是字母时,应采用下述表达式____。A)c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122 B)!(c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122)C)c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122 D)!(c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122)

【1.28】已知 int a[3][2]={3,2,1};则表达式”a[0][0]/a[0][1]/a[0][2]“的值是____。A)0.166667 B)1 C)0 D)错误的表达式

【1.29】已知 int x=1,y=1,z=1;表达式”x+++y+++z++“的值是____。A)3 B)4 C)5 D)表达式错误

【1.30】用十进制表示表达式”12|012“的值是____。A)1 B)0 C)12 D)14

【1.31】已知以下程序段: int a=3,b=4; a=a^b; b=b^a; a=a^b;

则执行以上语句后a和b的值分别是____。A)a=3,b=4 B)a=4,b=3 C)a=4,b=4 D)a=3,b=3

【1.32】在位运算中,操作数每右移一位,其结果相当于____。

A)操作数乘以2 B)操作数除以2 C)操作数除以16 D)操作数乘以16

【1.33】已知 char a=222;执行语句a=a&052;后,变量a的值是____。A)222 B)10 C)244 D)254

【1.34】已知二进制数a是00101101,如果想通过整型变量b与a做异或运算,使变量a的高4位取反,低4位不变,则二进制数b的值应是____。A)11110000 B)00001111 C)11111111 D)00000000

【1.35】已知 int a=15,执行语句a=a<<2以后,变量a的值是____。A)20 B)40 C)60 D)80

【1.36】已知int x=5,y=5,z=5;执行语句x%=y+z;后,x的值是____。A)0 B)1 C)5 D)6

【1.37】使用语句scanf(”x=%f,y=%f“,&x,&y);输入变量x、y的值(□代表空格),正确的输入是____。A)1.25,2.4 B)1.25□2.4 C)x=1.25,y=2.4 D)x=1.25□y=2.4

【1.38】下列循环语句中有语法错误的是____。A)while(x=y)5; B)while(0);

C)do 2;while(x==b); D)do x++ while(x==10);

【1.39】已知int x=(1,2,3,4);变量x的值是____。A)1 B)2 C)3 D)4

【1.40】表达式sizeof(double)是。

A)函数调用 B)double型表达式 C)int型表达式 D)非法表达式

【1.41】执行语句printf(”2:%d,“,printf(”1:%d,“,scanf(”%d“,&x)));以后的输出结果是____。A)2:1,1:1, B)1:1,2:1, C)2:4,1:1 D)1:1,2:4,【1.42】已知:int x,y;double z;则以下语句中错误的函数调用是。A)scanf(”%d,%lx,%le“,&x,&y,&z); B)scanf(”%2d*%d%lf“,&x,&y,&z); C)scanf(”%x%*d%o“,&x,&y); D)scanf(”%x%o%6.2f“,&x,&y,&z);

【1.43】与条件表达式”(n)?(c++):(c--)“中的表达式(n)等价的表达式是____。A)(n==0)B)(n==1)C)(n!=0)D)(n!=1)

【1.44】已知int i=1,j=0;执行下面语句后j的值是____。while(i)switch(i){ case 1: i+=1;j++;break; case 2: i+=2;j++;break; case 3: i+=3;j++;break; default: i--;j++;break; } A)1 B)2 C)3 D)死循环

【1.45】求取满足式 12+22+32+ …… +n2 ≢1000的n,正确的语句是____。A)for(i=1,s=0;(s=s+i*i)<=1000;n=i++);

B)for(i=1,s=0;(s=s+i*i)<=1000;n=++i); C)for(i=1,s=0;(s=s+i*++i)<=1000;n=i);

D)for(i=1,s=0;(s=s+i*i++)<=1000;n=i);

【1.46】下面的for语句。

for(x=0,y=10;(y>0)&&(x<4);x++,y--);

A)是无限循环 B)循环次数不定 C)循环执行4次 D)循环执行3次

【1.47】已知int i=1; 执行语句while(i++<4);后,变量i的值为____。A)3 B)4 C)5 D)6 【1.48】已知int x=12,y=3;执行下述程序后,变量x的值是____。do { x/=y--; }while(x>y);

A)1 B)2 C)3 D)程序运行有错误

【1.49】已知 char a[][20]={”Beijing“,”shanghai“,”tianjin“,”chongqing“};语句printf(”%c“,a[30]);的输出是____。

A)<空格> B)n C)不定 D)数组定义有误

【1.50】若用数组名作为函数调用时的实参,则实际上传递给形参的是。A)数组首地址 B)数组的第一个元素值

C)数组中全部元素的值 D)数组元素的个数

【1.51】对二维数组的正确说明是____。

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};

【1.52】对字符数组s赋值,不合法的一个是____。A)char s[]=”Beijing“;

B)char s[20]={”beijing“}; C)char s[20];s=”Beijing“;

D)char s[20]={'B','e','i','j','i','n','g'};

【1.53】对字符数组str赋初值,str不能作为字符串使用的一个是____。A)char str[]=”shanghai“; B)char str[]={”shanghai“};

C)char str[9]={'s','h','a','n','g','h','a','i'}; D)char str[8]={ 's','h','a','n','g','h','a','i'};

【1.54】对函数形参的说明有错误的是____。A)int a(float x[],int n)B)int a(float *x,int n)C)int a(float x[10],int n)D)int a(float x,int n)

【1.55】如果一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,这个变量的存储类型应该被说明为____。

A)静态变量 B)动态变量 C)外部变量 D)内部变量

【1.56】在一个C源程序文件中,•若要定义一个只允许在该源文件中所有函数使用的变量,则该变量需要使用的存储类别是。A)extern B)register C)auto D)static

【1.57】在C语言中,函数的数据类型是指____。A)函数返回值的数据类型 B)函数形参的数据类型

C)调用该函数时的实参的数据类型 D)任意指定的数据类型 【1.58】已知如下定义的函数: fun1(a){ printf(”n%d“,a); } 则该函数的数据类型是____。

A)与参数a的类型相同 B)void型 C)没有返回值 D)无法确定

【1.59】定义一个函数实现交换x和y的值,并将结果正确返回。能够实现此功能的是____。A)swapa(int x,int y)B)swapb(int *x,int *y){ int temp; { int temp;

temp=x;x=y;y=temp; temp=x;x=y;y=temp; } } C)swapc(int *x,int *y)D)swapd(int *x,int *y){ int temp; { int *temp;

temp=*x;*x=*y;*y=temp; temp=x;x=y;y=temp; } }

【1.60】求一个角的正弦函数值的平方。能够实现此功能的函数是____。A)sqofsina(x)float x;

{ return(sin(x)*sin(x)); } B)double sqofsinb(x)float x;

{ return(sin((double)x)*sin((double)x)); } C)double sqofsinc(x){ return(((sin(x)*sin(x)); } D)sqofsind(x)float x;

{ return(double(sin(x)*sin(x)));

【1.61】一个函数内有数据类型说明语句如下: double x,y,z(10);

关于此语句的解释,下面说法正确的是____。A)z是一个数组,它有10个元素。

B)z是一个函数,小括号内的10是它的实参的值。C)z是一个变量,小括号内的10是它的初值。D)语句中有错误。

【1.62】已知函数定义如下: float fun1(int x,int y){ float z; z=(float)x/y; return(z); } 主调函数中有int a=1,b=0;可以正确调用此函数的语句是____。A)printf(”%f“,fun1(a,b)); B)printf(”%f“,fun1(&a,&b)); C)printf(”%f“,fun1(*a,*b)); D)调用时发生错误

【1.63】下面函数的功能是____。a(s1,s2)char s1[],s2[];

{ while(s2++=s1++); } A)字符串比较 B)字符串复制 C)字符串连接 D)字符串反向

【1.64】在下列结论中,只有一个是错误的,它是。A)C语言允许函数的递归调用

B)C语言中的continue语句,可以通过改变程序的结构而省略 C)有些递归程序是不能用非递归算法实现的D)C语言中不允许在函数中再定义函数

【1.65】已知:int a, *y=&a;则下列函数调用中错误的是。A)scanf(”%d“, &a); B)scanf(”%d“, y); C)printf(”%d“, a); D)printf(”%d“, y);

【1.66】说明语句”int(*p)();“的含义是。A)p是一个指向一维数组的指针变量 B)p是指针变量,指向一个整型数据

C)p是一个指向函数的指针,该函数的返回值是一个整型 D)以上都不对

【1.67】设有说明int(*p)[4];其中的标识符p是。A)4个指向整型变量的指针变量

B)指向4个整型变量的函数指针

C)一个指向具有4个整型元素的一维数组的指针

D)具有4个指向整型变量的指针元素的一维指针数组

【1.68】已知:char s[10], *p=s,则在下列语句中,错误的语句是。A)p=s+5; B)s=p+s; C)s[2]=p[4]; D)*p=s[0];

【1.69】已知:char s[100];int i;则引用数组元素的错误的形式是。A)s[i+10] B)*(s+i)C)*(i+s)D)*((s++)+i)

【1.70】已知:char s[6], *ps=s;则正确的赋值语句是。

A)s=”12345“; B)*s=”12345“; C)ps=”12345“; D)*ps=”12345“;

【1.71】已知:char a[3][10]={”BeiJing“,”ShangHai“,”TianJin“}, *pa=a;不能正确显示字符串”ShangHai“的语句是。

A)printf(”%s“,a+1); B)printf(”%s“,*(a+1)); C)printf(”%s“,*a+1); D)printf(”%s“,&a[1][0]);

【1.72】已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int(*ptr)[3]=a,*p=a[0];

则以下能够正确表示数组元素a[1][2]的表达式是。A)*(*(a+1)+2)B)*(*(p+5))C)(*ptr+1)+2 D)*((ptr+1)[2])

【1.73】已知:int a[ ]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a;则值为3的表达式是。A)p+=2,*(p++)B)p+=2,*++p C)p+=2,*p++ D)p+=2,++*p

【1.74】已知:int a[]={1,2,3,4}, y, *p=a;则执行语句y =(*++p)--;之后, 数组a各元素的值变为______。

A)0,1,3,4 B)1,1,3,4 C)1,2,2,4 D)1,2,3,3 变量y的值是____。A)1 B)2 C)3 D)4

【1.75】已知:int a[ ]={1,3,5,7}, y *p= a;为使变量y的值为3,下列语句正确的是____。A)y=++*p++; B)y=++(*p++); C)y=(++*p)++; D)y=(*++p)++;

【1.76】已知:int x[ ]={ 1,3,5,7,9,11 },*ptr=x;则能够正确引用数组元素的语句是。A)x B)*(ptr--)C)x[6] D)*(--ptr)

【1.77】函数的功能是交换变量x和y中的值,且通过正确调用返回交换的结果。能正确执行此功能的函数是。

A)funa(int *x, int *y)B)funb(int x, int y){ int *p; { int t;

p=x;*x=*y;*y=*p; t=x;x=y;y=t; } } C)func(int *x, int *y)D)func(int *x, int *y){ *x=*y;*y=*x; { *x=*x+*y;*y=*x-*y;*x=*x-*y;

} }

【1.78】有定义如下: struct sk { int a; float b; }data ,*p;

如果 p=&data;则对于结构变量data的成员a的正确引用是____。A)(*).data.a B)(*p).a C)p->data.a D)p.data.a

【1.79】已知: 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];

【1.80】已知: 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]

【1.81】已知: struct { int i; char c; float a; }test;

则sizeof(test)的值是。A)4 B)5 C)6 D)7

【1.82】已知: union { int i; char c; float a;

}test;

则sizeof(test)的值是。A)4 B)5 C)6 D)7

【1.83】已知: union u_type { int i; char ch; float a; }temp;

现在执行”temp.i=266;printf(“%d”,temp.ch)“的结果是。A)266 B)256 C)10 D)1

【1.84】若有以下程序段: struct dent { int n; int *m; };

int a=1,b=2,c=3;

struct dent s[3] = { {101,&a},{102,&b},{103,&c} }; struct dent *p=s;

则以下表达式中值为2的是。

A)(p++)->m B)*(p++)->m C)(*p).m D)*(++p)->m

【1.85】若有以下说明语句,则对结构变量pup中sex域的正确引用是。struct pupil { char name[20]; int sex; }pup,*p; p=&pup;

A)p.pup.sex B)p->pup.sex C)(*p).pup.sex D)(*p).sex

【1.86】以下对结构变量stul中成员age的非法引用是。struct student { int age; int num; }stu1,*p; p=&stu1;

A)stu1.age B)student.age C)p->age D)(*p).age

【1.87】若有以下定义和语句: union data { int i; char c; float f;

}a; int n;

则以下语句正确的是

。A)a=5; B)a={2,'a',1.2}; C)printf(”%dn“,a); D)n=a;

【1.88】已知: struct sk { int a; int age; }date,*p;

如果要使指针p指向data中的成员a,正确的赋值语句是____。A)p =(struct sk *)&data.a; B)p =(struct sk *)data.a; C)p = &data.a; D)*p = data.a;

【1.89】已知 enum week {sun,mon,tue,wed,thu,fri,sat}day;则正确的赋值语句是____。A)sun=0; C)san=day; D)sun=mon; D)day=sun;

【1.90】已知 enum color {red,yellow=2,blue,white,black}ren;执行下述语句的输出结果是____。printf(”%d“,ren=white); A)0 B)1 C)3 D)4

【1.91】已知 enum name{zhao=1,qian,sun,li}man;执行下述程序段后的输出是____。man=0; switch(man){ case 0: printf(”Peoplen“); case 1: printf(”Mann“); case 2: printf(”Womann“); default: printf(”Errorn“); } A)People B)Man C)Woman D)Error

【1.92】下述关于枚举类型名的定义中,正确的是____。

A)enem a={ one,two,three }; B)enem a { one=9,two=-1,three }; C)enem a={”one“,”two“,”three“}; D)enem a {”one“,”two“,”three“};

【1.93】C语言中标准输入文件stdin是指。

A)键盘 B)显示器 C)鼠标 D)硬盘

【1.94】要打开一个已存在的非空文件”file“用于修改,选择正确的语句____。A)fp=fopen(”file“, ”r“); B)fp=fopen(”file“, ”a+“); C)fp=fopen(”file“, ”w“); D)fp=fopen('file”, “r+”);

【1.95】当顺利执行了文件关闭操作时,fclose函数的返回值是。A)-1 B)TRUE C)0 D)1

【1.96】fscanf函数的正确调用形式是。

A)fscanf(文件指针, 格式字符串, 输出列表); B)fscanf(格式字符串, 输出列表, 文件指针); C)fscanf(格式字符串, 文件指针, 输出列表); D)fscanf(文件指针, 格式字符串, 输入列表);

【1.97】使用fgetc函数,则打开文件的方式必须是。

A)只写 B)追加 C)读或读/写 D)参考答案B和C都正确

【1.98】已知宏定义 #define N 3 #define Y(n)((N+1)*n)执行语句z=2*(N+Y(5+1));后,变量z的值是____。A)42 B)48 C)52 D)出错

【1.99】已知宏定义 #define SQ(x)x*x,执行语句printf(“%d”,10/SQ(3));后的输出结果是____。A)1 B)3 C)9 D)10

【1.100】已知宏定义如下: #define PR printf #define NL “n” #define D “%d” #define D1 DNL 若程序中的语句是 PR(D1,a);经预处理后展开为____。A)printf(%dn,a); B)printf(“%dn”,a); C)printf(“%d”“n”,a); D)原语句错误

【单项选择题参考答案】 【1.1】答案: A 注释:int是C语言的关键字 【1.2】答案: B 【1.3】答案:A 【1.4】答案:B 注释:include是预处理命令;scanf是函数名;type不是C语言的关键字。

【1.5】答案:D 【1.6】答案:D 【1.7】答案:A 【1.8】答案:A 注释:int型表示整数的范围是-32768~32767。【1.9】答案:D 注释:整型常量-1在计算机中表示为补码1111 1111 1111 1111,用十六进制显示这个数时,最左边的1不会被解释为符号位,而是与右边其它位共同转换为十六进制数。【1.10】答案:B 注释:长整型数32768在计算机内的表示是1000 0000 0000 0000,以一般整型进行输出时,此数恰是-32768的补码。【1.11】答案:C 注释:长整型数65539在计算机内的表示是0001 0000 0000 0000 0011,以一般整型进行输出时,仅将右侧16位二进制数转换为十进制数。【1.12】答案:A 注释:C语言中,int型的负数是采用补码表示的。【1.13】答案:D 【1.14】答案:C 注释:变量c是字符型,可用字符常量为它赋值。字符常量必须用单引号括起来,所以B是错误的;在单引号或双引号内的反斜线''用于表示转义字符,A选项在无引号时使用反斜线是错误的;C选项单引号内出现反斜线表示它与后面的数字组成一个转义字符;单引号只允许括起一个字符,D选项在单引号内出现4个字符,是错误的。【1.15】答案:C 【1.16】答案:D 注释:空字符和空格符是不同的两个字符,空格符的ASCII码值是32,空字符的ASCII值是0。【1.17】答案:A 【1.18】答案:B 【1.19】答案:A 【1.20】答案:C 【1.21】答案:B 注释:单纯从C语言语法来说,选项B、C都是正确的,但是选项C中第一个运算的两个对象都是整型常数,其结果也是整型数0,最后的运算结果也就是0了。【1.22】答案:C 【1.23】答案:A 注释:将条件表达式增加一个括号,此式变为a

是根据数组的首地址和给出的下标进行运算决定元素的地址。题中表达式引用了数组前3个元素。

【1.29】答案: A 【1.30】答案:D 【1.31】答案:B 【1.32】答案:B 【1.33】答案:B 【1.34】答案:A 【1.35】答案:C 【1.36】答案:C 【1.37】答案:C 【1.38】答案:D 【1.39】答案:D 【1.40】答案:C 1.41】答案:D 注释:scanf函数返回值是输入数据的个数,printf函数的返回值是输出的字符个数。【1.42】答案:D 【1.43】答案:C 注释:在C语言中,经常用一个变量来作为逻辑表达式,其含义就是:当变量的值不为0时关系成立。

【1.44】答案:D 注释:break语句仅可跳出switch语句,不会跳出while循环,这是一个死循环。【1.45】答案:A 【1.46】答案:C 【1.47】答案:C 【1.48】答案:D 注释:当除数y为0时,程序发生溢出错误。【1.49】答案:C 【1.50】答案:A 【1.51】答案:C 【1.52】答案:C 注释:答案C的赋值号左侧是数组s的首地址,是一个常量,赋值号右侧是一个字符串常量,不可能将一个字符串常量赋给一个地址常量。【1.53】答案:D 注释:D选项缺少字符串结束标志。【1.54】答案:C 注释:此处函数形参是一个指针变量,接受实参的地址,而不是一个数组。【1.55】答案:A 【1.56】答案:D 注释:这里首先要明确一些基本概念。在C语言中,程序与文件是不同的概念,一个程序可以由一个文件组成,也可以由多个文件组成;一个文件中又可以包含多个函数;函数是构成C程序的基本单位。

变量的作用域因变量的存储类型不同而不同。auto和register类型的变量的作用域是说明变量的当前函数;外部变量的作用域是整个程序,即外部变量的作用域可以跨越多个文件;内部静态变量(定义在一个函数内部的static型的变量)的作用域是当前函数,外部静态变量(定义在函数

外面的static型的变量)的作用域是当前文件,即可以跨越同一文件中的不同函数。【1.57】答案:A 【1.58】答案:A 注释:它和参数a一样,数据类型说明被省略,按照C语言的规定,在这种情况下,表示它们是int型。

【1.59】答案:C 注释:函数swapa是值传递,函数的执行结果不能返回;函数swapb中变量temp不是指针变量,所以它不能接受地址量,用指针变量x为它赋值是不对的;函数swap中虽然指针变量交换了地址,即它们的指向的目标变量进行了交换,但是目标变量并没有行值的交换。【1.60】答案:B 【1.61】答案:D 【1.62】答案:D 注释:主调函数中b=0,在执行fun1函数里的除法时发生溢出错误。【1.63】答案:B 【1.64】答案:C 【1.65】答案:D 注释:在答案D中,正确的函数调用应当是:printf(“%d”, *y)。【1.66】答案:C 注释:要注意与说明语句“int(*p)[ ];”的区别。说明语句“int(*p)[ ];”说明的是一个指向数组的指针。

【1.67】答案:C 注释:题干中由于*和p被小括号括起,所以p应被解释为一个指针,而后的下标运算符[]说明所指向的对象是一个有4个int型元素的一维数组;如果是int(*p)(),则是指向函数的指针。对于int *p[4],则根据运算符的优先级,先考虑p和[]运算符的关系,所以它就是一个指针数组了。【1.68】答案:B 注释:选项B有两处错误,一是数组名是常量,不能出现的赋值好的左侧,二是指针变量只能和整数做加,不能和作为地址常量的数组名相加。【1.69】答案:D 注释:s作为数组名是地址常量,而s++是s=s+1,C语言不允许对常量进行赋值。【1.70】答案:C 【1.71】答案:C 注释:a是二维数组名,a+1中的1不是1个字节,而是数组的“一行”,即10个字节,所以a+1是第二个字符串的首地址,A选项正确。在C编译系统中对二维数组名可这样理解(注意,这里仅是理解):a指向一个一维数组,故(a+1)是指向a[1]的,*(a+1)就是取a[1]的值,它保存第二个字符串“ShangHai”的首地址,所以选项B也正确。*a是第一个字符串的首地址,加1是第一个字符串中第二个字符的地址,选项C的输出是“beiJing”。选项D中的&a[1][0]是对第二个字符串的第一个字符做取地址运算,得到该地址就是字符串“ShangHai”的首地址。注意,对于二维数组来说,做一次*或[]运算的结果仍是地址量,做两次才是取数值。【1.72】答案:A 注释:p是一个一级指针,选项B中对它进行了两次*运算是错误的。ptr是一个指向一维数组的指针,它所指向的数组有三个元素,对于这样一个指针,对它进行两次**运算才能取出地址单元中所存的数据,C选项中*ptr表示数组第一行的首地址,该地址是一维数组的地址,+3表示加上三个它所指向的数据类型的长度,所以(*ptr+1)+2是数组中数值4的地址。根据以上分析,选项D对ptr进行了两次地址操作(*和[]),所以结果应是数据,但是它加1后指向数组第二行,根据后面[]中2它的地址增加两个一维数组的长度,就指向数组的最后一行,再做*运算就是数

10,即a[3][0]。【1.73】答案:A 【1.74】答案:B B 【1.75】答案:D 【1.76】答案:B 【1.77】答案:D 注释:答案D是另一种交换两个变量值的算法。【1.78】答案:B 【1.79】答案:C 注释:使用C对p进行赋值,则p->next是a[0]的地址,引用其成员n再做前增1运算,结果就是2。

【1.80】答案:B 【1.81】答案:D 【1.82】答案:A 【1.83】答案:C 注释:联合变量temp的成员是占用同一存储单元,它的长度是4个字节。266的二进制表示是100001010,存放在存储单元的低端两个字节,如下图: 高字节

0 0 0 0 0 0 0 1 低字节 0 0 0 0 1 0 1 0 引用temp.ch进行输出,只取最低的第一个字节。【1.84】答案:D 注释:由于结构指针指向了结构数组的0号元素,所以表达式(p++)->m的含义是先取出m(变量a的地址),然后指针p加1。表达式*(p++)->m的含义是先取出m的内容(变量a的值),然后指针p再加1。表达式(*p).m的含义是取出m(变量a的地址)。表达式*(++p)->m的含义是先将指针p加1,然后再取m的内容(变量b的值)。【1.85】答案:D 【1.86】答案:B 【1.87】答案:C 【1.88】答案:A 【1.89】答案:D 【1.90】答案:D 【1.91】答案:A 【1.92】答案:B 【1.93】答案:A 【1.94】答案:D 注释:函数fopen中的第二参数是打开模式,“r”模式是只读方式,不能写文件;“a+”模式是读/追加方式,允许从文件中读出数据,但所有写入的数据均自动加在文件的末尾;“w”模式是写方式,允许按照用户的要求将数据写入文件的指定位置,但打开文件后,首先要将文件的内容清空。“r+”模式是读/写方式,不但允许读文件,而且允许按照用户的要求将数据写入文件的指定位置,且在打开文件后,不会将文件的内容清空。本题的要求是“修改”文件的内容,因此只能选择答案D。

【1.95】答案:C 【1.96】答案:D

【1.97】答案:C 【1.98】答案:B 注释:语句z=2*(N+Y(5+1)引用了两个宏定义。C语言是区分字母大小的,第二个宏定义中的N直接用3替换,用5+1替换n,则有z=2*(3+(3+1)*5+1);结果是48。注意对于带参数的宏亦是直接的文本替换,此例中n用5+1去替换,结果是(N+1)*5+1,而不是(N+1)*(5+1)。

【1.99】答案:C 注释:宏替换后的结果是printf(“%d”,10/3*3)。【1.100】答案:C

二、阅读程序题(答案P35)

导读:学会阅读程序对于初学者来说很重要,一方面可以巩固所学的语法知识,另一方面通过阅读别人写好的程序来打开自己的思路,就所谓见多识广。读者通过阅读理解程序,从给出的四个备选参考答案中,选择程序的正确输出。如果选择有误,就要认真分析原因,是概念方面的错误还是对程序逻辑理解不对,从而加深对语法规则的理解,提高程序设计能力。程序设计语言是开发程序的一个工具,学习语言的目的是为了编写程序来解决实际问题,所以特别提倡通过实际上机来检验备选答案,增强动手能力。习题基本上是按照教材的章节来安排的,读者可以根据学习的进度选择部分习题。

【2.1】以下程序的输出结果是。main(){ float a;

a=1/100000000; printf(“%g”,a); } A)0.00000e+00 B)0.0 C)1.00000e-07 D)0

【2.2】下面程序的输出结果是____。#include

main(){ int x=10; { int x=20;

printf(“%d,”, x); } printf(“%dn”, x); } A)10,20 B)20,10 C)10,10 D)20,20

【2.3】以下程序的输出结果是____。main(){ unsigned int n; int i=-521;

n=i;

printf(“n=%un”,n); } A)n=-521 B)n=521 C)n=65015 D)n=102170103

【2.4】以下程序的输出结果是。main(){ int x=10, y=10; printf(“%d %dn”, x――, ――y); } A)10 10 B)9 9 C)9 10 D)10 9

【2.5】以下程序的输出结果是____。main(){ int n=1;

printf(“%d %d %dn”,n,n++,n--); } A)1 1 1 B)1 0 1 C)1 1 0 D)1 2 1

【2.6】以下程序的输出结果是____。main(){ int x=0x02ff,y=0x0ff00;

printf(“%dn”,(x&y)>>4|0x005f); } A)127 B)255 C)128 D)1

【2.7】以下程序的输出结果是____。main(){ int a=1; char c='a'; float f=2.0;

printf(“%dn”,(!(a==0),f!=0&&c=='A')); } A)0 B)1

【2.8】下面程序的输出结果是____。main(){ int a=1,i=a+1; do { a++ ;

}while(!~i++ > 3);

printf(“%dn”,a);

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

【2.9】下面程序的输出结果是____。main(){ int a=111; a=a^00;

printf(“%d,%on”,a,a); } A)111,157 B)0,0 C)20,24 D)7,7

【2.10】下面程序的输出结果是____。main(){ char s[12]= “a book”; printf(“%.4s”,s); } A)a book!B)a book!<四个空格》

C)a bo D)格式描述错误,输出不确定

【2.11】下面程序的输出结果是____。main(){ int a,b;

scanf(“%2d%3d”,&a,&b); printf(“a=%d b=%dn”,a,b); } A)a=12 b=34 B)a=123 b=45 C)a=12 b=345 D)语句右错误

【2.12】以下程序段的输出结果是。int a=10,b=50,c=30; if(a>b)a=b; b=c; c=a;

printf(“a=%d b=%d c=%dn”,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

【2.13】以下程序的输出结果是。main(){ int a=0,b=1,c=0,d=20; if(a)d=d-10; else if(!b)

if(!c)d=15; else d=25;

printf(“d=%dn”,d); } A)d=10 B)d=15 C)d=20 D)d=25

【2.14】下面程序的输出结果为。main(){ int a=1,b=0; switch(a){ case 1: switch(b){ case 0: printf(“**0**”); break; case 1: printf(“**1**”); break; } case 2: printf(“**2**”); break; } } A)**0** B)**0****2** C)**0****1****2** D)有语法错误

【2.15】以下程序的输出结果是。main(){ char *s=“12134211”;

int v1=0,v2=0,v3=0,v4=0,k; for(k=0;s[k];k++)switch(s[k]){ case '1': v1++; case '3': v3++; case '2': v2++; default: v4++; } printf(“v1=%d, v2=%d, v3=%d, v4=%dn”,v1,v2,v3,v4); } A)v1=4,v2=2,v3=1,v4=1 B)v1=4,v2=9,v3=3,v4=1 C)v1=5,v2=8,v3=6,v4=1 D)v1=4,v2=7,v3=5,v4=8

【2.16】下面程序的输出是。main(){ int x=1,y=0,a=0,b=0; switch(x){ case 1: switch(y){ case 0: a++;break; case 1: b++;break; }

case 2: a++;b++;break; } printf(“a=%d,b=%dn”,a,b); } A)a=2,b=1 B)a=1,b=1 C)a=1,b=0 D)a=2,b=2

【2.17】下面程序的输出是____。main(){ int num=0; while(num<=2){ num++;

printf(“%dn”,num); } } A)1 B)1 C)1 D)1 2 2 2 3 3 4

【2.18】下面程序的输出结果是____。main(){ int a=1,b=0; do { switch(a){ case 1: b=1;break; case 2: b=2;break; default : b=0; } b=a+b; }while(!b);

printf(“a=%d,b=%d”,a,b); } A)1,2 B)2,1 C)1,1 D)2,2

【2.19】从键盘上输入“446755”时,下面程序的输出是____。#include main(){ int c;

while((c=getchar())!='n')switch(c-'2'){ case 0: case 1: putchar(c+4);

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

default: putchar(c+2);break; } printf(“n”); } A)888988 B)668966 C)88898787 D)66898787

【2.20】下面程序的输出结果是____。main(){ int k=0; char c='A'; do { switch(c++){ case 'A': k++;break; case 'B': k--;

case 'C': k+=2;break; case 'D': k=k%2;contiue; case 'E': k=k+10;break; default: k=k/3; } k++;

}while(c<'C'); printf(“k=%dn”,k); } A)k=1 B)k=2 C)k=3 D)k=4

【2.21】下面程序的输出结果是____。main(){ int x,i;

for(i=1;i<=100;i++){ x=i;

if(++x%2==0)if(++x%3==0)if(++x%7==0)printf(“%d ”,x); } } A)39 81 B)42 84 C)26 68 D)28 70

【2.22】下面程序的输出结果是____。#include 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); } A)20 B)21 C)22 D)23

【2.23】假定从键盘上输入“3.6,2.4<回车>”,下面程序的输出是____。#include main(){ float x,y,z;

scanf(“%f,%f”,&x,&y); z=x/y; while(1){ if(fabs(z)>1.0){ x=y; y=z; z=x/y; } else break; } printf(“%fn”,y); }

A)1.500000 B)1.600000 C)2.000000 D)2.400000

【2.24】下面程序的输出结果是____。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

【2.25】下面程序的输出结果是____。main(){ int i,j,k=10; for(i=0;i<2;i++){ k++; { int k=0;

for(j=0;j<=3;j++){ if(j%2)continue; k++; } } k++; } printf(“k=%dn”,k); } A)k=4 B)k=8 C)k=14 D)k=18

【2.26】下面程序的输出结果是____。#include main(){ int n[3][3], i, j; for(i=0;i<3;i++)for(j=0;j<3;j++)n[i][j]=i+j;

for(i=0;i<2;i++)for(j=0;j<2;j++)n[i+1][j+1]+=n[i][j]; printf(“%dn”, n[i][j]); } A)14 B)0 C)6 D)不确定

【2.27】下面程序的输出结果是____。#include main(){ int a[4][5]={1,2,4,-4,5,-9,3,6,-3,2,7,8,4};int i,j,n; n=9; i=n/5; j=n-i*5-1;

printf(“a[%d][%d]=%dn”, i,j,a[i][j]); } A)6 B)-3 C)2 D)不确定

【2.28】下面程序的输出结果是____。int m[3][3]={ {1}, {2}, {3} }; int n[3][3]={ 1, 2, 3 }; main()

{ printf(“%dn”, m[1][0]+n[0][0]); /* ① */ printf(“%dn”, m[0][1]+n[1][0]); /* ② */ }

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

【2.29】下面程序的输出结果是____。#include main(){ char s1[50]={“some string *”},s2[]={“test”};printf(“%sn”, strcat(s1,s2)); } A)some string * B)test C)some stritest D)some string *test

【2.30】下面程序的输出结果是____。#include f(char *s){ char *p=s; while(*p!='')p++;

return(p-s); } main(){ printf(“%dn”,f(“ABCDEF”)); } A)3 B)6 C)8 D)0

【2.31】下面程序的输出结果是____。#include #include main(){ char str[100] =“How do you do”;

strcpy(str + strlen(str)/2, “es she”); printf(“%sn”, str); } A)How do you do B)es she C)How are you D)How does she

【2.32】下面程序的输出结果是____。#include func(int a,int b){ int c; c=a+b; return(c); } main(){ int x=6,y=7,z=8,r;

r=func((x--,y++,x+y),z--); printf(“%dn”,r); } A)11 B)20 C)21 D)31

【2.33】下面程序的输出结果是____。#include void fun(int *s){ static int j=0; do { s[j]+=s[j+1]; }while(++j<2); } main(){ int k,a[10]={1,2,3,4,5}; for(k=1;k<3;k++)fun(a);

for(k=0;k<5;k++)printf(“%d”,a[k]); } A)35756 B)23445 C)35745 D)12345

【2.34】下面程序的输出结果是____。#include int k=1; main(){ int i=4; fun(i);

printf(“n%d,%d”,i,k); /* ① */ } fun(int m){ m+=k;k+=m; { char k='B';

printf(“n%d”,k-'A'); /* ② */ } printf(“n%d,%d”,m,k); /* ③ */ } ① A)4,1 B)5,6 C)4,6 D)A,B,C参考答案都不对 ② A)1 B)-59 C)-64 D)A,B,C参考答案都不对 ③ A)5,66 B)1,66 C)5,6 D)A,B,C参考答案都不对

【2.35】下面程序的输出结果是____。#include fun(int n, int *s){ int f1, f2; if(n==1||n==2)*s=1; else { fun(n-1, &f1); fun(n-2, &f2); *s=f1+f2; } } main(){ int x; fun(6, &x);

printf(“%dn”, x); } A)6 B)7 C)8 D)9

【2.36】下面程序的输出结果是____。int w=3; main(){ int w=10;

printf(“%dn”,fun(5)*w); } fun(int k){ if(k==0)return(w); return(fun(k-1)*k); } A)360 B)3600 C)1080 D)1200

【2.37】下面程序的输出结果是____。#include funa(int a){ int b=0; static int c=3; a=c++,b++; return(a); } main(){ int a=2,i,k;

for(i=0;i<2;i++)k=funa(a++); printf(“%dn”,k); } A)3 B)0 C)5 D)4

【2.38】下面程序的输出结果是____。#include void num(){ extern int x,y; int a=15,b=10; x=a-b; y=a+b; } int x,y; 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)1,12 D)输出不确定

【2.39】下面程序的输出结果是____。main(){ int a=2,i;

for(i=0;i<3;i++)printf(“%4d”,f(a)); } 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

【2.40】下面程序的输出结果是____。#include try(){ static int x=3; x++; return(x); } main(){ int i, x;

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

printf(“%dn”, x); } A)3 B)4 C)5 D)6 【2.41】下面程序的输出结果是____。#include main(){ int x=1;

void f1(), f2();

f1(); f2(x);

printf(“%dn”, x); } void f1(void){ int x=3;

printf(“%d ”, x); }

void f2(x)int x;

{ printf(“%d ”, ++x);

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

【2.42】下面程序的输出结果是____。#include

#define SUB(X,Y)(X)*Y main(){ int a=3,b=4;

printf(“%dn”,SUB(a++,b++)); } A)12 B)15 C)16 D)20

【2.43】下面程序的输出结果是____。main(){ int a[]={1,2,3,4,5,6}; int *p; p=a;

printf(“%d ”,*p); printf(“%d ”,*(++p)); printf(“%d ”,*++p); printf(“%d ”,*(p--));

p+=3;

printf(“%d %d ”,*p,*(a+3));

}

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

【2.44】下面程序的输出结果是____。main(){ int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int *p=a; p+=6;

printf(“%d ”,*p); /* ① */ printf(“%d ”,*(*(a+6))); /* ② */ printf(“%d ”,*(a[1]+=2)); /* ③ */ printf(“%d”,*(&a[0][0]+6));/* ④ */ }

A)7 7 7 7 B)②句语法错误 C)③句语法错误 D)④句语法错误

【2.45】下面程序的输出结果是____。#define FMT “%Xn” #include main(){ static int a[ ][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; printf(FMT, a[2][2]); /* ① */ printf(FMT, *(*(a+1)+1)); /* ② */ } ① A)9 B)11 C)A D)B

② A)6 B)7 C)8 D)前面三个参考答案均是错误的【2.46】下面程序的输出结果是____。#include main(){ int a[]={1, 2, 3, 4, 5} ; int x, y, *p; p=&a[0]; x=*(p+2); y=*(p+4);

printf(“%d,%d,%dn”, *p, x, y); } A)1,3,5 B)1,2,3 C)1,2,4 D)1,4,5

【2.47】下面程序的输出结果是____。void ive(x,n)int x[],n; { int t,*p; p=x+n-1; while(x

for(i=0;i<10;i++)printf(“%d ”,a[i]); printf(“n”); }

A)1 2 3 4 5 6 7 8 9 0 B)0 9 8 7 6 5 4 3 2 1 C)1 3 5 7 9 2 4 6 8 0 D)0 8 6 4 2 9 7 5 3 1

【2.48】下面程序的输出结果是____。#include “string.h” fun(char *w,int n){ char t,*s1,*s2; s1=w;s2=w+n-1; while(s1

{ t=*s1++; *s1=*s2--; *s2=t; } } main(){ static char *p=“1234567”; fun(p,strlen(p)); printf(“%s”,p); } A)7654321 B)1717171 C)7171717 D)1711717

【2.49】下面程序的输出结果是____。#include char *p = “abcdefghijklmnopq” ; main(){ int i=0;

while(*p++!='e'); printf(“%cn”, *p);

} A)c B)d C)e D)f

【2.50】下面程序的输出结果是____。#include f(int x, int y){ return(y-x); } main(){ int a=5, b=6, c; int f(),(*g)()=f;

printf(“%dn”,(*g)(a,b)); } A)1 B)2 C)3 D)前面三个参考答案均是错误的【2.51】下面程序的输出结果是____。#include main(){ int a=1,*p,**pp; pp=&p;

p=&a; a++;

printf(“%d,%d,%dn”, a,*p, **pp);

} A)2,1,1 B)2,1,2 C)2,2,2 D)程序有错误

【2.52】下面程序的输出结果是____。main(){ char *alpha[7]={“ABCD”,“EFGH”,“IJKL”,“MNOP”,“QRST”,“UVWX”,“YZ”}; char **p; int i; p=alpha;

for(i=0;i<4;i++)printf(“%c”,*(p[i])); printf(“n”); } A)AEIM B)BFJN C)ABCD D)DHLP

【2.53】下面程序的输出结果是____。#include char *pp[2][3]={ “abc”, “defgh”, “ijkl”, “mnopqr”, “stuvw”, “xyz”}; main(){ printf(“%cn”,***(pp+1)); /* ① */ printf(“%cn”,**pp[0]); /* ② */ printf(“%cn”,(*(*(pp+1)+1))[4]); /* ③ */ printf(“%cn”,*(pp[1][2]+2)); /* ④ */ printf(“%sn”,**(pp+1)); /* ⑤ */ } ① A)a B)d C)i D)m ② A)a B)d C)i D)m ③ A)h B)l C)q D)w ④ A)k B)o C)u D)z ⑤ A)ijkl B)mnopqr C)stuvw D)xyz

【2.54】下面程序的输出结果是____。#include “stdio.h” struct str1 { char c[5]; char *s; }; main(){ struct str1 s1[2]={ {“ABCD”“EFGH”},{“IJK”,“LMN”} }; struct str2 { struct str1 sr; int d;

}s2={“OPQ”,“RST”,32767}; struct str1 *p[2]; p[0]=&s1[0]; p[1]=&s1[1];

printf(“%s”,++p[1]->s); /* ① */ printf(“%c”,s2.sr.c[2]); /* ② */ } ① A)LMN B)MN C)N D)IJK ② A)O B)P C)Q D)R

【2.55】以下程序的输出结果是____。struct st { int x,*y; }*p;

int s[]={10,20,30,40};struct st a[]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]};main(){ p=a;

printf(“%dn”,++(*(++p)->y)); } A)10 B)11 C)20 D)21

【2.56】以下程序的输出结果是____。#include main(){ union EXAMPLE { struct { int x,y; }in; int a,b; }e;

e.a=1;e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b;

printf(“%d,%dn”,e.in.x,e.in.y); } A)2,3 B)4,4 C)4,8 D)8,8

【2.57】下面程序的输出结果是____。#include main(){ union

{ int i[2]; long k; char c[4]; }r,*s=&r; s->i[0]=0x39; s->i[1]=0x38;

printf(“%cn”,s->c[0]); } A)39 B)9 C)38 D)8

【2.58】下面程序的输出是。main(){ printf(“%dn”, EOF); } A)-1 B)0 C)1 D)程序是错误的

【阅读程序题参考答案】 【2.1】参考答案:D 注释:程序中除法运算的两个操作数均是整型,运算结果也是整型。【2.2】参考答案:B 注释:C语言允许在程序块(分程序)中说明变量。【2.3】参考答案:C 注释:变量i中的负号传送给变量n后,因n是无符号数,已不作为负号处理。【2.4】参考答案:D 注释:对变量x的――操作是后缀形式,变量x的减1操作要在执行完 printf函数之后才进行,所以变量x的值在输出的时候仍然保持原值10。【2.5】参考答案:B 注释:C语言在执行printf()时,对函数中的表达式表列的处理顺序是从后向前,即先处理n--,再处理n++,最后处理n,而且每一个表达式作为一个处理单元,也就是说在不同的表达式中自增自减运算是单独考虑的。【2.6】参考答案:A 注释:变量x和变量y做按位与,结果为0x0200,右移4位为0x0020,再与0x005f做按位或,最后结果为0x007f。【2.7】参考答案:A 注释:逗号表达式的结果是用逗号分开的最后一个表达式的值,此题由于 c=='A'的值是0,所以逗号表达式的值为0。【2.8】参考答案: B 【2.9】参考答案: A 【2.10】参考答案: C 注释:在输出格式描述“%m.ns”中,m是输出总长度,n是实际字符的个数,这里m没有给出,则输出总长度就是实际输出字符的个数。【2.11】参考答案: C 【2.12】参考答案:B 【2.13】参考答案:C

【2.14】参考答案:B 【2.15】参考答案:D 【2.16】参考答案:A 【2.17】参考答案: C 【2.18】参考答案:A 【2.19】参考答案: C 注释:在switch语句中,case本身仅起到语句标号的作用,不会改变语句的流程,执行break语句才能退出当前的switch语句。【2.20】参考答案: D 注释:siwtch语句的表达式中,变量c是后缀的增一运算,第一次执行do-while循环时,执行case 'A'后面的语句。

【2.21】参考答案: D 【2.22】参考答案: B 【2.23】参考答案: B 注释:fabs()是浮点数绝对值函数。【2.24】参考答案: A 【2.25】参考答案: C 注释:C语言允许在程序块(分程序)内说明变量,如果在程序块内说明的变量和程序块外的变量同名,在块外说明的变量在块内是不可见的。可将此题和【2.11】进行比较,加深理解。【2.26】参考答案: C 【2.27】参考答案: B 【2.28】参考答案: ① D ② A 【2.29】参考答案:D 【2.30】参考答案: B 注释:输出结果为字符串长度。【2.31】参考答案: D 注释:字符串拷贝函数strcpy()要求的两个参数都是字符串首地址。本题中第二个参数是字符串常量,接受这个字符串的第一个参量不是直接给出字符数组名,而是进行了地址运算后的结果。由于str字符串的长度是13,除2取整后是6,第一个参数给出的地址是字符数组str的首地址加6,也就是原来字符串中第二个空格的位置,把“es she”从该处放入,字符串str变为“How does she”。【2.32】参考答案: C 注释:main函数调用func函数时,第一个实参使用的是逗号表达式的值,也就是x+y的结果。由于对变量x、y、z进行的是后缀运算,所以函数func的参数值是13和8。【2.33】参考答案: C 【2.34】参考答案: ① C ② A ③ C 【2.35】参考答案: C 【2.36】参考答案: B 注释:函数fun进行了递归调用,实际进行的运算是5×4×3×2×1×3×10。主函数内说明的局部变量w屏蔽了外部变量w,所以在主函数中外部变量w是不可见的,在调用printf函数时表达式“fun(5)*w”中w的值是10。【2.37】参考答案: D 注释:main函数三次调用了函数funa,在funa函数中的静态变量c仅在第一次调用时进行了初始化,再次调用时不再对静态变量赋初值。

【2.38】参考答案: B 注释:main函数和num函数中都说明了变量a和b,由于它们是内部变量,所以它们分别在说明它们的函数内有效。外部变量x和y在函数num之后被说明,而在num函数中又要引用它们,所以在num函数中用关键字“extern”说明变量x和y是一个外部变量,也就是通知计算机这两个变量在fun函数以外被说明,此处不是定义两个int型变量。【2.39】参考答案: D 注释:函数f中的变量c是静态变量,仅在第一次调用函数f时它被初始化为3,第二次调用函数f时c的值是4,第三次调用函数f时c的值是5。【2.40】参考答案: D

【2.41】参考答案: D 注释:程序中有三个“x”分别在三个不同的函数中,这三个“x”都是自动变量,所以三个“x”分别局部于三不同的函数,在三个函数中对“x”的操作互不影响。【2.42】参考答案: A 【2.43】参考答案: A 注释:*(++p)和*++p都是指针变量值前加1,第一次指向a[1],第二次指向a[2];a+3是a[3]的地址。

【2.44】参考答案: C 注释:②句没有语法错误,但是a+6指向数组之外,因为a是a[0]的地址,a+1是a[1]的地址,a+2是a[2]的地址,显然数组a没有a[6]分量。③句错误,因为a[1]是地址常量,它是a[1][0]的地址,对于地址常量是不可以进行赋值运算的。【2.45】参考答案: ① D ② A 注释:如果FMT定义为“%xn”,则输出的16进制数据用小写字母表示。【2.46】参考答案: A 注释:语句“p=&a[0]”表示将数组a中元素a[0]的地址赋给指针变量p,则p就是指向数组首元素a[0]的指针变量,“&a[0]”是取数组首元素的地址。对于指向数组首址的指针,p+i(或a+i)是数组元素a[i]的地址,*(p+i)(或*(a+i))就是a[i]的值。【2.47】参考答案: B 【2.48】参考答案: D 【2.49】参考答案: D 【2.50】参考答案: A 注释:变量g是指向函数的指针,(*g)(a,b)是调用指针g所指向的函数。【2.51】参考答案: C 注释:p是指针,pp是指向指针的指针。【2.52】参考答案: A 注释:对于指向数组的指针变量可以做下标运算,p[i]和alpha[i]都是指向字符串的首地址,*p[i]取出字符串的第一个字符。

【2.53】参考答案: ① D ② A ③ D ④ D ⑤ B 注释:pp是一个二维指针数组,pp+1指向数组的第二维,*(pp+1)是第二维的起始地址,**(pp+1)是第二维第一个元素的地址,***(pp+1)是第二维第一个元素的内容,所以,①的参考答案应选D。*(pp+1)+1是第二维第二个元素的地址,*(*(pp+1)+1)是第二维第二个元素,(*(*(pp+1)+1))[4]则是第二维第二个元素所指字符串下标为4的元素,即是字符w,故③应当选D。【2.54】参考答案: ① B ② C 【2.55】参考答案:D 【2.56】参考答案:C

注释:联合体成员的取值是最后一次给成员赋的值。【2.57】参考答案: B 注释:整型数组i和字符数组c共用存储空间,给i赋值也等于给c赋值,所以s->c[0]=0x39,所以输出9。

【2.58】参考答案:A 注释:基本概念。EOF是由C语言在头文件stdio.h中定义的,用户可以直接使用。

三、程序填空题(答案P65)

导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。

【3.1】下面程序的功能是不用第三个变量,实现两个数的对调操作。#include main(){ int a,b;

scanf(“%d%d”,&a,&b); printf(“a=%d,b=%dn”,a,b); a= ① ;

b= ② ;

a= ③ ;

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

【3.2】下面程序的功能是根据近似公式:π2/6≈ 1/12+1/22+1/32+ …… +1/n2,求π值。#include double pi(long n){ double s=0.0; long i;

for(i=1;i<=n;i++)s=s+ ① ; return(②); }

【3.3】下面的程序的功能是求一维数组中的最小元素。findmin(int *s,int t,int *k){ int p;

for(p=0,*k=p;p

} main(){ int a[10],i,*k=&i; for(i=0;i<10;i++)scanf(“%d”,&a[i]); findmin(a,10,k);

printf(“%d,%dn”,*k,a[*k]); }

【3.4】下面程序的功能是计算1-3+5-7+ ……-99+101的值。main(){ int i,t=1,s=0;

for(i=1;i<=101;i+=2){ ① ; s=s+t; ② ; } printf(“%dn”,s); }

【3.5】有以下程序段: s=1.0;

for(k=1;k<=n;k++)s=s+1.0/(k*(k+1)); printf(“%fn”,s);

填空完成下述程序,使之与上述程序的功能完全相同。s=0.0; ① ; k=0;

do { s=s+d; ② ;

d=1.0/(k*(k+1)); }while(③); printf(“%fn”,s);

【3.6】下面程序的功能是从键盘上输入若干学生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。main(){ float x,amax,amin; scanf(“%f”,&x); amax=x; amin=x; while(①){ if(x>amax)amax=x;

if(②)amin=x; scanf(“%f”,&x); } printf(“namax=%fnamin=%fn”,amax,amin); }

【3.7】下面程序的功能是将形参x的值转换为二进制数,所得的二进制数放在一个一维数组中返回,二进制数的最低位放在下标为0的元素中。fun(int x,int b[]){ int k=0,r; do { r=x% ① ; b[k++]=r; x/= ② ; }while(x); }

【3.8】下面程序的功能是输出1到100之间每位数的乘积大于每位数的和的数。例如数字26,数位上数字的乘积12大于数字之和8。main(){ int n,k=1,s=0,m;

for(n=1;n<=100;n++){ k=1; s=0; ① ;

while(②){ k*=m%10; s+=m%10; ③ ; } if(k>s)printf(“%d”,n); }

}

【3.9】下面程序的功能是统计用0至9之间的不同的数字组成的三位数的个数。main(){ int i,j,k,count=0; for(i=1;i<=9;i++)for(j=0;j<=9;j++)if(①)continue;

else for(k=0;k<=9;k++)if(②)count++; printf(“%d”,count); }

【3.10】下面程序的功能是输出100以内的个位数为

6、且能被3整除的所有数。main(){ int i,j;

for(i=0; ① ;i++){ j=i*10+6;

if(②)countinue; printf(“%d”,j); } }

【3.11】下面程序的功能是用辗转相除法求两个正整数m和n的最大公约数。hcf(int m,int n){ int r; if(m

【3.12】下面程序的功能是使用冒泡法对输入的10个浮点数从小到大进行排序。排好序的10个

数分两行输出。程序如下: #include main(){ ① ;

int i,j;

printf(“Input 10 numbers pleasen”); for(i=0; ② ;i++)scanf(“%f”, &a[i]); printf(“n”);

for(i=2; ③ ;i++)for(j=0; ④ ;j++)if(⑤){ x=a[j]; ⑥ ; a[j+1]=x; } printf(“The sorted 10 numbers;n”); for(i=0; ⑦ ;i++){ if(⑧)printf(“n”);

printf(“%ft”,a[i]); } printf(“n”); }

【3.13】下面程序的功能是读入20个整数,统计非负数个数,并计算非负数之和。#include “stdio.h” main(){ int i,a[20],s,count; s=count=0;

for(i=0;i<20;i++)scanf(“%d”, ①); for(i=0;i<20;i++){ if(a[i]<0)② ; s+=a[i]; count++; } printf(“s=%dt count=%dn”,s,count); }

【3.14】下面程序的功能是删除字符串s中的空格。#include

main(){ char *s=“Beijing ligong daxue”; int i,j;

for(i=j=0;s[i]!='';i++)if(s[i]!= ' ')① ; else ② ; s[j]= '';

printf(“%s”,s); }

【3.15】下面程序的功能是将字符串s中所有的字符'c'删除。请选择填空。#include main(){ char s[80]; int i,j; gets(s);

for(i=j=0;s[i]!= '';i++)if(s[i]!= 'c')① ; s[j]= ''; puts(s); }

【3.16】下面程序的功能是输出两个字符串中对应相等的字符。请选择填空。#include char x[]=“programming”; char y[]=“Fortran”; main(){ int i=0;

while(x[i]!= '' && y[i]!= '')if(x[i]==y[i])printf(“%c”, ①); else i++; }

【3.17】下面程序的功能是将字符串s中的每个字符按升序的规则插到数组a中, 字符串a已排好序。

#include main(){ char a[20]=“cehiknqtw”; char s[]=“fbla”; int i,k,j;

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

{ j=0;

while(s[k]>=a[j] && a[j]!= '')j++; for(①)② ; a[j]=s[k]; } puts(a); }

【3.18】下面程序的功能是对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为“abcdefg”和“abceef”,则输出为-1。#include main(){ char str1[100],str2[100],c; int i,s;

printf(“Enter string 1: ”); gets(str1); printf(“Enter string 2: ”); gets(str2); i=0;

while((str1[i] == str2[i] && str1[i]!= ①))i++; s= ② ;

printf(“%dn”, s); }

【3.19】下面的函数expand在将字符串s复制到字符串t时,将其中的换行符和制表符转换为可见的转义字符表示,即用'n'表示换行符,用't'表示制表符。expand(char s[],char t[]){ int i,j;

for(i=j=0;s[i]!= '';i++)switch(s[i]){ case 'n': t[ ① ] = ② ; t[j++] = 'n'; break;

case 't': t[ ③ ] = ④ ; t[j++] = 't'; break;

default: t[ ⑤ ] = s[i]; break; } t[j] = ⑥ ; }

【3.20】下面的函数index(char s[], char t[])检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则送回-1。index(char s[], char t[]){ int i,j,k;

for(i=0;s[i]!= '';i++){ for(j=i,k=0; ① && s[j]==t[k];j++,k++); if(②)return(i); } return(-1); } n

【3.21】下面程序的功能是计算S= k!。k=0 long fun(int n){ int i; long s;

for(i=1;i ① ;i++)s*=i;

return(②); } main(){ int k,n; long s;

scanf(“%d”,&n); s= ③ ;

for(k=0;k<=n;k++)s+= ④ ;

printf(“%ldn”,s); }

【3.22】下面程序的功能是显示具有n个元素的数组s中的最大元素。#define N 20 main(){ int i,a[N];

for(i=0;i

for(p=0,k=p;ps[k])② ; return(k); }

【3.23】下面程序的功能是由键盘输入n,求满足下述条件的x、y:

nx和ny的末3位数字相同,且x≠y,x、y、n均为自然数,并使x+y为最小。#include pow3(int n,int x){ int i, last;

for(last=1,i=1;i<=x;i++)last= ① ; return(last); } main(){ int x,n,min,flag=1; scanf(“%d”, &n);

for(min=2;flag;min++)for(x=1;x

【3.24】下面的程序是用递归算法求a的平方根。求平方根的迭代公式如下:

#include double mysqrt(double a, double x0){ double x1, y; x1 = ① ;

if(fabs(x1-x0)>0.00001)y = mysqrt(②); else y = x1; return(y); } main(){ double x;

printf(“Enter x: ”); scanf(“%lf”, &x);

printf(“The sqrt of %lf=%lfn”, x, mysqrt(x, 1.0)); }

【3.25】以下程序是计算学生的年龄。已知第一位最小的学生年龄为10岁,其余学生的年龄一个比一个大2岁,求第5个学生的年龄。#include age(int n){ int c;

if(n==1)c=10; else c= ① ; return(c); } main(){ int n=5;

printf(“age:%dn”, ②); }

【3.26】下面的函数sum(int n)完成计算1~n的累加和。

sum(int n){ if(n<=0)printf(“data errorn”); if(n==1)① ; else ② ; }

【3.27】下面的函数是一个求阶乘的递归调用函数。facto(int n){ if(n == 1)① ; else return(②); }

【3.28】组合问题,由组合的基本性质可知:(1)C(m,n)=C(n-m,n)(2)C(m,n+1)=C(m,n)+C(m-1,n)公式(2)是一个递归公式,一直到满足C(1,n)=n为止。当n<2*m时,可先用公式(1)进行简化,填写程序中的空白,使程序可以正确运行。#include“stdio.h” main(){ int m,n;

printf(“Input m,n=”); scanf(“%d%d”, &m, &n);

printf(“The combination numbeers is %dn”, combin(m,n)); } combin(int m, int n)

{ int com;

if(n<2*m)m=n-m; if(m==0)com=1; else if(m==1)① ; else ② ; return(com); }

【3.29】下列函数是求一个字符串str的长度。•••••• int strlen(char *str)••••••{ if(①)return(0); •• •••• else return(②); }

【3.30】用递归实现将输入小于32768的整数按逆序输出。如输入12345,则输出54321。#include“stdio.h” main(){ int n;

printf(“Input n : ”); scanf(“%d”, ①); r(n);

printf(“n”);

}

r(int m){ printf(“%d”, ②); m = ③ ; if(④)⑤ ; }

【3.31】输入n值,输出高度为n的等边三角形。例如当n=4时的图形如下: * *** ***** ******* #include void prt(char c, int n){ if(n>0){ printf(“%c”, c); ① ; } }

main(){ int i, n;

scanf(“%d”, &n);

for(i=1; i<=n; i++){ ② ;

③ ;

printf(“n”); } }

【3.32】下面的函数实现N层嵌套平方根的计算。

double y(double x, int n){ if(n==0)return(0);

else return(sqrt(x+(①))); }

【3.33】函数revstr(s)将字符串s置逆,如输入的实参s为字符串“abcde”,串“edcba”。递归程序如下: revstr(char *s){ char *p=s, c; while(*p)p++; ① ; if(s

revstr(s+1); ③ ; } }

如下是由非递归实现的revstr(s)函数: revstr(s)char *s;

{ char *p=s, c; while(*p)p++; ④ ;

while(s

则返回时 s 为字符

}

【3.34】下面函数用递归调用的方法,将str中存放的长度为n的字符串反转过来,例如原来是“ABCDE”,反序为“EDCBA”。void invent(char *str,int n){ char t;

t=*str; *str=*(str+n-1); *(str+n-1)=t; if(n>2)invent(①,n-2); else ② ; }

【3.35】从键盘上输入10个整数,程序按降序完成从大到小的排序。#include int array[10]; sort(int *p, int *q){ int *max, *s; if(①)return;

max=p; for(s=p+1; s<=q; s++)if(*s > *max)② ; swap(③); sort(④); } swap(int *x, int *y){ int temp; temp=*x; *x=*y; *y=temp; } main(){ int i; printf(“Enter data :n”); for(i=0; i<10; i++)scanf(“%d”, &array[i]); sort(⑤); printf(“Output:”); for(i=0; i<10; i++)printf(“%d ”, array[i]); }

【3.36】下面函数的功能是将一个整数存放到一个数组中。存放时按逆序存放。例如:483存放成“384”。

#include void convert(char *a, int n){ int i;

if((i=n/10)!=0)convert(① , i);

*a = ② ;

第四篇:C语言程序设计考试题答案

1、已知int i, x[3][4];则不能将x[1][1]的值赋给变量i的语句是______(分数:2 分)

A.i=*(*(x+1))B.i=x[1][1] C.i=*(*(x+1))D.i=*(x[1]+1)标准答案是:A。

2、当c的值不为0时,在下列选项中能够将c的值赋给变量a、b的是______.(分数:2 分)

A.a=c=b;B.(a=c)&&(b=c);C.c=b=a;D.(a=c)||(b=c);标准答案是:B。

3、函数的功能是交换变量x和y中的值,且通过正确调用返回交换的结果。能正确执行此功能的函数是______。(分数:2 分)

A.fund(int *x, int *y){ *x=*x+*y;*y=*x-*y;*x=*x-*y;} B.funb(int x, int y){ int t;t=x;x=y;y=t;} C.funa(int *x, int *y){ int *p;*p=x;*x=*y;*y=*p;} D.func(int *x, int *y){ *x=*y;*y=*x;} 标准答案是:A。

4、若x=2,y=3则x||y的结果是______(分数:2 分)

A.0 B.3 C.1 D.2 标准答案是:C。

5、已知int a[10];则对a数组元素的正确引用是______(分数:2 分)

A.a[10] B.a[3.5] C.a[10] D.a(5)标准答案是:C。

二、多选

1、若定义:int a【2】【3】{0,2,4,6,8,10};以下描述正确的有______(分数:3 分)A.*(a+1)为元素6的地址 B.*(a【1】+1)的值为2 C.**(a+1)+2的值为8 D.a【0】与a的相同 标准答案是:ABCD。

2、在缓冲文件系统中用于读写的函数有______(分数:3 分)A.putchar()B.fread()C.rewind()D.purw()标准答案是:ABD。

3、指出下面合法的标识符______(分数:3 分)A.3ab B.ABC C.a_3 D._stu2 标准答案是:ABC。

4、指出下面哪些是合法的用户定义的标识符______(分数:3 分)A.P-S B._908 C.wind D.x y 标准答案是:BC。

6、这段程序中的常量有:#define PI 3.14;void main(){ int sum;sum = 10 + 15;printf(“sum=%dn”,sum);printf(“result is 25n”);}这段程序中常量有______(分数:3 分)A.10 B.sum C.15 D.PI 标准答案是:ACD。

1、说明语句int *(*p)();的含义是______(分数:2 分)

A.p是一个指向int型数组的指针 B..p是指针变量,它构成了指针数组

C.p是一个指向函数的指针,该函数的返回值是一个整型

D.p是一个指向函数的指针,该函数的返回值是一个指向整型的指针 标准答案是:D

2、已知int a, *p=&a;则下列函数调用中错误的是______(分数:2 分)

A.scanf(”%d”, &a);B.scanf(”%d”, p);C.printf(”%d”, a);D.printf(”%d”, p);标准答案是:D。

3、在C语言中,字符型数据在内存中的存储形式是______(分数:2 分)

A.原码 B.补码 C.反码 D.ASCII码 标准答案是:D。

4、已定义以下函数:fun(int *p){ return *p;}该函数的返回值是______(分数:2 分)

A.不确定的值

B.形参p所指存储单元中的值 C.形参p中存放的值 D.形参p的地址值 标准答案是:D。

5、()已知char b[5],*p=b;,则正确的赋值语句是(分数:2 分)A.b=“abcd”;B.*b=“abcd”;C.p=“abcd”;D.*p=“abcd”;标准答案是:C。

二、多选

1、如果要把常量327存入变量a中,a可以定义成哪些类型?______(分数:3 分)A.int B.char C.long D.float 标准答案是:ACD。

2、下面哪些写法是对的,而且是常量?______(分数:3 分)A.125 B.-0.456 C.1.25E+20 D.'AB' 标准答案是:AC。

3、指出下面错误的表达式______(分数:3 分)A.a+b=5 B.56=a11 C.i=i++ D.5.6+6.2%3.1 标准答案是:ABD。

4、若变量f已说明为float类型,i为int类型,则下面哪些表达式(或语句)能够实现将f中的数值保留小数点后两位,第三位进行四舍五入的运算?______(分数:3 分)A.f=(f*100+0.5)/100.0 B.i=f*100+0.5,f=i/100.0;C.f=(int)(f*100+0.5)/100.0;D.f=(f/100+0.5)*100.0;标准答案是:BC。

5、已知a为整型变量,那么与表达式a!=0真假值情况相同的表达式有哪些?______(分数:3 分)A.a>0||a<0 B.a C.!a==0 D.!a 标准答案是:ABC。

1、()若有以下定义:char s[20]= “programming”,*ps=s;则不能代表字符g的表达式是(分数:2 分)A.ps+3 B.s[3] C.ps[3] D.ps+=3,*ps 标准答案是:B。

2、()当对两个字符串进行比较时,应该使用的函数是(分数:2 分)A.strcat B.strcmp C.strcpy D.strlen 标准答案是:B。

3、()strlen 11.若i为整型变量,则以下循环的次数是for(i=2;i==0;)printf(“%d”,i--);(分数:2 分)A.无限次 B.0次 C.1次 D.2次

标准答案是:B。

4、()以下关于数组的描述正确的是(分数:2 分)A.数组大小固定,但是可以有不同类型的数组元素 B.数组大小可变,但是所有数组元素的类型必须相同 C.数组大小固定,所有元素的类型必须相同 D.数组大小可变,可以有不同类型的数组元素 标准答案是:C。

5、()以下能正确定义数组并正确赋初值的语句是(分数:2 分)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},{34}};标准答案是:D。

二、多选

1、程序的结构可分为哪几类______(分数:3 分)A.顺序结构 B.循环结构 C.程序结构 D.选择结构

标准答案是:ABD。

2、已知a为整型变量,那么与表达式a!=0真假值情况相同的表达式有哪些?______(分数:3 分)A.a>0||a<0 B.a C.!a==0 D.!a 标准答案是:ABC。

3、已知a为整型变量,那么与表达式a!=0真假值情况相同的表达式有哪些?______(分数:3 分)A.a B.!a==0 C.!a D.a>0||a<0 标准答案是:ABD。

4、指出下面错误的表达式______(分数:3 分)A.a=5,b=6,c=7 B.i=i++ C.5.6+6.2%3.1 D.56=a11 标准答案是:BD。

5、下面哪些写法是对的,而且是常量?______(分数:3 分)

A.125 B.2.5E+21 C.AB' D.n'123 标准答案是:BD。

1、()选择正确的输入语句()。:(其中:char string[20];)使得string的内容为“I am student”.数:2 分)

A.scanf(“%s”, string);B.scanf(“%c”, &string);C.scanf(“%s”, &string);D.gets(string);标准答案是:D。

2、()对以下说明语句 int a[10]={6,7,8,9,10};的正确理解是(分数:2 分)A.将5个初值依次赋给a[6]至a[10] B.将5个初值依次赋给a[0]至a[4] C.因为数组长度与初值的个数不相同,所以此语句不正确 D.将5个初值依次赋给a[1]至a[5] 标准答案是:B。

3、()以下标识符中可以作为用户函数名的是(分数:2 分)A.struct B.int C.union D.go_to 标准答案是:D。

4、源程序要正确地运行,必须要有什么函数?______(分数:2 分)A.printf函数 B.自定义的函数 C.main D.不需要函数 标准答案是:C。

5C语言程序由什么组成?______(分数:2 分)A.子程序

B.主程序和子程序

(分C.函数 D.过程

标准答案是:C。

二、多选

1、下面哪些是合法的用户定义的标识符______(分数:3 分)A._908 B.*par C.sheep!D.wind 标准答案是:AD。

2、下面合法的标识符______(分数:3 分)A.ABC B.a_3 C.sum.a D._stu2 标准答案是:ABD。

3、C语言的主要特点有哪些?______(分数:3 分)A.简洁、紧凑,使用方便、灵活,易于学习和应用。B.C语言是面向结构化程序设计的语言。

C.C语言允许直接对位、字节和地址进行操作。D.数据类型丰富。标准答案是:ABCD。

4、已定义c为字符型变量,则下列语句中错误的是______(分数:3 分)A.c='97' B.:c=“97” C.c=97;D.c=“a” 标准答案是:ABD。

5下列选项中是C语言合法标志符的有______(分数:3 分)A.good_morning B.main C.stdio.h D.8abc 标准答案是:AB。

1、一个C程序的执行是从______(分数:2 分)

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

B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C.本程序的main函数开始,到本程序文件的最后一个函数结束 D.本程序文件的第一个函数开始,到本程序main函数结束 标准答案是:A。

2、以下叙述正确的是______(分数:2 分)

A.在C程序中,main函数必须位于程序的最前面 B.C程序的每行中只能写一条语句 C.C语言本身没有输入输出语句 D.在对一个C程序进行编译的过程中,可发现注释中的拼写错误 标准答案是:C。

3、以下叙述不正确的是。______(分数:2 分)

A.一个C源程序可由一个或多个函数组成 B.一个C源程序必须包含一个main函数 C.C程序的基本组成单位是函数

D.在C程序中,注释说明只能位于一条语句的后面 标准答案是:D。

4、语言规定:在一个源程序中,main函数的位置______(分数:2 分)

A.必须在最开始

B.必须在系统调用的库函数的后面 C.可以任意 D.必须在最后 标准答案是:C。

5、一个C语言程序是由______(分数:2 分)

A.一个主程序和若干子程序组成 B.函数组成 C.若干过程组成 D.若干子程序组成 标准答案是:B。

二、多选

1、指出下面合法的标识符:______(分数:3 分)A.3ab B.ABC C.a_3 D._stu2 标准答案是:BCD。

2、指出下面哪些是关键字:______(分数:3 分)A.char B.abc C.printf D.float 标准答案是:AD。

3、指出下面哪些是合法的用户定义的标识符?______ A.P-S B.put11 C.printf D.Int 标准答案是:BD。

4、C语言的基本类型哪些:______(分数:3 分)A.整型 B.枚举型 C.数组型 D.指针型 分)(分数:标准答案是:AB。

5这段程序中的常量有:(#define PI 3.14;void main(){ int sum;sum = 10 +15;printf(“sum=%dn”,sum);printf(“result is 25n”);}这段程序中常量有______(分数:3 分)A.10 B.15 C.25 D.PI 标准答案是:ABD。1、75的十六进制写法为___,八进制写法为______(分数:2 分)A.0x4b 0113 B.0165 117 C.61 0x3d D.0x4b 61 标准答案是:A。2、0x75的八进制写法为___,十进制写法为___。(分数:2 分)A.0165 117 B.0x4b 0113 C.61 0x3d D.0x4b 61 标准答案是:A。3、075的十进制写法为___,十六进制写法为___。(分数:2 分)A.0x4b 0113 B.0165 117 C.61 0x3d D.0x4b 61 标准答案是:C。

4、下面哪个表达式的值为4______(分数:2 分)A.(float)11/3 B.2016/11/3 星期四上午 12:00:00 C.11.0/3 D.(int)(11.0/3+0.5 标准答案是:D。

5已知整型变量a=6,b=7,c=1,则下面表达式的值为多少?a+3______(分数:2 分)A.9 B.2 C.1 D.65 标准答案是:A。

二、多选

1、C语言中整形常量按进制划分,有以下几种:______(分数:3 分)A.十六进制常量 B.十进制常量 C.八进制常量 D.二进制常 标准答案是:ABC。

2、如果要把常量327存入变量a中,a可以定义成哪些类型?______(分数:3 分)A.int B.char C.float D.long 标准答案是:ACD。

3、下面哪些写法是对的,而且是常量?______(分数:3 分)A.125 B.-0.456 C.56 D.452.2 标准答案是:AB。

4、指出下面错误的表达式:______(分数:3 分)A.56=a11 B.a+b=5 C.i=i++ D.5.6+6.2%3.1 标准答案是:ABD。

5若变量f已说明为float类型,i为int类型,则下面哪些表达式(或语句)能够实现将f中的数值保留小数点后两位,第三位进行四舍五入的运算?______(分数:3 分)A.f=(f*100+0.5)/100.0 B.i=f*100+0.5,f=i/100.0 C.f=(int)(f*100+0.5)/100.0 D.f=(f/100+0.5)*100.0 标准答案是:BC。

1、在C语言中,要求运算数必须是整型的运算符是_____(分数:2 分)

A./ B.++ C.!= D.% 标准答案是:D。

2、若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是______(分数:2 分)A.2.500OO B.2.7500OO C.2.3600OO D.2.0OO 标准答案是:B。

3、设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为______(分数:2 分)A.int B.float C.double D.不确定 标准答案是:C。

4、在C语言中, char型数据在内存中的存储形式是:______(分数:2 分)

A.补码 B.反码 C.原码 D.ASCII码 标准答案是:D。

5、若有以下说明语句:char s='092';则下面哪一项是正确的______(分数:2 分)

A.使s的值包含2个字符 B.说明语句不合法

C.使s的值包含6个字符 D.使s的值包含4个字符 标准答案是:B。

二、多选

1、下面哪些是非法的C语言转义字符?_______(分数:2 分)A.'t' B.'8' C.'xaf' D.'' 标准答案是:BC。

2、请从下面的选项中选出正确的C语言的转义字符______(分数:2 分)A.''' B.'t' C.'n' D.'xaa' 标准答案是:ABCD。

3、以下符合C语言语法的赋值表达式是______(分数:2 分)A.d=9+e+f=d+9 B.d=9+e,f=d+9 C.d=9+e,e++,d+9 D.d=9+e++=d+7 标准答案是:BC。

4、sizeof(float)是______(分数:2 分)A.一个双精度型表达式 B.一个整型表达式 C.一种函数调用

D.一个不合法的表达式 标准答案是:AB。

5C程序的结构可分为哪几类?______(分数:2 分)A.顺序结构 B.循环结构 C.程序结构 D.选择结构 标准答案是:AB。

1、putchar函数可以向终端输出一个:______(分数:2 分)

A.整型变量表达式值 B.字符串 C.实型变量值 D.字符或字符型变 标准答案是:D。

2、printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按方式______(分数:2 分)A.从左起输出该字串,右补空格 B.按原字符长从左向右全部输出 C.右对齐输出该字串,左补空格 D.输出错误信息 标准答案是:B。

3、已知static int a[2][3]={2,4,6,8,10,12};正确表示数组元素地址的是______(分数:2 分)

A.*(a[1]+2)B.a[1]+3 C.*(a+1)D.a[0][0] 标准答案是:C

4、函数调用strcat(strcpy(str1, str2), str3)的功能是______(分数:2 分)

A.将串str1复制到串str2中,然后再连接到str3之后

B.将串str2复制到串str1中,然后再将串str3连接到串str1之后 C.将串str2复制到串str1中,再将串str1连接到str3之后 D.将串str1连接到串str2之后,再复制到str3之中 标准答案是:B。

5、已知int a[10];则对a数组元素的正确引用是______(分数:2 分)

A.a[10] B.a[3.5] C.a(5)D.a[10] 标准答案是:D。

二、多选

1、若a,b,c,d都是int型变量且初值为0,以下选项中正确的赋值语句是______(分数:3 分)

A.a=b=c=d=100 B.d++;C.c+b;D.d=(c=22)-(b++)标准答案是:ABD。

2、以下描述正确的是______(分数:3 分)

A.使用while和do-while循环时,循环变量初始话的操作应在循环体语句之前完成 B.while循环是先判断表达式,后执行循环语句

C.do-while和for循环均是先执行循环语句,后判断表达式 D.for,while和do-while循环中的循环体均可以由空语句构成 标准答案是:ABD。

3、以下4个选项中,可以看作是一条语句的有______(分数:3 分)A.{;} B.a=0,b=0,c=0;C.if(a>0)D.if(b==0)m=1;n=2;标准答案是:ABC。

4、以下叙述正确的是______(分数:3 分)A.C语言严格区分大小写英文字母 B.C语言用“;”作为语句分隔符

C.C程序书写格式自由,一行内可以写几个语句,一个语句也可以写在几行上 D.可以使用/*…*/对C程序中的任何部分作注释 标准答案是:ABCD。

5下列对逻辑运算符两侧的运算对象的数据类型描述不正确的是______(分数:3 分)A.只能是0或1 B.只能是0或非0正数 C.可以是整型或字符型数据 D.可以是任何类型的数据 标准答案是:ABD。

1、在C语言的if语句中,用作判断的表达式为______(分数:2 分)

A.关系表达式 B.逻辑表达式 C.算术表达式 D.任意表达式 标准答案是:D。

2、若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数表达式的值为“假”。则以下不能满足要求的表达式是______(分数:2 分)A.A%2= =1 B.!(A%2 = =0)C.!(A%2)D.A%2 标准答案是:C。

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

4、已知char b[5], *p=b;则正确的赋值语句是。______(分数:2 分)

A.b=”abcd” B.*b=”abcd”;C.p=”abcd”;D.*p=”abcd”;标准答案是:C。

5、已知int a[]={1,2,3,4,5,6,7,8,9,10,11,12}, *p=a;则值为3的表达式是______(分数:2 分)

A.p+=2, *(p++)B.p+=2, *++p C.p+=3, *p++ D.p+=2, ++*p 标准答案是:A。

二、多选

1、以下不符合C语言语法的实型常量是______(分数:3 分)A.1.2E0.5 B.3.14.159E C.0.005 D.E15 标准答案是:ABD。

2、以下叙述中正确的是______(分数:3 分)A.一个C源程序可由一个或多个函数组成 B.一个C源程序必须包含一个main()函数 C.C源程序的基本组成单位是函数

D.在C源程序中,注释说明只能位于一条语句的最后 标准答案是:ABD。

3、以下正确的if语句形式是______(分数:3 分)A.if(x>y && x!=y)B.if(x==y)x+=y C.if(x!=y)scanf(“%d”,&x)else scanf(“%d”,&y);D.if(x

4、以下选项中不是C语言合法整数的是______(分数:3 分)A.10110 B.386 C.0Xffa D.x2a2 标准答案是:BD。

5以下关于数组描述错误的是______(分数:3 分)

A.数组的大小是固定的,但可以有不同的类型的数组元素 B.数组的大小是可变的,但所有数组元素的类型必须相同 C.数组的大小是固定的,所有数组元素的类型必须相同 D.数组的大小是可变的,可以有不同的类型的数组元素 标准答案是:ABD。

1、设有定义:int x=12,n=5;则表达式x%=(n%2)的值为______(分数:2 分)

A.2 B.3 C.5 D.0 标准答案是:D。

2、针对下列程序段回答问题().for(t=1;t<=100;t++){scanf(“%d”,&x);if(x<0)______(分数:2 分)

A.x>=0时什么也不输出

B.最多允许输出100个非负整数 C.printf函数永远也不执行 D.当x<0时整个循环结束 标准答案是:B。

3、已知char b[5],*p=b;,则正确的赋值语句是______(分数:2 分)

A.b=“abcd”;B.*b=“abcd”;C.p=“abcd”;D.*p=“abcd”;标准答案是:C。

4、在C语言中,十进制数47可等价地表示为______(分数:2 分)

A.2f B.02f C.57 D.57 标准答案是:D。

5、有两个整型变量dog和cat,若要从磁盘文件把数据读到其中,正确的形式是______(分数:2 分)

A.fscanf(dog ,2,1,fp);B.fscanf(fp,“%d%d”,&dog ,&cat);C.fscanf(dog ,cat,2,1,fp);D.fscanf(fp,“%d”,&dog ,&cat);标准答案是:B。

二、多选

1、下面程序的功能是从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者,请选择填空:#indude “stdio.h”main(){int m=0,n=0;char c;1;while((_____)!='n'){ if(c>='A' && C<='Z')m++ if(c>='a' && c<='z')n++;}printf(“%dn”, m A.c=getchar()B.getchar()C.c=getchar()D.scanf(“%c”,c)标准答案是:AC。

2、以下选项中,合法的字符常量是______(分数:3 分)A.'t' B.'17' C.“n” D.'xaa' 标准答案是:ABD。

3、以下用户标识符,其中合法的是______(分数:3 分)A.return B.f2_G3 C.A3-3 D.abc 标准答案是:BD。

4、以下可以定义为用户标识符的有______(分数:3 分)A.scanf B.short C._3com_ D.int 标准答案是:AC。

5以下选项中合法的表达式是______(分数:3 分)A.0<=x<100 B.i=j==0 C.(char)(65+3)D.x+1=x+1 标准答案是:ABC。简答题

1#include void main(){ int i=0,j=1;for(i=2;i<=10;i++){ j*=i;} printf(“%d”,j);return 0;} 21.定义文件指针 2.打开文件,判断是否成功打开,若打开失败,程序退出运行状态 3.对文件进行读写操作 4.关闭文件

名词解释 1条件语句

2条件语句否定分支(与 if 连用)论述题 1限制|调试

第五篇:《C语言程序设计》2011-2012-2B答案

河南理工大学学期

《C语言程序设计》笔试试卷(B卷)

一、单项选择题(每题1分,共50分),在每小题列出的四个选项中只有一个选项是符合题目要求的,请在答案卡上将正确答案所对应选项的字母涂黑。

1.A2.B3.A4. D5. C6.D7.B8.D9.D10.B

11.B12.A13.B14.B15.D16.A17.C18.D19.C20.B

21.C22.A23.C24.C25.C26.A27.D28.A29.C30.A

31.C32.C33.C34.B35.A36.D37.B38.D39.D40.A

41.B42.B43.B44.C45.B46.C47.A48.B49.A50.C

二、填空题(每空2分,10个空,共20分)。

51.2652.353.154.‘’55.Pa是指向整型二维数组行的指针变量,每行有10个元素。56.#define57.递归58.;(分号)59.5.360.12

三、程序阅读试题(共10题,每题3分,共30分)

61.a10=1,c8=101,dc=b

62.852

k=4,y=0

63.m=82,j=7

64.下面程序的输出结果是____。

ABCD

BCD

CD

D

65.YES

66.s=-13,count=2

67.123

68.1 2 3 6 7 9

69.The output is:

12876543910

67821543910

70.12

《C语言程序设计》试卷 第1页(共1页)

下载C语言程序设计试题及答案解析[精选多篇]word格式文档
下载C语言程序设计试题及答案解析[精选多篇].doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    《C语言程序设计》2011-2012-2A答案

    河南理工大学学期 《C语言程序设计》笔试试卷(A卷) 一、单项选择题(每题1分,共50分) 1.B2.A3.D4.A5.C6.C7.C8.C9.C10.A 11.B12.B13.D14.D15.D16.C17.C18.C19.D20.A 21.C22.C23.......

    C语言程序设计试题 库

    目录 第一章 基础知识 .................................................................................................................................................

    VB程序设计试题与答案

    1.要使一个标签能够显示所需要的文本,应设置该标签的( )属性的值(单) A.Caption B.Name C.Text D.AutoSize 2.为使计时器对象每隔5秒钟产生一个时钟事件(Timer事件),则其Int......

    VB程序设计试题及答案(一)

    VB程序设计试题及答案(一) 一、单选题 1. VB6.0是一种面向 B 的编程环境。(A) 机器 (B) 对象(C) 过程 (D) 应用 2. 要使FormI窗体的标题栏显示"欢迎使用VB",以下 D 语句是正确......

    2018年 C语言程序设计A卷答案

    一、选择题答案 1、B 2、C 3、D 4、B 5、B 6、A 7、B 8、C 9、B 10、D 11、C 12、B 13、C 14、D 15、B 二、填空题答案 1、n=%dn m=%dn 2、i=5;i>=1;--i 3、1.0/(i*i) 4、......

    C语言程序设计试题集97684 - 副本(最终定稿)

    1. 每个C程序都必须有且仅有一个main 函数。 2. C语言程序开发到执行通常要经过6个阶段即编辑、预处理、编译 链接、加载和执行。 3. 软件是程序,以及开发、使用和维护所需要......

    C语言程序设计

    1. Problem A: Hello world! Description Xiao_ming有两个哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放学回家,父母分别跟他们打招呼。 Input 无 Output 请输出: Hello Da_min, He......

    C 语言程序设计

    《C 语言程序设计》主要在计算机软件、计算机网络、计算机应用、通信技术、智能电子、电子信息工程、多媒体以及核工程与核技术等专业中开设,是电子信息类、机械类等工科专业......