1、第一章 C 语言概述 1.1 C 语言基础知识 1.【 2011年 9月选择题第 11题 】 以下叙述中错误的是 _。 A)C语言编写的函数源程序,其文件名后缀可以是 C B)C语言编写的函数都可以作为一个独立的源程序文件 C)C语言编写的每个函数都可以进行独立的编译并执行 D)一个 C语言程序只能有一个主函数 参考答案: C 【解析】 C语言编写的每个函数可以被独立编译,但是除主函数外不能独立执行。 2.【 2011年 3月选择题第 11题 】 计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是 A)C语言程序仅可以编译执行 B)C语言程序仅可以解释执行 C)C语言程序
2、既可以编译执行又可以解释执行 D)以上说法都不对 参考答案: A 【解析】解释程序是将源程序 (如 BASIC)作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。编译程序是把高级语言 (如 FORTRAN、 COBOL、 Pascal、 C等 )源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机执行这个目标程序,得到计算结果。 3.【 2011年 3月选择题第 12题 】 以下叙述中错误的是 A)C语言的可执行程序是由一 系列机器指令构成的 B)用 C语言编写的源程序不能直接在计算机上运行 C)通过编译得到的二进制目标程序需要连接才可以运行 D)在没有安装 C语言
3、集成开发环境的机器上不能运行 C源程序生成的 .exe文件 参考答案: D 【解析】 C语言的可执行程序是由一系列机器指令组成的,用 C语言编写的源程序必须经过编译生成二进制目标代码,再经过连接才能运行,并且可以脱离 C语言集成开发环境。故答案为 D)。 1.2 常量、变量和数据类型 4.【 2011年 9月选择题第 13题 】 以下选项中关于 C语言常量的叙述错误的是 。 A)所谓常量,是指在程序运行过程中,其值不能被改变的量 B)常量分为整型常量、实型常量、字符常量和字符串常量 C)常量可分为数值型常量和非数值型常量 D)经常被使用的变量可以定义成常量 参考答案: D 【解析】 常量是其值
4、不可变化的量。常量分为数字常量和字符常量。在 C语言中,常量多是通过符号常量来表示的。数字常量又包括整形常量和浮点型常量,浮点型常量又称实数。在程序中不希望被改变的变量才定义为常量,而不是经常使用的变量。 5.【 2011年 9月选择题第 14题 】 若有定义语句: int a=10;double b=3.14;,则表达式 A+a+b值的类型是 _。 A)char B)int C)double D)float 参考答案 : C 【解析】 本题考查数据类型的自动转换, C语言语法规定,当不同的变量相加时按最长的变量对齐,即转换优先级为: char main() int c3=0, k, i; w
5、hile(k=getchar()!=n) ck-A+; for(i=0;i,则输出结果为 _【 12】 _。 参考答案: 213 【解析】 当输入 A时, a0+;当输入 B时, a1+;当输入 C时, a2+;直到遇到回车循环停止,题中共输入 2个 A,1个 B,3个 C,所以输出结果为 213。 8.【 2011年 3月选择题第 13题 】 以下选项中不能用作 C程序合法常量 的是 A)1,234 B) 123 C)123 D)“x7G“ 参考答案: A 【解析】常量是在程序运行过程中,其值不能被改变的量。常量类型包括:整型常量、实例常量、字符常量、字符串常量和符号常量。 B)选项为字符常
6、量,表示八进制数 123代表的 ASCII字符 ;C)选项为整型常量 ;D)选项为字符串常量。 9.【 2011年 3月选择题第 14题 】 以下选项中可用作 C程序合法实数的是 A).1e0 B)3.0e0.2 C)E9 D)9.12E 参考答案 : A 【解析】浮点型常量有十进制小数 形式和指数形式。指数形式要求字母 e(或者 E)之前必须有数字,且 e后面的指数必须为整数。 B)、 C)、 D)都是不合法的指数形式,故答案为 A)。 10.【 2011年 3月填空题第 8题 】 有以下程序 (说明 : 字符 0的 ASCIl码值为 48) #include main() char c1,
7、 c2; scanf(“%d“, c2=c1+9; printf(“%c%cn“, c1, c2); 若程序运行时从键盘输入 48,则输出结果为 【 8】 。 参考答案: 09 【解析】本题中通 过 ASCII码对字符变量赋值,由于字符 0的 ASCII码是 48,因此字符变量 c1为 0, c2的 ASCII码比 c1大 9,因此 c2为 9。 11.【 2010年 9月选择题第 13题 】 以下叙述中错误的是 A)C程序在运行过程中所有计算都以二进制方式进行 B)C程序在运行过程中所有计算都以十进制方式进行 C)所有 C程序都需要编译链接无误后才能运行 D)C程序中整型变量只能存放整数,实
8、型变量只能存放浮点数 参考答案: B 【解析】 C程序在运行过程中所有计算都以二进制方式进行,所以 A)正确 B)错误。所有 C程序先编译再链接, 全都无误后才能运行。 C程序中整型变量用于存放整数,实型变量用于存放浮点数。所以,本题答案为 B)。 12.【 2010年 9月选择题第 15题 】 以下选项中能表示合法常量的是 A)整数: 1,200 B)实数: 1.5E2.0 C)字符斜杠: D)字符串: “007“ 参考答案 : D 【解析】 A)选项中 1,200不能表示整数 1200。 B)选项中应表示为 1.5E2。在 C语言中,反斜杠是转义符,其后必须跟有其他字符,所以选项 C)也是
9、错误的。 D)选项正确。 13.【 2010年 3月选择题第 13题 】 以下 C语言用户标识符中 ,不合法的是 A)_1 B)AaBc C)a_b D)a-b 参考答案: D 【解析】标识符由字母、下划线、数字三个方面组成,开头必须是字母或下划线。 14.【 2010年 3月选择题第 16题 】 以下关于 C语言数据类型使用的叙述中错误的是 A)若要准确无误差地表示自然数 ,应使用整数类型 B)若要保存带有多位小数的数据 ,应使用双精度类型 C)若要处理如 “人员信息 “等含有不同类型的相关数据 ,应自定义结构体类型 D)若只处理 “真 “和 “假 “两 种逻辑值 ,应使用逻辑类型 参考答案
10、: D 【解析】 C语言中没有逻辑类型,若只处理 “真 “或 “假 “两种逻辑值,可以使用整型数 “1“或 “0“表示,故选 D。 15.【 2009年 9月选择题第 12题 】 以下选项中,能用作用户标识符的是 _。 A)void B) 8_8 C)_0_ D)unsigned 参考答案: C 【解析】 C语言的标识符命名规则为: 只能由字母、数值和下划线 3种字符组成 ; 第一个字符必须是字母或下划线 ; 不能与 C语言中的关键字或保留字相同 。 16.【 2009年 9月选择题第 22题 】 有以下定义语句,编译时会出现编译错误的是 _。 A)char a=a; B)char a=n;
11、C)char a=aa; D)char a=x2d; 参考答案: C 【解析】 aa是字符串,不用加上单引号。 17.【 2009年 3月选择题第 11题 】 以下选项中合法的标识符是 _。 A)1_1 B)1-1 C)_11 D)1_ _ 参考答案: C 【解析】标识符命名规则:标识符必须由字母 (a z或 A Z)或下划 线 (_)开头 ;标识符的其他部分可以用字母、下划线或数字 (0 9)组成 ;大小写字母表示不同意义,如 cout和 Cout代表不同的标识符 ;在定义标识符时,虽然语法上允许用下划线开头,但是,我们最好避免定义用下划线开头的标识符,因为编译器常常定义一些下划线开头的标识
12、符。因此,本题正确答案为 C)。 18.【 2009年 3月选择题第 12题 】 若函数中有定义语句: int k;,则 _。 A)系统将自动给 k赋初值 0 B)这时 k中的值无定义 C)系统将自动给 k赋初值 -1 D)这时 k中无任何值 参考答案: B 【 解析】用 int方法定义变量时,编译器仅为变量开辟存储单元,并没有在存储单元中存放任何值,此时变量中的值是无确定的,称变量值 “无意义 “。因此,本题正确答案为 B)。 19.【 2009年 3月选择题第 13题 】 以下选项中,能用作数据常量的是 _。 A)o115 B)0118 C)1.5e1.5 D)115L 参考答案 : D
13、【解析】 整型常量和实型常量统称为数值型常量。本题中 A)项是数字和字符的组合,不能构成数值型常量。 B)项以 0开头代表该常量是一个 8进制数,但其后面的数字中又出现了 “8“,因此不正 确。 C)项用指数形式表示实型常量,但 e后面必须为整数,不正确。 D)项中一个常量后面加字母 L表示长整型数据。因此,本题答案为 D)。 第二章 运算符与表达式 2.1 C 语言运算符简介 20.【 2010年 9月选择题第 38题 】 有以下程序 #include main() int s, t, A=10;double B=6; s=sizeof(A); t=sizeof(B); printf(“%d
14、, %dn“, s, t); 在 VC6平台上编译运行,程序运行后的输出结果是 A)2,4 B)4,4 C)4,8 D)10,6 参考答案: C 【解析】 sizeof的作用就是返回一个对象或者类型所占的内存字节数。在 VC6中整型占 4个字节,双精度实型占 8个字节,所以选 C)。 2.2 算术运算符和算术表达式 21.【 2011年 9月填空题第 7题 】 以下程序运行后的输出结果是 _【 7】 _。 #include main() int a=37; a%=9;printf(“%dn“, a); 参考答案: 1 【解析】 本题考查的是取余运算。 37%9 商为 4,余数为 1,所以输出的
15、值为 1。 22.【 2011年 3月选择题第 18题 】 有以下程序 #include main() int x=011; printf(“%dn“, +x); 程序运行后的输出结果是 A)12 B)11 C)10 D)9 参考答案: C 【解析】 x=011表示把八进制的 11赋值给变量 x,因此 x的值为十进制的 9,程序运行的结果输出变量 x自加运算后的十进制值,即 10。 23.【 2011年 3月填空题第 6题 】 以下程序 运行后的输出结果是 【 6】 。 #include main() int a; a=(int)(double)(3/2)+0.5+(int)1.99*2);
16、printf(“%dn“, a); 参考答案 : 3 【解析】本题中 3/2=1, (double)(3/2)=1, (int)1.99*2=1*2=2, 因此 (int)(1+0.5+2)=(int)3.5=3。 24.【 2010年 3月选择题第 12题 】 以下关于 C语言的叙述中正确的是 A)C语言中的注释不可以夹在变量 名或关键字的中间 B)C语言中的变量可以在使用之前的任何位置进行定义 C)在 C语言算术表达式的书写中 ,运算符两侧的运算数类型必须一致 D)C语言的数值常量中夹带空格不影响常量值的正确表示 参考答案: A 【解析】 C 语言中注释可以放在任何位置,但不能夹在变量名或
17、关键字中间,选项 A 正确 ;C语言中的变量要在使用之前定义, C 标准规定定义位置在相关程序块的首部,选项 B 错误 ;C语言中两侧数据类型可以不一致,系统可进行强制类型转换,选项 C 错误 ;C 语言数值常量中不允许存在空格,选项 D 错误。 25.【 2010年 3月填空 题第 13题 】 以下程序的功能是:将值为三位正整数的变量 x中的数值按照个位、十位、百位的顺序拆分并输出。请填空。 #include main() int x=256; printf(“%d-%d-%dn“,【 13】 ,x/10%10,x/100); 参考答案: x%10 【解析】 x=256, x%10=6。 2
18、6.【 2009年 9月选择题第 14题 】 表达式: (int)(double)9/2)-(9)%2的值是 _。 A)0 B)3 C)4 D)5 参考答案 : B 【解析】 (int)(double)9/2)的值为 4, (9)%2的值为 1,因此 (int)(double)9/2)-(9)%2的值为 3。 27.【 2009年 9 月填空题第 6 题 】 若有定义语句: int a=5;,则表达式: a+的值是 _【 6】 _。 参考答案 : 5 【解析】 a+的含义是在使用 a 值以后,使 a 值加 1,所以 a+的值为 5。 28.【 2009年 9月填空题第 7题 】 若有语句 do
19、uble x=17;int y;,当执行 y=(int)(x/5)%2;之后 y的值为 _【 7】 _。 参考答案 : 1 【解析】 y=(int)(x/5)%2=(int)(3.4)%2=3%2=1。 29.【 2009年 3月填空题第 6题 】 表达式 (int)(double)(5/2)+2.5)的值是 _【 6】 _。 参考答案 : 4 【解析】计算 5/2=2,其结果先转换为 double类型,即 2.000000,然后加上 2.5为 4.5000000,再转换为 int型,所以结果为 4。 2.3 赋值运算符和赋值表达式 30.【 2011年 9月选择题第 15题 】 若有定义语句
20、: int x=12, y=8, z;,在其后执行语句 z=0.9+x/y;,则 z的值为 _。 A)1.9 B)1 C)2 D)2.4 参考答案: B 【解析】 x的值为 12, y的值为 8,那么 x/y的值就是 1,因为 z的类型是 int,所以 0.9+1变成int的值就是 1,所以选择 B)。 31.【 2011年 3月选择题第 15题 】 若有定义语句: 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); 参考答案: A 【解析】在 A)选项中,赋值语句 b=4
21、先把 4 赋值给整型变量 b,之后执行 (b=4)=3 是把常量3 赋值给常量 4,但是由于 C 语言规定赋值运算符的左侧只能是变量,不能是常量或者表达式,因此 A)选项错误。 32.【 2010年 9月选择题第 14题 】 有以下定义: int a;long b;double x, y;则以下选项中正确的表达式是 A)a%(int)(x-y) B)a=x!=y; C)(a*y)%b D)y=x+y=x 参考答案: B 【解析】 A)选项中如果 x与 y 的值相等那么取余时就会有除数为 0 的情况。 C)选项中取余的两个数据都应为整数,不能有一方为实型变量,而 a*y 的结果为 double
22、型。 D)选项表达式本身就错误,不能给表达式赋值。所以,本题答案为 B)。 33.【 2009年 9月选择题第 15题 】 若有定义语句: int x=10;,则表达式 x-=x+x的值为 _。 A)-20 B)-10 C)0 D)10 参考答案 : B 【解析】 x-=x+x可化为: x=x-(x+x),由于 x初始值为 10,所以计算后, x=10-20=-10,因此选 B)。 34.【 2010年 9月选择题第 16题 】 表达式 a+=a-=a=9的值是 A)9 B)-9 C)18 D)0 参考答案 : D 【解析】题干中的表达式可以分解为以下表达式 : a=9; a=a-a 即 a=
23、9-9, 此时 a的值为0; a=a+a 即 a=0+0, 此时 a的值为 0。故本题的答案为 D)。 35.【 2009年 3月选择题第 14题 】 设有定义: int x=2;,以下表达式中,值不为 6的是 _。 A)x*=x+1 B)x+, 2*x C)x*=(1+x) D)2*x,x+=2 参考答案: D 【解析】 本题考察逗号运算符的运算方式,逗号运算符的作用是将若干表达式连接起来,它的优先级别在所有运算符中是最低的,结合方向为 “自左至右 “。 A)项和 C)项的结果是一样的,可展开为: x=x*(x+1)=2+,因为 +运算符有自加功能,逗号之前执行后 x 的值为 3,逗号后的值
24、就是整个表达式的值,即 6;D)项逗号之前并未给 x 赋值,所以表达式的值就是x+=2 的值,即 4。因此,本题答案为 D)。 2.4 位运算 36.【 2011年 9月选择 题第 38题 】 有以下程序 #include main() int a=2, b; b=a main() unsigned char a=8, c; c=a3; printf(“%dn“, c); 程序运行后的输出结果是 A)32 B)16 C)1 D)0 参考答案: C 【解析】本题中将 8赋值给字符变量 a,则 a的二进制为 “00001000“, a3的位运算是把 a向右移动三位,结果为 “00000001“,输
25、出其十进制的值 1。 38.【 2010年 9月选择题第 40题 】 有以下程序 #include main() short c=124; c=c ; printf(“%dn“, c); 若要使程序的运行结果为 248,应在下划线处填入的是 A)2 B)| 248 C) printf(“%dn“,a/b 程序运行后的输 出结果是 A)0 B)1 C)2 D)3 参考答案 : A 【解析】对于 a/b printf(“%dn“, r1); 输出结果是 _。 A)16 B)8 C)4 D)2 参考答案: C 【解析】 8用二进制表示为 1000,右移 1位后为 0100,即十进制 4。 41.【
26、2009年 3月选择 题第 39题 】 有以下程序: #include main() int a=5, b=l, t; t=(a main() int a=1, b=0; printf(“%d, “, b=a+b); printf(“%dn“, a=2*b); 程序运行后的输出结果是 _。 A)0,0 B)1,0 C)3,2 D)1,2 参考答案: D 【解析】 执行第一个 printf语句时, b=a+b=1,所以输出 1,执行第二个 printf语句时, a=2*b=2,所以输出结果为 2。 3.2 赋值语句 3.3 输入输出概念及其实现 3.4 单个字符的输入与输出 3.5 数据格式的输
27、入与输出 43.【 2011年 9月选择题第 16题 】 若有定义: int a, b;,通过语句 scanf(“%d;%d“, ,能把整数 3赋给变量 a,5赋给变量 b的输入数据是 _。 A)3 5 B)3,5 C)3;5 D)35 参考答案: C 【解析】 在 C语言中 scanf函数中输入数据时要严格按照所规定的样式输入。 44.【 2011年 9月填空题第 6题 】 若程序中已给整型变量 a和 b赋值 10和 20,请写出按以下格式输出 a、 b值的语句 _【 6】 _。 *a=10, b=20* 参考答案 : printf(“*a=%d,b=%d*“,a,b); 【解析】 本题考查
28、的是 printf函数的用法, prinrf函数实际上是将所有参数按字符输出。 45【 2010年 9月填空题第 6题 】 以下程序运行后的输出结果是 【 6】 。 #include main() int a=200, b=010; printf(“%d%dn“, a, b); 参考答案: 2008 【解析】整型变量 a 的值为 200, b 的值 “010“是用八进制表示的 “10“即十进制的 “8“,最后输出格式均为 %d,即十进制格式,所以输出为 “2008“。 46【 2010年 9月填空题第 7题 】 有以下程序 #include main() int x, y; scanf(“%2
29、d%1d“, printf(“%dn“, x+y); 程序运行时输入: 1234567,程序的运行结果是 【 7】 。 参考答案: 15 【解析】可以指定输入数据所占列宽,系统自动按所指定的格式截取所需数据。 %2d 即将输入数据的 2 个列宽的数据赋给变量 x ,因为输入的为 “1234567“,所以前两个列宽的数据为12,即 x 的值为 12,同理 %1d 即把输入数据中前 两个列宽所在数据后的一个列宽的数据赋给变量 y,所以 y 的值为 3 ,所以 x+y 的值为 15。 47【 2010年 3月选择题第 15题 】 有以下程序 #include main() char a,b,c,d;
30、 scanf(“%c%c“, c=getchar();d=getchar(); printf(“%c%c%c%cn“,a,b,c,d); 当执行程序时 ,按下列方式输入数据 (从第 1列开始 ,代表回车 ,注意 ,回车也是一个字符 ) 12 34 则输出结果是 A)1234 B)12 C)12 D)12 3 34 参考答案: C 【解析】程序根据用户输入分别给字符型变量 a、 b、 c、 d赋值为 1、 2、 、 3,因此输出到屏幕得到选项 C中的格式。 48【 2010年 3月选择题第 22题 】 有以下程序 ,其中 k的初值为八进制数 #include main() int k=011; printf(“%dn“,k+);