【正确答案】y>30&&y<50
【你的答案】
本题分数2分
你的得分
修改分数
第2题已知int k,x;则语句for(k=0,x=0;k<=9 && x!
=10;k++) x+=2;执行后k的值是___。
【正确答案】(P10)5
【你的答案】
本题分数2分
你的得分
修改分数
第3题已知 int a[10]={1,2,3,5,6};则a[a[1]]=___。
【正确答案】(P45)3
【你的答案】
本题分数2分
你的得分
修改分数
第4题下列C语言程序段的输出结果是___。
int x=2,b[10]={5,6,7,8},*p=b;
printf("%d,%d\n",b[6],p[x]);
【正确答案】(P100)0,7
【你的答案】
本题分数2分
你的得分
修改分数
第5题数据结构研究的主要内容包括数据的逻辑结构、___以及他们之间的相互运算。
【正确答案】(P124)物理结构(存储结构)
【你的答案】
本题分数2分
你的得分
修改分数
第6题循环双链表节点结构为(见下图)
在指针q所指节点前面插入一个节点t的操作是:
t->prior=q->prior;
t->next=q;
___;
q->prior=t;
【正确答案】(P136)q->prior->next=t
【你的答案】
本题分数2分
你的得分
修改分数
第7题设有一个10×10的对称矩阵A,采用下三角压缩存储方式,以行序为主,A[0][0]的存储地址为100,每个元素占一个地址空间,则A[3][2]的地址是___。
【正确答案】(P155~156)108
【你的答案】
本题分数2分
你的得分
修改分数
第8题在有向图中,以顶点V为终点的边的数目称为V的___。
【正确答案】(P178)入度
【你的答案】
本题分数2分
你的得分
修改分数
第9题将一棵有100个节点的完全二叉树从根这一层开始,每一层从左到右依次对节点进行编号,根结点的编号为1,则编号为49的节点的左孩子的编号是___。
【正确答案】(P163)98
【你的答案】
本题分数2分
你的得分
修改分数
第10题软件工程包括三个要素,分别为方法、___和过程。
【正确答案】(P211)工具
【你的答案】
、解答题(本大题共4小题,每小题4分,共16分)
第1题用盒图(N_S图)画出结构化程序设计的三种基本结构。
【正确答案】
【你的答案】
本题分数4分
你的得分
修改分数
第2题对于图G-1
(1)从顶点1出发,按邻接顶点序号由小到大顺序给出广度优先遍历的顶点序列。
(2)给出用克鲁斯卡尔法构造的最小生成树。
【正确答案】(P182、184)
(1)广度优先遍历的顶点序列:
1256734(2分)
(2)最小生成树:
(2分)
[解析]克鲁斯卡尔法构造的最小生成树的基本思路是:
不断找出图中权值最小的边,逐个连通各边。
本题求解过程依次为(1,6),(2,3),(1,7),然后如果选(7,6)则形成回路,因此不选,继续选择(2,4),(2,5)。
此时各边都已连通,最小生成树构造完毕。
【你的答案】
本题分数4分
你的得分
修改分数
第3题假设字符a,b,c,d,e,f使用频率分别是0.07,0.09,0.13,0.21,0.23,0.27,构造哈夫曼编码树(权值小的为左子树,权值大的为右子树),并根据哈夫曼编码树写出a,b,c,d,e,f的哈夫曼编码。
【正确答案】(P172)
(1)哈夫曼编码树:
(2分)
(2)哈夫曼编码:
a:
1110 b:
1111 c:
110 d:
00 e:
01 f:
10(2分)
【你的答案】
本题分数4分
你的得分
修改分数
第4题已知一数值序列为{33,61,12,75,8,54,41},请分别写出按升序进行排序时,直接选择排序、直接插入排序第一趟结束后的数值序列。
【正确答案】(P201、205)
(1)直接选择排序 8,61,12,75,33,54,41(2分)
(2)直接插入排序 33,61,12,75,8,54,41(2分)
[解析]
(1)直接选择排序的基本思想是:
将未排好序的序列中最小元素依次放到已排好序的序列的一端。
第一趟找出最小值为8,与33交换位置。
(2)直接插入排序的基本思想是:
从未排序序列中依次取出元素与已排序序列(初始时有1个元素)中的元素进行比较,将其放入已排序序列的正确位置。
第一趟插入61,与已排序序列中的33比较,61>33,插入到33后,已排好序列为[33,61]。
【你的答案】
四、程序分析题(本大题共4小题,每小题4分,共16分)
第1题写出下列程序的运行结果。
main( )
{int j,a[5]={10,11,12,13,14},*p=&a[1];
for(j=1;j<5;j++)
{if(j%2) printf("%5d",a[j]);
else continue;
printf("%5d\n",*p++);
}
}
【正确答案】(P101)11 11(2分)
13 12(2分)
[解析]指针变量p指向a[1],在for循环中,循环体共执行4次。
进入循环体,如果j不是2的倍数,则输出a[j]的值,之后输出p指针所指向变量中的内容,p指针后移1位,如果j是2的倍数,则进入下一次循环。
j=1,第1次进入循环体,输出a[1],为11,此时p指向a[1],输出*p,也为11,然后p指针后移,指向a[2];j=2,第2次进入循环体,j%2==0,执行else子句continue,进入下一次循环;j=3,第3次进入循环体,输出a[3],为13,此时p指向a[2],输出*p,为12,然后p指针后移,指向a[3];j=4,第4次进入循环体,j%2==0,执行else子句continue,进入下一次循环;j=5,循环条件j<5不成立,退出循环。
【你的答案】
本题分数4分
你的得分
修改分数
第2题写出下列程序的运行结果。
fun(int a)
{static int x=5;
int y=0,t;
x++;y++;
t=a+x+y;
return (t);
}
main( )
{int a=2,b=3;
printf("%d\n",fun(a));
printf("%d\n",fun(b));
}
【正确答案】(P81)9(2分)
11(2分)
[解析]static int x=5; 将x说明为静态局部变量,x的值在函数结束后不消失,在下次调用该函数时,变量具有上次函数调用结束时的值。
第1次调用fun(a),则函数中,执行了x++;y++;t=a+x+y;t=2+6+1,t=9;第2次调用fun(b),则函数中,x保留上次调用的值6,执行了x++;y++;t=a+x+y;t=3+7+1,t=11。
【你的答案】
本题分数4分
你的得分
修改分数
第3题下面程序的功能是:
将有15个数据元素的整型数组的最大值与末元素对调后输出,填空完成程序。
【正确答案】(P46)
①maxmax)(2分)
②x[14]=max(2分)
[解析]通过循环语句,依次比较各个元素,找出最大值。
用max存储当前比较过的数中的最大值,一旦发现max小于当前比较的数,则将大数存于max中,最大数的下标保存在变量n中,循环结束,max中存储的就是数组中最大的值。
退出循环,将最大数与x[14]元素值对调。
【你的答案】
本题分数4分
你的得分
修改分数
第4题下列算法的功能是:
将循环队列队首元素的值放入变量e后删除队首元素,操作成功返回1,否则返回0;QUEUE表示循环队列的数据结构。
填空完成算法。
【正确答案】(P152)
①Q->head==Q->tail(2分)
②(Q->head+1)%100(2分)
[解析]首先判断是否为空队列,如果Q->head==Q->tail,为空队列,则返回0。
否则,将队首元素值放入变量e中,队首元素指针指向新的队首元素,因为是循环队列,所以Q->head =(Q->head+1)%100。
【你的答案】
五、程序设计题(本大题共2小题,每小题9分,共18分)
第1题编写C语言程序实现:
从键盘上输入10个学生某门课的成绩,计算平均成绩,统计并输出所有高于平均分的学生成绩及人数。
av=av+x[i];}
av=av/10;
for(i=0;i<10;i++)
if(x[i]>av)
{n++;printf("%7.2f\n",x[i]);}
printf("%d\n",n);
}
[评分参考]定义正确3分,输入正确1分、平均值计算正确2分,输出正确3分。
"/>
【正确答案】(P45)
main( )
{int i,n=0;
float x[10],av=0;
for(i=0;i<10;i++)
{ scanf("%f",&x[i]);
av=av+x[i];}
av=av/10;
for(i=0;i<10;i++)
if(x[i]>av)
{n++;printf("%7.2f\n",x[i]);}
printf("%d\n",n);
}
[评分参考]定义正确3分,输入正确1分、平均值计算正确2分,输出正确3分。
【你的答案】
本题分数9分
你的得分
修改分数
第2题设一棵二叉树以二叉链表来存储,节点结构为(见下图):
定义此存储结构的数据类型,用C语言编写一个递归函数,计算此二叉树上度为1的节点个数。
【正确答案】(P163)
[答案1]
typedef struct node
{int data;
struct node*Lchild,*Rchild;
}NODE;
void leaf(NODE*root)
{if(root!
=NULL)
{if((root->Lchild!
=NULL&&root->Rchild==NULL)‖
(root->Lchild==NULL&&root->Rchild!
=NULL))
n=n+1;
leaf(root->Lchild);
leaf(root->Rchild);
}
}
[答案2]
struct node
{ int data;
struct node *Lchild, *Rchild;};
void leaf(struct node *root)
{if(root!
=NULL)
{if((root->Lchild!
=NULL&&root->Rchild==NULL)‖
(root->Lchild==NULL&&root->Rchild!
=NULL))
n=n+1;
leaf(root-Lchild);
leaf(root->Rchild);
}
}
[评分参考]结构定义正确2分,函数定义正确2分,条件正确3分,递归正确2分。
【你的答案】