a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 154|回复: 2

[程序员] 2012年软件水平考试程序员考前练习试题及答案解析(4)

[复制链接]
发表于 2012-8-2 08:51:15 | 显示全部楼层 |阅读模式
 46.设有定义:"char s[12]={"string"};" 则printf("%d\n",strlen(s));的输出是( )   A. 6  A5 N7 W+ v# C/ S: Q" G+ L  Q$ D
  B. 7
# B; `; ?/ s7 U4 r, f  C.11
; a! g* X* C9 S; f: e$ G" U+ i  D.12
9 ?- i) O/ \& I: j% @+ c  【解析】在C语言中,字符串是指在有效字符之后有字符率结束标记符的字符列,并约定字符串的长度是指字符率中有效字符个数,不包括字符串的结束标记符。存放于字符数组s中的字符串是“string”,该字符串的长度为6,所以输出该字符串的长度应是6。正确的解答是A。
% ~5 H7 m+ M- D  【参考答案】A7 ]7 j( A/ v) l9 ^# p8 n1 i6 S0 [! F
  47.下列语句中,正确的是( )6 m, M9 y" o# u& J
  A.char a[3][]={'abc",'1'};3 [" I/ j5 t( d7 }6 }& C
  B.char a[][3]={'abc','l'};
/ a% b+ @% k7 e9 r  C.char a[3][]={'a',"1"};( k) F" U- U7 `( [
  D.char a[][3]={"a","1"};/ r+ l1 N3 B) K. t$ D
  【解析】如定义数组时有初始化,其最高维的长度可以省缺,由系统根据初始化时的初值个数确定,而其它维的长度是不可以缺省的。对二维字符数组的初始化,可以按行用字符串对其初始化,也可以按二维数组元素的存储顺序逐一用字符对其元素初始化。在供选择解答A.和C.中,有不是最高维的长度被缺省,所以是错误的。在供选择解答A.和B.中,还将字符串常量写作'abc',这也是错误的。只有D.,用字符率按行给二维字符数组初始化,这才是正确的。正确构解答是D。- @- @3 ]. P, ^5 l8 @
  【参考答案】D7 E; l* V" l) H. S$ a' s+ P* W* n
  48.合法的数组定义是( )4 s' ]- }+ w9 P  U/ O4 D' C
  A.int a[]={"string"}) D# u; O, R+ Q8 E& W0 E
  B.int a[5]={0,1,2,3,4,5};( [9 p6 y9 T- ]
  C.char a={"string"}
# A8 ^" r  k* D$ l5 i0 m  D.char a[]={0,1,2,3,4,5};" B, a$ {5 w5 h3 j9 z* H
  【解析】A.错误的原因是整数数组不可以用字符串对其初始化。B.错误的原因是,数组初始化时,初始化指定的值的个数多于数组的元素个数。C.错误的原因是,能用字符串初始化的只;有字符指针变量,或字符数组。字符率不能对其它类型的变量初始化,包括字符变量。D是正确的,因为字符数组可以用小整数(作为字符的ASCII代码值)对其元素初始化。/ S' v5 d1 {8 G0 S, j3 z
  【参考答案】D3 I1 F9 D0 Q! L2 {: F0 O
  49.语句"printf("%d\n"strlen("ats\nol2\1\\"));"的输出结果是( )
& c5 ~) [) z. m' Z& g  A.11
6 l( N% n9 Q. H; b9 G" ]/ E; ?- a  B.105 i: u7 n. Q! _6 J2 T0 B* h
  C. 94 v2 Q8 d! h' f0 B4 E! N4 D% {
  D. 8
. o. K. B5 Z$ e7 n  【解析】字符串中的字符可以是一般的普通字符,也可以是由反斜杠字符开头的转义字符。在字符串"abs\no12\11\\" 中,有三个转义字符,它们是\n、\1、\\,所以该字符串的有效字符个数是9。所以正确的回答是C。. X7 K  V9 u- A2 M
  【参考答案】C) c- h! l% o, Q" n
  50.函数调用“strcat(strcpy(strl,str2),str3)”的功能是( )
9 W+ h' T# q& }$ N* c- J  A.将字符串strl复制到字符串str2中后再连接到字符串str3之后
; _" }" Z' V) m% ]- I  B.将字符串strl连接到字符串str2中后再复制到字符率str3之后) O9 W9 q  X! N7 {+ V( u
  C.将字符串str2复制到字符串strl中后再将字符串str3连接到字符串strl之后7 C  ]6 T. h, W' x1 ?$ ]0 f
  D.将字符串str2连接到字符率strl之后再将字符串strl复制到字符串str3中4 F. [, l, @" U9 m+ M% F/ z! l3 S
  【解析】函数调用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。
6 d9 h: k1 j- U- Q' E1 e' l4 D  【参考答案】C
回复

使用道具 举报

 楼主| 发表于 2012-8-2 08:51:16 | 显示全部楼层

2012年软件水平考试程序员考前练习试题及答案解析(4)

 51.设有如下定义,则正确的叙述为( )   char x[]={"abcdefg"};
4 b$ u3 M% w" ~. J9 K) E  }6 T  char y[]={'a','b','c','d','e','f','g'};5 d3 e% Y* f/ t& t0 K/ t' J( _
  A.数组x和数组y等价
# Z1 ]9 S, O) B, S$ U3 ]0 |! T: m  B.数组x和数组y长度相同
3 E. L$ e6 e+ F9 _4 Z7 B$ f* u  C.数组X的长度大于数组y的长度
0 D" q" `% }) A  D.数组X的长度小于数组y的长度
6 _9 ^: f/ v# i  [( \( K  【解析】不指定数组长度的字符数组定义,其所需要的字节数可由初始化中给出的值的个数确定。字符数组可以用字符串初始化,也可用字符逐个给字符数组的元素初始化。但用字符初始化时,尽管给出了字符串中的全部字符,还是不会自动有字符率结束字符。但字符串初始化自动会含有字符串的结束标记符,字符串初始化所需要的字节个数会比用同样多的字符初始化多1个字节。所以只有C才是正确的。+ B. c1 T" f. j# N+ o2 S4 S7 V
  【参考答案】C0 N% f( Z8 l* m: H. D: i3 i* i

3 u' V% m, z" V& O7 r: Z  52. 循环语句“for(x=0, y=0;(y!=123)||( x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-2 08:51:17 | 显示全部楼层

2012年软件水平考试程序员考前练习试题及答案解析(4)

56.设有关变量已经正确定义并赋值,则下列表达式中符合C语言语法规则的是( )   A.a_=\12
) _, U" `. s# i5 \  B.a_1=a_2+=12/ b' X& N1 W7 u( C
  C.int13.5%2
- w' `5 Z' `- R6 B9 |1 b/ k, o  D.a=b+7=C-2
5 ?6 t6 `8 k! }' i# e( v9 P  【解析】分析备选答案 A:这个表达式中出现了两个运算符“=”和“\”,后一个运算符是双目中缀,但是其前面没有运算对象,所以语法上是错误的。分析备选答案B:这个表达式中出现了两个运算符“=”和“+=”.从结合性来说,是自右向左的,所以该表达式相当于“a_1=(a_2+= 12)”,先计算“a_2+=12”,相当于“a_2=a_2+12”,再计算“a_1=(a_2+=12)”,所以该表达式的语法是正确的,符合题意。至于备选答案 C,加在表达式前面的int需要有圆括号,表示对表达式值的强制转换,此外“%”运算符的一个运算对象是实型,也是错误的。备选答案D类似于备选答案B,但是第2个赋值运算符的左边是表达式“b+7”,不是变量,不符合赋值运算符的语法要求,是错误的。
' F/ a9 {; p( E  s# k9 l( p; Q( \2 n  【参考答案】B
% K" t1 U8 p2 q9 Q  57.若整型变量x的值为8,则下列表达式中值为1的表达式是( )
( M- J5 D8 |8 r( d5 |  A.x+=x-=x=x$ f) r8 ^( |. S4 l+ Y4 l1 \$ j+ l
  B.x%=x-1
1 ]; b, D+ ^+ \5 i/ j7 B  C.x%=x%=3
4 D2 ~8 s* G- K3 l" a/ h. ?# m* X  D.x/=x+x
6 a+ C) S$ @* U7 K  【解析】计算备选答案A:先做“x=x*x”,结果x为64,该表达式值为64;再做“x=x-64”结果 x为 0,该表达式值为0;最后计算“x=x+0”,结果 x为 0,整个表达式值为 0,不符合题意。计算备选答案B:相当于计算“x=x%(x-1)”,结果为x=8%7=1,整个表达式值为1,所以该答案符合题意,本题答案应选B。至于备选答案C:先算“x=x%3”,结果x=2,该表达式值为2,再计算“x=x%2”,结果x为0,整个表达式值为0。备选答案D:相当于计算“x=x/(x+x)”,结果为x=8/(8+8),结果x为0,整个表达式值为0。
7 E6 n( K( V- N. A  ^: d  【参考答案】B
5 [2 E0 Z2 b: P: G0 N4 r. E' g  58.字符串"m\x43\\\np\102q"的长度是( )6 U9 Z6 Z7 u' z- l& H3 _; _
  A.7
3 A* p# N: _- a* n! a  }& z+ _  B.9
7 t* Q- n; R( f2 N! Z4 Z. K& x0 @  ]  C.15
$ K/ t" q/ S! d0 [  D.16; R$ `- X8 i4 m9 f+ _
  【解析】字符串的长度等于其中有效字符(不含字符率结束标记符)的数目。本题给出的字符串中含有转义字符,一个转义字符相当于单个字符。按照这个规则,本题中给出的字符串中含有的字符如下:7 W; W% k: R# [) P  N
  'm''\x43''\\''\n''p''\102''q'字符串中含有7个有效字符,所以本题答案应选A。
3 c5 Q6 D1 [) S( I7 @  【参考答案】A
: n7 h1 ]) J& f& R* Q6 L4 x  59.设有定义语句“int a=10,*p=&a;”,则表达式“a十*p”的值是( )1 M9 I+ q1 P7 H/ u% @
  A.10+ u! R7 b% j1 y
  B.20) v! H9 w6 L5 G% P
  C.100
. ^+ {& \8 u" [" n  D.语法出错0 M: Q# E& B& I4 h; f
  【解析】在数据定义语句中的“*p=&a”,表示指针变量p已经指向变量a,所以表达式中的“*p”就是变量a,“a+*p”就是“a+a”,所以该表达式的值为20。本题答案应选B。
. X" V3 K0 s4 Z4 A: ^7 a$ @) L  【参考答案】 B3 S# O0 _& S! D) Q
  60.若有定义语句“int x,*p=&x,**ppx=&px;”,则下列表达式中错误的是( )
+ [* U) E2 |2 P/ p: J' a  A.x=*px( c& m  b* J7 R2 g6 G
  B.x=**ppx
1 J7 X! [* a0 D# a0 N  C.px=&ppx1 k+ f5 b3 @! h! C( J. _
  D.*ppx=&x
8 u2 J: R3 a3 K- n) e, U6 y+ w0 f  【解析】分析备选答案 A:“*px”,就是x,所以该表达式为“x=x”,是正确的,不符合题意分析备选答案B:"**ppx",就是"*(*ppx)=*px=x",所以该表达式为"X=X",是正确的,不符合题意.分析备选答案C:px是一级指针变量,其中只能存放变量或数组元素的地址,不能存放其他一级指针变量或二级指针变量的地址,而"&ppx"是二级指针变量ppx的地址,所以该表达式是错误的,本题答案应选C.至于备选答案D:"*ppx"就是px,将变量x的地址赋予px,当然是正确的。
0 w# b6 Q9 h! l2 ^  【参考答案】 C
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-18 08:55 , Processed in 0.204034 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表