}
voidmain()
{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(aa,10);
for(i=0;i<10;i++)printf("%d,",aa[i]);
printf("\n");
}
程序运行后的输出结果是
A.1,2,3,4,5,6,7,8,9,10;B.10,9,8,7,6,5,4,3,2,1;
C.9,2,7,4,5,6,3,8,1,10;D.1,10,3,8,5,6,7,4,9,2;
28.有以下程序
voidmain()
{inti=0,s=0;
for(;;)
{
if(i==3||i==5)continue;
if(i==6)break;
i++;
s+=I;
}
printf("%d\n",s)
}
A.10B.13C.21D.程序进入死循环
29.有以下程序
voidmain()
{intx[8]={8,7,6,5,0,0},*s;
s=x+3;
printf("c%d\n",s[2]);
}
程序执行后的输出结果是
A.随机值B.0C.5D.6
30.设有以下定义和语句
inta[3][2]={1,2,3,4,5,6},*p[3]
p[0]=a[1];
则*(p[0]+1)所代表的数组元素是
A.a[0][1]B.a[1][0]Ca[1][1]D.a[1][2]
二、程序阅读题(本大题共4小题,每小题5分,共20分)
阅读下列程序,将输出结果写到答题纸的相应位置。
写在试卷上不得分
31.#include
voidmain()
{chara[]="Iamaboy.",b[20];
inti,j;
for(i=0,j=0;*(a+i)!
=’\0’;i++)
{
if(*(a+i)==’’)continue;
*(b+j)=*(a+i);
j=j+1;
}
*(b+j)=’\0’;
printf("\n%s\n",a);
printf("%s\n",b)
}
32.#include
#defineMAX(x,y)(x)>(y)?
(x):
(y)
voidmain()
{inta=5,b=2,c=3,d=3,t;
t=MAX(a+b,c+d)*10;
printf("%d\n",t)
}
33.##include
voidmain()
{chara[]="123456789",*p;
inti=0;
p=a;
while(*p)
{if(i%2==0)*p’*’;
p++;i++;
}
puts(a);
}
34.#include
typedefstructsudent{charname[10];
longsno;
floatscore;
}STU;
voidmain()
{STUa={"Zhangsan",2001,95};
{"Shangxian",2002,90};
{"Anhua",2003,95},d,*p=&d;
d=a;
if(strcmp(a.name,b.name)>0)d=b;
if(strcmp(c.name,d.name)>0)d=c;
printf("%d%d\n",d.sno,p->name);
}
三、完善下列程序(本大题共3小题,每空2分,共20分)
请在答题纸相应的位置上填上正确答案。
写在试卷上不得分。
35.以下为递归法球n!
的函数
floatfac(intn)
{floatf;
if(n<0)
printf("error!
");
elseif(n==0||n==1)
else
return()
}
36.以下函数把b字符串链接到a字符串的后面,并返回操作后a字符串的长度
streen(chara[].charb[])
{intnum=0,n=0;
while(*(a+num)!
=)num++;
while(b[n]){*(a+num)=b[n];num++;;}
return()
}
37.从键盘上输入0-9十个数字组成的字符串存入数组S中,然后求数组S中0-9的个数分别是多少,最后输出。
voidfun(char*str,int*num)
{
intI;
while()
{if(*str<=’9’&&)
str++;
}
}
voidmain()
{chars[81];
staticintnum[10];
inti;
printf("\nPleaseenter1linestrings(0——9):
\n");
scanf("%s",)
fun(s,num);
for(i=0;i<10;i++)
printf("%d:
%3d\n",I,num[1]);
}
第二部分数据机构(共100分)
一、单项选择题(本大题共12小题,每小题2分,共24分)
在每小题列出的四个备选项中只有一个符合题目要求,请将正确答案代码填写在答题纸相应的位置上。
写在试卷上不得分。
1.在待排序记录已基本有序的前提下,下述排序方法中效率最高的是
A.直接插入排序B.简单选择排序
C.快速排序D.归并排序
2.与数据的存储结构无关的术语是
A.栈B.必散列表
C.线索二叉树D.双向链表
3.有个元素6,5,4,3,2,1按排序进栈,下列不合法的出栈序列是
A.5,4,3,6,1,2B.4,5,3,1,2,6
C.3,4,6,5,2,1D.2,3,4,1,5,6
4.排序存储方式的优点是
A.存储密度大B.插入运算方便
C.删除运算方便D.可方便地用于各种逻辑结构的存储表示
5.对于只在表的首、尾继续拧插入操作的线性表,宜采用的存储结构为
A.顺序表B.用头指针表示的单循环链表
C.用尾指针表示的单循环链表D.单链表
6.对包含n个元素的散列表进行查找,平均查找长度
A.为O(logn)B.为O(n)
C.为O(nlogn)D.不直接依赖于n
7.具有对称邻接矩阵的图是
A.有向图B.无向图C.AOV图D.AOE图
8.设表(a1,a2,a3,……,a32)中的元素已经按递增顺序排好序,用二分法检索与一个给定的值k相等的元素,若a1A.3B.4C.5D.6
9.具有3个结点的不同二叉树的数目是
A.2B.3C.4D.5
10.对二叉树的结点从1开始编号,要求每个结点的编号大约其左右孩子的编号,同一个结点的左右孩子中,其左孩子的编号大于其有孩子的编号,则可采用的编号方法
A.先序遍历B.中序遍历C.后续遍历D.层次遍历
11.在长度为n的顺序表的第i(1≤i≤n+1)个位置上插入一个元素,需要移动元素的次数
A.n-i+1B.n-1C.iD.i-1
12.对于一个无向图,下列说法正确的是
A.每个顶点的入度大于出度
B.每个顶点的度等于其入度与出度之和
C.无向图的邻接矩阵一定是对称矩阵
D.有向图中所有顶点的入度之和大约所有顶点的出度之和
二、填空题(本大题共10小题,每空2分,共22分)
请在答题纸相应的位置上填上正确答案。
写在试卷上不得分。
13.设一哈希表表长M为100,用除余法构造哈希函数,即H(K)%P,其中K是关键字,P≤M,为使函数具有较好性能,P应选
14.N个结点的二叉树采用二叉链表存放,共有空指针域个数为
15.若一个算法中的语句频度之和为T(n)=3720n+4nlogn,则算法的时间复杂度为
16.已知有向图的邻接矩阵,要计算第1号顶点的入度,计算方法是将
累加。
17.深度为6(根深度为1)的二叉树至多有个结点。
18.一棵具有n个叶子结点的哈夫曼树中,结点总数为
19.设单链表结点的定义如下:
strucenode{
intdata;
structnode*next;
}*p,*s,*t;
要在一个单链表中p所指结点之后插入一个子链表,子链表第一个结点的地址为s,子链表最后一个结点的地址为t,则应执行的操作:
和
20.设单链表结点的定义如19题,现有一个含头结点的单链表,头指针为head,指向头结点,则判断该单链表是否为空表的条件为
21.n个顶点的联通无向图至少有条边
22.在顺序存储结构的线性表中插入一个元素,平均需要移动
个元素
三、应用题(本大题共4小题,每小题8分,共32分)
请在答题纸相应的位置上填上正确答案。
写在试卷上不得分。
23.已知有向图如图所示;
(1)写出顶点B的度(2分);
(2)写出从顶点D开始的两个广度优先搜索序列(2分)
(3)画出该图的邻接表(4分)
24.已知二叉树的中序序列为DBGEAFC,后序列为DGEBFCA,画出对应的叉树
25.如图表示一个地区的通讯网,边表示城市间的通讯线路,边上的权值表示架设线路花费的代价,请画出该图的最小支撑树,并计算最小支撑树的权
26.设一个闭散列表具有10个桶,散列函数H(x)=x%7,若元素输入顺序为:
{50,42,85,22,76,19,34,68},解决冲突用线性重新散列技术,要求画出构造好的散列表。
四、算法设计(本大题共2小题,第25小题10分,第26小题12分,共22分)请在答题纸相应的位置上填下正确的答案。
写在试卷上不得分。
27.二叉搜索树T用二叉链表存储结构表示,其中各元素的值均不相同。
编写算法,按递减顺序打印T中各元素的值。
树结点结构定义如下:
typedefintTreeItem
typedefstructbtnode*btlink;
typedefstructbtnode;{
TreeItemdata;
btlinkleft,right;
}BTNODE;
28.阅读下面程序,其功能是调整线性表中的元素,将所有奇数放在表的左边,将所有偶数放在表的右边。
请填空完成该程序(每空1分,共12分)
#defineMAXSIZE100
typedefintElemType;
typedefstruct;{
ElemTypeelem[MAXSIZE];/*用于保存线性表各元素值*/
intlast;/*用于保存elem数组末元素下标*/
}SeqList;
voidAdjustSqList(SqList*L){
ElemTypetemp;
inti=0,j=
(1);
while(iwhile(L->elem[
(2)]%2!
=0&&(3))
i++;
while(L->elem[(4)]%2==0&&(5))
j++;
if((6))break;
temp=L->elem[i];
L->elem[i]=(7);
L->elem[j]=(8);
}
}
voidmain()
SeqList(9);
intr,I;
sq=((10))malloc(sizeof(SeqList));
printf("请输入线性表的长度:
");
scanf("%d",&r);
sq->last=(11);
printf("请输入线性表的各元素值:
\n");
for(i=0;i<=sq->;i++)scanf("%d",&(12));
AdjustSqlist(sq);
}
第三部分关系数据库与SQL语言(共100分)
一、单项选择题(本大题共20小题,每小题2分,共40分)
在每小题列出的四个备选项中只有一个符合题目要求,请将正确答案代码填写在答题纸相应的位置上。
写在试卷上不得分。
1.数据库(DB)、数据库系统(DBS)和数据库管理系统(DBMS)三者的关系是
A.DBS包括DB和DBMS
B.DBMS包括DB和DBS
C.DB包括DBS和DBMS
D.DBS就是DBMS,包括DB
2.在关系理论中称为”元组”的概念,在关系数据库中称为
A.实体B.属性C.行D.字段
3.在关系数据库中,能对数据进行查询、插入、修改和删除操作的功能称为
A.数据定义功能B.数据管理功能
C.数据控制功能D.数据操纵功能
4.下列可用来实现表结构修改的命令是
A.ALTERB.CREATEC.UPDATED.DROP
5.关系数据库中,用户共同视图是数据库三级模式结构中的
A.模式B.概念模式C,外模式D.存储模式
6.在一个关系中,有可能用来唯一标识一个元组的对象,我们称这个对象为
A.主码B.候选码C.主属性D.外码
7.下列说法正确的是
A.几个域做笛卡尔积运算的结果是一个集合,几个关系做广义笛卡尔积运算的结果不是一个集合
B.几个域做笛卡尔积运算的结果不是一个集合,几个关系做广义笛卡尔积运算的结果是一个集合
C.几个域做笛卡尔积运算,