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