c语言字符串strl复制转换,2015软考程序员考前冲刺模拟题及答案

a7e715cf81a97ae22e6c93c20e83e502.png

1.假定a和b为int型变量,则执行以下语句后b的值为( )

a=1; b=10;

do b-=a; a++;

}while

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

11.设有如下定义,则正确的叙述为( )

char x[]={"abcdefg"};

char y[]={'a','b','c','d','e','f','g'};

A.数组x和数组y等价

B.数组x和数组y长度相同

C.数组X的长度大于数组y的长度

D.数组X的长度小于数组y的长度

【解析】不指定数组长度的字符数组定义,其所需要的字节数可由初始化中给出的值的个数确定。字符数组可以用字符串初始化,也可用字符逐个给字符数组的元素初始化。但用字符初始化时,尽管给出了字符串中的全部字符,还是不会自动有字符率结束字符。但字符串初始化自动会含有字符串的结束标记符,字符串初始化所需要的字节个数会比用同样多的字符初始化多1个字节。所以只有C才是正确的。

【参考答案】C

12. 循环语句“for(x=0, y=0;(y!=123)||( x<4);x++);”的循环执行( )

A.无限次

B.不确定次

C.4次

D.3次

【解析】for循环语句的初始化部分置变量x和y的初值为0,循环条件是(y!=123)||(x<4),每次循环后变量X的值增1。由于循环过程中变量y的值本被修改过,循环条件又是一个逻辑或,其左分量(y!=123)永远成立,也就是循环条件永远成立。所以该循环语句将循环执行无限次。正确解答是A。

【参考答案】A

13.在计算机上可以直接运行的程序是写( )

A.高级语言程序

B.汇编语言程序

C.机器语言程序

D.C语言源程序

【解析】C语言源程序就是高级语言程序,都需要通过编译程序翻译成二进制目标程序才能执行;汇编语言源程序也需要通过汇编程序翻译成二进制目标程序才能执行。二进制目程序就是机器语言程序,可以在计算机上直接运行。

【参考答案】C

14.下列符号串中,合法的C语言标识将是( )

A._121

B.121_

C.a.121

D.#121

【解析】分析备选答案A:是下划线开头的数字串,符合 C语言关于标识符的构成规则“字母、下划线开头的字母、数字、下划线组成的一串符号”,所以该答案是正确的,符合题意至于备选答案B:是以数字开头的,不是标识符;备选答案C:含有非法符号“.”;备选答赛D:含有非法符号“#”,这三个答案都是错误的,不符合题意。

【参考答案】 A

15.下列符号串中,合法的十进制整型常量是( )

A.09876

B.0x9876

C.9.876*e4

D.-9876

【解析】分析备选答案A:是数字“0”开头的数字率,是人进制整型常量,而且其中出现了数字“8”和“9”,是错误的八进制常量,不符合题意。备选答案B:是“0x”开头的数字率,是十六进制整型常量,不符合题意。备选答案C:出现了小数点“.”。运算符“*”及“e”符号,是错误的常量,不符合题意。至于备选答案D:是正确的整型十进制常量,所以本题应选答案D。

【参考答案】D

16.设有关变量已经正确定义并赋值,则下列表达式中符合C语言语法规则的是( )

A.a_=\12

B.a_1=a_2+=12

C.int13.5%2

D.a=b+7=C-2

【解析】分析备选答案 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”,不是变量,不符合赋值运算符的语法要求,是错误的。

【参考答案】B

17.若整型变量x的值为8,则下列表达式中值为1的表达式是( )

A.x+=x-=x=x

B.x%=x-1

C.x%=x%=3

D.x/=x+x

【解析】计算备选答案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。

【参考答案】B

18.字符串"m\x43\\\np\102q"的长度是( )

A.7

B.9

C.15

D.16

【解析】字符串的长度等于其中有效字符(不含字符率结束标记符)的数目。本题给出的字符串中含有转义字符,一个转义字符相当于单个字符。按照这个规则,本题中给出的字符串中含有的字符如下:

'm''\x43''\\''\n''p''\102''q'字符串中含有7个有效字符,所以本题答案应选A。

【参考答案】A

19.设有定义语句“int a=10,*p=&a;”,则表达式“a十*p”的值是( )

A.10

B.20

C.100

D.语法出错

【解析】在数据定义语句中的“*p=&a”,表示指针变量p已经指向变量a,所以表达式中的“*p”就是变量a,“a+*p”就是“a+a”,所以该表达式的值为20。本题答案应选B。

【参考答案】 B

20.若有定义语句“int x,*p=&x,**ppx=&px;”,则下列表达式中错误的是( )

A.x=*px

B.x=**ppx

C.px=&ppx

D.*ppx=&x

【解析】分析备选答案 A:“*px”,就是x,所以该表达式为“x=x”,是正确的,不符合题意分析备选答案B:"**ppx",就是"*(*ppx)=*px=x",所以该表达式为"X=X",是正确的,不符合题意.分析备选答案C:px是一级指针变量,其中只能存放变量或数组元素的地址,不能存放其他一级指针变量或二级指针变量的地址,而"&ppx"是二级指针变量ppx的地址,所以该表达式是错误的,本题答案应选C.至于备选答案D:"*ppx"就是px,将变量x的地址赋予px,当然是正确的。

【参考答案】 C

2829f2ca24f0d0090cbba57f30759f23.png

2015软考程序员考前冲刺模拟题及答案.doc

下载Word文档到电脑,方便收藏和打印[全文共5984字]

编辑推荐:

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

下载Word文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值