2012年软考程序员第三套考前练习试题及答案解析
31.设 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。
【参考答案】C
32.使用“Scanf("X=%f,y=%f",&x,&y)”,要使 X,y均为1.25,正确的输入是( )
A.1.25,1.25
B.1.25 1.25
C.x=1.25,y=1.25
D.X=1.25 y=1.25
【解析】格式输入函数的格式字符串中的字符可以分成三类:空格类字符、其它普通字符和格式转换说明。其中空格类字符用来跳过一个空格类字符序列,直至下一个非空格类字符。普通字符要求输入字符与其完全相同。格式转换说明对输入字符列按格式转换说明进行转换,得到内部值存储到对应输入项所指定的存储位置中。函数调用scanf(“x=%f,y=%f,&x,&y)以普通字符X=开头,输入时也要先输入X=。接着是一个浮点数输入格式,所有能构成一个浮点数1.25的字符序列都能满足要求。接着是普通字符列“,y=”,在输入的浮点数之后也要有字符列“,y=”。最后又是浮点数输入格式,同样所有能构成一个浮点数1.25的字符序列都能满足要求。问题给出的供选择答案中只有x=1.25,y=1.25是能满足上述要求的。所以正确选择是C。
【参考答案】C
33.设有int i=010,j=10;则执行“printf("%d,%dn",++i,j--);”的输出是( )
A.ll, 10
B. 9,10
C. 010,9
D. 10, 9
【解析】变量i和j的初值分别为八进制数010和十进制数 10,函数调用Printf(“%d,%dn”,++i,j--)中,++i的值是变量 i增1后的值,原来值是八进制数 010,等于十进制数8,输出9。j--的值是变量j减1之前的值,输出10。格式字符申中的逗号是普通字符照原样输出。所以问题给出的格式输出函数调用将输出9,10。正确的解答是B。
【参考答案】B
34.设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=A b=B
【解析】函数调用scanf("c=%c,b=%c",&c,&b)中,普通字符必须按格式字符串要求照原样输入,c格式对紧接的任何字符都输入。所以实现问题的要求,输入字符列应为“a=A,b=B”。另外要特别指出,在程序中,为表示字符常量,字符前后需加单引号。但用字符格式输入字符时,在要输入字符前后不必另键人单引号。若键人单引号,则这个单引号也将作为字符被输入。正确的解答是D。
【参考答案】D
35.设X、y、Z、t均为int型变量,则执行以下语句后,t的值为( )
x=y=z=1;t=++x||++y&&++z;
A.不定值
B.2
C.l
D.0
【解析】语句序列“x=y=z=l;t=++x||++y&&++z;”使变量x的值为1,变量t是赋一个逻辑表达式的值。在C语言中,由逻辑与和逻辑或构成的逻辑表达式有特别的计算规则,顺序计算各逻辑子表达式,并当一旦能得到逻辑表达式的结果时,就立即结束逻辑表达式的计算,不再计算后继逻辑子表达式。本题的逻辑表达式是两个运算分量的逻辑或,而且左运算分量++X的值为非0,立即得到逻辑或运算的结果为1,并将1赋给变量t,所以变量t的值为1。正确解答为C。
【参考答案】C
36. 设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; y++&&++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。
【参考答案】D
37.假定所有变量均已正确定义,下列程序段运行后X的值是( )
a=b=c=0; x=35;
if(!a)x--; else if(b);if(c)x=3;else x=4;
A.34
B. 4
C. 35
D. 3
【解析】以变量 a,b,c的值均为 0,变量x的值为 35,语句:
if(!a)x--;else if(b);if(c)x=3;else x=4;
由两个证语句组成。首先执行前一个if语句“if(!a)x--;else if(b);”,因变量a的值为0,条件!a成立,执行x--使x的值变为34。接着执行后继的if语句“if(c)x=3; else X=4;”,因变量c的值为0,条件不成立而执行X=4,最终使变量X的值为4。正确解答是B。
注意前一个if语句的else部分的成分语句只有“if(b);”,这是一个单分支if语句,且其成分语句为空语句。
【参考答案】B
38.下面的程序段所表示的数学函数关系是( )
y=-l;
if( x!= 0)if(x>0)y=l; else y=0 ;
1(x<0) 1(x<0)<>
A. y= { 0(x= 0)
B. y={-l(X=0)
1(X>0) 0(X>0)
o(X< 0) -l(X< 0)
C. y= {-1(x= 0)
D. y={ 1(X= 0)
1(X> 0) 0(X> 0)
【解析】程序段首先置变量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。正确解答为C。
【参考答案】C
39.下列语句中,句法错误的是(不考虑语义)( )
A. while(x=y)5 ;
B. do x++ while(x==10) ;
C.while(0);
D.do 2;while(a==b);
【解析】 while语句的一般形式是:
while(表达式) 语句
这里的表达式可以是任何合理的表达式,语句可以是任何语句,包括空语句,或表达式语句。可能书写的while语句没有任何意义,如供选择的A.while(x=y)5;和C.while(0);,但这两个语句的句法没有任何错误。do-While语句的一般形式是:
do语句while(表达式);
其中的成分语句也可以是任何语句,但供选择答案B.do x++while(x==10) ;中的代码x++是一个表达式,不是语句,所以是错误的。正确解答是B。
【参考答案】B
40.若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。<>
【参考答案】A
41.假定a和b为int型变量,则执行以下语句后b的值为( )
a=1; b=10;
do b-=a; a++;
}while<(b--<0);<>
A.9
B.-2
C.-1
D.8
【解析】在这个程序段中,循环开始前变量a的值为1,b的值为10,每次循环从变量b减去a,并让a增1,并在循环条件判定时,又让b减去1。第一次循环后,变量b的值变成9,变量a的值变为2,循环判断时,因b的值大于0,循环条件不成立,结束循环。但在循环判断时,让b减去了1,所以循环结束时,变量b的值为8。正确的解答是D。
【参考答案】D
42.设x和y为int型变量,则执行下面的循环后,y的值为( )
for(y=l, x=l; y<=50; y++){
if(x>=10) break;
if(x%2==1){ x+=5; continue;}
X -= 3;
}
A.2
B.4
C.6
D.8
【解析】 for循环语句的初始化部分置变量x和y的初值为1,循环条件是(y<=50),每次循环后变量y的值增1,控制循环最多执行50次。循环体有三个语句:首先在发现变量X的值大于等于10时,结束循环;接着是当变量X除2的余数为1(即变量X是奇数)时,让变量X值增5,让X变成偶数,并直接进入下一轮循环;如变量X是偶数,则从变量X减去3,让变量X变成奇数。由上述分析知,每两次循环使变量X的值增加2.第一次循环后,变量X的值变成6。第二次循环后,变量X的值变成3。第三次循环后,变量X的位变成8。第四次循环后,变量X的值变成5。第五次循环后,变量X的值变成 10。第六次循环时,因变量X的位大于等于 10,直接跳出循环,这次循环是非正常结束,对变量y的修正只执行了5次。所以循环结束后,变量y的值增至6。正确的解答是C。
【参考答案】C
43.在C语言中,下列说法中正确的是( )
A.不能使用“do语句while(条件)”的循环
B.“do语句While(条件)”的循环中必须使用“break”语句退出循环
C.“do语句while(条件)”的循环中,当条件非0时将结束循环
D.“do语句while(条件)”的循环中,当条件为0时将结束循环
【解析】 do-while语句的一般形式是:
do语句
while(表达式);
其语义是重复执行其成分语句,直至表示条件的表达式值为0时结束。do-while语句是正常使用的一种循环结构之一。do-while语句的循环结束条件由while后的表达式值为0所控制,并不一定要有break语句跳出循环来结束循环。do-while语句在条件值非0时,将继续循环,而不是结束循环。条件值为0时,才结束循环。所以正确的选择是D。
【参考答案】D
44.若有以下程序段,W和k都是整型变量,则不能与该程序段等价的循环语句是( )
W= k;
LB: if(w==0) gotO LE;
w - -;
printf("*");
goto LB;
LE:
A. for(w=k;w!=0;W--)printf("*");
B. w= k;
While(W--!=0) Prinif(”* ”);
C. w= k;
do{w--; prinif(“*”);
} while( W!= 0);
D. for(w=k;W;--W) printf("*");
【解析】问题所给出的程序段用goto语句构造一个循环控制结构,该循环结构的初值是让变量W的值为k的值,循环结束条件是W的情等于0,循环体是让变量W的值减1,并输出一个字符* 。上述循环控制过程用for循环可描述如下:
for=(w=k;W!=0; W--) printh("*");
或写成:
for(w=k ;w;--w) printf("*");
若用while语句,可描述如下:
W=k;
while(w--!=0)printf("*");
w++;/*在w等于0时,也执行了一次 w--,这里是对w最后减1的补尝*/
或更直观地写成:
W=k;
while(w!=0){ w--;Printf("*");}
若用do-while语句,可描述如下:
W=k;
if(W)
do{
w--; prinif("*");
} while(w);
若写成:
W=k;
do{
W--; printf("*");
} while(w!=0);
是不正确的,因为原代码当k的值为0时,不输出字符*,而上面的改写,当k的值为0时,将输出许许多多的字符*。所以解答应是C。
【参考答案】C
45. 若有下列说明,则数值为4的表达式是( )
int a[12]={ l,2,3,4,5,6,7,8,9,10,11,12 };
char c='a',d, g;
A.a[g-c]
B.a[4]
C.a['d'-'c']
D.a['d'-c]
【解析】数组元素的下标自0开始顺序编号,值为4的元素是a[3]。所以只有下标表达式的值为3的才是正确的。下标表达式g-C中的的变量g和c的值是还未被设定的,其值不确定。a[4]的值为5,下标为4是不对的。'd'-'c'的值为1,a[l]的值是2,所以也是不对的。变量c的值为'a' ,'d'-c=3,所以正确解答是D。
【参考答案】D
<(b--<0);<>(b--<0);<>
<4,每次循环后变量j的值增1。所以内循环共控制4次循环。这样,如内循环的体内未曾对变量i和j有修改,在内、外循环一起控制下,内循环的体共被重复执行20次。正确解答是a。<>4,每次循环后变量j的值增1。所以内循环共控制4次循环。这样,如内循环的体内未曾对变量i和j有修改,在内、外循环一起控制下,内循环的体共被重复执行20次。正确解答是a。<>
<4;j++){……}<>4;j++){……}<>
<0)<>0)<>