软考程序员考前模拟题练习及答案Word文件下载.docx
《软考程序员考前模拟题练习及答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《软考程序员考前模拟题练习及答案Word文件下载.docx(10页珍藏版)》请在冰点文库上搜索。
B.C=7+b++=a+7
C.a=(7+b,b++,a+7)
D.a=7+b,c=a+7
【解析】赋值运算符是运算符之一,赋值运算也可以出现在一般表达式中。
赋值运算时,出现在赋值运算符左边的表达式应该是引用一个存储对象,例如变量。
不可以是一个数值计算表达式。
如表达式a=7+b+c=a+7因算术运算符比赋值运算符的优先级高,要把a+7的结果赋给7+b+c,这是错误的。
同样理由,表达式a=7+b++=a+7也是错误的。
而表达式a=(7+b,b++,a+7)就是正确的赋值表达式,它是先计算赋值号左边的括号内的表达式,括号表达式内是一个逗号表达式,远号表达式要求顺序逐一计算各子表达式,并以最后一个子表达式的值作为远号表达式的结果,最后将该结果赋给变量a。
而表达式a=7+b,c=a+7则不是一个赋值表达式,而是一个逗号表达式,它由两个赋值子表达式组成。
所以解答是C。
4.若有以下定义:
chara;
intb;
floatc;
doubled;
则表达式a*b+d-c值的类型为()
A.float
B.int
C.char
D.double
【解析】基本类型的数据可以混合运算,但运算时,对要求运算分量类型相同的运算来说,如运算分量的类型不是全相同,则会有自动类型转换发生。
类型自动转换规则规定类型低(简单)的向类型高(复杂)的转换。
各类型由高到低的排列顺序是:
longdouble、float、unsignedlong、long、unsignedint、int这样,若有定义:
intb;
doubled;
则表达式a*b+d-c的值的类型是double的。
首先计算a*b,得到int类型的值,接着计算a*b+d,得到double类型的值,最后计算a*b+d-c,得到double类型的值。
所以解答是D。
【参考答案】D
5.表达式“9!
=7”的值是()
A.true
B.非0值
C.0
D.1
【解析】关系运算的结果只有0和1,若关系成立,则结果为1;
若关系不成立,则结果为0。
因关系式9!
=7成立,所以表达式的结果为1。
虽然1也是非0值,在供选择的答案中有1,所以最确切的解答是D。
6.用十进制数表示表达式“12|012”的运算结果是()
A.1
B.0
C.14
D.16
【解析】按位运算将运算分量视作二进位的位申信息,对两运算分量的对应位进行运算,产生H进位的位串信息结果。
整数12最低8位二进位是00001100,整数012是八进制数,它的最低8位二进位是00001010。
这两个二进位位串信息按位或运算,得到结果是00001110,对应十进制数14,八进制数是016。
7.设字符型变量a=3,b=6,计算表达式C=(a^b)<
<
2后C的二进制值是()
A.00011100
B.00000111
C.00000001
D.00010100
【解析】a的值为3,写成8位二进制数形式是00000011,b的值为6,写成8位二进制数形式是00000110。
表达式c=(a^b)<
2,先计算a与b的按位加,得到结果00000101,将这结果向左移2位,得到二进位的位串信息是00010100。
8.设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中值为0的是()
A.’a’&
b’
B.a<
=b
C.a||b+c&
b-c
D.!
((a<
p>
【解析】对于表达式’a’&
’b,两个非O运算分量的逻辑与结果为1。
对于表达式a<
=b,由于关系式成立,结果也为此又由于变量a为非0,表达式a||b+c&
b-c的结果也为1。
对于表达式!
9.设Ch是Char型变量,其值为’A’,则下面表达式的值是()
ch=(ch>
=’A’&
ch<
=’Z’)?
(ch+32):
ch
A.’A’
B.’a’
C.’Z’
D.’z’
【解析】由于字符型变量ch的值为’A’,计算表达式ch=h>
=’A’&
=’Z’)?
(ch+32):
ch,先计算其中条件表达式,由于条件(ch>
=’A&
h<
=’Z’)成立,该条件表达式以ch+32=97为结果,将该值赋给变量ch,以字符表达这个值为’a’。
所以解答是B。
【参考答案】B
10.设有无符号短整型变量i、j、k,i值为013,j值为OX13。
计算表达式“k=~i|j>
>
3”后,k的值是()
A.06
B.0177776
C.066
D.0177766
【解析】将变量i的八进制数值013写成二进制形式为00001011,将变量j的十六进制值oxl3写成二进制数形式为00010011。
表达式k=~i|j>
3的计算过程是先求~i,结果用八进制代码表示为0177764;
接着计算j>
3,结果为02。
对它们进行按位或运算结果为0177766。
11.设a=3,b=4执厅‘printf(”%d,%d’,(a,b)(b,a));
”的输出是()
A.3,4
B.4,3
C.3,3
D.4,4
【解析】在调用格式输出函数的语句中,其中每个格式符对应一个输出项,格式符d要求输出项内容以十进制整数形式输出。
第一个输出项(a,b)是一个逗号表达式,该表达式的值是b的值,输出4。
接着输出字符逗号。
第二个输出项(b,a)的值是a的值,输出3。
所以语句执行将输出4,3。
12.使用“Scanf("
X=%f,y=%f"
,&
x,&
y)”,要使X,y均为1.25,正确的输入是()
A.1.25,1.25
B.1.251.25
C.x=1.25,y=1.25
D.X=1.25y=1.25
【解析】格式输入函数的格式字符串中的字符可以分成三类:
空格类字符、其它普通字符和格式转换说明。
其中空格类字符用来跳过一个空格类字符序列,直至下一个非空格类字符。
普通字符要求输入字符与其完全相同。
格式转换说明对输入字符列按格式转换说明进行转换,得到内部值存储到对应输入项所指定的存储位置中。
函数调用scanf(“x=%f,y=%f,&
y)以普通字符X=开头,输入时也要先输入X=。
接着是一个浮点数输入格式,所有能构成一个浮点数1.25的字符序列都能满足要求。
接着是普通字符列“,y=”,在输入的浮点数之后也要有字符列“,y=”。
最后又是浮点数输入格式,同样所有能构成一个浮点数1.25的字符序列都能满足要求。
问题给出的供选择答案中只有x=1.25,y=1.25是能满足上述要求的。
所以正确选择是C。
13.设有inti=010,j=10;
则执行“printf("
%d,%d\n"
,++i,j--);
A.ll,10
B.9,10
C.010,9
D.10,9
【解析】变量i和j的初值分别为八进制数010和十进制数10,函数调用Printf(“%d,%d\n”,++i,j--)中,++i的值是变量i增1后的值,原来值是八进制数010,等于十进制数8,输出9。
j--的值是变量j减1之前的值,输出10。
格式字符申中的逗号是普通字符照原样输出。
所以问题给出的格式输出函数调用将输出9,10。
正确的解答是B。
14.设a,b为字符型变量,执行"
scanf("
a=%c,b=%c"
a,&
b)"
后使a为'
A'
,b为'
B'
,从键盘上的正确输入是()
A.’A”B’
B.’A’,’B’
C.A=A,B=B
D.a=Ab=B
【解析】函数调用scanf("
c=%c,b=%c"
c,&
b)中,普通字符必须按格式字符串要求照原样输入,c格式对紧接的任何字符都输入。
所以实现问题的要求,输入字符列应为“a=A,b=B”。
另外要特别指出,在程序中,为表示字符常量,字符前后需加单引号。
但用字符格式输入字符时,在要输入字符前后不必另键人单引号。
若键人单引号,则这个单引号也将作为字符被输入。
正确的解答是D。
15.设X、y、Z、t均为int型变量,则执行以下语句后,t的值为()
x=y=z=1;
t=++x||++y&
++z;
A.不定值
C.l
D.0
【解析】语句序列“x=y=z=l;
”使变量x的值为1,变量t是赋一个逻辑表达式的值。
在C语言中,由逻辑与和逻辑或构成的逻辑表达式有特别的计算规则,顺序计算各逻辑子表达式,并当一旦能得到逻辑表达式的结果时,就立即结束逻辑表达式的计算,不再计算后继逻辑子表达式。
本题的逻辑表达式是两个运算分量的逻辑或,而且左运算分量++X的值为非0,立即得到逻辑或运算的结果为1,并将1赋给变量t,所以变量t的值为1。
正确解答为C。
16.设x、y、z均为int型变量,则执行以下语句后,x、y,z的值为()
X=1;
y=0;
Z=2;
y++&
++Z||++X;
A.2、l、3
B.2、0、3
C.2、l、3
D.2、1、2
【解析】语句序列“x=l;
y=0;
z=2;
++z||++x;
”先使变量x的值为1,变量y的值为0,变量Z的值为2。
由逻辑与和逻辑或构成的逻辑表达式的特别计算规则,顺序计算各逻辑子表达式,并当一旦能得到逻辑子表达式的结果时,就立即结束逻辑子表达式的计算,不再计算该逻辑子表达式。
计算y++因y的值为0,使y++&
++z的结果为0,立即去计算++X,这次计算使变量y的值变成1,而变量Z的值本改变。
接着计算++X,使X的值变为2。
所以经上述语句执行后,X、y、Z的值依次为2、1、Z。
确解答为D。
17.假定所有变量均已正确定义,下列程序段运行后X的值是()
a=b=c=0;
x=35;
if(!
a)x--;
elseif(b);
if(c)x=3;
elsex=4;
A.34
B.4
C.35
D.3
【解析】以变量a,b,c的值均为0,变量x的值为35,语句:
elseif(b);
由两个证语句组成。
首先执行前一个if语句“if(!
”,因变量a的值为0,条件!
a成立,执行x--使x的值变为34。
接着执行后继的if语句“if(c)x=3;
elseX=4;
”,因变量c的值为0,条件不成立而执行X=4,最终使变量X的值为4。
正确解答是B。
注意前一个if语句的else部分的成分语句只有“if(b);
”,这是一个单分支if语句,且其成分语句为空语句。
18.下面的程序段所表示的数学函数关系是()
y=-l;
if(x!
=0)if(x>
0)y=l;
elsey=0;
1(x<
0)
A.y={0(x=0)
B.y={-l(X=0)
1(X>
0)0(X>
o(X<
0)-l(X<
0)
C.y={-1(x=0)
D.y={1(X=0)
0)0(X>
【解析】程序段首先置变量y的值为一l,接着按变量x值的不同情况重置变量y的值。
重置的首要条件是x!
=0,若变量x的值为0,则不再重置变量y的值,所以在X值为0情况下,y的值是-l。
在变量X的值不等于0的条件下,若X的值大于0,重置变量y的值为1;
若变量X的值小于0,重置变量y的值为0。
所以程序段实现当变量x的值为0时,变量y的值为-1;
当变量X的值大于0时,置变量y的值为1;
当变量X的值小于0时,置变量y的值为0。
19.下列语句中,句法错误的是(不考虑语义)()
A.while(x=y)5;
B.dox++while(x==10);
C.while(0);
D.do2;
while(a==b);
【解析】while语句的一般形式是:
while(表达式)语句
这里的表达式可以是任何合理的表达式,语句可以是任何语句,包括空语句,或表达式语句。
可能书写的while语句没有任何意义,如供选择的A.while(x=y)5;
和C.while(0);
,但这两个语句的句法没有任何错误。
do-While语句的一般形式是:
do语句while(表达式);
其中的成分语句也可以是任何语句,但供选择答案B.dox++while(x==10);
中的代码x++是一个表达式,不是语句,所以是错误的。
20.若i、j已定义为int类型,则以下程序段中的内循环体的执行次数是()
for(i=5;
i;
i--)
for(j=0;
j<
4;
j++){……}
A.20
B.24
C.25
D.30
【解析】问题所给的程序段的外循环是一个阶循环语句,它的初始化部分置变量i的初值为5,循环条件简写成i,即i!
=0,每次循环后变量i的值减1。
所以外循环共控制5次循环。
内循环也是一个for循环语句,它的初始化部分置变量j的初值为0,循环条件是j<
4,每次循环后变量j的值增1。
所以内循环共控制4次循环。
这样,如内循环的体内未曾对变量i和j有修改,在内、外循环一起控制下,内循环的体共被重复执行20次。
正确解答是A。