第 1 章 C 语言概述
C
组成。
B.子程序
一、选择题:
1、一个 C 语言程序是由
A.主程序
2、下列关于 c 语言用户标识符的叙述中正确的是 B 。
A. 用户标识符中可以出现下划线和中划线(减号)
B. 用户标识符中不可以出现中划线,但可以出现下划线
C. 用户标识符中可以出现下划线,但不可以放在用户标识符的开头
D. 用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头
3、下列选项中,可以作为C语言标识符的是 。
D.过程
C.函数
A、3stu
B、#stu
C、stu3
D、stu.3
4、下列选项中,不可以作为C语言标识符的是 。
A、 num
B、turbo_c
C、printf
D、student3
5、请选出可用作 C 语言用户标识符的一组标识符 。
A、void, define, WORD
C、FOR,——abc, Case
B、a3_b3,_123,IF_A
D、2a,Do,Sizeof
6、以下叙述正确的是
。
A.在 C 程序中,main 函数必须位于子程序的最前面
B.C 程序的每一行中只能写一条语句
C.在对一个 C 程序进行编译的过程中,可发现注释中的拼写错误
D.C 语言本身没有输入输出语句
【答案】D
【解析】每一个 C 源程序都必须有、且只能有一个主函数(main 函数),但是不必位于最前面,编译之后,
运行是会自动搜寻到 main 函数并开始执行,A 项错误;书写程序时,为了清晰,便于阅读和理解,一般
是一个说明或一个语句占一行,但这不是必须的,B 项错误;编译过程中不对注释进行编译,所以发现不
了编译中的拼写错误,C 项错误;C 语言本身没有输入输出语句,scanf 函数和 printf 函数是标准输入输出
库函数,其头文件为 stdio.h,D 项为答案。
7、下面标识符中,不合法的用户标识符为
。
C. _124
B. a_10
A. Pad
【答案】D
【解析】C 语言中规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线(_)组成的字符串,并且其
第一个字符必须是字母或下划线。D 包含‘#’,是不合法的;
8、C 语言程序的执行,总是起始于
D. a#b
。
A) 程序中的第一条可执行语句 B) 程序中的第一个函数
C) main 函数
D) 包含文件中的第一个函数
分析:在一个 C 语言源程序中,无论 main 函数书写在程序的前部,还是后部,程序的执行总是从 main 函
数开始,并且在 main 函数中结束。本题正确答案为 C。
9、下列说法中正确的是
。
A) C 程序书写时,不区分大小写字母
B) C 程序书写时,一行只能写一个语句
C) C 程序书写时,一个语句可分成几行书写
D) C 程序书写时每行必须有行号
分析:C 语言严格区分大小写字母,如"A1"和"a1"被认为是两个不同的标识符,C 程序的书写非常灵活,
1
既可以一行多句,又可以一句多行,且每行不加行号。本题正确答案为 C。
10、下面对 C 语言特点,不正确描述的是
。
A) C 语言兼有高级语言和低级语言的双重特点,执行效率高
B) C 语言既可以用来编写应用程序,又可以用来编写系统软件
C) C 语言的可移植性较差
D) C 语言是一种结构式模块化程序设计语言
分析:C 语言是介于汇编语言和高级语言之间的一种语言,由于它可以直接访问物理地址,对硬件操作,
所以 C 语言既可以编写应用程序,又可以开发系统软件,而且 C 程序可移植性好于汇编语言,程序清晰具
有模块化的特点。本题正确答案为 C。
11、C 语言源程序的最小单位是
。
C) 函数
A) 程序行 B) 语句
D) 字符
分析:程序行、语句、函数都是由字符构成的,字符是 C 语言的最小单位。本题正确答案为 D。
12、以下四项中属于 C 语言关键字的是
。
A) CHAR
B) define
C) unsigned
D) retrun
分析:C 语言有 32 个关键字(或称保留字),它们都有特定的含意,并且由小写字母组成,所以选项 A 是错
的,选项 B 不是保留字,选项 D 是 return 的错误拼写。本题正确答案为 C。
13、下列字符串不符合标识符规定的是
A) SUM
B) sum
C) 3cd
。
D) end
分析:标识符规定只能由 26 个英文字母(大小写均可),数字 0~9 和下划线组成,且不能以数字开头,题
中的 3cd 不符合规定。
本题正确答案为 C。
二、填空题:
1、一个 C 语言的语句至少应包含一个 分号 。
2、C 源程序的基本单位是 函数
。
3、函数是具有相对独立功能的 程序段
4 、 C 语 言 中 的 标 识 符 可 以 由 3 种 字 符 组 成 , 它 们 是 :
字
,并且第一个字符必须是字母或 下划线 。
英 文 字 母 、 下 划 线 、 数
。
2
第 3 章(一) 数据类型、运算符与表达式
C. integer
D. Char
B
。
是 C 语言提供的合法的数据类型关键字。
B.整型、实型、字符型
D.整型、实型、逻辑型、字符型
一、选择题:
1、C 语言中,最简单的数据类型是
A.整形、实型、逻辑型
C.整型、字符型、逻辑型
2、
A. Float
B. signed
3、不正确的字符串常量是
A. ‘abc’
“
4、若定义:int a=7;float x=2.5,y=4.7;则表达式 x+a%3*(int)(x+y)%2/4 的值是
A.7
5、设有以下定义:
#define d
int a=0;double b=1.25;char c=’A’;
则下面语句中错误的是
A.a++;
6、 下列选项中,可以作为 C 语言常量的是(
C.3.500000
A
。
B. “12’12”
C.”0”
D.0.00000
B.b++;
C.c++;
D.d++;
B
2
B.2.50000
D.”
B
。
D
。
)
A)13.8e
B)1/2
C)‘M’
D)”abc”
7、下列选项中,不可以作为 C 语言常量的是(
)
A).88
B)35.6e3
C)4e-2
D)3/5
7、 已知字母’b’的 ASCII 码值为 98,如 ch 为字符型变量,则表达式 ch=’b’+’5’-‘2’的值为
)
(
A)e
B)d
C)102
D)100
8、 下列程序的运行结果是(
)
main( )
{
char c1=’6’,c2=’0’;
printf(“%c,%c,%d\n”,c1,c2,c1-c2);
}
A) 因程序格式不合法,提示出错信息。
B) 6,0,6
C) 6,0,7
D) 6,0,5
9、以下程序的输出结果是(
)
main( )
{
int x=010,y=10,z=0x10;
printf(“%d,%d,%d\n”,x,y,z);
}
A) 8,10,16
B) 8,10,10
C) 10,10,10
3
D) 10,10,16
10、已知各变量的类型定义如下:
int i=8,k,a,b;
unsigned long w=5;
double x=1.42,y=5.2;
则以下两组表达式中不符合 C 语言语法的表达式分别是:
⑴ A)k=i++
⑵ A)x%(-3)
C)k=(a=2,b=3,a+b)
B)(int)x+0.4
C)y+=x++
B)w+=-2
D)a=2*a=3
D)a+=a-=(b=4)*(a=3)
11、在 C 语言中,合法的字符常量是
C) ‘ab'
D) “\0”
B) ‘\x43'
A) ‘\084'
【答案】B
【解析】字符常量是用单引号括起来的一个字符,据此定义,选项 C 和 D 显然错误。A 和 B 是转义字符。
转义字符是一种特殊的字符常量,以反斜线"\"开头,后跟一个或几个字符,它有两种写作形式,\ddd 和\xhh,
其中 ddd 和 hh 分别为八进制和十六进制的 ASCII 代码。A 选项’\084’,反斜线’\’之后是三位数字,是采用
的\ddd 形式,不过 084 作为八进制显然是错误的;B 项’\x43’,采用的\xhh 形式,43 作为两位十六进制数,
对应 ASCII 代码 67,对应的是字符’c’。
12、设有如下的变量定义:
i=8, k, a, b;
int
unsigned long w=5;
double x=1, 42, y=5.2;
B) x%(-3);
D) y=float(i)
则以下符合 C 语言语法的表达式是
A) a+=a-=(b=4)*(a=3)
C) a=a*3=2
【答案】A
【解析】A 项是赋值表达式和算术表达式的结合,符合 C 语言语法;B 项中,’%’是模运算符,要求运算
符两侧均为整数,x 为 double,显然错误;C 项是赋值表达式,要求赋值运算符的左侧是变量,3=2 部分
显然错误;D 项,强制类型转换运算符使用错误,应为 y=(float)i
13、以下程序运行后,输出结果是
A) cde
C) 字符 c 的地址
D) 出错
B) 字符 c 的 ASCII 码值
main()
{
*s="abcde";
char
s+=2;
printf("%ld\n",s);
}
【答案】C
【解析】char *s ="abcde",声明 s 是一个字符串指针,并且将字符数组"abcde"的首地址赋值给了 s,s+=2,
即是在原来的 s 地址上向前推进两个字节,又因为数组是在连续空间上存储的一组数据,且一个字符占一
个字节,那么也就等价于由数组的第一个字节地址推进到第三个字符的地址,即字符 c 的地址。答案为 c
14、当 c 的值不为 0 时,在下列选项中能正确将 c 的值赋给变量 a、b 的是
A) c=b=a;
C) (a=c) &&(b=c); C) a=c=b;
B) (a=c) ‖(b=c) ;
【答案】C
【解析】赋值运算符是自右向左运算的。A 项是将 a 的值赋给了 b,又将 b 的值赋给了 a,与题意不符;B
项和 C 项都是逻辑运算,且都自左向右运算,它们的区别是:或运算是先计算左边表达式的值,若为真,
则结束运算,若为假,继续计算右边表达式,所以,如果 a=c 为真(只需要 a>0),那么 b=c 语句不会执行,
即不能完成 c 给 b 的赋值;与运算则是两边的表达式都要计算,所以,a=c 和 b=c 都能得到执行,C 为正
4
确答案;D 项是将 b 的值赋给了 c 和 a
15、设有如下定义:int
A) 1
B) 0
x=l,y=-1;,则语句:printf("%d\n",(x--&++y));的输出结果是
C) -1
D) 2
。
。
B.68
C.C
D.不确定的值
B.2.50000
C.3.500000
D.0.00000
【答案】B
【解析】表达式 x--&++y 中,逻辑运算符‘&’的优先级最低,应该先计算它两边的表达式。x-- :x 参与逻
辑运算后,x 的值再自减 1,那么 x—参与逻辑表达式的值为 1;++y:y 自增 1 后再参与逻辑运算,那么
++y 参与逻辑表达式的值为-1+1=0。x--&++y 即为 1&0,值为 0,答案为 B。
16、若定义:int a=7;float x=2.5,y=4.7;则表达式 x+a%3*(int)(x+y)%2/4 的值是
A.7
【答案】B
【解析】这是一个算术表达式,根据运算符的优先级,应该先计算(x+y),得到值 7.2,之后对其进行强
制数据类型转换(int),得到值 7,取模运算和乘、除运算在同一优先级上,自左向右依次计算,则先进行
取模运算,a%3 即 7%3=1,之后 1*7=7,7%2=1,1/4=0,即 a%3*(int)(x+y)%2/4 的值为 0,那么表达式的
值即是 x 的值,为 2.50000。
17、已知字母 A 的 ASCII 码为十进制数 65,且 c2 为字符型,则执行语句 c2=’A’+’6’-’3’;后,c2 中的值为
A.D
【答案】A
【解析】字符是以 ASCII 码的形式存储的,表达式’A’+’6’-’3’的运算实际就是对应 ASCII 码的算数运算,
加减运算是同一优先级的,所以’A’+’6’-’3’=65+54-51=68,即 D 的 ASCII 的值。此处定义 c2 是字符型,所
以,c2 的值是 D;如果 c2 定义为整型,则 c2 的值是 68。
18、下面叙述不正确的是【 】。
A) C 语句末尾必须有分号
B) C 语言中无论是整数还是实数都能准确的表示
C) 运算符“%”只能用于整数运算
D) 乘除运算符优先级高于加减运算符
19、复合语句应用【 】括起来。
A) 小括号
20、C 语言语句一行写不下时,可以【 】。
A) 用逗号换行
21、下面程序的输出是【 】。(“□”表示一个空格)
int a=3366;
printf("|%-08d|",a);
A) |-0003366|
C) |3366□□□□|
22、若有说明语句:int a; float b;,以下输入语句正确的是【 】。
A) scanf("%f%f",&a,&b);
B) scanf("%f%d",&a,&b);
C) scanf("%d,%f",&a,&b);
D) scanf("%6.2f%6.2f",&a,&b);
23、以下程序的输出结果是【 】。
main( )
{ int x=11,y=11;
printf("%d%d\\n",x--,--y);
}
A) 11,11
24、执行下面程序段,给 x、y 赋值时,不能作为数据分隔符的是【 】。
B) |00003366|
D) 输出格式非法
D) 在任意一空格处换行
B) 用分号换行
C) 10,11
D) 11,10
C) 用回车换行
B) 方括号
C) 大括号
D) 尖括号
B) 10,10
5
C) 回车
D) 逗号
int x,y;
scanf("%d%d",&x,&y);
A) 空格
B) Tab 键
25、下面合法的语句是【 】。
A) int a=8,b;
b=++a++;
printf("%d,%d",a,b++);
B) int a;
printf("\\"%d\\"",scanf("%d",&a));
C) char a;
scanf("%c",&a);
char b=scanf("b=%c",&b);
D) char c=getchar( );
putchar((int)c);
26、执行下面程序时,欲将 25 和 2.5 分别赋给 a 和 b,正确的输入方法是【 】。
int a;
float b;
scanf("a=%d,b=%f",&a,&b);
A) 25□2.5
B) 25,2.5
C) a=25,b=5.5
D) a=25□b=2.5
27、下面不属于 C 语言的数据类型是【
C) 逻辑型
】。
D) 双精度实型
A)整型
B)实型
分析:和其它高级语言相比,C 语言中没有逻辑型数据,也没有逻辑型变量。本题正确答案为 C。
28、下面四个选项中,均是合法实数的选项是【 】。
A)2e-4.2 B)33e-4
C)0.2e-.5
D)-e5
分析:实数有两种表示形式:小数形式和指数形式,小数形式必须有小数点,指数形式中,字母 e 之前必
须有数字,e 之后必须是整数。选项 A)中的"2e-4.2",选项 C)中的"0.2e-.5",选项 D)中的"-e5"均是不合法的。
本题正确答案为 B。
29、下列正确的字符型常量是【 】。
C) \\r
B) ′\\\\′
D) 277
A) "a"
分析:字符常量的定义是用单引号括起来的一个字符,A 和 C 的定界符不对,D 超过了 char 型数据的表示
范围,′\\\\′是转义字符。本题正确答案为 B。
30、若有说明语句 char ch1=′\\x41′;则 ch1【 】。
A) 包含 4 个字符 B) 包含 3 个字符
C) 包含 2 个字符
D) 包含 1 个字符
分析:"\\x41"中的"41"是十六进制数,即十进制的 65,题中 ch1 存放的 65 是字母"A"的 ASCII 码。本题正
确答案为 D。
31、下列程序段输出的字符串长度为【 】。
printf("\\\\aaa\\′ccc\\bddd\\"");
C) 13
D) 17
A) 11
B) 12
分析:\\\\、\\′、\\b 和\\"为转义字符,程序输出结果为:\\aaa′ccddd"。本题正确答案为 A。
32、下列运算符中,要求运算对象必须是整数的是【 】。
A) /
B) *
C) %
D) !
分析:题目中"/"、"*"、"!"的运算对象既可以整数,也可以是实数,只有取余数运算符"%"要求运算对象
必须是整数。本题正确答案为 C。
6
33、下面合法的赋值语句是【 】。
A) x+y=2002;
B) ch="green";
C) x=(a+b)++;
D) x=y=0316;
分析:赋值号左端不能为表达式,选项 A)是错的;赋值号不能将字符串赋给某个变量,选项 B)也是错的;
增量运算符“++”不能用于表达式,选项 C)也是错的。本题正确答案为 D。
34、已知 a 为 int 型,b 为 double 型,c 为 float 型,d 为 char 型,则表达式 a+b*c-d/a 结果的类型为【 】。
A) int 型 B) float 型 C) double 型
D) char 型
分析:不同类型数据混合运算的转换规律是:运算前 float 型数据会自动转换为 double 型,char 型数据会
自动转换为 int 型。运算时 int 型数据和 double 型数据要先化为相同类型,即 double 型,运算结果也为 double
型。本题正确答案为 C。
35、下面的程序运行后输出为【 】。
#include
#include
main( )
{ int a,b;
float c;
b=5;c=6;c=b+7;b=c+1;
a=sqrt((double)b+c);
printf("%d,%f,%d",a+6,c,b);
}
A) 11.000000,12.000000,13.000000
B) 11.000000,12.000000,13
C) 11.0000000,12,13
D) 11,12.000000,13
分析:C 语言允许将一种类型的数据赋给另一种类型的变量,但是变量的类型并不会因为赋值而发生改变,
如本题中将 b+7,即 12 赋给 float 型变量 c,c 值应为 12.000000 而不是整数 12,同样 a=sqrt((double)b+c),赋
值号右边是双精度数,但由于 a 是整形变量,故 a 的值为 5。本题正确答案为 D。
二、填空题:
1、设 a=3,b=4,c=5,求下列表达式的值。
/ *sqrt 是开平方库函数,定义代码在 math.h 中*/
(1)a+b>c&&b==c
(3)!(a>b)&&!c||1
2、下面程序段的输出结果是
。
int k=10;
float a=3.5,b=6.7,c;
c=a+k%3*(int)(a+b)%2/4;
(2)a||b+c&&b-c
(4)!(x=a)&&(y=b)&&0
分析:本题考查运算符的优先级概念,式中要先算(a+b)的值,再算强制类型变换,*、/、%是同级的要从
左到右计算,最后算加法和赋值。
本题正确答案为:3.500000
3、若想通过以下输入语句使 a 中存放字符串 1234,b 中存放字符 5,则输入数据的形式应该是
。
:
.
a[10],b;
char
scanf("a=%s b=%c",a,&b);
:
.
【答案】a=1234 b=5
【解析】scanf 函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。scanf("a=%s b=%c",a,&b)
7
要求输入设备(键盘)输入数据的形式是 a=%s b=%c(注意中间要求是空格),这里 scanf 的意义即是:从键
盘顺序读取一串字符,以空格为分隔符,分别赋值给变量 a,b;a 可以接受一串字符,而 b 只能接受一个
字符,多余的字符将被舍弃,scanf 函数结束。所以,键盘上的输入应该是 a=1234 b=5
4、执行下列程序的输出结果是【 】。
main( )
{
float a=1,b;
b=++a*++a;
printf("%f\\n",b);
}
5、执行下列程序的输出结果是【 】。
main( )
{
int x=5,y;
y=++x*++x;
printf("y=%d\\n",y);
}
6、下面程序段的执行结果是 x=【 】,y=【 】。
inta=3,b=5,x,y;
x=a+1,b+6;
y=(a+1,b+6);
printf("x=%d,y=%d",x,y);
分析:此题考查逗号表达式的概念,因逗号运算符的优先级比赋值号还低,所以执行 x=a+1,b+6 时,x 得
到的是 a+1 的值。
本题正确答案为 4, 11。
7、已知:int a=5;则执行 a+=a-=a*a;语句后,a 的值为【
分析:a+=a-=a*a 的运算顺序是从右向左,相当于求 a+=(a-=a*a),其中小括号内的运算得 a=5-5*5 即 a=-20,
下一步再求 a+=a,即 a=a+a,将-20 代入得 a=-40。本题正确答案为 -40。
8、下面程序的运行结果是 x=【
main( )
{ float x=4.9;int y;
y=(int)x;
printf("x=%f,y=%d",x,y); }
分析:强制类型变换并不改变 x 的原值,x 仍为 4.9,而变换得到的是中间结果,此题将中间结果赋给了 y,
另外注意是舍弃小数部分,而不是四舍五入。
本题正确答案为 4.900000 , 4。
】,y=【
】。
】。
8