全国计算机二级c语言考试真题详细解答系列一9Word格式文档下载.docx

上传人:b****6 文档编号:21216807 上传时间:2023-01-28 格式:DOCX 页数:21 大小:37.27KB
下载 相关 举报
全国计算机二级c语言考试真题详细解答系列一9Word格式文档下载.docx_第1页
第1页 / 共21页
全国计算机二级c语言考试真题详细解答系列一9Word格式文档下载.docx_第2页
第2页 / 共21页
全国计算机二级c语言考试真题详细解答系列一9Word格式文档下载.docx_第3页
第3页 / 共21页
全国计算机二级c语言考试真题详细解答系列一9Word格式文档下载.docx_第4页
第4页 / 共21页
全国计算机二级c语言考试真题详细解答系列一9Word格式文档下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

全国计算机二级c语言考试真题详细解答系列一9Word格式文档下载.docx

《全国计算机二级c语言考试真题详细解答系列一9Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《全国计算机二级c语言考试真题详细解答系列一9Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。

全国计算机二级c语言考试真题详细解答系列一9Word格式文档下载.docx

A) 

选择

B) 

投影

C) 

D) 

(11)以下叙述中正确的是

A)程序设计的任务就是编写程序代码并上机调试

B)程序设计的任务就是确定所用数据结构

C)程序设计的任务就是确定所用算法

D)以上三种说法都不完整

解析:

选D。

原文见高教版二级教程P2,程序设计的任务包括A、B、c及相关文档。

(12)以下选项中,能用作用户标识符的是

A)void

B)8_8

C)_0_

D)unsigned

选C。

标识符由字母或下划线开头,关键字不能用作标识符。

A、D为关键字,B以数字开头,所以都是错误的。

(13)阅读以下程序

#include<

stdio.h>

main()

{intcase;

floatprintF;

printf(“请输入2个数:

”);

scanf(“%d%f”,&

case,&

pjrintF);

printf(“%d%f\n”,case,printF);

}

该程序编译时产生错误,其出错原因是

A)定义语句出错,case是关键字,不能用作用户自定义标识符

B)定义语句出错,printF不能用作用户自定义标识符

C)定义语句无错,scanf不能作为输入函数使用

D)定义语句无错,printf不能输出case的值

选A。

case是关键字,关键字不能用作标识符。

C语言关键字见教材附录。

(注:

标识符区分大小写,printf是关键字,可用作标识符,当然printF也可以)

(14)表达式:

(int)((double)9/2)-(9)%2的值是

A)0 

 

B)3 

C)4 

D)5

选B。

考点为运算符的优先级。

括号>

强制类型转换int>

乘除>

加减

(int)((double)9/2)一(9)%2=(int)(9.0/2)-(9)%2=(int)(4.5)-1=3

(15)若有定义语句:

intx=10;

,则表达式x-=x+x的值为

A)-20 

B)-10 

C)0 

D)10

考点为复合的赋值运算符。

(注意x+x作为一个整体)

x-=x+x→x=x-(x+x)→x=-x=-10

(16)有以下程序

{inta=1,b=0;

printf(“%d,”,b=a+b);

printf(“%d\n”,a=2*b);

程序运行后的输出结果是

A)0,0 

B)1,0 

C)3,2 

D)1,2

考点为赋值表达式的使用,赋值表达式的值和变量的值是一样的。

printf在输出赋值表达式的值时,先赋值再输出。

b=a+b=l+0=1 

a=2*b=2

17)设有定义:

inta=1,b=2,c=3;

,以下语句中执行效果与其它三个不同的是

A)if(a>

b)c=a,a=b,b=c;

B)if(a>

b){c=a,a=b,b=c;

}

C)if(a>

b)c=a;

a=b;

b=c;

D)if(a>

b){c=a;

考点为if句和逗号表达式的使用。

逗号运算符也称为顺序求值运算符,依次执行逗号表达式中的每个表选式。

逗号表达式是一个整体,复合语句也是一个整体,当a>

b时,A、B、D中if后的语句可以作为整体被执行,把a、b的值交换。

C的等价语句形式为:

if(a>

b) 

c=a;

a=b;

b=c;

不能实现a、b的值交换。

(18)有以下程序

#include<

{intc=0,k;

for(k=1;

k<

3;

k++)

switch(k)

{default:

c+=k

case2:

c++;

break;

case4:

c+=2;

printf(“%d\n”,c);

A)3 

B)5 

C)7 

D)9

考点为switch语句的使用。

switch语句中case和default的顺序可以任意,不影响程序结果。

switch语句在循环中被执行2次。

k=l时, 

c+=k 

c=0+1=1 

无break,继续执行

c++ 

c=2 

有break,终止switch

k=2时,c++ 

c=3 

有break,终止switch,循环结束,输出c。

(19)以下程序段中,与语句:

k=a>

b?

(b>

c?

1:

0):

0;

功能相同的是

A)if((a>

b)&

&

c))k=1;

elsek=0;

B)if((a>

b)||(b>

c)k=1;

C)if(a<

=b)k=0;

elseif(b<

=c)k=1;

b)k=1;

elseif(b>

考点为条件表达式的使用。

语句的功能为:

a>

b且b>

c时,k=l

b且b<

=e时,k=0

a<

=b时,k=0

符合语句功能的只有A。

20)有以下程序

{chars[]={“012xy”};

inti,n=0;

for(i=0;

s[i]!

=0;

i++)

if(s[i]>

=’a’&

s[i]<

=’z’)n++;

printf(“%d\n”,n);

A)0 

B)2 

C)3 

考点为字符数组的使用。

C语言用字符数组存放字符串,用\O作为结束标志。

(\0是ASCII码值为0的字符,也即数值0)程序的功能为统计字符数组s中小写字符的个数,n为计数器。

(21)有以下程序

{intn=2,k=0;

while(k++&

n++>

2);

printf(“%d%d\n”,k,n);

A)02 

B)13 

C)57 

D)12

考点为while语句的使用。

该while(k++&

2);

的循环体为空语句,所以程序是输出退出while循环后k、n的值。

k++为先使用k的值再增1。

先使用k的值,k=0,逻辑与结果为。

,第一次执行while循环时条件就不成立,直接退出循环,k的值增1,n的值没有任何改变。

(22)有以下定义语句,编译时会出现编译错误的是

A)chara=’a’;

B)chara=’\n’;

C)chara=’aa’;

D)chara=’\x2d’;

考点为字符型变量的赋值和基本概念。

字符型为单引号括起的一个字符。

A为标准的字符型赋值方法,

B为把一个转义字符赋值给字符变量,也是正确的。

C为单引号括起的两个字符,不符合字符型定义。

D表面看上去是错误的,其实是正确的,也是一个转义字符。

‘/x2d’表示ASCII码值为16进制数2d的字符,即‘-’号。

(23)有以下程序

main()

{charc1,c2;

c1=’A’+’8’-‘4’;

c2=’A’+’8’-‘5’;

printf(“%c,%d\n”,c1,c2);

已知字母A的ASCII码为65,程序运行后的输出结果是

A)E,68 

B)D,69 

C)E,D 

D)输出无定值

考点为字符型数据的使用和基本知识。

字符型数据在存中存放的是字符的ASCII码值,可以作为整型数据来处理。

英文字符和数字在ASCII码表中是按顺序排列的。

c1=‘A’+‘8'

-‘4’=‘A’+‘4’=E 

c2=‘A’+‘8’-‘5’=‘A’+3=‘D’

(24)有以下程序

voidfun(intp)

{intd=2;

p=d++;

printf(“%d”,p);

{inta=1;

fun(a);

printf(“%d\n”,a);

A)32 

B)12 

C)21 

D)22

考点为函数参数的传递。

c语言中函数参数的传递是值传递,是把实参的值传给形参,是单向传递,形参的改变不会影响到实参的值。

程序中,把实参a的值传给形参p,p=1,然后p=d++,再次赋值后p=2.输出p的值2。

返回到主程序中,输出a的值1。

(形参p的改变不会影响到实参a的值,a的值仍为1)

(25)以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能

#defineMIN-2147483647

intfindmax(intx[],intn)

{inti,max;

i<

n;

{max=MIN;

if(max<

x[i])max=x[i];

returnmax;

造成错误的原因是

A)定义语句inti,max;

中max未赋初值

B)赋值语句max=MIN;

中,不应给max赋MIN值

C)语句if(max<

中判断条件设置错误

D)赋值语句max=MIN;

放错了位置

考点为求最大值的算法。

max=MIN.不应该放在循环,而应该放到for循环的前面。

先让max取最小的整数,这样第1次循环时max就可以取得第1个数组元素的值,然后在循环中把后面的数组元素依次和max比较,让max取大值。

(26)有以下程序

{intm=1,n=2,*p=&

m,*q=&

n,*r;

r=p;

p=q;

q=r;

printf(“%d,%d,%d,%d\n”,m,n,*p,*q);

A)1,2,1,2 

B)1,2,2,1 

C)2,1,2,1 

D)2,1,1,2

考点为指针的基本概念。

p、q为指针,初始化时p指向m,q指向n。

执行r=p;

p:

q;

q:

r;

后,p和q的值交换,从而p指向n,q指向m。

指针的改变不会影响m、n的值,最后*p和*q的值为n、m的值。

(27)若有定义语句:

inta[4][10],*p,*q[4];

且0≤i<

4,则错误的赋值是

A)p=a

B)q[i]=a[i]

C)p=a[i]

D)p=&

a[2][1]

考点为指向二维数组的指针的用法。

p为基类型为int的指针,指向一个整型数据,也就可咀指向一个数组元素,所以D正确。

a是二维数组名,存放二维数组的首地址,但二维数组名是一个行指针,其基类型为具有10个元素的一维数组。

所以A错误,二者基类型不一致(p+1指向下一个元素,而a+l指向二维数组的下一行)。

如果p定义为int(*p)[10],才可以赋值p=a。

在C语言中,二维数组a[4][10]可以看做是由4个元素组成的一维数组,这4个元素为a[0]、a[l]、a[2]、a[3],而其中每个元素又是由10个元素组成的维数组。

在这里,a[i]也是一个数组名,可以表示一维数组的首地址,但a[i]是一个列指针,基类型为int.指向一维数组的第1个元素。

同时,指针数组q的每个数组元素q[i]的基类型也为int,所以p、a[i]、q[i]的基类型一致,选项B、C是正确的。

(28)有以下程序

#include<

string.h>

{charstr[][20]={“One*World”,“One*Dream!

”},*p=str[1];

printf(“%d,”,strlen(p));

printf(“%s\n”,p);

A)9,One*World

B)9,One*Dream

C)10,One*Dream

D)10,One*World

考点为二维字符数组的使用和strlen()函数的使用。

初始化p=str[l]后,p指向第二个字符串“One*Dream!

”。

strlen()函数计算字符串的长度时不包括结束标志,所以strlen(p)=10。

(29)有以下程序

{inta[]={2,3,5,4},i;

4;

switch(i%2)

{case0:

switch(a[i]%2)

{case0:

a[i]++;

case1:

a[i]--;

}break;

a[i[=0;

for(i=0;

i++)printf(“%d”,a[i]);

printf(“\n”);

A)3344

B)2050

C)3040

D)0304

考点为switch语句。

外部switch语句在循环中被执行4次。

i=0时,执行case0. 

部switch语句也执行case0, 

a[i]++ 

a[0]=3 

i=1时,执行case1,a[l]=0 

排除法,只有C正确。

i=2时,执行case0. 

部switch语句执行case1. 

a[i]-- 

a[2]=4

i=3时,执行case1,a[3]=0 

最后依次输出为:

3040

(30)有以下程序

#include<

{chara[10]=”abcd”;

printf(“%d,%d\n”,strlen(a),sizeof(a));

程序运行后的输出结果是

A)7,4 

B)4,10 

C)8,8 

D)10,10

考点为strlen()函数和sizeof()运算符的使用。

strlen()函数计算字符串的长度时,遇到结束标志为止,且长度不包括结束标

志,所以strlen(a)=4,排除法选B。

sizeof()运算符的操作数可以是类型名或变量名、数组名等,当操作数是数组名时,其结果是数组的总字节数,所咀sizeof(a)=10。

(31)下面是有关C语言字符数组的描述,其中错误的是

A)不可以用赋值语句给字符数组名赋字符串

B)可以用输入语句把字符串整体输入给字符数组

C)字符数组中的容不一定是字符串

D)字符数组只能存放字符串

字符数组名是数组首地址,是常量,不能被重新赋值,所以A正确。

可以用scanf(“%s”,str)对字符串整体输入,str可以是字符数组名或者字符指针,所以B正确。

C和D说法对立,必定有一个正确,用排除法A、B选项根本不用看。

字符数组的所有元素可以只存放普通字符,不存放结束标志。

所以D错误。

(32)下列函数的功能是

fun(char*a,char*b)

{while((*b=*a)!

=’\0’){a++,b++;

}}

A)将a所指字符串赋给b所指空间

B)使指针b指向a所指字符串

C)将a所指字符串和b所指字符串进行比较

D)检查a和b所指字符串中是否有’\0’

考点为指针的概念及while循环。

While循环条件为:

(*b=*a)!

='

\0’,执行时先把指针a所指向的字符赋给指针b所在存单元,如果该字符不是结束标志“\0”,执行循环体a++;

b++;

,指针a、b分别指向下一个字符单元。

再判断循环条件,如果成立,继续把指针a所指向的字符赋给指针b所在存单元,直到遇到结束标志为止。

所以正确答案为A。

(33)设有以下函数

voidfun(intn,char*s){……}

则下面对函数指针的定义和赋值均是正确的是

A)void(*pf)();

pf=fun;

B)viod*pf();

C)void*pf();

*pf=fun;

D)void(*pf)(int,char);

pf=&

fun;

考点为指向函数的指针的用法。

函数名代表函数的入口地址。

指向函数的指针应该定义为void(*pf)()。

如果定义为void*pf(),则表示函数pf返回值为一个基类型为void的指针。

综上,所以正确答案为A。

(34)有以下程序

intf(intn);

{inta=3,s;

s=f(a);

s=s+f(a);

printf(“%d\n”,s);

intf(intn)

{staticinta=1;

n+=a++;

returnn;

程序运行以后的输出结果是

A)7 

B)8 

C)9 

D)10

选C.考点为静态局部变量的使用。

主函数和f函数中的a都为局部变量,作用域都在本函数之,互不影响。

f函数中的a为静态局部变量,占用固定的存单元,下一次调用时仍可保留上次调用时的值。

也就是说,如果多次调用f函数,a的定义只在第一次调用时有效,从第二次调用开始,a的定义相当于不存在,直接使用a的值。

主函数中调用了2次f(a),第一次调用,s=f(a)=f(3) 

f函数:

n=3 

a=l 

n=n+(a++)=4 

a=2 

返回n,主函数s=4。

第二次调用,s=s+f(a)=4+f(3)(a值为主函数中的a值) 

f函数n=3 

n=n+(a++)=5 

a=3 

返回n,主函数s=4+f(3)=4+5=9 

最后输出s的值为9。

(35)有以下程序

#definef(x)x*x*x

{inta=3,s,t;

s=f(a+1);

t=f((a+1));

printf(“%d,%d\n’,s,t);

A)10,64 

B)10,10 

C)64,10 

D)64,64

考点为带参数的宏定义。

宏定义中的参数授有类型,仅为字符序列,不能当作表达式运算。

宏展开时,把实参字符串原样写在替换文本中。

s=f(a+l)=a+l*a+l*a+l=10

t=f((a+1))=(a+1)*(a+1)*(a+1)=64

(36)下面结构体的定义语句中,错误的是

A)structord{intx;

inty;

intz;

};

structorda;

B)structord{intx;

}structor

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1