全国计算机等级考试二级C语言真题库之选择题17.docx

上传人:b****5 文档编号:6193173 上传时间:2023-01-04 格式:DOCX 页数:19 大小:41.27KB
下载 相关 举报
全国计算机等级考试二级C语言真题库之选择题17.docx_第1页
第1页 / 共19页
全国计算机等级考试二级C语言真题库之选择题17.docx_第2页
第2页 / 共19页
全国计算机等级考试二级C语言真题库之选择题17.docx_第3页
第3页 / 共19页
全国计算机等级考试二级C语言真题库之选择题17.docx_第4页
第4页 / 共19页
全国计算机等级考试二级C语言真题库之选择题17.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

全国计算机等级考试二级C语言真题库之选择题17.docx

《全国计算机等级考试二级C语言真题库之选择题17.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言真题库之选择题17.docx(19页珍藏版)》请在冰豆网上搜索。

全国计算机等级考试二级C语言真题库之选择题17.docx

全国计算机等级考试二级C语言真题库之选择题17

全国计算机等级考试等级考试真题库之选择题(17)

1.下列叙述中正确的是

A)一个算法的空间复杂度大,则其时间复杂度也必定大

B)一个算法的空间复杂度大,则其时间复杂度必定小

C)一个算法的时间复杂度大,则其空间复杂度必定小

D)算法的时间复杂度与空间复杂度没有直接关系

参考答案:

D

【解析】算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。

2.下列叙述中正确的是

A)循环队列中的元素个数随队头指针与队尾指针的变化而动态变化

B)循环队列中的元素个数随队头指针的变化而动态变化

C)循环队列中的元素个数随队尾指针的变化而动态变化

D)以上说法都不对

参考答案:

A

【解析】在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。

因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。

所以循环队列中的元素个数与队头指针和队尾指针的变化而变化,A正确。

3.一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为

A)219

B)229

C)230

D)231

参考答案:

B

【解析】二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,则n2=79,总结点数为n0+n1+n2=80+70+79=229,答案为B。

4.对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为

A)9

B)10

C)45

D)90

参考答案:

C

【解析】冒泡法是在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是每次比较都要将相邻的两个元素互换,需要互换的次数为9+8+7+6+5+4+3+2+1=45,选C。

5.构成计算机软件的是

A)源代码

B)程序和数据

C)程序和文档

D)程序、数据及相关文档

参考答案:

D

【解析】软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档,选D。

6.软件生命周期可分为定义阶段、开发阶段和维护阶段,下面不属于开发阶段任务的是

A)测试

B)设计

C)可行性研究

D)实现

参考答案:

C

【解析】开发阶段包括分析、设计和实施两类任务。

其中分析、设计包括需求分析、总体设计和详细设计3个阶段,实施则包括编码和测试两个阶段,C不属于开发阶段。

7.下面不能作为结构化方法软件需求分析工具的是

A)系统结构图

B)数据字典(DD)

C)数据流程图(DFD图)

D)判定表

参考答案:

A

【解析】结构化方法软件需求分析工具主要有数据流图、数据字典、判定树和判定表。

8.在关系模型中,每一个二维表称为一个

A)关系

B)属性

C)元组

D)主码(键)

参考答案:

A

【解析】关系模型采用二维表来表示,即每个二维表称为一个关系。

9.若实体A和B是一对多的联系,实体B和C是一对一的联系,则实体A和C的联系是

A)一对一

B)一对多

C)多对一

D)多对多

参考答案:

B

【解析】A和B为一对多的联系,则对于A中的每一个实体,B中有多个实体与之联系,而B与C为一对一联系,则对于B中的每一个实体,C中之多有一个实体与之联系,则可推出对于A中的每一个实体,C中有多个实体与联系,所以为一对多联系。

10.

A)选择

B)投影

C)交

D)并

参考答案:

D

【解析】关系T中的元素与关系R和关系S中不同元素的总和,因此为并操作。

11.以下叙述中正确的是

A)C语言程序所调用的函数必须放在main函数的前面

B)C语言程序总是从最前面的函数开始执行

C)C语言程序中main函数必须放在程序的开始位置

D)C语言程序总是从main函数开始执行

参考答案:

D

【解析】C语言所调用的函数可以放在调用它的函数前,也可以放在调用它的函数后,所以A错误。C语言程序总是从main函数开始执行,所以B错误。main函数的位置可以放在开始,也可以放在中间,也可以放在最后,所以C错误。

12.C语言程序中,运算对象必须是整型数的运算符是

A)&&

B)/

C)%

D)*

参考答案:

C

【解析】%取余运算是二目运算符,且要求运算对象必须为整数,所以选C。

13.有以下程序

#include

main()

{

intsum,pad,pAd;

sum=pad=5;

pAd=++sum,pAd++,++pad;

printf("%d\n",pad);

}

程序的输出结果是

A)5

B)6

C)7

D)8

参考答案:

B

【解析】C语言区分大小写,pad与pAd是两个不同的变量。首先将5赋值给两个变量,由于赋值运算符的优先级高于逗号运算符,所以计算pAd=++sum,此时pAd为6,sum也为6,然后计算pAd++,pAd的值变为7,++pad,pad的值变为6,所以选择B。

14.有以下程序

#include

main()

{

inta=3;

a+=a-=a*a;

printf("%d\n",a);

}

程序的输出结果是

A)0

B)9

C)3

D)-12

参考答案:

D

【解析】首先计算a*a结果为9,执行a=a-9,a的值为-6,然后执行a+=a,即a=a+a=-6+(-6),所以值为-12。

15.sizeof(double)是

A)一个整型表达式

B)一个双精度型表达式

C)一个不合法的表达式

D)一种函数调用

参考答案:

A

【解析】sizeof是C语言中的一个操作符(operator),不是函数调用,简单的说其作用就是返回一个对象或者类型所占的内存字节数。所以选择A。

16.有以下程序

#include

main()

{

inta=2,c=5;

printf("a=%%d,b=%%d\n",a,c);

}

程序的输出结果是

A)a=2,b=5

B)a=%2,b=%5

C)a=%d,b=%d

D)a=%%d,b=%%d

参考答案:

C

【解析】C语言中用"%%"打印输出字符"%",所以%%d,输出为%d两个普通字符,而不是格式控制符"%d"的含义,所以打印结果为C。

17.若有定义语句:

chara='\82';

则变量a

A)说明不合法

B)包含1个字符

C)包含2个字符

D)包含3个字符

参考答案:

A

【解析】定义语句:

chara='\82';定义字符变量a,但是赋初值时却给赋值字符常量,因此A选项正确。

18.有以下程序

#include

main()

{

charc1='A',c2='Y';

printf("%d,%d\n",c1,c2);

}

程序的输出结果是

A)输出格式不合法,输出出错信息

B)65,89

C)65,90

D)A,Y

参考答案:

B

【解析】本题重点考察字符变量的相关知识。

分别给字符型变量a和b分别赋值为'A'和'Y',即A和Y的ASSCII码,因此输出结果为65,89,因此B选项正确。

19.若变量已正确定义

for(x=0,y=0;(y!

=99&&x<4);x++)

则以上for循环

A)执行3次

B)执行4次

C)执行无限次

D)执行次数不定

参考答案:

B

【解析】本题重点考察for语句的循环次数,for(x=0,y=0;(y!

=99&&x<4);x++),y!

=99&&x<4即循环条件当y不等于99以及x<4时,执行循环语句,当有一个条件不成立时,均结束循环,因此循环4次,B选项正确。

20.对于while(!

E)s;,若要执行循环体s,则E的取值应为:

A)E等于1

B)E不等于0

C)E不等于1

D)E等于0

参考答案:

D

【解析】while语句的一般形式为:

while(表达式)语句;其中表达式是循环条件,语句为循环体。

while语句的语义是:

计算表达式的值,当值为真(非0)时,执行循环体语句。

该题中如要执行语句s,则!

E应为真,因此E应等于0,D选项正确。

21.有以下程序

#include

main()

{

intx;

for(x=3;x<6;x++)

printf((x%2)?

("*%d"):

("#%d"),x);

printf("\n");

}

程序的输出结果是

A)*3#4*5

B)#3*4#5

C)*3*4#5

D)*3#4#5

参考答案:

A

【解析】条件运算符组成条件表达式的一般形式为:

表达式1?

表达式2:

表达式3

其求值规则为:

如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。

本题中语句printf((x%2)?

("*%d"):

("#%d"),x);含义为变量x对2求余,如果结果为真,则按照"*%d"格式输出,否则按照#%d输出。

因此A选项正确。

22.有以下程序

#include

main()

{inta,b;

for(a=1,b=1;a<=100;a++)

{if(b>=20)break;

if(b%3==1){b=b+3;continue;}

b=b-5;

}

printf("%d\n",a);

}

程序的输出结果是

A)10

B)9

C)8

D)7

参考答案:

B

【解析】首先注意for循环的控制条件当b>=20或者a>100则跳出for循环也即b<20且a<=100时执行for循环;第一次进入循环a=1,b=1均满足循环条件,但b%3==1条件满足,故执行b=b+3,得到b=4,注意有continue,所以后面语句不执行,直接跳转到a++这个语句,所以第一次循环完之后a=2,b=4;进入第二轮循环,b%3==1也是满足的,故再次b=b+3,此轮循环执行之后a=3,b=7,进入下一轮。

此后和前面循环同理,都是b%3==1满足,因为每次都是加3,而之后又去模3,且都跳过for后面语句直接执行a++,所以,一直循环到b=22跳出for循环。

此时a为8.综合起来就是,每次循环b增加3,a增加1,且当b>22时跳出循环,结束程序。

所以b从1增加到22,有(22-1)/3=7,所以a=1+7=8.因此B选项正确。

23.有以下程序

#include

voidfun(intx,inty,int*c,int*d)

{*c=x+y;*d=x-y;}

main()

{inta=4,b=3,c=0,d=0;

fun(a,b,&c,&d);

printf("%d%d\n",c,d);

}

程序的输出结果是

A)00

B)43

C)34

D)71

参考答案:

D

【解析】主函数中首先初始化整型变量a、b、c、d分别为4、3、0、0。

调用函数fun,将实参传递给形参。

在fun函数内,*c=7、*d=1。

返回主函数,最后输出7和1。

因此D选项正确。

24.有以下程序

#include

voidfun(int*p,int*q)

{intt;

t=*p;*p=*q;*q=t;

*q=*p;

}

main()

{inta=0,b=9;

fun(&a,&b);

printf("%d%d\n",a,b);

}

程序的输出结果是

A)90

B)00

C)99

D)09

参考答案:

C

【解析】主函数中定义整型变量a、b,分别赋值0和9。

将a和b的地址传递给指针变量p和q,函数fun中将a和b的值互换后,又将a的值赋给b。

返回主函数,最后输出9和9。

因此C选项正确。

25.有以下程序

#include

main()

{inta[]={2,4,6,8,10},x,*p,y=1;

p=&a[1];

for(x=0;x<3;x++)y+=*(p+x);

printf("%d\n",y);

}

程序的输出结果是

A)13

B)19

C)11

D)15

参考答案:

B

【解析】本题通过语句"p=&a[1]"将指针变量p指向了存储单元a[1],即使得p[0]的值为4,y的初始值为1,然后通过3次for循环,使得y的值分别加上p[0]、p[1]和p[2],那么y=1+4+6+8,所以输出的y的值为19。

26.有以下程序

#include

main()

{

inti,x[3][3]={1,2,3,4,5,6,7,8,9};

for(i=0;i<3;i++)

printf("%d",x[i][2-i]);

printf("\n");

}

程序的输出结果是

A)150

B)357

C)147

D)369

参考答案:

B

程序首先初始化二维数组x[3][3],然后通过3次for循环,输出x[0][2]、x[1][1]和x[2][0]的值,即3、5、7。

因此B选项正确。

27.设有某函数的说明为

int*func(inta[10],intn);

则下列叙述中,正确的是

A)形参a对应的实参只能是数组名

B)说明中的a[10]写成a[]或*a效果完全一样

C)func的函数体中不能对a进行移动指针(如a++)的操作

D)只有指向10个整数内存单元的指针,才能作为实参传给a

参考答案:

B

本题重点考察返回指针值的函数相关知识,返回指针值的函数,一般定义形式为:

类型名*函数名(参数列表)。

func函数被定义为指针型函数,它的形参inta[10]和intn,分别指一维数组a[0]和整型变量n。

28.有以下程序

#include

charfun(char*c)

{

if(*c<='Z'&&*c>='A')

*c-='A'-'a';

return*c;

}

main()

{

chars[81],*p=s;

gets(s);

while(*p)

{

*p=fun(p);

putchar(*p);

p++;

}

printf("\n");

}

若运行时从键盘上输入OPENTHEDOOR<回车>,程序的输出结果是

A)OPENTHEDOOR

B)oPENtHEdOOR

C)openthedoor

D)OpenTheDoor

参考答案:

C

【解析】字符串输入函数gets的功能是从标准输入设备键盘上输入一个字符串。

首先使指针变量p指向字符串的首字母,while循环语句中对字符串的每个字符进行fun函数操作。

fun函数的功能是,将字符串中的大写字母变小写字母。

将处理结果返回主函数,主函数通过putchar()字符输出函数进行输出。

因此C选项正确。

29.设有定义语句:

char*aa[2]={"abcd","ABCD"};

则以下叙述正确的是

A)aa[0]存放了字符串"abcd"的首地址

B)aa数组的两个元素只能存放含有4个字符的一维数组的首地址

C)aa数组的值分别是字符串"abcd"和"ABCD"

D)aa是指针变量,它指向含有两个元素的字符型数组

参考答案:

A

【解析】本题中定义了一个指针数组,数组中存放的是字符指针,aa数组的两个元素分别包含了5个字符,所以可以存放5个字符的一维数组的首地址,所以B选项错误。

aa数组的值是指向那两个字符串的字符指针,而不是那两个字符串,所以C选项错误。

aa本身是一个指向两个字符指针的指针,所以D选项错误。

30.有以下程序

#include

intfun(char*s)

{char*p=s;

while(*p!

=0)p++;

return(p-s);

}

main()

{printf("%d\n",fun("goodbey!

"));}

程序的输出结果是

A)0

B)6

C)7

D)8

参考答案:

C

解析】本题主要考查了函数定义及调用,以及while循环语句,执行fun函数后,首先是找到最后一个字符的地址,然后减去第一个地址得到的就是这个字符串的长度,所以本题答案为8.

31.有以下程序

#include

intfun(intn)

{inta;

if(n==1)return1;

a=n+fun(n-1);

return(a);

}

main()

{printf("%d\n",fun(5));}

程序的输出结果是

A)9

B)14

C)10

D)15

参考答案:

D

【解析】考查函数的递归调用,只需要一步一步递归调用fun函数即可,执行fun(5)=5+(4+(3+(2+fun

(1))))=15,所以答案为D选项。

32.有以下程序

#include

intd=1;

voidfun(intp)

{

intd=5;

d+=p++;

printf("%d",d);

}

main()

{

inta=3;

fun(a);

d+=a++;

printf("%d\n",d);

}

程序的输出结果是

A)84

B)96

C)94

D)85

参考答案:

A

【解析】本题主要考查局部变量和全局变量的区别,题目中函数之外定义的d为全局变量,函数fun内定义的d为局部变量,所以执行fun函数后,打印出8,执行完d+=a++;后d变为4,所以答案为A。

33.有以下程序

#include

intfun(intA)

{

intb=0;

staticintc=3;

a=(c++,b++);

return(a);

}

main()

{

inta=2,i,k;

for(i=0;i<2;i++)

k=fun(a++);

printf("%d\n",k);

}

程序的输出结果是

A)4

B)0

C)1

D)2

参考答案:

B

【解析】题目中fun函数被执行了两次,两次执行后,都是返回了函数内部的b值,所以答案为0,即B选项正确。

34.有以下程序

#include

main()

{charc[2][5]={"6934","8254"},*p[2];

inti,j,s=0;

for(i=0;i<2;i++)p[i]=c[i];

for(i=0;i<2;i++)

for(j=0;p[i][j]>0&&p[i][j]<='9';j+=2)

s=10*s+p[i][j]-'0';

printf("%d\n",s);

}

程序的输出结果是

A)693825

B)69825

C)63825

D)6385

参考答案:

D

【解析】本题的意图在于将c中两个字符串的偶数位置的数字组成一个新数,找到的四个数字分别为6、3、8、5,组成的数为6385,所以答案为D选项。

35.有以下程序

#include

#defineSQR(X)X*X

main()

{

inta=10,k=2,m=1;

a/=SQR(k+m)/SQR(k+m);

printf("%d\n",a);

}

程序的输出结果是

A)0

B)1

C)9

D)10

参考答案:

B

【解析】本题考查宏定义,宏定义只是做个简单的替换,执行SQR(k+m)/SQR(k+m)=k+m*k+m/k+m*k+m=15/2,a/=SQR(k+m)/SQR(k+m)的结果为1,选项B正确。

36.有以下程序

#include

main()

{charx=2,y=2,z;

z=(y<<1)&(x>>1);

printf("%d\n",z);

}

程序的输出结果是

A)1

B)0

C)4

D)8

参考答案:

B

解析】本题考查位运算<<、&。

y<<1为4,x>>1为1,二者与一下为0,所以B选项正确。

37.有以下程序

#include

structS{inta;intb;};

main()

{structSa,*p=&a;

a.a=99;

printf("%d\n",__________);

}

程序要求输出结构体中成员a的数据,以下不能填入横线处的内容是

A)a.a

B)*p.a

C)p->a

D)(*p).a

参考答案:

B

【解析】本题考查结构体变量的引用,题目中要求输出结构体中成员a的数据,p为指针,*p为结构体变量,那么*p.a可以表示为结构体中成员a的数据。

38.有以下程序

#include

#include

voidfun(double*p1,double*p2,double*s)

{s=(double*)calloc(1,sizeof(double));

*s=*p1+*(p2+1);

}

main()

{doublea[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;

fun(a,b,s);

printf("%5.2f\n",*s);

}

程序的输出结果是

A)21.10

B)11.10

C)12.10

D)1.10

参考答案:

D

【解析】本题考查把数组名作为函数参数,执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1.10,选项D正确。

39.

A)p=p->next;s->next=p;p->next=s;

B)s->next='\0';p=p->next;p->next=s;

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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