快速排序比希尔排序的时间复杂度大(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=cA.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次,将数组元素前后倒置,数组