查看汇总:2014下半年软考程序员考前最后冲刺题及答案解析汇总
1.假定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
2.设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
3.在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
4.若有以下程序段,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
5. 若有下列说明,则数值为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
6.设有定义:"char s[12]={"string"};" 则printf("%d\n",strlen(s));的输出是( )
A. 6
B. 7
C.11
D.12
【解析】在C语言中,字符串是指在有效字符之后有字符率结束标记符的字符列,并约定字符串的长度是指字符率中有效字符个数,不包括字符串的结束标记符。存放于字符数组s中的字符串是“string”,该字符串的长度为6,所以输出该字符串的长度应是6。正确的解答是A。
【参考答案】A
7.下列语句中,正确的是( )
A.char a[3][]={'abc",'1'};
B.char a[][3]={'abc','l'};
C.char a[3][]={'a',"1"};
D.char a[][3]={"a","1"};
【解析】如定义数组时有初始化,其最高维的长度可以省缺,由系统根据初始化时的初值个数确定,而其它维的长度是不可以缺省的。对二维字符数组的初始化,可以按行用字符串对其初始化,也可以按二维数组元素的存储顺序逐一用字符对其元素初始化。在供选择解答A.和C.中,有不是最高维的长度被缺省,所以是错误的。在供选择解答A.和B.中,还将字符串常量写作'abc',这也是错误的。只有D.,用字符率按行给二维字符数组初始化,这才是正确的。正确构解答是D。
【参考答案】D
8.合法的数组定义是( )
A.int a[]={"string"}
B.int a[5]={0,1,2,3,4,5};
C.char a={"string"}
D.char a[]={0,1,2,3,4,5};
【解析】A.错误的原因是整数数组不可以用字符串对其初始化。B.错误的原因是,数组初始化时,初始化指定的值的个数多于数组的元素个数。C.错误的原因是,能用字符串初始化的只;有字符指针变量,或字符数组。字符率不能对其它类型的变量初始化,包括字符变量。D是正确的,因为字符数组可以用小整数(作为字符的ASCII代码值)对其元素初始化。
【参考答案】D
9.语句"printf("%d\n"strlen("ats\nol2\1\\"));"的输出结果是( )
A.11
B.10
C. 9
D. 8
【解析】字符串中的字符可以是一般的普通字符,也可以是由反斜杠字符开头的转义字符。在字符串"abs\no12\11\\" 中,有三个转义字符,它们是\n、\1、\\,所以该字符串的有效字符个数是9。所以正确的回答是C。
【参考答案】C
10.函数调用“strcat(strcpy(strl,str2),str3)”的功能是( )
A.将字符串strl复制到字符串str2中后再连接到字符串str3之后
B.将字符串strl连接到字符串str2中后再复制到字符率str3之后
C.将字符串str2复制到字符串strl中后再将字符串str3连接到字符串strl之后
D.将字符串str2连接到字符率strl之后再将字符串strl复制到字符串str3中
【解析】函数调用strcat(s1,s2)是将s2字符串复制连接到s1字符串之后,使s1字符串变得更长。函数调用strcpy(s1,s2)是将s2字符串复制到s1,使s1字符串的内容与s2字符串的内容相同。函数调用strcat(strcpy(strl,str2) ,str3) 是先执行strcpy(strl,str2),然后再执行strcat(strl,str3),所以其功能是将字符串str2复制到字符串strl中,然后再将字符串str3复制连接到字符串strl之后。正确的选择是C。
【参考答案】C
相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |