全国计算机二级C语言模拟测试含详细解析 2.docx

上传人:b****3 文档编号:27527003 上传时间:2023-07-02 格式:DOCX 页数:30 大小:46.31KB
下载 相关 举报
全国计算机二级C语言模拟测试含详细解析 2.docx_第1页
第1页 / 共30页
全国计算机二级C语言模拟测试含详细解析 2.docx_第2页
第2页 / 共30页
全国计算机二级C语言模拟测试含详细解析 2.docx_第3页
第3页 / 共30页
全国计算机二级C语言模拟测试含详细解析 2.docx_第4页
第4页 / 共30页
全国计算机二级C语言模拟测试含详细解析 2.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

全国计算机二级C语言模拟测试含详细解析 2.docx

《全国计算机二级C语言模拟测试含详细解析 2.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言模拟测试含详细解析 2.docx(30页珍藏版)》请在冰豆网上搜索。

全国计算机二级C语言模拟测试含详细解析 2.docx

全国计算机二级C语言模拟测试含详细解析2

1.在最坏情况下

A.快速排序的时间复杂度比冒泡排序的时间复杂度要小

B.快速排序的时间复杂度比希尔排序的时间复杂度要小

C.希尔排序的时间复杂度比直接插入排序的时间复杂度要小

D.快速排序的时间复杂度与希尔排序的时间复杂度是一样的

正确答案:

C你的答案:

解析:

【解析】对长度为n的线性表排序,下表为常用排序方法时间复杂度:

上表中未包括希尔排序,因为希尔排序的时间效率与所取的增量序列有关,如果增量序列为:

d1=n/2,di+1=di/2,在最坏情况下,希尔排序所需要的比较次数为O(n^1.5)。

快速排序与冒泡排序的时间复杂度均为O(n^2),A选项错误。

快速排序比希尔排序的时间复杂度要大(O(n^2)>O(n^1.5)),B选项错误。

希尔排序的时间复杂度比直接插入排序的时间复杂度要小(O(n^1.5)

快速排序比希尔排序的时间复杂度大(O(n^2)>O(n^1.5)),D选项错误。

 

2.在深度为7的满二叉树中,度为2的结点个数为

A.64

B.63

C.32

D.31

正确答案:

B你的答案:

解析:

【解析】在树结构中,一个节点所拥有的后件个数称为该节点的度。

深度,定义一棵树的根节点所在的层次为1,其他节点所在的层次等于它的父节点所在的层次加1,树的最大层次称为树的深度。

满二叉树指除最后一层外,每一层上的所有节点都有两个子节点的二叉树。

一棵深度为K的满二叉树,整棵二叉树共有2^K-1个节点;满二叉树在其第i层上有2^(i-1)个节点。

在满二叉树中,只有度为2和度为0的节点。

深度为7的满二叉树,节点个数为2^7-1=127,第七层叶节点个数为2^(7-1)=64,则127-64=63,B选项正确。

 

3.设栈的顺序存储空间为S(1:

m),初始状态为top=m+1。

现经过一系列入栈与退栈运算后,top=20,则当前栈中的元素个数为

A.30

B.20

C.m-19

D.m-20

正确答案:

C你的答案:

解析:

【解析】栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。

入栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素赋予指定变量。

栈为空时,栈顶指针top=0,经过入栈和退栈运算,指针始终指向栈顶元素。

初始状态为top=m+1,当top=20时,元素依次存储在单元20:

m中,个数为m-19,C选项正确。

 

4.算法空间复杂度的度量方法是

A.算法程序的长度

B.算法所处理的数据量

C.执行算法所需要的工作单元

D.执行算法所需要的存储空间

正确答案:

D你的答案:

解析:

【解析】算法的空间复杂度是指执行这个算法所需要的内存空间,。

算法执行期间所需的存储空间包括3个部分:

输入数据所占的存储空间;程序本身所占的存储空间;算法执行过程中所需要的额外空间。

D选项正确。

 

5.下面不属于软件开发阶段任务的是

A.测试

B.可行性研究

C.设计

D.实现

正确答案:

B你的答案:

解析:

【解析】软件生命周期分为3个时期共8个阶段:

软件定义期,包括问题定义、可行性研究、需求分析;软件开发期,包括概要设计、详细设计、实现、测试;运行维护期,即运行维护阶段。

可行性研究属于软件定义期任务,B选项错误。

 

6.下面属于字符类的实例是

A.'518'

B."5"

C.'nm

D.'\n'

正确答案:

D你的答案:

解析:

【解析】字符实例的一般形式是用一对单引号括起来的一个字符。

另外ASCII码中还有一些控制字符,C语言中用转义字符的形式来书写这些常,转义字符一反斜杠(\)开始,后面跟1个字符或字符序列。

'518'单引号中有三个字符,A选项错误。

"5"双引号为字符串,B选项错误。

'nm'单引号中有两个字符,C选项错误。

'\n'为换行符,属于字符类实例,D选项正确。

 

7.某系统结构图如下图所示

该系统结构图的最大扇出数是

A.n

B.1

C.3

D.4

正确答案:

A你的答案:

解析:

【解析】扇出指的是由一个模块直接调用的其他模块数。

题干中某系统为一个模块,其扇出数目为n(n>3),功能1与功能n模块扇出数均为2,故A选项正确。

 

8.一个兴趣班可以招收多名学生,而一个学生可以参加多个兴趣班。

则实体兴趣班和实体学生之间的联系是

A.1:

1联系

B.1:

m联系

C.m:

1联系

D.m:

n联系

正确答案:

D你的答案:

解析:

【解析】一般来说,实体集之间必须通过联系来建立联接关系,分为3类:

一对一联系(1:

1)、一对多联系(1:

m)、多对多联系(m:

n)。

多个兴趣班与多个学生的关系为m:

n联系,D选项正确。

 

9.有三个关系表R、S和T如下,其中三个关系对应的关键字分别为A,B和复合关键字(A,B)。

表T的记录项(b,q,4)违反了

A.实体完整性约束

B.参照完整性约束

C.用户定义的完整性约束

D.关系完整性约束

正确答案:

B你的答案:

解析:

【解析】关系模型中可以有3类完整性约束:

实体完整性约束、参照完整性约束和用户定义的完整性约束。

实体完整性约束是指,若属性M是关系的主键,则属性M中的属性值不能为空值。

T中主键不为空,A选项错误。

参照完整性约束是指,若属性(或属性组)A是关系M的外键,它与关系M的主码相对应,则对于关系M中的每个元组在A上的值必须为:

要么取空值;要么等于关系M中某个元组的主码值。

属性B为关系S的外键,它与关系S的主键相对应,则T中元组在B上应该为空或者与S中主键值相等,题目中不相等,违反参照完整性约束,B选项正确。

此题关系中无语义要求,C选项错误。

 

10.在数据库系统中,给出数据模型在计算机上物理结构表示的是

A.概念数据模型

B.逻辑数据模型

C.物理数据模型

D.关系数据模型

正确答案:

C你的答案:

解析:

【解析】数据模型按照不同的应用层次分为以下3种类型:

概念数据模型,重于对客观世界复杂事物的描述及对它们内在联系的刻画;逻辑数据模型,是面向数据库系统的模型,着重于在数据库系统一级的实现;物理数据模型,是面向计算机物理实现的模型,此模型给出了数据模型在计算机上物理结构的表示。

C选项正确。

 

11.若有定义语句:

inta=12;,则执行语句:

a+=a-=a*a;后,a的值是

A.-264

B.552

C.144

D.264

正确答案:

A你的答案:

解析:

【解析】赋值运算结合性为自右向左,a+=a-=a*a相当于a=a-a*a,a=a+a;自右向左计算过程为a=a-a*a=-132,a=a+a=-264,A选项正确。

 

12.若在程序中变量均已定义成int类型,且已赋大于1的值,则下列选项中能正确表示代数式的表达式是

A.1.0/a/b/c

B.1/(a*b*c)

C.1.0/a*b*c

D.1/a/b/(double)c

正确答案:

A你的答案:

解析:

【解析】由于abc均大于1,所以表达式1/abc小于1,需要用浮点类型表示。

若要计算表达式值,需要使其自动转化成浮点类型,所以A选项正确。

B选项由于变量与常量均为整型,不会自动转换为浮点类型,B选项错误。

C选项表示表达式bc/a,故错误。

D选项,由于算数运算法结合性自左向右,先计算1/a,结果为0,之后的计算无论是否转换数据类型结果均为0,D选项错误。

 

13.有以下程序

#include

main()

{

intx=010,y=10;

printf("%d,%d\n",++x,y--);

}

程序运行后的输出结果是

A.10,9

B.11,10

C.010,9

D.9,10

正确答案:

D你的答案:

解析:

【解析】整型常量有3种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法,八进制整常量以O作为前缀。

自增和自减运算符的两种用法:

前置运算,运算符放在变量之前,规则是先使变量的值增(或减)1,然后以变化后表达式的值参与其他运算;后置运算,运算符放在变量之后,规则是变量先参与其他运算,然后再使变量的值增(或减)1。

x=010=8,y=10,++x先自加后取值,输出9,y--先取值输出10,再自减y=9,D选项正确。

 

14.以下选项中叙述正确的是

A.C语言的标识符可分为关键字、预定义标识符和用户标识符三类

B.C语言的标识符可分为语句、变量和关键字三类

C.C语言的标识符可分为函数名、变量和预定义标识符三类

D.C语言的标识符可分为运算符、用户标识符和关键字三类

正确答案:

A你的答案:

解析:

【解析】标识符就是一个名称,用来表示变量、常量、函数以及文件等名称。

C语言的标识符可分为关键字、预定义标识符和用户标识符三类,A选项正确,B、C、D选项错误。

合法的标识符由字母、数字和下划线组成,并且必须以字母或下划线开头。

用户标识符为用户根据编程需求自定义的标识符。

关键字是指被C语言保留的,不能用作其他用途的一些标识符,它们在程序中都代表着固定的含义,用户不可重新定义。

预定义标识符是系统已经有过定义的标识符,用户可以重新定义。

 

15.以下选项中叙述正确的是

A.函数体必须由{开始

B.C程序必须由main语句开始

C.C程序中的注释可以嵌套

D.C程序中的注释必须在一行完成

正确答案:

A你的答案:

解析:

【解析】函数体是函数首部下面的花括号内的部分,所以函数体必须由{开始,A选项正确。

一个源程序文件可以包括预处理命令、全局声明、函数定义,程序总是从main函数开始执行的,不是main语句,B选项错误。

C程序中的允许两种注释,以//开头的单行注释;以/*开始,以*/结束的块式注释,D选项错误。

函数可以嵌套,注释不能嵌套,C选项错误。

 

16.已知a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b)&&(n=c

A.1

B.0

C.2

D.-1

正确答案:

C你的答案:

解析:

【解析】"="优先级低于"<"">"。

"&&"逻辑与表达式:

exp1&&exp2,规则为:

对exp1求值,若为0,则表达式为0,且不计算exp2;若exp1非0,则求exp2值,作为表达式值。

本题计算过程为:

先判断a>b为假,m=0,整个逻辑表达式为假,不计算右表达式,n=2。

C选项正确。

 

17.有以下程序

#include

main()

{

intx=23;

do

{

printf("%2d\n",x--);

}while(!

x);

}

程序的执行结果是

A.输出321

B.输出23

C.不输出任何内容

D.陷入无限循环

正确答案:

B你的答案:

解析:

【解析】"%2d"表示输出的整型变量占2列。

程序执行过程为:

输出x为23,之后x自减得x=22,!

x为假(0),while条件不成立,退出循环。

B选项正确。

 

18.有以下程序

#include

main()

{

charc;

while((c=getchar())!

='\n')

{

switch(c-'2')

{

case0:

case1:

putchar(c+4);

case2:

putchar(c+4);break;

case3:

putchar(c+3);

default:

putchar(c+2);break;

}

}

printf("\n");

}

程序运行后从第一列开始输入以下数据

2473<回车>

程序的输出结果是

A.668977

B.4444

C.6677877

D.68766

正确答案:

A你的答案:

解析:

【解析】本题执行过程为:

输入c='2',c-'2'=0,首先匹配case0,依次输出6,6,后执行break语句,跳出分支结构;输入c='4',c-'2'=2,匹配case2,输出8,执行break语句,跳出分支结构;输入c='7',c-'2'=5,匹配default,输出9,执行break语句,跳出分支结构;输入c='3',c-'2'=1,匹配case1,依次输出7,7,执行break语句,跳出分支结构。

输入回车,结束循环。

A选项正确。

 

19.有以下程序

#include

main()

{

inti=0,sum=1;

do

{

sum+=i++;

}while(i<6);

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

}

程序的输出结果是

A.22

B.18

C.20

D.16

正确答案:

D你的答案:

解析:

【解析】语句sum+=i++;相当于sum+=i;i++;程序执行过程为:

sum=1,i=1;sum=2,i=2;sum=4,i=3;sum=7,i=4;sum=11,i=5;sum=16,i=6;退出循环。

D选项正确。

 

20.有以下程序段,若变量已正确定义并赋值

if(a>b)printf("x=%d,",x);

elseprintf("y=%d,",y);

if(a<=b)i++;

elsej++;

则与此程序段功能相同的选项是

A.

if(a>b){printf("x=%d,",x);j++;}

else{printf("y=%d,",y);i++;}

B.

if(a>b){printf("x=%d,",x);i++;}

else{printf("y=%d,",y);j++;}

C.

if(a<=b){printf("x=%d,",x);i++;}

else{printf("y=%d,",y);j++;}

D.

if(a>=b){printf("x=%d,",x);i++;}

else{printf("y=%d,",y);j++;}

正确答案:

A你的答案:

解析:

【解析】题目中程序段执行过程为:

如果a>b,输出x,否则输出y;如果a<=b,i加1,否则j加1。

A选项为:

如果a>b,输出x且j加1,否则输出y且i加1,与题目中功能相同,A选项正确。

B选项为:

如果a>b,输出x且i加1,否则输出y且j加1,与题目中功能不相同,B选项错误。

C选项为:

如果a<=b,输出x且i加1,否则输出y且j加1,与题目中功能不相同,C选项错误。

D选项判断条件为a>=b,多了a=b,故D选项错误。

 

21.以下程序的功能是判断输入的一个整数是否能被3或7整除,若能整除,输出YES,否则输出NO。

在下划线处应填入的选项是

#include

main()

{

intk;

printf("Enteraintnumber:

");scanf("%d",&k);

if________printf("YES\n");

elseprintf("NO\n");

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

}

A.((k%3==0)||(k%7==0))

B.(k/3==0)||(k/7==0)

C.((k%3=0)||(k%7=0))

D.((k%3==0)&&(k%7==0))

正确答案:

A你的答案:

解析:

【解析】求余运算符为%,是否能被3或7整除表达式为(k%3==0)||(k%7==0),A选项正确。

B选项“/”为除号,错误。

C选项中“=”为赋值运算符,不是逻辑运算符“==”,错误。

D选项“&&”为逻辑与,本题应该为逻辑或“||”,错误。

 

22.以下选项中,不能对主函数中变量i和j的值进行交换的程序是

A.

#include

voidswap(int*p,int*q)

{int*t;

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

}

main()

{inti=10,j=20,*a=&i,*b=&j;

swap(a,b);printf("i=%dj=%d\n",i,j);

}

B.

#include

voidswap(int*p,int*q)

{intt;

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

}

main()

{inti=10,j=20,*a=&i,*b=&j;

swap(a,b);printf("i=%dj=%d\n",i,j);

}

C.

#include

#include

voidswap(int*p,int*q)

{int*t;

t=(int*)malloc(sizeof(int));

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

free(t);

}

main()

{inti=10,j=20;

swap(&i,&j);printf("i=%dj=%d\n",i,j);

}

D.

#include

voidswap(int*p,int*q)

{intt;

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

}

main()

{inti=10,j=20,*x=&i,*y=&j;

swap(x,y);printf("i=%dj=%d\n",i,j);

}

正确答案:

A你的答案:

解析:

【解析】A选项函数内定义了指针,但并未给指针开辟空间,程序错误,故选择A选项。

B选项调用函数传入的是i与j地址,函数体内交换是地址内元素,临时变量为整型变量,能实现i与j值交换。

C选项调用函数传入的是i与j地址,函数体内交换是地址内元素,临时变量为整型指针,且已正确开辟内存,能实现i与j值交换。

D选项与B选项相同,能实现i与j值交换。

 

23.有以下程序

#include

main()

{

inta[10]={1,3,5,7,11,13,17},*p=a;

printf("%d,",*(p++));

printf("%d\n",*(++p));

}

程序运行后的输出结果是

A.3,7

B.3,5

C.1,5

D.1,3

正确答案:

C你的答案:

解析:

【解析】程序执行过程:

指针p指向数组第一个元素;*(p++)先取p,输出p指向的元素1,之后p加1,指向数组第二个元素;*(++p),指针p加1指向数组第三个元素,之后输出所指元素5,C选项正确。

 

24.有以下程序

#include

main()

{

int*p,x=100;

p=&x;x=*p+10;

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

}

程序运行后的输出结果是

A.110

B.120

C.100

D.90

正确答案:

A你的答案:

解析:

【解析】程序执行过程为:

定义指针p,指向变量x,x=(*p)+10=110,输出110,A选项正确。

 

25.以下程序中给数组所有元素输入数据,请从选项中选择正确的答案填入下划线处

#include

main()

{

inta[10],i=0;

while(i<10)scanf("%d",_________);

}

A.a+(i++)

B.&a[i+1]

C.a+i

D.&a(i++)

正确答案:

A你的答案:

解析:

【解析】A选项a为数组首地址,i++先取i值再加1,scanf读入的数据依次存放在数组中,A选项正确。

B选项,第一个数据读入a[1],最后一次循环引用a[10],数组越界,B选项错误。

C选项,控制变量i没有依次加1,无法结束循环,也无法对整个数组赋值,输入的数全是a[0],C选项错误。

D选项数组元素引用错误,数组元素引用为[],不是(),D选项错误。

 

26.有以下程序

#include

voidfun(intx,inty,int*z)

{*z=y-x;}

main()

{

inta,b,c;

fun(10,5,&a);fun(7,a,&b);fun(a,b,&c);

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

}

程序运行后的输出结果是

A.5,2,3

B.-5,-12,-7

C.-5,-12,-17

D.5,-2,-7

正确答案:

B你的答案:

解析:

【解析】程序执行过程为:

调用函数fun(10,5,&a),将变量a地址传入函数,a=5-10=-5;调用函数fun(7,a,&b),将变量b地址传入函数,b=-5-7=-12;调用函数fun(a,b,&c),将变量c地址传入函数,c=-12-(-5)=-7。

输出-5,-12,-7,B选项正确。

 

27.有以下程序

#include

voidfun(int*s,intn1,intn2)

{

inti,j,t;

i=n1;j=n2;

while(i

{t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;

i++;j--;

}

}

main()

{

inta[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a;

fun(p,0,3);fun(p,4,9);fun(p,0,9);

for(i=0;i<10;i++)printf("%d",*(a+i));

printf("\n");

}

程序运行后的输出结果是

A.5678901234

B.0987654321

C.4321098765

D.0987651234

正确答案:

A你的答案:

解析:

【解析】程序执行过程为:

调用函数fun(p,0,3),将数组a首地址传入函数,循环执行2次,将数组前4个元素前后倒置,数组a={4,3,2,1,5,6,7,8,9,0};调用函数fun(p,4,9),将数组a首地址传入函数,循环执行3次,将数组第5个到第10个元素前后倒置,数组a={4,3,2,1,0,9,8,7,6,5};调用函数fun(p,0,9),将数组a首地址传入函数,循环执行5次,将数组元素前后倒置,数组

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

当前位置:首页 > 幼儿教育 > 少儿英语

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

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