程序员考试下午Word文档格式.docx
《程序员考试下午Word文档格式.docx》由会员分享,可在线阅读,更多相关《程序员考试下午Word文档格式.docx(6页珍藏版)》请在冰豆网上搜索。
(1)课程信息包括:
课程编号、课程名称、实验学时、授课学期和开课的班级等信息;
实验信息记录该课程的实验进度信息,包括:
实验名、实验类型、学时、安排周次等信息,如表2-1所示。
表2-1课程及实验信息
(2)以课程为单位制定实验安排计划信息,包括:
实验地点,实验时间、实验员等信息,实验计划如表2-2所示。
(3)由实验员给出每个学生每次实验的成绩,包括:
实验名、学号、姓名、班级、实验成绩等信息,实验成绩如表2-3所示。
(4)学生的实验课程总成绩根据每次实验的成绩以及每次实验的难度来计算。
【概念模型设计】
根据需求阶段收集的信息,设计的实体联系图(不完整)如图2-1所示。
【逻辑结构设计】
根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):
课程(课程编号,课程名称,授课院系,实验学时)
班级(班级号,专业,所属系)
开课情况(
(1)
,授课学期)
实验(
(2)
,实验类型,难度,学时,安排周次)
实验计划(
(3)
,实验时间,人数)
实验员(
(4)
,级别)
实验室(实验室编号,地点,开放时间,可容纳人数,实验类型)
学生(
(5)
,姓名,年龄,性别)
实验成绩(
(6)
,实验成绩,评分实验员)
【问题1】
补充图2-1中的联系和联系的类型。
【问题2】
根据图2-1,将逻辑结构设计阶段生成的关系模式中的空
(1)~(6)补充完整并用下划线指出这六个关系模式的主键。
如果需要记录课程的授课教师,新增加“授课教师”实体。
请对图2-1进行修改,画出修改后的实体间联系和联系的类型。
试题三(共15分)
某运输公司决定为新的售票机开发车票销售的控制软件。
图3-1给出了售票机的面板示意图以及相关的控制部件。
售票机相关部件的作用如下所述:
(1)目的地键盘用来输入行程目的地的代码(例如,200表示总站)。
(2)乘客可以通过车票键盘选择车票种类(单程票、多次往返票和座席种类)。
(3)继续/取消键盘上的取消按钮用于取消购票过程,继续按钮允许乘客连续购买多张票。
(4)显示屏显示所有的系统输出和用户提示信息。
(5)插卡口接受MCard(现金卡),硬币口和纸币槽接受现金。
(6)打印机用于输出车票。
假设乘客总是支付恰好需要的金额而无需找零,售票机的维护工作(取回现金、放入空白车票等)由服务技术人员完成。
系统采用面向对象方法开发,使用UML进行建模。
系统的顶层用例图和类图分别如图3-2和图3-3所示。
(5分)
根据说明中的描述,给出图3-2中A1和A2所对应的参与者,U1所对应的用例,以及
(1)、
(2)处所对应的关系。
(7分)
根据说明中的描述,给出图3-3中缺少的C1~C4所对应的类名以及(3)~(6)处所对应的多重度。
图3-3中的类图设计采用了中介者(Mediator)设计模式,请说明该模式的内涵
试题四(共15分)
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
对有向图进行拓扑排序的方法是:
(1)初始时拓扑序列为空;
(2)任意选择一个入度为0的顶点,将其放入拓扑序列中,同时从图中删除该顶点以及从该顶点出发的弧;
(3)重复
(2),直到不存在入度为0的顶点为止(若所有顶点都进入拓扑序列则完成拓扑排序,否则由于有向图中存在回路无法完成拓扑排序)。
函数int*TopSort(LinkedDigraphG)的功能是对有向图G中的顶点进行拓扑排序,返回拓扑序列中的顶点编号序列,若不能完成拓扑排序,则返回空指针。
其中,图G中的顶点从1开始依次编号,顶点序列为v1,v2,…,vn,图G采用邻接表示,其数据类型定义如下:
#defineMAXVNUM50
/*最大顶点数*/
typedefstructArcNode{
/*表结点类型*/
intadjvex;
/*邻接顶点编号*/
structArcNode*nextarc;
/*指示下一个邻接顶点*/
}ArcNode;
typedefstructAdjList{
/*头结点类型*/
charvdata;
/*顶点的数据信息*/
ArcNode*firstarc;
/*指向邻接表的第一个表结点*/
}AdjList;
typedefstructLinkedDigraph{
/*图的类型*/
intn;
/*图中顶点个数*/
AdjListVhead[MAXVNUM];
/*所有顶点的头结点数组*/
}LinkedDigraph;
例如,某有向图G如图4-1所示,其邻接表如图4-2所示。
函数TopSort中用到了队列结构(Queue的定义省略),实现队列基本操作的函数原型如下表所示:
【C代码】
int*TopSort(LinkedDigraphG){
ArcNode*p;
/*临时指针,指示表结点*/
QueueQ;
/*临时队列,保存入度为0的顶点编号*/
intk=0;
/*临时变量,用作数组元素的下标*/
intj=0,w=0;
/*临时变量,用作顶点编号*/
int*topOrder,*inDegree;
topOrder=(int*)malloc(+1)*sizeof(int));
/*存储拓扑序列中的顶点编号*/
inDegree=(int*)malloc(+1)*sizeof(int));
/*存储图G中各顶点的入度*/
if(!
inDegree||!
topOrder)returnNULL;
(1)
;
/*构造一个空队列*/
for(j=1;
j<
=;
j++){
/*初始化*/
topOrder[j]=0;
inDegree[j]=0;
}
for(j=1;
j++)
/*求图G中各顶点的入度*/
for(p=[j].firstarc;
p;
p=p->
nextarc)
inDegree[p->
adjvex]+=1;
/*将图G中入度为0的顶点保存在队列中*/
if(0==inDegree[j])EnQueue(&
Q,j);
while(!
IsEmpty(Q)){
(2);
/*队头顶点出队列并用w保存该顶点的编号*/
topOrder[k++]=w;
/*将顶点w的所有邻接顶点的入度减1(模拟删除顶点w及从该顶点出发的弧的操作)*/
for(p=[w].firstarc;
nextarc){
(3)-=1;
if(0==(4))EnQueue(&
Q,p->
adjvex);
}/*for*/
}/*while*/
free(inDegree);
if(
)
returnNULL;
returntopOrder;
}/*TopSort*/
(9分)
根据以上说明和C代码,填充C代码中的空
(1)~(5)。
(2分)
对于图4-1所示的有向图G,写出函数TopSort执行后得到的拓扑序列。
若将函数TopSort中的队列改为栈,写出函数TopSort执行后得到的拓扑序列。
(4分)
设某有向无环图的顶点个数为n、弧数为e,那么用邻接表存储该图时,实现上述拓扑排序算法的函数TopSort的时间复杂度是(6)。
若有向图采用邻接矩阵表示(例如,图4-1所示有向图的邻接矩阵如图4-3所示),且将函数TopSort中有关邻接表的操作修改为针对邻接矩阵的操作,那么对于有n个顶点、e条弧的有向无环图,实现上述拓扑排序算法的时间复杂度是(7)。
试题五(共15分)
阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。
需要模拟的飞机种类及其特征如表5-1所示。
为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计的类图如图5-1所示。
图5-1中,AirCraft为抽象类,描述了抽象的飞机,而类Helicopter、AirPlane、Fighter和Harrier分别描述具体的飞机种类,方法fly()和takeOff()分别表示不同飞机都具有飞行特征和起飞特征;
类FlyBehavior与TakeOffBehavior为抽象类,分别用于表示抽象的飞行为与起飞行为;
类SubSonicFly与SuperSonicFly分别描述亚音速飞行和超音速飞行的行为;
类VerticalTakeOff与LongDistanceTakeOff分别描述垂直起飞与长距离起飞的行为。
【C++代码】
#include<
iostream>
usingnamespacestd;
classFlyBehavior{
public:
virtualvoidfly()=0;
};
classSubSonicFly:
publicFlyBehavior{
public:
voidfly(){cout<
<
"
亚音速飞行!
"
<
endl;
}
classSuperSonicFly:
超音速飞行!
classTakeOffBehavior{
virtualvoidtakeOff()=0;
classVerticalTakeOff:
publicTakeOffBehavior{
voidtakeOff(){cout<
垂直起飞!
classLongDistanceTakeOff:
publicTakeOffBehavior{
voidtakeOff(){cout<
长距离起飞!
classAirCraft{
protected:
(2)
voidfly(){(3);
voidtakeOff(){(4);
};
classHelicopter:
publicAirCraft{
Helicopter(){
flyBehavior=new(5);
takeOffBehavior=new(6);
(7){
if(!
flyBehavior)deleteflyBehavior;
takeOffBehavior)deletetakeOffBehavior;
//
其它代码省略
试题六(共15分)
阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
需要模拟的飞机种类及其特征如表6-1所示。
为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计的类图如图6-1所示。
图6-1中,AirCraft为抽象类,描述了抽象的飞机,而类Helicopter、AirPlane、Fighter和Harrier分别描述具体的飞机种类,方法fly()和takeOff()分别表示不同飞机都具有飞行特征和起飞特征类FlyBehavior与TakeOffBehavior为抽象类,分别用于表示抽象的飞行为与起飞行为;
【Java代码】
interfaceFlyBehavior{
publicvoidfly();
classSubSonicFlyimplementsFlyBehavior{
publicvoidfly(){"
);
classSuperSonicFlyimplementsFlyBehavior{
);
interfaceTakeOffBehavior{
publicvoidtakeOff();
classVerticalTakeOffimplementsTakeOffBehavior{
publicvoidtakeOff(){"
classLongDistanceTakeOffimplementsTakeOffBehavior{
publicvoidtakeOff(){"
abstractclassAirCraft{
protected
publicvoidfly(){
publicvoidtakeOff(){
classHelicopter(5)AirCraft{
publicHelicopter(){
flyBehavior=new
takeOffBehavior=new
(7)
//其它代码省略