非常好的C语言章节习题集带答案 下载本文

第1章 认识C语言

二、习题

(一)、是非题

1.程序是指挥计算机进行各种信息处理任务的一组指令序列。

A.对 B.错

2.机器语言与硬件平台相关,但汇编语言和硬件平台无关。

A.对 B.错

3.编译型高级语言明显优于解释型高级语言。

A.对 B.错

4.C语言把高级语言的基本结构和低级语言的实用性紧密结合起来,不仅适合编写应用软

件,而且适于编写系统软件。 A.对 B.错

5.面向对象的程序设计方法明显优于面向过程的程序设计方法。

A.对 B.错

6.计算机算法要有一个明确的起点和确定的步骤序列。

A.对 B.错

7.main函数是C程序的入口,由计算机系统负责调用。

A.对 B.错

8.在C语言中,同一行上可以写一条或多条语句,但一条语句不能写在多行上。

A.对 B.错

9.在C语言中,扩展名为.h的文件称为头文件,常用于组织C标准函数库中的函数。

A.对 B.错

10.注释语句会增加编译结果的复杂性,因此要尽量减少注释语句的数量。

A.对 B.错

11.声明变量的含义是通知编译系统为变量分配合适大小的存储空间。

A.对 B.错

12.C语言不允许使用关键字作为变量的名称,但可以使用保留字为变量命名。

A.对 B.错

13.符号常量提高了程序的可读性,但降低了程序维护的方便性。

A.对 B.错

14.变量声明把一个具体的标识符名称和计算机内存中的一个特殊的位置联系起来,同时确

定了该位置存储的信息类型。 A.对 B.错

15. C语言允许在同一条语句中定义多个相同类型的变量,其间用分号进行分隔。

A.对 B.错

1

16.在ISO/ANSI 1999规定中,允许将变量声明放在程序中的任何位置。

A.对 B.错

17.不同类型的数据在内存中所占存储单元的大小不同,内部存储方式不同,取值范围不

同,甚至能够参与的运算种类也不相同。 A.对 B.错

18.有符号和无符号整数的区别仅在于对数据最高位的解释不同。若最高位解释为数据位,

则为signed类型;若最高位解释为符号位,则为unsigned类型。 A.对 B.错

19.默认形式的实数常量的数据类型为float类型。

A.对 B.错

20.实型变量能表示的数字的有效位数是有限的。

A.对 B.错

21.sizeof( )是C语言提供的标准库函数,用于测试数据类型在系统中所占的字节数。

A.对 B.错

22.使用转义字符可输出ASCII码表中的任一字符。

A.对 B.错

23.char类型数据内部采用整数存储方式,因此它和int型数据可以互为通用。

A.对 B.错

24.在C语言中,保存字符串“B”实质上是保存字符'B'和'\\0'两个符号。

A.对 B.错

25.在C语言中,允许对两个字符型数据进行加法运算。

A.对 B.错 (二)、选择题

1.C语言是一种______。

A.汇编语言 B.“解释型”语言 C.“编译型”语言 D. 面向对象语言 2.下列说法中,正确的是______。

A.机器语言与硬件相关,但汇编语言与硬件无关 B.不同的计算机类型,其能理解的机器语言相同

C.汇编语言采用助记符提高程序的可读性,但同样属于低级语言 D.汇编源程序属于低级语言程序,计算机可以直接识别并执行 3.下面有关高级语言的说法中,正确的是______。

A.高级语言编写的程序可读性好,执行效率也最高

B.高级语言程序必须翻译成机器语言程序,计算机才能执行

C.解释方式和编译方式相比,具有占用内存少、执行速度快的特点 D.C语言是一种解释型高级语言

4.下面有关C语言特点的说法中,错误的是______。

A.C语言编写的代码较为紧凑,执行速度也较快

B.C语言不仅适合编写各种应用软件,还适于编写各种系统软件 C.C语言是一种模块化和结构化的语言

2

D.C语言编写的程序通常不具备移植性

5.下面有关程序设计技术的说法中,错误的是______。

A.机器语言和汇编语言编程通常采用面向计算机的程序设计方式 B.面向过程的程序设计方法通常采用结构化和模块化设计方法 C.面向对象的程序设计方法采用客观世界的描述方式

D.C语言是一种兼顾面向过程和面向对象的高级程序设计语言 6.下面有关C程序操作过程的说法中,错误的是______。

A.C源程序经过编译,得到的目标文件即为可执行文件

B.C源程序的链接实质上是将目标代码文件和库函数等代码进行连接的过程 C.C源程序不能通过编译,通常是由于语法错误引起的

D.导致不能得到预期计算结果的主要原因是程序算法考虑不周 7.一个C语言程序是由________组成。

A.主程序 B.子程序 C.函数 D.过程 8.C源程序中不能表示的数制是______。

A.二进制 B.八进制 C.十进制 D.十六进制 9.一个C语言程序总是从__________开始执行。

A.主程序 B.子程序 C.主函数 D.函数 10.以下叙述中正确的是_______。

A.在C程序中,main函数必须位于程序的最前面 B.C程序的每一行中只能写一条语句

C.在对一个C程序进行编译的过程中,可发现注释中的拼写错误 D.C语言本身没有输入输出语句 11.以下叙述中正确的是_________。

A.C程序的基本组成单位是语句 B.C程序中的每一行中只能写一条语句 C.C语句必须以分号结束 D.C语句必须在一行内写完 12.以下叙述中错误的是_________。

A.函数是C程序的基本组成单位 B.函数体一般由一组C语句序列组成

C.printf是C语言提供的输出语句 D.函数通常分为库函数和用户自定义函数两种 13.以下程序的输出结果是______。 #include \void main()

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

printf(\A.4 3 2 B.2,3,4 C.4,3,2 D.2 3 4 14. C语言中,最基本的数据类型是_________。

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

C.整型、字符型、逻辑型 D.整型、实型、逻辑型、字符型 15.下面有关变量声明的说法中,正确的是_________。

A.C语言中不用先声明变量,需要时直接使用即可

B.每个变量的存储空间大小由数据类型和编译环境共同决定

3

C.在VC++6.0环境下,为int型变量分配的存储空间大小为2个字节 D.变量声明时,不能进行赋值操作

16.若x和y为整型变量,对于scanf(\语句,可使x和y的值分别为10和20的正确输入方法是_________。

A.10 20 B.10, 20 C.a=10 b=20 D.a=10,b=20 17.下列标识符中,不合法的用户标识符为_________。

A.aBa B._11 C.a_1 D.a&b 18.下列标识符中,合法的用户标识符为_________。

A.month B.5xy C.int D.your name 19._________是C语言提供的合法的数据类型关键字。

A.Boolean B.signed C.integer D.Char 20.不合法的字符常量是_________。

A.'\\678' B.'\\\C.' ' D.'\\4' 21.不正确的字符串常量是_________。

A.'abc' B.\ D.\22.关于下面的程序,正确的说法是_________。

#include stdio.h void main()

{ float a=b=2, result; result=a/b;

printf(\

A. 程序可正常编译,结果为result=1.000000 B. 共有1处语法错误 C. 共有2处语法错误 D. 共有3处语法错误 23.下面变量声明的语句中,错误的是_________。

A.char c=B; B.int a=3 C. char c=65; D.float area=0; 24.关于下面的程序,正确的说法是_________。

#include void main() { int x,y,z; x=y=z=1;

printf(\A.程序无误,能正常通过编译

B.#include 有误,需改为#include \C.int x,y,z;有误,需改为int x; y;z; D.x=y=z=1;有误,需改为x=1; y=1;z=1;

25.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'2';后,

c2中的值为__________。 A.69 B.C C.D D.E

26.为了计算s=10!,则定义变量s时应该使用的数据类型是________。

A.int B.unsigned

4

C.long D.以上三种类型均可 27.以下选项中合法的标识符是________。

A.1_1 B.1-1 C._11 D.1_ 28.下列关于C语言用户标识符的叙述中正确的是________。

A.用户标识符中可以出现下画线和中划线(减号) B.用户标识符中不可以出现中划线,但可以出现下画线

C.用户标识符中可以出现下画线,但不可以放在用户标识符的开头

D.用户标识符中可以出现下画线和数字,它们都可以放在用户标识符的开头 29.以下选项中,能用作数据常量的是________。

A.0119 B.o126 C.2.5e2.5 D.119L

30.以下关于short、int和long类型数据占用内存大小的叙述中正确的是________。

A.均占4个字节 B.根据数据的大小决定所占内存的字节数 C.由用户自己定义 D.由C语言编译系统决定

31.若已定义char c='\\010',则变量c所占的字节数为__________。

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

32.要定义双精度实型变量a和b,并初始化为数值7,则正确的语句是__________。

A.double a,b;a=b=7; B.double a=b=7; C.double a=b=7; D.double a=7,b=7;

33.已知字符a的ASCII码值为97,则以下程序的输出结果是__________。

#include \void main() { char ch='c';

printf(\

A.c99 B.c98 C.c97 D.编译出错 34.以下程序运行后的输出结果是_________。

#include “stdio.h” void main() { char c; c='B'+32;

printf(\

A.B B.b C.B32 D.b32 35.以下程序运行后的输出结果是_________。

#include \void main() { char c1,c2; c1='a'; c2='b'; c1=c1-32; c2=c2-32;

printf(\ printf(\

5

A.A B B.A B C.a b D.a b 65 66 97 98 65 66 97 98

36.如果将一个函数的返回值类型说明为void,则表示_________。

A.该函数可以返回任意类型的值 B.该函数不能返回任何值

C.该函数可以返回基本类型的值 D.该函数是main函数,是程序运行的起点 37.对于int型常量,不正确的是__________。

A.029 B.-25 C.0x2A D.-0X28 38.下列整型常量,错误的是__________。

A.025 B.285L C.-285u D.285lu 39.以下有关整型变量的定义中,错误的是___________。

A.short int x; B.long x; C.unsigned x; D.short x; 40.下列实型常量,错误的是__________。

A.3.2f B.-2.2E-2F C.-12.0 D.e3

41.在VC++6.0环境下,sizeof(int)和sizeof(float)的值分别为__________。

A.2,2 B.2,4 C.4,4 D.4,8 42.对于浮点型数据,下列说法中不正确的是______。

A.浮点数在存储时存在舍入误差

B.程序设计时,不能直接对两个浮点型数据进行相等比较

C.将一个很小的浮点数和一个很大的浮点数进行相加,结果可能不正确 D.C语言中的浮点型变量有float和double两种

43.若ch为字符型变量,则不能使ch表示字符'B'的语句是__________。

A.ch=B; B.ch=66; C.ch='\\102'; D.ch='\\x42'; 44.以下程序运行后的输出结果是_________。

#include \int f(int x,int y) { return 2*x+y; } void main()

{ int a=3,b=2,t=0; t= f(b,a);

printf(\

A. 0 B. 5 C. 7 D. 8 45.以下程序运行后的输出结果是_________。

#include \void main() { char ch='a'; int x=5;

float s=2.5F;

printf(\

6

A.1,2,4 B.1,4,4 C.1,4,8 D.a,5,2.5 (三)、编程题

1.已知长方形的长和宽分别为x和y,计算其周长和面积。

2.编写一个程序,其功能为:从键盘上输入两个整型数据,分别存放在整型变量a和b中,然后输出表达式a/b和a%b的值。

3.编写一个程序,其功能为:从键盘上输入一个浮点数,然后分别输出该数的整数部分和小数部分。

4.编写一个程序,其功能为:从键盘上输入一个小写字母,显示这个小写字母及它所对应的大写字母以及它们的ASCII码值。

提示:大写字母A~Z的ASCII码值为65~90,小写字母a~z的ASCII码值为97~122。可见,对应的大小写字母的ASCII码值相差32,所以大写字母转换成小写字母就是将其ASCII值加上32,小写字母转换成大写字母就是将其ASCII值减去32。

5.输入一个华氏温度F,根据公式c=5(F-32)/9计算输出对应的摄氏温度。要求:输入要有提示,输出要有说明。

四、习题答案

(一)、是非题

1.A 2.B 3.B 4.A 5.B 6.A 7.A 8.B 9.A 10.B 11.A 12.B 13.B 14.A 15.B 16.A 17.A 18.B 19.B 20.A 21.B 22.A 23.B 24.A 25.A (二)、选择题

1.C 2.C 3.B 4.D 5.D 6.A 7.C 8.A 9.C 10.D 11.C 12.C 13.C 14.B 15.B 16.D 17.D 18.A 19.B 20.A 21.A 22.C 23.A 24.A 25.A 26.C 27.C 28.B 29.D 30.D 31.A 32.D 33.A 34.B 35.A 36.B 37.A 38.C 39.C 40.D 41.C 42.D 43.A 44.C 45.B

7

第2章 顺序结构

二、习题

(一)是非题

1.表达式1/4+2.75的值是3。

A.对 B.错

2.C语言中浮点型变量可以进行自增或自减操作。

A.对 B.错

3.如果整型变量a、b、c已经正确定义,那么c=b=a=012是一个正确的表达式。

A.对 B.错

4.算术运算符和赋值运算符的结合方向均由左自右。

A.对 B.错

5.在进行赋值转换时,变量的类型被自动转换为赋值号右边的表达式值的类型。

A.对 B.错

6.语句char c=\定义了字符型变量c,并将其初始化为A。

A.对 B.错

7.运算符“%”的操作数不允许为单精度和双精度浮点型,允许为字符型和整型。

A.对 B.错 8. 运算符++的优先级高于运算符+。

A.对 B.错

9.逗号运算符的求值顺序是从左到右的,逗号表达式的值为第一个表达式的值。

A.对 B.错 10.“=”运算符用于判断两个数是否相等。

A.对 B.错

11.C语言本身不提供输入输出语句,但可以通过输入输出函数来实现数据的输入输出。

A.对 B.错

12.在使用函数scanf输入数据时必须与函数参数指定的输入格式一致。

A.对 B.错

13.getchar()函数用于输入单个字符,putchar()函数用于输出单个字符。

A.对 B.错 14.123、029、-0xEFF均是合法的整型常量。

A.对 B.错 15.假定已有定义char c;,sizeof c中的sizeof是容量运算符,而sizeof(char)中由于使用了括号形式,称为容量函数。 A.对 B.错

16.假定已有整型变量x的定义,则(x+1)++是一个合法的表达式。

8

A.对 B.错

17.假定已有整型变量初始化语句int x=2;,那么表达式x++,x *=2+1的值为9。

A.对 B.错

18.假定已有变量定义语句:int m=3,n=2;,那么(float)(m/n)表达式的值是1.5。

A.对 B.错 19.C语言中,表达式1/2*2的值为0。

A.对 B.错

20.若scanf函数的格式说明中有一个空格,在输入时也一定要在对应位置输入一个空格。

A.对 B.错 (二)选择题

1.数字字符0的ASCII值为48,则以下程序运行后的输出结果是______。

#include main()

{ char a='1',b='2'; printf(\A.3,2 B.50,2 C.2,2 D.2,50 2.以下程序运行后的输出结果是______。 #include main()

{ int m=12,n=34;

printf(\ printf(\

A.12353514 B.12353513 C.12343514 D.12343513

3.若整型变量a、b、c、d中的值依次为1、2、3、4。则表达式a+b/d*c的值是______。 A.1 B.2.5 C.0.25 D.2 4.以下程序运行后的输出结果是______。 #include main()

{ int a,b,c;

a=10; b=20; c= a%b+a/b;

printf(\A.10200 B.10 20 10 C.102011 D.10 20 1

5.以下程序的功能是:给r输入数据后计算半径为r的圆面积s。程序在编译时出错,出错的原因是______。 #include main()

{ int r; float s; scanf(\s=*p*r*r;

printf(\

A.注释语句书写位置错误 B.存放圆半径的变量r不应该定义为整型

9

C.s=*p*r*r;语句中使用了非法变量 D.输出语句中格式描述符非法 6.设有定义:int k=1,m=2; float f=7;,则以下选项中错误的表达式是______。 A.k=k+=k B.-k++ C.k%int(f) D.f=k%m

7.设有定义:int a=2,b=3,c=4;,则以下选项中值为0的表达式是______。 A.a%b%c B.a/b/c C.a=b=c D.a,b,c

8.有以下程序段:int k=0,a=1,b=2,c=3; k=a+=b-=c;,执行该程序段后,k的值是______。 A.0 B.1 C.2 D.3 9.以下程序运行后的输出结果是______。

#include main()

{ char c; int n=100; float f=10; double x; x=f*=n/=(c=50);

printf(\A.2 20 B.2 20.000000 C.100 10 D.50 10.000000 10.已知字母A的ASCII码为65,则以下程序运行后的输出结果是 ______。

#include main() { char a,b;

a='A'+'5'-'3'; b=a+'6'-'2'; printf(\A.6771 B.67G C.CG D.C71 11.表达式3.6-5/2+1.2+5%2的值是______。

A.3.3 B.3.8 C.4.3 D.4.8

12.若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是________。 A.++x,y=x-- B.x+1=y C.x=x+10=x+y D.double(x)/10 13.以下程序运行后的输出结果是________。 #include main()

{ int x,y,z; x=y=1;

z=x++,y++,++y;

printf(\A.2,3,3 B.2,3,2 C.2,3,1 D.2,2,1 14.以下选项中,值为1的表达式是________。

A.1-'0' B.1-'\\0' C. '1'-0 D. '\\0'-'0' 15.设有定义:int k=0;,以下选项的________与其他三个表达式的值不相同。 A.k++ B.k+=1 C.++k D.k+1 16.执行以下程序后的输出结果是________。

#include

10

main()

{ int a=10; a=(3*5,a+4);

printf(\A.a=10 B.a=14 C.a=15 D.a=19

17.若变量均已正确定义并赋值,以下合法的C语言赋值语句是________。 A.x=y=5; B.x=n%2.5; C.x+n=i; D.x=5=4+1; 18.设变量已经正确定义并赋值,以下正确的表达式是________。

A.x=y*5=x+z B.int(15.8%5) C.x=y+z*5,++y D.x=25%5.0 19.以下不能正确表示代数式2ab/cd的C语言表达式是________。

A.2*a*b/c/d B.a*b/c/d*2 C.a/c/d*b*2 D.2*a*b/c*d

20.设变量a和b已正确定义并赋初值。请写出与a-=a+b等价的赋值表达式________。 A.a=a-a+b B.a-a=b C.a=a-(a+b) D.a=-a+b 21.设有定义:int x=2;,以下表达式中,值不为6的是________。

A.x*=x+1 B.x++,2*x C.x*=(1+x) D.2*x,x+=2 22.表达式(int)((double)9/2)-(9)%2的值是________。 A.0 B.3 C.4 D.5 23.若有定义 int x=10;,则表达式x-=x+x的值为________。

A.-20 B.-10 C.0 D.10

24.若有定义double a=22;int i=0,k=18;,则以下有错的语句是________。

A.a=a++,i++; B.i=(a+k)/(k-i); C.i=a; D.i=!a; 25.以下程序运行后的结果是________。 #include main()

{ int a=2,b=2,c=2; printf(\A.0 B.1 C.2 D.3

26.若有定义int a;long b; double x,y;,则以下选项中正确的表达式是________。 A.a%(int)(x-y) B.a=b=x,y; C.(a*y)%b D.y=x+y=x 27.表达式a+=a-=a=9的值是________。 A.-9 B.0 C.9 D.18

28.若有定义int a=3,b=2,c=1;,以下选项中错误的赋值表达式是________。 A.a=(b=4)=3 B.a=b=c+1; C.a=(b=4)+c; D.a=1+(b=c=4); 29.若有定义int x=12,y=8,z;,在其后执行语句z=0.9+x/y;,则z的值为________。 A.1 B.1.9 C.2 D.2.4 30.以下程序运行后输出的结果是________。 #include main()

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

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

printf(\

11

A.0,4,5 B.4,4,5 C.4,4,4 D.0,0,0

31.设变量均已正确定义并且赋值,以下与其他三组输出结果不同的一组语句是________。 A.x++; printf(\C.++x; printf(\D.n=x++; printf(\32.以下程序运行后输出的结果是________。 #include main()

{ int a=1,b=0; printf(\A.0,0 B.1,0 C.3,2 D.1,2 33.以下程序运行后输出的结果是________。 #include

main(){ int k=011; printf(\

A.12 B.11 C.10 D.9 34.有以下程序:

#include main()

{ int m,n,p;

scanf(\ printf(\

若想使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是______。 A.m=123n=456p=789 B.123,456,789 C.m=123,n=456,p=789 D.123 456 789 35.以下程序运行后输出的结果是________。 #include main()

{ int a,b,d=25; a=d/10%9; b=a+-1; printf(\A.6,1 B.2,1 C.6,0 D.2,0 36.以下叙述中正确的是______。

A.调用printf函数时,必须要有输出项

B.使用putchar函数时,必须在之前包含头文件stdio.h

C.在C语言中,整数可以以十二进制、八进制或十六进制的形式输出

D.调用getchar函数读入字符时,可以从键盘上输入字符所对应的ASCII码 37.程序如下,下叙述中正确的是______。 #include main()

{ char a1='M',a2='m'; printf(\A.程序输出大写字母M B.程序输出小写字母m

C.格式说明符不足,编译出错 D.程序运行时产生出错信息 38.以下程序运行时若输入:a<回车> ,则叙述正确的是______。 #include

12

main()

{ char c1='1',c2='2'; c1=getchar(); c2=getchar();putchar(c1); putchar(c2); } A.变量c1被赋予字符a,c2被赋予回车符 B.程序将等待用户输入第2个字符

C.变量c1被赋予字符a,c2中仍是原有字符2 D.变量c1被赋予字符a,c2中将无确定值

39.设有定义:int a; float b;,执行scanf(\语句时,若从键盘输入:876

543.0,a和b的值分别是________。 A.876和543.0 B.87和6.0 C.87和543.0 D.76和543.0

40.若在定义语句:int a,b,c;之后,接着执行以下选项中的语句,则能正确执行的语句是

________。

A.scanf(\B.scanf(\ C.scanf(\ D.scanf(\

41.已知字符'A'的ASCII码值是65,字符变量c1的值是'A',c2的值是'D'。执行语句

printf(\后,输出结果是________。 A.A,B B.A,68 C.65,66 D.65,68

42.程序段:int x=12; double y=3.141593;printf(\的输出结果是________。 A.12 3.141593 B.123.141593 C.12,3.141593 D.123.1415930 43.若要求从键盘读入含有空格字符的字符串,应使用函数________。 A.getc() B.gets() C.getchar() D.scanf() 44.有以下程序,其中%u表示按无符号整数输出,程序运行后的输出结果是______。 #include main()

{ unsigned int x=0xFFFF; printf(\A.-1 B.65535 C.32767 D.0XFFFF (三)、编程题

1.编写一个程序,从键盘输入圆的半径,计算并输出该圆的周长、面积和体积。 2.输入四个季度的销售额(整型),计算并输出各季度自年初起的累计销售额,计算并输出第一季度外的三个季度的环比增长率(环比增长率是本期与相比上一期的增长率,针对本题目,即为本季度对上季度的增长率)。

3.从键盘输入四门课程的(整数)分数,输出成绩信息,计算并输出平均分数。要求输入输出有一定提示,输出的平均分数保留二位小数。

四、习题答案

(一)是非题

1.B 2.A 3.A 4.B 5.B 6.B 7.A 8.A 9.B 10.B 11.A 12.A 13.A 14.B 15.B 16.B 17.A 18.B 19.A 20.B (二)选择题

1.C 2.A 3.A 4.B 5.C 6.C 7.B 8.A 9.B 10.B 11.B 12.A 13.C 14.B 15.A 16.B 17.C 18.C 19.D 20.C

13

21.D 22.B 23.B 24.C 25.B 26.A 27.B 28.A 29.A 30.A 31.D 32.D 33.D 34.A 35.B 36.B 37.B 38.A 39.B 40.B 41.C 42.A 43. C 44.B

14

第3章 选择结构

二、习题

(一)、是非题

1.关系运算符是双目运算符,其功能是将两个运算对象进行大小比较。

A.对 B.错

2.对于与运算“&&”,只有当两个运算对象都为真时运算结果才为真。

A.对 B.错

3.使用条件表达式可以构成各种各样的两路选择结构。

A.对 B.错

4.条件可以是任何类型的表达式,如逻辑型,关系型,数值型等,单个已赋过值的变量或常

量也可以作为表达式的特例。 A.对 B.错

5.else子句不能单独作为语句使用,它是if语句的一部分,必须与if配对使用。

A.对 B.错

6.C语言规定,else总是与它上面最远的if配对。

A.对 B.错

7.在switch语句中,每一个case后的常量表达式的值不能相同,因为选择结构中只允许一

个分支所对应的语句组被执行。 A.对 B.错

8.在执行switch选择结构时,从匹配表达式的相应case处入口,一直执行到break语句或

到达switch的末尾为止 A.对 B.错

9.在C语言中,运算符“=”与“==”的含义都是等于。

A.对 B.错

10.当进行比较的运算对象是字符型数据时,则按字符的ASCII码值从左到右逐个对应比

较,先大为大。 A.对 B.错

11.判断字符变量ch的值是否为数字字符的表达式为(ch>='0') && (ch<='9')。

A.对 B.错

12.条件运算符“? :”是C语言中唯一的一个三目运算符,该运算符可以嵌套使用。

A.对 B.错

13.在C语言中用0表示逻辑值“真”,用非0表示逻辑值“假”。

A.对 B.错

14.在C语言中,所有的逻辑运算符的优先级都一样。

A.对 B.错

15

15.在C语言中,逻辑运算符的优先级高于算术运算符和关系运算符。

A.对 B.错

16.数学表达式“|x|>4”对应的C语言表达式是“x<-4||x>4”。

A.对 B.错

17.与表达式“!(x>0)”等价的表达式是“x<=0”。

A.对 B.错 18.与表达式“!0”等价的表达式是“1”。

A.对 B.错

19.当a=1,b=2,c=3时,执行语句“if(a>c) b=a;a=c;c=b;”后,变量c中的值为3。

A.对 B.错 a=1,b=2,c=3; if(a>c) b=a; a=c; c=b; b=2

20.当a=1,b=2,c=3时,执行语句“if(a>c) {b=a;a=c;c=b;}”后,变量c中的值为2。

A.对 B.错 a=1,b=2,c=3; if(a>c)

{b=a;a=c;c=b;} C=3 (二)、选择题

1.判断char型变量ch是否为小写字母的正确表达式是______。

A.'a'<=ch<='z' B.(ch>='a') & (ch<='z') C.(ch>='a') && (ch<='z') D.('a'<=ch) AND ('z'>=ch) 2.为表示关系100≥b≥0,应使用C语言表达式______。

A.(100>=b)&&(b>=0) B.(100>=b)and(b>=0) C.100>=b>=0 D.(100>=B)&&(B>=0) 3.以下运算符中优先级最高的运算符为______。

A.! B.&& C.!= D.%

16

4.设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是______。

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

5.执行以下程序段后,x的值为______。

int a=14,b=15,x; char c='A';

x=(a&&b)&&(c<'B'); A.true B.1 C.false 6.下列表达式中,______不是关系表达式。

A.x%2= =0 B.!(x%2) C.(x/2*2-x)= =0 D.x%2!=0 7.执行以下程序后,输出的结果是______。

include \main()

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

if(a

A.0 B.1 C.2 D.3 8.执行以下程序后,输出的结果是______。

include \main()

{ int w=4,x=3,y=2,z=1;

printf(\

A.4 B.2 C.1 D.3 9.执行以下程序段后,输出结果是______。

int a=3,b=5,c=7; if(a>b) a=b;c=a; if(c!=a) c=b;

printf(\

A.程序段有语法错误 B.3,5,3 C.3,5,5 D.3,5,7 10.下面程序段的输出结果是______。

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

17

D.0

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

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

11.若有定义:float x=1.5;int a=1,b=3,c=2; ,则正确的switch语句是______。

A.switch(x) B.switch(int(x))

{ case 1.0: printf(\

case 2.0: printf(\} }

C.switch(a+b) D.switch(a+b)

{ case 1: printf(\

case 2+1: printf(\} }

12.下面程序段的输出结果是______。

int n='c';

switch(n++) // n先用,后自增(n=’c’)。 {default: printf(\ case 'a': case 'A': case 'b':

case 'B': printf(\case 'c':

case 'C': printf(\case 'd':

case 'D': printf(\

A.passwarn B.passerror C.goodpasswarn D.pass 13.下述程序段的输出结果是_______。

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

a=(m=a>b)&&(n=c>d)+5; printf(\

A.2,5 B.0,5 C.2,6 D.0,6 14.若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是_______。

A.0 B.1 C.2 D.不能确定 15.已知int x=10,y=20,z=30;,以下语句执行后x,y,z的值是_______。

if(x>y)

z=x; x=y; y=z;

printf(\

A.10,20,30 B.20,30,20

18

C.20,30,10 D.20,30,30

16.当a=1,b=3,c=5,d=4,x=0时,执行完下面一段程序后x的值是_______。

if(a>b) if(cc) if(b

A.7 B.2 C.3 D.6

17.设变量a、b、c、d和y都已经正确定义并赋值,则以下if语句的所表示的含义是

_______。 if(a

A.a

B.a

#inlude 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; case 3: a++;b++; }

printf(\

A.a=1,b=0 B.a=2,b=1 C.a=1,b=1 D.a=2,b=2

19.在执行下述程序时,若从键盘输入6和8,则输出结果是_______。

#inlude main()

{ int a,b,s;

scanf(\s=a; if(a

19

s=b; s*=s;

printf(\

A.36 B.48 C.64 D.以上都不对 20.以下程序运行时,输入的值在_______范围时才会有输出结果。

#inlude main() { int x;

scanf(\if(x<=3);else

if(x!=10) printf(\

A.不等于10的整数 B.大于3且不等于10的整数 C.大于3或等于10的整数 D.小于3的整数 21.下列程序的输出结果是_______。

#inlude main()

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

if(++a>0||++b>0) ++c; //短路运算,++b未作运算。 printf(\

A.0,0,0 B.1,1, C.1,0,1 D. 0,1,1

22.有定义语句:int a=1,b=2,c=3;,则以下_______对应的表达式的值不为真。

A.a!= 'a' B.a+b-c!='0'-48 C.c-a=='C'-'A' D.c<='7'+'0' 23.下列程序的输出结果是_______。

#inlude main()

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

if(i++==1&&(++j= =3||k++==3)) //短路运算,k=k+3 未作运算。 printf(\

A.1 2 3 B.2 3 4 C.2 2 3 D. 2 3 3 24.当变量c的值不为2、4、6时,值也为“真”的表达式是_______。

A.(c==2)||(c==4)||(c==6)

B.(c>=2&&c<=6)||(c!=3)||(c!=5) C.(c>=2&&c<=6)&&!(c%2) D.(c>=2&&c<=6)&&(c%2!=1)

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

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

if(a>b>c) printf(\

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

20

else printf(\

A.2 B.3 C.4 D.编译时有错且无结果

26.己有定义:int x=3,y=4,z=5;, 则表达式!(x+y)+z-1&&y+z/2的值是_______。

A.6 B.0 C.2 D.l !(3+4)+5-1&&4+5/2 !7+4&&4+2 0+4&&6 1&&1 27.以下程序运行后的输出结果是_______。

#inlude main()

{ int a=15,b=21,m=0;

switch(a%3) //15%3=0

{ case 0: m++; break; // 执行后,退出第一层。 case 1: m++;

switch(b%2) //第二层,未执行 { default: m++;

case 0: m++; break; } }

printf(\A.1 B.2 C. 3 D.4

28.在执行下述程序时,若从键盘输入6和2,则输出结果是_______。

#inlude main()

{ int a,b,k;

scanf(\k=a;

if(a

printf(\

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

29.在执行下述程序时,若从键盘输入字母H,则输出结果是_______。

#inlude main() { char ch;

ch=getchar(); switch(ch)

{ case 'H':printf(\

case 'G':printf(\

21

default:printf(\}

A.Hello! B.Hello! Good morning! C.Hello! D.Hello! Good morning! Bye_Bye! Bye_Bye!

30.设变量x和y均已正确定义并赋值,则以下if语句中,在编译时将产生错误信息的是

_______。

A.if(x++); B.if(x>y&&y!=0); C.if(x>0) x- - //少了“;”号 D.if(y<0){;} else y++; else x++; 31.以下程序的运行后的输出结果是_______。

#inlude main()

{ int a=1,b=0; if(--a) b++;

else if(a==0) b+=2; else b+=3;

printf(\%d\\n\

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

32.下列条件语句中,输出结果与其他语句不同的是_______。

A.if(a) printf(\%d\\n\%d\\n\B.if(a==0) printf(\%d\\n\%d\\n\C.if(a!=0) printf(\%d\\n\%d\\n\D.if(a==0) printf(\%d\\n\%d\\n\33.以下选项中,能表示逻辑值“假”的是_______。

A.1 B.0.000001 C.0 D.100.0 34.以下程序运行时,若从键盘输入9,则输出结果是_______。

#inlude main() { int a=1;

scanf(\%d\ if(a++<9)

printf(\%d\\n\ else

printf(\%d\\n\

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

35.若变量c的值为非0,则能正确地将c的值赋给变量a和b的表达式是_______。

A.(a=c)||(b=c) B.(b=a)=c

22

C.(a=c) && (b=c) D.a=c=b

36.设有定义int i;,则表达式(i=1,i=10)? i++||++i:++i的值是_______。

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

37.设a=2、b=7.5、c=-3.6,则_______中的两个表达式的逻辑值相等。

A.'a'>'c'||'x'<'y' 与 b-a<=-c/2&&c==-3.6 B.'a'>'c'&&x'<'y' 与 a-7'c'||'x'>'y' 与 'a'<'c'&&a>b D.'a'>'c'&&'x'>'y' 与 'a'<'c'||a

38.当y处于闭区间[x,z]时,值为真的表达式是_______。

A.( y<= z)&&(y>=x) B.(x>=y)and(y>=z)c C.(x>=y>=z) D.(x>=y)&(y>=z) 39.以下程序执行后的输出结果是_______。

#inlude main()

{ int a=5,b=4,c=3,d=1; d=(a>b>c);

printf(\

A.3 B.2 C.1 D.0 40.以下程序执行后的输出结果是_______。

#inlude main()

{ int a=2,b=7,c=5; switch(a>0)

{ case 1:switch(b<10)

{ case 1: printf(\

case 0: printf(\

case 0:switch(c==5)

{ case 0: printf(\

case 1: printf(\default: printf(\

default: printf(\printf(\

A.!*# B.@!# C.@%# D.@#&

四、习题答案

(一)、是非题

1.A 2.A 3.B 4.A 5.A 6.B 7.A 8.A 9.B 10.A 11.A 12.A 13.B 14.B 15.B 16.A 17.A 18.A 19.B 20.A (二)、选择题

1.C 2.A 3.A 4.D 5.B 6.B 7.C 8.C 9.B 10.C

23

11.B 12.A 13.A 14.B 15.D 16.A 17.C 18.B 19.C 20.B 21.C 22.B 23.D 24.B 25.B 26.D 27.A 28.C 29.C 30.C 31.C 32.D 33.C 34.A 35.C 36.B 37.C 38.A 39.D 40.D (三)、编程题(略)

24

第4章 循环结构

二、习题

(一)、是非题

1. C语言中,do-while语句构成的循环只能用break语句退出。

A.对 B.错

2.在循环外的语句不受循环的控制,在循环内的语句也不受循环的控制。

A.对 B.错

3.从语法角度看,for(表达式1;表达式2;表达式3)语句中的3个表达式均可省略。

A.对 B.错

4.for、while和do while循环结构的循环体均为紧接其后的第一个语句(含复合语句)。

A.对 B.错

5.由i=-1;while(i<10) i+=2;i++;可知,此while循环的循环体执行次数为6次。

A.对 B.错 6.循环for( ; ; )的循环条件始终为真。

A.对 B.错

7.do?while语句的循环体至少执行1次,while和for循环的循环体可能一次也不执行。

A.对 B.错

8.break;语句执行时退出本层循环,continue;语句结束本次循环。

A.对 B.错

9.for循环、while循环和do while循环结构之间可以相互转化。

A.对 B.错

10.break;语句执行时退出到包含该break;语句的所有循环外。。

A.对 B.错

11.二重循环for(i=0;i<5;i+=2) for(j=0;j<5;j++)的循环体的执行次数为15。

A.对 B.错

外循环i执行3次, 内循环j执行5次。3*5=15次。 12.执行i=-1; while(i<10) i+=2;i++; 后,i的值 为11。

A.对 B.错

13.int i=1;while(1) i++; 则在任何条件下,该循环语句都会执行无穷多次

A.对 B.错 14.while和do?while的功能完全相同。

A.对 B.错

15.while后的表达式只能是逻辑或关系表达式。

A.对 B.错 16.语句while(E);中的表达式E等价于E!=0。

25

A.对 B.错

17.只能在循环体内和switch语句体内使用break语句。

A.对 B.错

18.程序段 int k=10; while(k=0)k=k-1; 中,while循环执行10次。

A.对 B.错

19.若i为整型变量,则 for(i=2;i= =0;)printf(\循环执行次数是0次。

A.对 B.错

20.执行语句for(i=1;i++<4; );后,变量i的值是4。

A.对 B.错

(二)、选择题

1.下列程序的输出结果是______。

#include \void main()

{ int i,a=0,b=0; for(i=1;i<10;i++)

{ if(i%2==0) {a++; continue;} b++;}

printf(\

A.a=4,b=4 B.a=4,b=5 C.a=5,b=4 D.a=5,b=5 2.已知:int t=0; while(t=1) { ... } ,则以下叙述正确的是______。 A.循环表达式的值为0 B.循环表达式的值为1 C.循环表达式不合法 D.以上说法都不对 3.设有以下程序段 ,则 _____。

int x=0,s=0; while(!x!=0) s+=++x; printf(\ while(!0!=0) while(1!=0)

while(1) 执行 s=s+(++x) s=1

A.运行程序段后输出0 B.运行程序段后输出1 C.程序段中的表达式是非法的 D.程序段执行无限次 4.以下程序的运行结果是______。

#include void main() { int y=9;

for( ; y>0;y--)

if(y%3==0) printf(\

A.741 B.963 C.852 D.875421

在循环中,能被3整除的数有9,6,3,输出前自减1,所以得8,5,2。 5.以下描述中正确的是______。

A.由于do-while的循环体只能有一条语句,所以循环体内不能使用复合语句

26

B.do-while由do开始,用while结束,在while(表达式)后面不能写分号 C.在do-while循环中,是先执行一次循环体,再进行判断 D.在do-while循环中,根据情况可以省略while 6.以下程序段的运行结果是______。

i=0; do printf(\ A.0,0 B.0,1 C.1,1 D.程序进入无限循环 7.若程序执行时的输入数据是2473<回车>,则下述程序的输出结果是______。

#include void main() { int cs;

while((cs=getchar())!='\\n') {switch(cs-'2') { case 0:

case 1: putchar(cs+4);

case 2: putchar(cs+4); break; case 3: putchar(cs+3); default: putchar(cs+2); } } }

A.668977 B.668966 C.6677877

8.以下程序的输出结果是______。

#include \void main() { int a,i;a=0; for(i=1;i<5;i++) switch(i)

{ case 0: case 3:a+=2; case 1: case 2:a+=3; default:a+=5 ; } printf(\ A.31 B.13 C.10 D.20 9.以下程序的运行结果是______。

#include void main() { int i,j,m=55;

27

D.6688766

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

for(j=3;j<=i;j++) m=m%j; printf(\ A.0 B.1 C.2 D.3 10.以下程序的运行结果是______。

#include void main() { int i;

for(i='a';i<'f';i++,i++)printf(\printf(\

A.ACE B.BDF C.ABD D.CDE 11.以下程序运行后的输出结果是______。

#include void main() { int k=5,n=0; do {switch(k)

{ case 1: case 3:n+=1;k--;break; default:n=0;k--;

case 2: case 4:n+=2;k--;break; } printf(\}while(k>0 && n<5); }

A.235 B.0235 C.02356 D.2356 12.下面程序的输出结果是______。

#include void main()

{ int n=9; while(n>6){n--; printf(\A.987 B.876 C.8765 D.9876 13.下述程序的输出结果是_______。

#include void main()

{ int x=0,y=0,i; for(i=1;;++i)

{ if(i%2==0) {x++;continue;} if(i%5==0) {y++;break;} }

printf (\A.2,1 B.2,2 C.2,5 D.5,2 14.下述程序的输出结果是_______。

#include void main()

28

{ int x=8;

for( ; x>0; x--)

{ if(x%3) {printf(\printf(\

A.7,4,2, B.8,7,5,2, C.9,7,6,4, D.8,5,4,2, 15.以下不会构成无限循环的语句或语句组是_______。

A.n=0; do{++n;}while(n<=0); B.n=0; while(1){n++;} C.n=10; while(n);{n--;} D.for(n=0,i=1; ;i++)n+=i; 16.以下程序的运行结果是_______。

#include \void main()

{ int k=0,m=0,i,j; for(i=0;i<2;i++)

{ for(j=0;j<3;j++) k++; k-=j; } m=i+j;

printf(\

A.k=0,m=3 B.k=0,m=5 C.k=1,m=3 D.k=1,m=5

17.若int i,j;,则for(i=j=0;i<10&&j<8;i++,j+=3)控制的循环体的执行次数是_______。

A.9 B.8 C.3 D.2 18.下述程序的输出结果是_______。

#include \void main() { int i=6;

while(i--) printf(\printf(\

A.531 B.420 C.654321 D.死循环 19.下述程序的输出结果是_______。

#include \void main()

{ int a=0,b=0,c=0,i; for(i=0;i<4;i++) switch(i)

{ case 0:a=i++; case 1:b=i++; case 2:c=i++; case 3:i++; }

printf(\

A.0,1,3,4 B.1,2,3,4 C.0,1,2,5 D.0,2,3,4 20.下面程序的运行结果是_______。

a=1;b=2; c=2; while(a

29

printf(\A.1,2,0 B.2,1,0 C.1,2,1 D.2,1,1 21.以下叙述中正确的是_______。

A.break语句只能用于switch语句体中

B.continue语句的作用是使程序的执行流程跳出包含它的所有循环 C.break 语句只能用在循环体内和switch语句体内

D.在循环体内使用break语句和continue语句的作用相同 22.以下程序运行后的输出结果是_______。 #include \void main() { int k=5,n=0; do { switch(k)

{ case 1: case 3: n+=1; break; default: n=0;k--;

case 2: case 4: n+=2;k--;break; } printf(\

A.2345 B.0235 C.02356 D.2356 23.下列程序的输出结果是_______。

#include \void main() { int i,j;

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

{for(j=i;j<4;j++) printf(\printf(\

A.1*1=1 1*2=2 1*3=3 B.1*1=1 1*2=2 1*3=3

2*1=2 2*2=4 2*2=4 2*3=6 3*1=3 3*3=9 C.1*1=1 D.1*1=1

1*2=2 2*2=4 2*1=2 2*2=4

1*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=9

24.执行以下程序时输入1234567890<回车>,则其中while循环体将执行_______次。 #include \

void main()

{ char ch; while((ch=getchar())=='0') printf(\A.10 B.0 C.2 D.l 25.下列程序的输出结果是_______。

#include \void main() { int k=5;

while(-k) printf(\

30

A.1 B.2 C.4 D. 死循环 26.以下程序执行后的输出结果是________。

#include \void main() { int i;

for(i=1;i<=40;i++) { if(i++%5==0)

if(++i%8==0) printf(\ printf(\A.5 B.24 C.32 D.40

27.有以下程序,若运行时从键盘输入:18,11<回车>,则程序输出结果是_______ 。

#include \void main() { int a,b;

printf(\ while(a!=b)

{ while(a>b) a-=b; while(b>a) b-=a; }

printf(\A.1 1 B.1 2 C.1 3 D.1 4

28.要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,以

下正确的程序段是_______。

A.while((ch=getchar())!='N ')printf(\; B.while(ch=getchar()!='N ')printf(\;

C.while(ch=getchar()=='N ')printf(\; D.while((ch=getchar())=='N ')printf(\; 29.以下程序运行后的输出结果是_______。

#include \void main()

{ int y=10; while(y--);printf(\

A.y=0 B.y= -1 C.y=1 D.while构成无限循环 30.有以下程序段:

 int n,t=1,s=0; scanf(\ do{ s=s+t; t=t-2; }while (t!=n);

为使此程序段不陷入死循环,从键盘输入的数据应该是_______。

 A.任意正奇数 B.任意负偶数 C.任意正偶数 D.任意负奇数 31.以下程序运行后的输出结果是_______。

#include \void main() { int i,j,x=0;

31

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

for(j=0;j<=3;j++){ if(j%2)continue;x++; } x++; }

printf(\

A.x=4 B.x=8 C.x=6 D.x=12 32.设变量已正确定义,则以下能正确计算f=n!的程序段是_______。 A.f=0; B.f=1; for(i=1;i<=n;i++) for(i=1;i<=n;i--) f*=i; f*=i; C.f=1; D.f=1;

for(i=n;i>1;i++) for(i=n;i>=2;i--) f*=i; f*=i; 33.以下程序运行后的输出结果是_______。

#include \void main() { int k=5,n=0; while(k>0) { switch(k)

{ default : break; case 1 : n+=k; case 2 :

case 3 : n+=k; } k--; }

printf(\

A.0 B.4 C.6 D.7 34.以下程序的输出结果是_______。

#include \void main() { int a=1,b;

for(b=1;b<=10;b++) {if(a>=8)break;

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

printf(\

A.3 B.4 C.5 D. 6 35.以下程序输出结果是_______。 #include \void main()

32

{int i;

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

{ case 0:printf(\ case 2:printf(\ default:printf(\

A.022111 B.021021 C.000122 D.012 36.以下程序输出结果是_______。 #include \void main() { int i=0,s=0; for( ; ; )

{ if(i==3||i==5) continue; if(i==6) break; i++; s+=i; }; printf(\

A.10 B.13 C.21 D.程序进入死循环

37.若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是_______。 A.for(i=1,p=1;i<=5;i++) p*=i; B.for(i=1;i<=5;i++){ p=1;p*=i;}

C.i=1;p=1;while(i<=5){p*=i; i++;} D.i=1;p=1;do{p*=i;i++;}while(i<=5); 38.以下程序执行后的输出结果是_______。

#include \void main()

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

while(z-->0&&++x<5) y=y-1; printf(\

A.3,2,0 B.3,2,-1 C.4,3,-1 D.5,-2,-5 39.以下程序执行后的输出结果是_______。

#include \void main() { int i,n=0;

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

{ do{ if(i%3) continue; n++; }while(!i); n++; }

printf(\A.n=5 B.n=2 C.n=3 D.n=4

40.下面程序的功能是输出以下形式的金字塔图。在下划线处应填入的是_______。

* *** *****

33

******* #include \void main( ) { int i,j;

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

{ for(j=1;j<=4-i;j++) printf(\

for(j=1;j<=_______;j++) printf(\ printf(\} A.i B.2*i-1

四、习题答案

(一)、是非题

1.B 2.B 3.A 4.A 5.A 6.A 7.A 8.A 9.A 10.B 11.A 12.B 13.A 14.B 15.B 16.A 17.A 18.B 19.A 20.B (二)、选择题

1.B 2.B 3.B 4.C 5.C 11.A 12.B 13.A 14.D 15.A 21.C 22.A 23.B 24.B 25.D 31.B 32.D 33.D 34.B 35.C

C.2*i+1 6.B 7.A 8.A 16.B 17.C 18.B 26.C 27.A 28.A 36.D 37.B 38.B 34

D.i+2

9.B 10.A 19.C 20.A 29.B 30.D 39.D 40.B

第5章 数组

二、习题

(一)、是非题

1.数组名代表数组的首地址。

A.对 B.错

2.字符型数组可以用来存储字符串,因此可以用字符串初始化数组,例如:char str[]=\

Programming\。 A.对 B.错

3.函数strcpy(str1,str2)是将字符串 str2 连接到字符串 str1之后。

A.对 B.错 4.一个数组可以存储不同类型的数据。

A.对 B.错

5.数组在定义时可以不指定数组的长度,可根据程序中实际使用的元素个数决定。

A.对 B.错

6.在 C 语言中,只有当两个字符串所包含的字符个数相同时,才能比较大小。例如,字符串“That”与“The”就不能进行大小比较。 A.对 B.错

7.若有定义:int a[10];,使用数组元素时,下标的最小值是1,最大值是10。

A.对 B.错

8.在 C 语言中引用数组元素时,其数组的下标可以是任何类型的表达式。

A.对 B.错

9.任何一维数组的名称都是该数组存储单元的开始地址,且其每个元素按照顺序连续占用存储空间。 A.对 B.错

10.一维数组的元素实质上就是一个变量,代表内存中的一个存储单元。

A.对 B.错

11.若有说明:int a[3][4]={0};,则只有元素a[0][0]可得到初值0。

A.对 B.错

12.若有说明:int a[][3]={1,2,3,4,5,6,7};,则a数组第一维的大小不能确定。

A.对 B.错

13.若一维数组在定义时进行了初始化,则可以省略数组长度,系统会根据初始值个数确定该数组长度。 A.对 B.错

14.数组初始化时,若初始值的个数少于数组定义的长度,C语言会自动将剩余的元素初始化为初始化列表中最后一个初始值。

35

A.对 B.错

15.可以对字符型数组进行整体输入、输出。

A.对 B.错 16.可以对实型数组进行整体输入、输出。

A.对 B.错

17.设有定义:double a[4][5];,则数组a中元素的个数是9。

A.对 B.错

18.设有定义:int a[3][4]={{1,2,5,3},{2,4,7,9},{3,6,5,8}};,则表达式a[1][2]+a[2][3]的值9。 A.对 B.错

19.设有定义:char s[]={\,则执行printf(\后输出的值是6。

A.对 B.错

20.设有两个整型数组a和b,可以通过a=b,将数组b整体赋值给数组a。

A.对 B.错 (二)、选择题

1.设有两字符串“Good”、“Morning”分别存放在字符数组 str1[10]、str2[10]中,下面语句中能把“Morning”连接到“Good”之后的是______。 A.strcpy(str1,str2); B.strcpy(str1, \C.strcat(str1, \ D.strcat(\2.以下对一维整型数组 a 定义正确的是______。

A.int a(10); B.int n=10,a[n];

C.int n;scanf(\ D.#define SIZE 10 int a[SIZE];

3.下列字符串赋值语句中,不能正确把字符串“Hello World”赋给数组的语句是______。

A.char a1[]={'H','e ','l','l','o',' ','W','o','r','l','d','\\0'}; B.char a2[15]; strcpy(a2,\C.char a3[15]; a3=\D.char a4[10]={ \

4.用 scanf 函数输入一个字符串到数组 str 中,下面正确的语句是______。

A.scanf(\ B.scanf(\C.scanf(\ D.scanf(\5.以下能对二维数组 a 进行正确说明和初始化的语句是______。

A.int a()(3)={ (1,2,3),(2,4,6)}; B.int a[2][]={{3,2,1},{5,6,7}}; C.int a[][3]={{3,2,1},{5,6,7}}; D.int a(2)()={(1,2,3),(2,4,6)}; 6.判断字符串 a 和 b 是否相等,应当使用______。

A.if(a==b) B.if(a=b) C.if(strcat(a,b)) D.if(strcmp(a,b)) 7.有字符数组 a[80]和 b[80],则正确的输出语句是______。

A.puts(a,b); B.puts(a);puts(b); C.printf(\ D.putchar(a,b); 8.下面程序的运行结果是______。

36

#include main()

{ int a[5],i;

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

{ a[i]=9*(i-2+4*(i>3))%5; printf(\A.-3-4 0 4 4 B.-3-4 0 4 3 C.-3-4 0 4 2 D.-3-4 0 4 0 9.假设 array 是一个有 10 个元素的整型数组, 则下列写法中正确的是______。

A.array[0]=10; B.array=0; C.array[10]=0; D.array[-1]=0; 10.下面程序的运行结果是______。

#include main()

{ int a[3],i,j,k;

for(i=0;i<3;i++) a[i]=0; k=2;

for(i=0;i

11.若有定义:int a[5]={1,2,3,4,5};char b='c',c;,则下面表达式中数值为 2 的是______。

A.a[2] B.a[c-b] C.a[b] D.a[b-'b'] 12.下面程序的运行结果是______。

#include main()

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

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

A.3 5 7 B.3 6 9 C.1 5 9 D.1 4 7 13.下面程序的运行结果是______。

#include main()

{ char c[5]={'a','b','\\0','c','\\0'}; printf(\

A.'a' 'b' B.ab C.ab c D.ab\\0c\\0 14.下面程序的运行结果是______。

#include main()

{ char s[12]= \printf(\A.6 B.7 C.10 D.12

37

15.若有说明:int a[3][4]; 则对a数组元素的正确引用是______。

A.a[2][4] B.a[1,3] C.a[1+1][0] D.a(2)(1) 16.以下各组选项中,均能正确定义二维实型数组a的选项是______。

A.float a[3][4]; float a[][4]; float a[3][]={{1},{0}}; B.float a(3,4); float a[3][4]; float a[][]={{0};{0}}; C.float a[3][4]; static float a[][4]={{0},{0}}; D.float a[3][4]; float a[3][];

17.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式是______。(假设

a[0][0]位于数组的第一个位置上。)

A.i*m+j B.j*m+i C.i*m+j-1 D.i*m+j+1 18.以下对C语言字符数组描述错误的是______。

A.字符数组可以存放字符串

B.字符数组中的字符串可以整体输入或输出

C.可以在赋值语句中通过赋值运算符”=”对字符数组整体赋值 D.不可以用关系运算符对字符数组中的字符串进行比较 19.以下合法的数组定义是______。

A.int a[]=\ B.int a[5]={0,1,2,3,4,5}; C.char a=\ D.char a[]={\20.下面程序的运行结果是______。

#include #include main()

{ char a[7]=\strcpy(a,b);

printf(\A.空格 B.\\0 C.f D.不确定 21.下面程序的运行结果是______。

#include #include main()

{ char a[30];

strcpy(&a[0],\strcpy(&a[1],\strcpy(&a[2],\printf(\system(\

A.chdefabc B.cda C.cdabc D.abcdef

22.设有定义:char a[80];int i=0;,以下不能将一行带有空格的字符串(不超过80个字

符)正确读入的是______。 A.gets(a);

38

B.while(( a[i++]=getchar())!='\\n'); a[i]='\\0'; C.scanf(\

D.do{scanf(\23.下面程序的运行结果是______。

#include main()

{ char str[]=\int k;

for(k=2;(c=str[k])!='\\0';k++) { switch(c)

{ case 'I':++k;break; case 'L':continue;

default:putchar(c);continue; }

putchar('*'); } } A.SSW* B.SW* C.SW*A D.SWA*

24.设char s[10]= \,则s和t在内存中分配的字节数分别是______。

A. 6和5 B. 6和6 C. 10和5 D. 10和6 25.下面程序的运行结果是______。

#include main()

{ char a[]=\ int i,j;

for(i=j=0; a[i]!='\\0';i++)

if(a[i]!='l') a[j++]=a[i]; a[j]='\\0'; puts(a); } A.Hello World B.Heo World C.Heo Word D.没有任何输出内容 26.下面程序的运行结果是______。

#include main()

{ char str1[]=\int i,s; i=0;

while((str1[i]==str2[i])&&(str1[i]!='\\0')) i++; s=str1[i]-str2[i]; printf(\

39

A.-1 B.0 C.1 D.不确定 27.下面程序的运行结果是______。

#include main()

{ char s[]=\int i,n=0;

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

if(s[i]>= 'a'&&s[i]<= 'z') n++; printf(\A.0 B.2 C.3 D.5 28.下面程序的运行结果是______。

#include main()

{ int a[]={2,3,5,4},i; for(i=0;i<4;i++) switch(i%2)

{ case 0:switch(a[i]%2)

{ case 0:a[i]++;break; case 1:a[i]--;} break;

}

for(i=0;i<4;i++) printf(\printf(\

A.3 3 4 4 B.2 0 5 0 C.3 0 4 0 D.0 3 0 4 29.下面程序的运行结果是______。

#include #include main()

{ char a[10]=\A.7,4 B.4,10 C.8,8 D.10,10 30.下面程序的运行结果是______。

#include #define MAX 10 main()

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

for(i=0;i

A.55 B.-54 C.-55 D.54

40

四、习题答案

(一)、是非题

1.A 2.A 3.B 4.B 5.B 6.B 7.B 8.B 9.A 10.A 11.B 12.B 13.A 14.B 15.A 16.B 17.B 18.B 19.A 20.B (二)、选择题

1.C 2.D 3.C 4.D 5.C 6.D 7.B 8.A 9.A 10.D 11.D 12.A 13.B 14.B 15.C 16.C 17.D 18.C 19.A 20.C 21.C 22.C 23.B 24.D 25.C 26.A 27.B 28.A 29.B 30.B

41

第6章 函数

二、习题

(一)是非题

1.在C程序中,main()函数必须有且只有一个。

A.对 B.错

2.如果某个函数在定义时省略了存储类型,则默认的存储类型是int。

A.对 B.错

3.C程序中,定义函数时的参数是“实际参数”,调用函数时的参数是“形式参数”。

A.对 B.错

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

A.对 B.错

5.若函数定义的头部为:double cacl(float x,float y),则该函数是外部函数。

A.对 B.错

6.若用数组名作为函数调用的实参,传递给形参的是数组中的第一个元素的值。

A.对 B.错

7.C程序中所有的全局变量都是静态存储的。

A.对 B.错

8.函数中的多个return语句,可以实现调用该函数后,多个值同时被返回。

A.对 B.错

9.如果在一个函数中的复合语句内定义了一个变量,则该变量在该函数中都有效。

A.对 B.错

10.有参的宏,其参数参与运算,宏替换要先完成参数的计算,然后再执行替换。

A.对 B.错

11.在函数之间数据传递的方式有三种,即返回值、参数、全局变量。

A.对 B.错

12.在C语言中,除了main()函数外,其余所有的函数都能够被调用。

A.对 B.错

13.在main()函数中定义的变量称为全局变量。

A.对 B.错 14.在C语言中形参与实参共用内存单元。

A.对 B.错

15.在C语言中定义的auto变量,若没有对其进行显式初始化,则初值是一个不确定的值。

A.对 B.错 (二)选择题

1.以下说法中正确的是________。

42

A.C语言程序总是从第一个定义的函数开始执行 B.在C语言程序中,要调用的函数必须在main()函数中定义 C.C语言程序总是从main()函数开始执行 D.C语言程序中的main()函数必须放在程序的开始部分

2.在C语言中,函数值类型在定义时可以缺省,此时函数值的隐含类型是________。 A.void B.int C.float D.double 3.在C语言中,函数返回值的类型最终取决于________。 A.函数定义时在函数值首部所说明的函数类型 B.return语句中表达式值的类型

C.用函数时主调函数所传递的实参类型 D.函数定义时形参的类型

4.以下程序的执行结果为________。 #include \float fun(int x,int y) { return(x*y); } main()

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

printf(\ A.-24 B.24 C.-168 D.168 //嵌套调用。 fun(2+5,8) 返回得到 56; fun(56,2-5) 56*(-3)=-168

5.以下程序运行后的输出结果是________。 #include \int f(int x); main()

{ int n=1,m; m=f(f(f(n)));

printf(\int f(int x) {return x*2;} A.1 B.2 C.4 D.8 6.如下函数调用语句中,含有的实参个数是________。

fun(arg1,arg2+arg3,(arg4,arg5)); //实参可以是表达式 A.3 B.4 C.5 D.有语法错误 7.以下程序的输出结果是________。 #include \main()

{ int w=5;fun(w); } fun(int m)

43

{ if(m>0)fun(m-1); printf(\

A.5 4 3 2 1 B.0 1 2 3 4 5 C.1 2 3 4 5 D.5 4 3 2 1 0 8.在一个C源程序文件中所定义的全局变量,其作用域为________。 A.所在文件的全部范围 B.所在程序的全部范围

C.所在函数的全部范围 D.由具体定义位置和extern说明来决定范围 9.以下程序的运行结果是________。

#include \int a=1; int f(int c)

{ static int a=2; c=c+1;

return (a++)+c; } main()

{ int i,k=0;

for(i=0;i<2;i++) { int a=3; k+=f(a); } k+=a;

printf(\A.13 B.14 C.15 D.16 10.以下程序执行后变量w的值是________。

#include \int fun1(double a) {return a*=a;}

int fun2(double x,double y) { double a=0,b=0;

a=fun1(x);b=fun1(y);return(int)(a+b); } main()

{ double w;

w=fun2(1.1,2.0); ?? }

A.5.21 B.5 C.5.0 D.0.0

11.以下程序执行时,给变量x输入10,程序的输出结果是________。

#include \int fun(int n)

{ if(n==1) return 1;

else return(n+fun(n-1)); } main() { int x;

44

scanf(\ x=fun(x);

printf(\

A.45 B.54 C. 55 D. 65 12.以下叙述中错误的是________。

A.C程序必须由一个或一个以上的函数组成 B.函数调用可以作为一个独立的语句存在

C.若函数有返回值,必须通过return语句返回 D.函数形参的值也可以传回给对应的实参 13.以下叙述中正确的是________。

A.预处理命令行必须位于C源程序的起始位置 B.在C语言中,预处理命令行都以\开头

C.每个C程序必须在开头包含预处理命令行:#include \D.C语言的预处理不能实现宏定义和条件编译的功能 14.以下叙述中正确的是________。

A.局部变量说明为static,其生存期将得到延长 B.全局变量说明为static,其作用域将被扩大

C.任何存储类的变量在未赋初值时,其值都是不确定的 D.形参可以使用的存储类说明符与局部变量完全相同

15.在函数调用过程中,如果函数funA调用了函数 funB,函数funB又调用了函数funA,则________。

A.称为函数的直接递归调用 B.C语言中不允许这样的递归调用 C.称为函数的循环调用 D.称为函数的间接递归调用 16.以下程序的输出结果是________。

#include \long fib(int n)

{ if(n>2) return(fib(n-1)+fib(n-2)); else return(2); } void main()

{ printf(\A.2 B.4 C.6 D.8 17.以下所列的各函数首部中,正确的是________。

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) 18.以下程序的输出结果是________。

#include \#define f(x) x*x void main()

{ int a=6,b=2,c; c=f(a)/f(b);

45

printf(\A.9 B.18 C.36 D.6 19.下列程序的运行结果为________。

#include \#define MA(x) x*(x-1) void main() { int a=1,b=2;

printf(\A.5 B.6 C.7 D.8 20.以下程序的输出结果是________。

#include \f(int b[],int m,int n) { int i,s=0;

for(i=m;i

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

printf(\A.10 B.18 C.8 D.15 21.下列的结论中只有________是正确的。

A.所有的递归程序均可以采用非递归算法实现 B.只有部分递归程序可以用非递归算法实现 C.所有的递归程序均不可以采用非递归算法实现 D.以上三种说法都不对

22.以下程序的运行结果为________。

#include \int x=2;

int fun(int p) { static int x=3; x+=p;

printf(\ return (x); } void main()

{ int y=3; printf(\

A.5 10 20 B.5 6 10 C.5 10 10 23.下列程序的输出结果是________。

#include \

int fun(int x,int y,int cp,int dp)

46

D.5 5 10

{ cp=x*x+y*y; dp=x*x-y*y; } void main()

{ int a=4,b=3,c=5,d=6; fun(a,b,c,d);

printf(\A.16 9 B.4 3 C.25 9 D.5 6 24.以下程序输出的结果是________。

#include \long fun(int n) { long s;

if(n==1||n==2) s=2; else s=n-fun(n-1); return s; } main()

{ printf(\A.1 B.2 C.3 D.4 25.阅读下面的程序:

#include \void main() { int swap(); int a,b; a=3;b=10; swap(a,b);

printf(\swap(int a,int b) { int temp;

temp=a; a=b; b=temp; } 下面的说法中,正确的是________。

A.在main()函数中调用swap()后,能使变量a和b的值交换 B.在main()函数中输出的结果是:a=3,b=10

C.程序第2行的语句int swap();是对swap()函数进行调用 D.swap()函数的类型是void

四、习题答案

(一)、是非题

1.A 2.A 3.B 4.B 5.A 6.B 7.A 8.B 9.B 10.B 11.B 12.B 13.B 14.B 15.A (二)、选择题

1.C 2.B 3.A 4.C 5.D 6.A 7.B 8.D 9.B 10.C

47

11.C 12.D 13.B 14.A 15.D 16.B 17.C 18.C 19.B 20.A 21.B 22.C 23.D 24.A 25.B

48

第7章 结构体

二、习题

(一)、是非题

1.结构体变量所占用空间是全部成员占用空间之和。 A.对 B.错

2.共用体可以作为结构体的成员,但结构体不能作为共用体的成员。 A.对 B.错

3.结构体中各个成员的数据类型必须是相同的。 A.对 B.错 4.有以下定义的结构体: typedef struct student

{ int num; char name[10]; int age; } stu1; 则,struct student 是结构体变量名。 A.对 B.错

5.枚举类型中,枚举值是常量,不能再在程序中对其赋值。 A.对 B.错

6.typedef的作用是给数据类型取一个别名。 A.对 B.错

7.如果两个结构体变量有相同的类型,则可以把其中一个结构体变量的值整体赋值给另一个结构体变量。 A.对 B.错

8.一个共用体变量可以有多个数据成员,这些数据成员共享同一个存储空间,但如果空间不够用可以临时由系统分配。 A.对 B.错

9.结构体变量可以整体赋值,但不能整体比较。 A.对 B.错

10.在定义了枚举变量后,系统才为该变量分配内存空间。 A.对 B.错 (二)、选择题

1.在定义一个共用体变量时,系统分配给它的内存是______。 A.各成员所需内存之和 B.第一个成员所需内存 C.成员中占用内存最大者 D.任意一个成员所需内存 2.以下结构体的定义语句中,正确的是______。

A.struct student {int num; char name[10];int age;};stu;

B.struct {int num; char name[10];int age;}student; struct student stu; C.struct student {int num; char name[10];int age;}stu;

D.struct student {int num; char name[10]; int age;}; student stu;

49

3.如有定义的枚举类型:

enum week_day{Wed=3,Thu,Fri,Sat,Sun,Mon,Tue}everyday; 则,Mon的值为______。

A.1 B. 2 C. 8 D. 5 4.有如下定义的结构体类型: struct data

{ int year; int month; int day; }workday; 对其中成员month的正确引用方式是______。

A.data.month B.data.year.month C.month D.workday.month 5.已知对学生记录的描述为: struct student { int num;

char name[20],sex;

struct{ int year,month,day; }birthday; };

struct student stu;

设变量stu中的“生日”是“1995年11月12日”,对“birthday”正确赋值的程序是______。

A.year=1995;month=11;day=12;

B.stu.year=1995;stu.month=11;stu.day=12;

C.birthday.year=1995;birthday.month=11;birthday.day=12;

D.stu.birthday.year=1995;stu.birthday.month=11;stu.birthday.day=12; 6.下列关于枚举类型的描述不正确的是______。 A.可以在定义枚举类型时对枚举元素进行初始化 B.在赋值时,不可以将一个整数赋值给枚举变量 C.枚举变量不可以进行关系运算

D.枚举变量只能取对应枚举类型的枚举元素表中的元素值 7.有如下的说明: union test

{ int a; char c; }test1;

则在VC环境下sizeof(union test) 的结果是______。

A.4 B.2 C.5 D.3 8.以下程序的运行结果是______。 #include union con

{ struct {int x,y,z;}m; int i; }num; main()

{ num.m.x=4;num.m.y=5;num.m.z=6;num.i=0; printf(\

50