计算机二级笔试宝典习题答案与详解.docx
《计算机二级笔试宝典习题答案与详解.docx》由会员分享,可在线阅读,更多相关《计算机二级笔试宝典习题答案与详解.docx(78页珍藏版)》请在冰豆网上搜索。
计算机二级笔试宝典习题答案与详解
第一章C语言基础知识
一、选择题
1.【A】
分析:
C语言中,标志符包括:
关键字、预定义标识符、和用户标识符。
其中我们常用的关键字只有30来个,也就是说要学好C语言,我们只需要记住30来个单词就可以了。
用户标识符由字母、数字和_组成标识符只能由字母、数字和下划线组成;其第一个字符必须是字母或下划线;标识符区分大小写字母。
如int与Int是两个完全不同的标识符。
2.【B】
3.【B】
分析:
if为关键字,肯定不能做为用户标识符。
预定义标识符可以作为“用户标识符”使用,只是这将使这些标识符失去系统规定的原意,所以一般也不要将预定义标识符作为“用户标识符”使用。
4.【D】
分析:
sizeof为关键字,不能做为用户标识符。
5.【D】
分析:
用户标识符命名规则里规定,不能以数字开头。
6.【B】
分析:
与第5题类似。
7.【C】
分析:
与第5题类似。
8.【D】
分析:
int为关键字,所以不能定义为用户标识符,但是scanf为预定义标识符,最好也不要用做用户标识符。
9.【B】
分析:
A选项long为关键字;C选项以数字5开头;D选项中包括非法的.。
10.【A】
分析:
A选项中包括非法的.。
11.【C】
分析:
C选项中以数字开头。
12.【A】
分析:
B选项中包含非法的-;C选项中以数字开头;D选项中包含关键字。
13.【D】
分析:
该题有误,D)floatUSS应该为D)floatU$$。
由于D选项包含非法字符$,所以答案为D。
14.【A】
分析:
B选项中赋值运算符的左边不能是表达式;C选项中赋值运算符的左边不能是表达式;D选项中C语言中强制类型转换的正确格式应该为“(类型名)表达式”,即应该为(double)(x)/10。
15.【A】
分析:
%运算符的运算对象必须是整型,%=是%和=的复合运算符,所以其运算对象也必须是整型。
16.【C】
分析:
字符型变量可以被赋予单个字符和小于128的整型数据,当是整型数据时,相当于是对应字符的ACSII码值。
字符是用''括起来的单个字符。
17.【B】
分析:
在C语言中无“:
=”运算符,故A错误,C选项中int18.5%3应该为(int)18.5%3;D选项中赋值运算符的左边不能是表达式。
18.【B】
19.【B】
分析:
B选项中八进制中不能出现数字8。
20.【D】
分析:
十六进制数只能以0X或0x开头,不能以oX开头。
21.【C】
分析:
本题考查指数的表示形式,选项A中E后面只能是整数,0.5是小数;选项B中E后面不能为空;选项D中E前面不能为空。
22.【C】
分析:
本题考查指数的表示形式,选项A中E后面只能是整数,5.0是小数;选项B中E前面不能为空;选项D中E后面不能为空。
23.【A】
分析:
选项B中八进制中不能出现数字8,选项C中e后面不能是小数,选项D中e后面不能为空。
24.【B】
分析:
选项B中e后面是小数0.4,所以非法。
25.【B】
分析:
字符是用''括起来的单个字符字符常量是,B选项其实是一个转义字符。
26.【B】
分析:
选项B中e后面只能是整数,0.5是小数。
27.【D】
分析:
选项D中赋值运算符的左边不能是表达式。
28.【C】
分析:
选项C中E后面只能是整数,0.5是小数。
29.【D】
分析:
3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8,本题目考察算术运算符,需要注意整数除以整数结果只能是整数。
30.【C】
分析:
①a+=a-=9a=3
②a+=-6a=-6
③a=a+(-6)a=-12
31.【A】
分析:
A选项中最右边的赋值符号的左边不能为表达式,只能是变量,故A不正确。
32.【A】
分析:
本题考查C语言中的注释,程序中以“/*”开头并且以“*/”结尾的部分表示程序的注释部分。
计算机运行程序时,完全不理会程序的注释部分,这部分将被完全忽略掉。
因此/*给a赋值b=20;给b赋值*/不被运行,所以a=10,b=0;答案为A。
33.【B】
分析:
选项A中n2没有定义,选项C中在定义f之前不能使用它,选项D中E后面必须是整数。
34.【C】
分析:
选项C的强制类型转换int(f)应该为(int)f。
35.【D】
分析:
本题考查自增(自减)运算符:
自增运算符在变量之前时,变量的值加1,表达式的值为变量的值加1,自增运算符在变量之后时,变量的值加1,表达式的值为原变量的值。
自减运算符类似。
①printf("%d%d",++m,n++);输出的值为1334
m=13n=35
②printf("%d%d\n",--n,--m);输出的值为3412
n=34m=12
36.【C】
分析:
A选项中%的运算对象只能时整数;B选项的赋值运算符的左边不能是表达式;D选项的赋值运算符的左边不能是表达式。
37.【B】
分析:
语句必须以;结束,而A选项没有 ;号;C选项没有赋值符号=,因此不构成赋值表达式;D选项的强制类型转换应该为(int)(a+b)。
38.【B】
分析:
本题考查运算规则,*和/运算符的运算规则为从左到右运算。
当/运算符的运算对象为整型时,结果一定为整型,所以1/2=0。
39.【D】
分析:
自加、自减运算符的运算对象可以是char型变量、int型变量和float型变量,但不能是常量。
40.【A】
41.【B】
分析:
当运算符/的运算对象都是整型时,结果一定是整型,所以8/5=1,1+0.4结果为1.4,当1.4赋值给c时,因为c是整型,只能存储整型数据,系统会自动将.14转换为整型数据1,再将1赋值给c,答案为B。
42.【D】
分析:
(int)a+b/b=(int)5.5+2.5/2.5=5+1.000000=b=6.000000,答案为D。
43.【D】
分析:
当/运算符的运算对象为整型时,结果一定为整型。
y=x+3/2=x+1=3.000000。
答案为D。
44.【A】
分析:
1.0/c2*c1=1.0/2*1=0.5*1=0.5,由于c3为整型,0.5转换为0,再赋值给c3,所以c3的值为0。
45.【D】
46.【A】
分析:
本题考点与第35题类似,x++*1/3=11*1/3=3。
47.【D】
分析:
D选项中的$不是标识符的合法符号,标识符只能有字母、数字和下划线组成。
48.【A】
分析:
因为赋值运算符的左边不能是表达式,B和C选项错误;D选项中的强制类型转换int(x)应该为(int)x。
49.【C】
50.【A】
分析:
本题考查转义字符。
转义字符是用“\”后面跟八进制或十六制数来表示一个字符。
51.【C】
分析:
本题考查十进制和十六进制之间的转换。
52.【D】
分析:
通过#defined2,d为一常量,由于自增(自减)运算符的运算对象不能是常量,所以答案为D。
53.【C】
分析:
根据各进制数的规则很容易得出答案。
54.【A】
分析:
A选项应该为'\\',具体查看书本上的转义字符。
55.【D】
分析:
与第54题类似,具体查看书本上的转义字符。
56.【D】
57.【C】
分析:
字符常量是''括起来的单个字符或转义字符。
二、填空题
1.8.9
分析:
7+3.8/2=7+1.9=8.9
2.关键字预定义标识符用户标识符
3.8
4.八十十六
5.intfloatdouble
6.1617
分析:
本题考查自增运算符,a++表达式的值是a变化之前的值,a变量本身加1。
第二章顺序结构
一、填空题
1.【B】
分析:
A选项,printf函数可以没有输出项,当没有输出项时,函数输出“”括起来的字符串;C选项,在C语言中,整数可以以十进制、八进制或十六进制的形式输出,但不能以二进制的形式输出;D选项,调用getchar函数读入字符时,只能从键盘上输入字符。
所以答案选B。
2.【C】
分析:
C选项错误:
随意使用空语句将会导致逻辑错误。
3.【D】
分析:
在C语言中,所有的变量都必须先定义后使用,而在本程序中,变量π在使用之前没有定义,所以会出现编译错误,答案为D。
该程序的修改有两种方法:
1、在定义变量s时,同时定义变量π,并初始化为3.14;2、在程序最前面使用宏定义#defineπ3.14。
4.【D】
分析:
该printf函数的输出项为逗号表达式,根据printf函数的定义,没有语法错误;在上一章,我们学习了,逗号表达式的值为最后一个表达式的值,所以表达式(x,y)的值为y的值,即2003,因此答案为D。
5.【A】
分析:
本题主要考查数据的表示方式,和printf函数的格式控制。
%d表示以十进制输出数据,%o表示以八进制输出数据,m的值是以十进制表示的,所以以原样输出,n的值是以八进制表示的,所以也以原样输出,答案为A。
6.【C】
分析:
同上题一样,本题也是考查数据的表示方式,和printf函数的格式控制。
%X表示以十六进制输出数据,通过计算,m的值为十六进制的0,所以答案为C。
通过该题我们必须注意一点,不管以十进制、八进制还是以十六进制输出数据时,数据前面不会有0、0x。
7.【B】
分析:
本题考查自增、自减运算符,以及printf函数的输出项。
从printf函数的一定可以知道,当输出项为表达式时,输出该表达式的值;自加(自减)在变量之前时,表达式的值为变量加1以后的值,自加(自减)在变量之后时,表达式的值为变量的原始值,答案为B。
8.【C】
分析:
本题考查点与第5、6题类似,只是n的值是以十进制表示的,但却是以八进制输出的,所以要先转化为八进制,即为0400,所以答案为C。
9.【B】
分析:
printf函数的定义:
当输出格式说明个数少于输出项时,那么多余的输出项不输出。
所以只输出666,答案为B。
10.【C】
分析:
012转为十进制为10,再以指定的两位格式输出为10;十进制102有三位,指定位数是两位。
当指定格式的位数少于输出数据的位数时,按实际数的位数输出,即输出102,答案为C。
11.【B】
分析:
①a=f/=c*=(x=6.5)
②a=f/=c*=6.5x=6.5
③a=f/=65c=65
④a=100.0/65=1f=100.0/65=1.5
⑤a=1,c=65,f=1.5,x=6.5
12.【B】
分析:
本题考查长整形变量的输出格式。
%和d中间必须加l(L的小写)。
13.【C】
分析:
①m=(k+=i*=k)
②m=(k+=i=2*2=4)i=4
③m=(k=2+4=6)k=6
④m=6
答案为C。
14.【C】
分析:
同10题类似,当指定格式的位数少于输出数据的位数时,按实际数的位数输出,即输出1234。
答案为C。
15.【D】
分析:
自加(自减)运算符,根据“符号在前,先加减后使用;符号在后,先使用后加减。
”进行计算
①x=-m++x=-3,m=4
②x=x+8/++n
③x=-3+8/5=-2
④x=-2
答案为D。
16.【D】
分析:
从scanf函数的定义可以得出答案。
17.【A】
分析:
在scanf()函数中,“”括起来的格式说明中,除了输入格式控制之外,其它的都要原样输入,所以答案为A。
18.【A】
分析:
本题考查的与第17题一样,在scanf()函数中,“”括起来的格式说明中”,”要原样输入,所以答案选A。
19.【C】
分析:
本题考查运算符的优先级和简单的编程思想,大家通过答案反过来推敲以知道如何形成解决一个问题的编程思想。
20.【A】
分析:
由getchar()函数的定义可得知答案,请大家理解透该函数的定义。
21.【A】
分析:
用scanf()函数输入字符型数据,当输入格式为%d时,等于输入以该整型数据为ASCII码值的字符,所以答案为A。
22.【B】
分析:
A:
main()函数后面不能有;号;C:
注释以/**/成对括起来的;D:
命令行必须以#号开始。
所以答案为B。
23.【C】
分析:
本题考查的知识点与第17、18题一样,只不过时一种逆向思维。
24.【B】
分析:
输入的是876543.0,由于输入格式说明中指定了a的位数为两位,所以计算机会把87分配给a;接着计算机继续把6分配给b,由于6后面输入的是空格,计算机认为分配结束.同时把6转为6.000000(b是实型变量)
25.【A】
分析:
本题与第7、15题类似。
26.【D】
分析:
在prinf()函数的格式控制中,两个连着写的%,计算机会输出一个%,接下来的d原样输出。
所以答案为D。
27.【B】
分析:
该题是考查scanf()函数的输入格式控制,以及后面的数组的知识,将在后面详细讲解。
28.【A】
分析:
此题不好解析,大家只要记住这一点,并在以后学习过程中注意就可以了。
29.【A】
分析:
scanf()函数的定义:
输入项为变量的地址,所以选项A,B错误;本题还牵涉到指针变量的概念,后面将会学习到,变量d其实是一个指针变量,指针变量其实就是储存一个变量的地址,所以选项B错误。
30.【D】
分析:
此题和第7题类似。
31.【D】
分析:
此题考查自减运算符、逗号运算符和printf()函数的概念,前两个知识点,在前面的题目中,我们已经讲述过了;当printf()函数的输出项为表达式时,输出的是该表达式的值,对于表达式z+1的值为3,所以答案为D。
32.【B】
分析:
本题只要很好地理解scanf()函数的定义,很容易得出答案。
33.【A】
分析:
本题有误:
“不正确的输入形式”应该改为“正确的输入形式”。
只要很好地理解scanf()函数的定义,很容易知道答案为A。
本题还考查了一个知识点,那就是分隔符,在C语言中,有三类分隔符,分别是:
回车、空格和tab键。
34.【D】
分析:
先计算a*a的值为9,再计算a-=9(此时a的值是3),计算后a的值为-6,整个表达式(a-=a*a)的值是-6,然后计算a加上表达式的值(此时a的值为-6),输出结果为-12
35.【A】
分析:
表达式c-25相当于字符c的ASCII值减25,当以%c的格式输出时,相当于输出ASCII值为c-25的字符,所以答案为A。
36.【B】
分析:
gets()函数可以从键盘读入含有空格字符的字符串,它以回车为输入结束的标志。
37.【C】
38.【C】
分析:
由于x为int型变量,所以x=1.2后,x的实际值为1;由于y也是int型变量,所以y=(x+3.8)/5.0后,y的值为0。
因此d*y的值为0,答案为C。
39.【A】
分析:
此题考查算术运算符号“/”的使用,由于“/”的运算对象为整型,所以其结果只能是整型,20/3=6,答案为A。
40.【A】
分析:
与第35题类似。
41.【B】
分析:
printf()函数的定义:
“”括起来的部分除了%d之外其它的原样输出。
42.【C】
分析:
本题考查转义字符,'\b'是退格符,所以遇到'\b',就会把前面一个字符删除掉,\'、\\为转义字符,分别输出'和\,所以答案为C。
43.【C】
分析:
本题不好用文字表述,请大家通过编译器调试看结果,并记住这个知识点。
二、填空题
1.88
分析:
0210转为十六进制为88
2.1
分析:
本题涉及到第三章选择结构的内容,将在第三章讲述。
3.220.000000
分析:
①x=f*=n/=(c=50)c=50
②x=f*=n/=50
③x=f*=2n=2
④x=20.0f=20.0
本题需要注意的地方,当以%f格式输出的时候,小数点后保留6位。
4.11
分析:
9转为8进制是11
5.252137
分析:
本题考查十进制、八进制和十六进制之间的相互转化,输出格式中的空格对应输出。
6.7
分析:
a='H'-'A'+'0'a=7+'0',所以以%c格式输出时,结构为字符7。
7.1B
分析:
运行a=getchar();scanf("%d",&b);后,a='B',b=33,其它的运算和第6题类似。
8.n1=%d\nn2=%d
分析:
从输出结果中可知:
n1=n2=必须在相应位置输入,并且输出n1后要换行。
这种题目在考试时(笔试和机试)经常出现,大家一定要多加训练。
9.i=10,j=20回车
分析:
scanf()函数中,除了%d之外,其它的都要原样输入。
10.B66
分析:
字符A的ACSII码值为65,所以字符B的ACSII码值为66,当以%d格式输出ch时,即输出66。
11.b
分析:
相同字符的小写的ACSII码值比大写的ACSII码值大32。
12.261
分析:
177转为8进制是261
13.-3
分析:
%运算符的操作必须时整数(正整数和负整数)。
14.16
分析:
赋值运算符的运算规则为从左往右。
①a+=(a=8)
②a+=8a=8
③a=16
15.2,1
分析:
①a=a+ba=3b=2
②b=a-ba=3b=1
③a=a-ba=2b=1
该类题必须小心,千万不能忘记“,”号,否则为0分。
16.10300
分析:
%*d表示忽略一个数的输入,10赋值给i,20被忽略,30赋值给j,而k未获得新的值,保持原值0,所出输出10300。
17.12
分析:
输入时,12分析作为字符'1'和'2'赋值给ch1和ch2。
第三章选择结构
一、选择题
1.【B】
分析:
此题主要考察逻辑运算。
首先x=1,y=1,那么!
x为0,y--是--在后,则先使用后自减,y的值就是表达式y--的值,为1。
因此!
x||y--等价于0||1,结果为1。
2.【D】
分析:
此题主要是考语句的特征。
一条语句只包含一个分号,D项有两个分号,应该是两条语句,所以选D。
if(b==0)m=1;是条if语句,n=2;是条赋值语句。
3.【D】
分析:
此题主要是考逻辑运算和关系运算的优先级别.掌握!
、算术运算符和&&的优先级别依次降低。
4.【A】
分析:
此题主要是考了逻辑、关系和算术运算,熟练掌握逻辑运算、关系运算和算术运算的优先级别后,就不难了。
A选项中!
a为0,所以!
a==1为假,那么就不用计算&&后面的表达式了,因为0“与”任何数均为假;B项中先计算出a
c也为假,而0||1=1;C项中a和b均为真,所以a&&b的值为1;D项中先计算出(b+b)&&(c-a)为1,又a=2,2||1=1所以选A。
5.【D】
分析:
此题是考真假条件的转换,其中D项中只有k为0时,!
k%2==1才成立,显然和A、B、C三项不同。
6.【A】
分析:
此题主要是考逻辑运算符!
、&&和||之间的优先级别。
!
最高,&&次之,||最低。
先求得!
a为0,所以不必计算!
b的值,即!
a&&!
b的值为0,由c=0,!
c=1,而0||1=1,所以选A。
7.【C】
分析:
此题考到了关系运算和逻辑运算及一定数学知识。
|x-y|<10可等价为-108.【C】
分析:
此题主要是考查逻辑运算符||,当计算机碰到a||b,先计算表达式a的值,若为假才会计算表达式b的值,否则将不会去计算b的值,因为一旦a=1,则0||b必为0。
题中b>a为真,所以(n=b>a)为1,那么将不会去计算m=a
答案选C。
9.【D】
分析:
此题考到if-else语句。
A、B、C三项都是表示a为真时输出x,为假时输出y,而D则是a为假时输出x,为真时输出y。
10.【C】
分析:
此题主要是考查if-else-if和if语句。
A选项,cB选项,a<3为真,执行x=3;。
C选项,a<3为真,执行x=3;然后a<2也为真,执行x=2;a<1为假,所以最后x的值为2。
D选项的分析同C选项。
11.【A】
分析:
此题主要是考查if语句和条件表达式的转化。
只要理解了if语句和条件表达式的运算规则的话,就很容易选出A。
12.【D】
分析:
见教材例题。
13.【B】
分析:
此题主要是考查if-else-if以及关系表达式的运算。
首先判断第一个条件a>b>c的值为0,所以不执行其后的语句;在判断第二个条件,c-1>=d表达式的结果为真,所以执行其下面的语句,那么将输出d+1的值为3,所以选答案B。
14.【D】
分析:
此题主要考查if,else的配对问题。
这里在if后面跟了两条语句,其中第一条是if的子句,第二条是条独立的语句,这样第二条语句就夹在了if和else之间,使得else找不到和它配对的if。
所以程序会出错。
15.【C】
分析:
请大家记住:
else总是和之前与其最近的且不带else的if配对。
16.【A】
分析:
此题考查的是条件表达式的求解顺序。
参照附录可知,它的结合方向是自右至左,所以先求得右边一个条件表达式的值为2,再求得左边一个的值为1,即选A。
17.【B】
分析:
此题考查的是条件表达式求解问题。
先看第一个条件表达式语句,a
再看第二个条件表达式语句,k>c为假,所以条件表达式等价于k=k;所以答案选B。
18.【C】
分析:
此题考查的是真假条件的等价问题。
x-y为真表示x-y是非0的,也即x-y<0或x-y>0。
所以答案选C。
19.【C】
分析:
此题主要是考查条件表达式和条件运算符。
首先求括号内条件表达式a>c?
a:
c的值为c,那么整个表达式就等价于d=a>b?
c:
b;求解这个条件表达式得d=c,所以答案选C。
20.【D】
分析:
此题主要是考查在switch语句中break和default的作用及break的适用范围。
break语句可以在switch语句中使用也可以在循环结构中使用,只能在这两个地方使用。
switch语句中可以有default也可以没有。
switch语句中可以有break语句也可以没有。
21.【D】
分析:
此题主要考查switch语句的语法规则。
A选项错在swich(a+b);这里多了一个分号。
请大家注意switch后圆括号中的表达式的值必须是整型或字符型,不能为实型。
B选项错在有两个case3。
C选项case后面只能是常量表达式,而这里出现变量,所以错误。
答案选D。
22.【C】
分析:
同21题。
23.【A】
分析:
此题主要考查if和else配对问题。
此题关键就是else是与第二个if配对组成一条if-else语句。
因此首先判断a>b为假,那么跳过其子句,即if-else语句,直接执行最后一条printf语句,将d输出。
因此答案选A。
二、填空题
1.10200
分析:
此题多数同学会得到的答案是10201,显然是没有弄清楚第三条赋值语句:
c=(a%b<1)||(a/b>1).这是将后面一个逻辑表达式的值给c。
先计算第一个圆括号里面的内容,a%b的值是10(而不是0),所以10<1为假;a/b的值为0,0>1为假。
在逻辑或运算的时候,两个运算对象都为假,则结果为假。
所以c的值为0.答案是:
10200
2.0
分析:
此题主要考查关系表达式。
我们主要就是要计算a>b>c的值,首先a>b为