软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷48
-
(5)
-
(4)
-
(3)
-
(2)
-
阅读以下函数说明和Java代码,将应填入(n)处的字句写上。
[说明]
现有一个显示系统,要显示的图形有线Line、矩形Square,抽象出一个Shape类(接口),有方法显示display()。
需要新增图形Circle,又已知有类XXCircle实现了所需要实现的功能:显示displayIt()。为了继承自shape以提供统一接口,又不希望从头开发代码,希望使用XXCircle。这样将XXCircle作为Circle的一个属性,即Circle的对象包含一个XXCircle对象。当一个Circle对象被实例化时,它必须实例化一个相应的XXCircle对象;当Circle对象收到的做任何事的请求都将转发给这个XXCircle对象。通过这种称为Adapter模式,Circle对象就可以通过“让XXCircle做实际工作”来表现自己的行为了。图7-1显示了各个类间的关系。以下是JAVA语言实现,能够正确编译通过。
[图7-1]
[Java代码]
//Shape.java文件
public interface Shape{
public (1) void display();
}
//XXCircle.jave文件
public class XXCircle{
public void displayIt(){
//省略具体实现
}
}
//Circle.java文件
public class Circle (2) Shape{
private XXCircle pcx=(3);
public void display(){
pcx.displayIt();
}
}
//Factory.java文件
public class Factory{
public (4) getShapeInstance(int type){
switch(type){
case 1:return new Line();
case 2:return new Square();
case 3:return new Circle();
default:return null;
}
}
}
//Main.java文件
public class Main{
public static void main(String[]args){
int type=1;
Factory factory=new Factory();
Shape s;
s=factory. (5);
if(s==null){
System.out.println("Error get the instance!");
return;
}
s.display();
return;
}
}
(1)
-
(4)
-
(5)
-
(3)
-
(2)
-
阅读以下说明和C++代码,将应填入(n)处的字句写上。
[说明]
现有一个显示系统,要显示的图形有线Line、矩形Square,抽象出一个Shape类(接口),有方法显不display()。
需要新增图形Circle,又已知有类XXCircle实现了所需要实现的功能:显示displayIt()。为了继承自shape以提供统一接口,又不希望从头开发代码,希望使用XXCircle。这样将XXcircle作为Circle的一个属性,即Circle的对象包含一个XXCircle对象。当一个Circle对象被实例化时,它必须实例化一个相应的XXCircle对象: Circle对象收到的做任何事的请求都将转发给这个XXCircle对象。通过这种称为Adapter模式,Circle对象就可以通过“让XXCircle做实际工作”来表现自己的行为了。图6-1显示了各个类间的关系。以下是C++语言实现,能够正确编译通过。
[图6-1]
[C++代码]
class Shape{
public:
(1) void display()=0;
};
class Line:public Shape{//省略具体实现
};
class Square:public Shape{//省略具体实现
};
class XXCircle{
public:
void displayIt(){
//省略具体实现
}
//省略其余方法和属性
};
class Circle:public Shape{
private:
XXCircle *pxc;
public:
Circle();
void display();
};
Circle::Circle(){
pxc=(2);
}
void Circle::display()
{
pxc->(3);
}
class Factory{
public:
(4) getshapeInstance(int type){//生成特定类实例
switch(type){
case 1:return new Square;
case 2:return new Line;
case 3 :return new Circle;
default:return NULL;
}
}
};
void main(int argc,char*argv[]){
if(argc !=2){
cout<<"error parameters!"<<endl;
return;
}
int type=atoi(argv[1]);
Factory factory;
Shape*s=factory. (5);
if(s==NULL){
cout<<"Error get the instance!"<<endl;
return;
}
s->display();
delete s;
return;
}
(1)
-
(4)
-
(5)
-
(2)
-
(3)
-
(5)
-
阅读下列函数说明和C代码,将应填入(n)处的字句写上。
[说明]
若要在N个城市之间建立通信网络,只需要N-1条线路即可。如何以最低的经济代价建设这个网络,是一个网的最小生成树的问题。现要在8个城市间建立通信网络,其问拓扑结构如图5-1所示,边表示城市间通信线路,边上标示的是建立该线路的代价。
[图5-1]
无向图用邻接矩阵存储,元素的值为对应的权值。考虑到邻接矩阵是对称的且对角线上元素均为0,故压缩存储,只存储上三角元素(不包括对角线)。
现用Prim算法生成网络的最小生成树。由网络G=(V,E)构造最小生成树T=(U,TE)的Prim算法的基本思想是:首先从集合V中任取一顶点放入集合U中,然后把所有一个顶点在集合U里、另一个顶点在集合V-U里的边中,找出权值最小的边(u,v),将边加入TE,并将顶点v加入集合U,重复上述操作直到U=V为止。
函数中使用的预定义符号如下:
#define MAX 32768 /*无穷大权,表示顶点间不连通*/
#define MAXVEX 30 /*图中顶点数目的最大值*/
typedef struct{
int startVex,stopVex; /*边的起点和终点*/
float weight; /*边的权*/
}Edge;
typedef struct{
char vexs[MAXVEX]; /*顶点信息*/
float arcs[MAXVEX*(MAXVEX-1)/2]; /*邻接矩阵信息,压缩存储*/
int n; /*图的顶点个数*/
}Graph;
[函数]
void PrimMST(Graph*pGraph, Edge mst[])
{
int i,j,k,min,vx,vy;
float weight,minWeight;
Edge edge;
for(i=0; i<pGraph->n-1;i++){
mst[i].StartVex=0;
mst[i].StopVex=i+1;
mst[i].weight=pGraph->arcs[i];
}
for(i=0;i<(1);i++){/*共n-1条边*/
minWeight=(float)MAX;
min=i;
/*从所有边(vx,vy)中选出最短的边*/
for(j=i; j<pGraph->n-1; j++){
if(mst[j].weight<minWeight){
minWeight=(2);
min=j;
}
}
/*mst[minl是最短的边(vx,vy),将mst[min]加入最小生成树*/
edge=mst[min];
mst[min]=mst[i];
mst[i]=edge;
vx=(3);/*vx为刚加入最小生成树的顶点下标*/
/*调整mst[i+1]到mst[n-1]*/
for(j=i+1;j<pGraph->n-1;j++){
vy=mst[j].StopVex;
if( (4) ){/*计算(vx,vy)对应的边在压缩矩阵中的下标*/
k=pGraph->n*vy-vy*(vy+1)/2+vx-vy-1;
}else{
k=pGraph->n*vx-vx*(vx+1)/2+vy-vx-1;
}
weight(5);
if(weight<mst[j].weight){
mst[j].weight=weight;
mst[j].StartVex=vx;
}
}
}
}
(1)
-
(4)
-
(2)
-
(3)
-
(5)
-
阅读下列说明和C程序,将应填入(n)处的字句写在对应栏中。
[说明]
借助一个栈结构,可实现二叉树的非递归遍历算法。InOrderTraverse数实现中序非递归遍历,遍历
过程如下:
若不是空树,根节点入栈,进入左子树;若已经是空树,则栈顶元素出栈,访问该元素(根节点),进入该节点的右子树,继续直到遍历完成。
函数中使用的预定义符号如下:
typedef struct BiTNode{
int data;
struct BiTNode *iChiid,*rChiid;
} BiTNode,*BiTree;
typedef struct SNode{/*链栈的节点类型*/
BiTree elem;
struct SNode *next;
}SNode;
[函数]
int InOrderTraverse(BiTree root)
{
BiTree P;
SNode *q,*stop=NULL;/*不带头节点的单链表作为栈的存储结构*/
P=root;
while(p !=NULL || stop !=NULL){
if( (1) ){ /*不是空树*/
q=(SNode*)malloc(sizeof q);
if(q==NULL)return-1;
/*根节点指针入栈*/
(2);
q->elem=P;
stop=q;
P=(3); /*进入根的左子树*/
}else{
q=stop;
(4); /*栈顶元素出栈*/
printf("%d|,q->elem->data); /*防问根节点*/
P=(5); /*进入根的右子树*/
free(q); /*释放原栈顶元素*/
}/*if*/
}/*while*/
return 0;
}/*InOrderTraverse*/
(1)
-
(4)
-
(2)
-
(3)
-
阅读以下说明和程序流程图,将应填入(n)处的字句写在对应栏内。
[说明]
当一元多项式
中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指受和对应系数。
为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指数递减顺序存储。例如:多项式8x5-2x2+7的存储结构为:
流程图图3-1用于将pC(Node结构体指针)节点按指数降序插入到多项式C(多项式POLY指针)中。
流程图中使用的符号说明如下:
(1)数据结构定义如下:
#define EPSI 1e-6
struct Node{ /*多项式中的一项*/
double c; /*系数*/
int e; /*指数*/
Struct Node *next;
};
typedef struct{ /*多项式头节点*/
int n; /*多项式不为零的项数*/
struct Node *head;
}POLY;
(2)Del(POLY *C,struct Node *p)函数,若p是空指针则删除头节点,否则删除p节点的后继。
(3)fabs(double c)函数返回实数C的绝对值。
[图3-1]
(1)
-
(6)
-
(4)
-
(5)
-
(3)
-
阅读下列说明和E-R图,回答问题1至问题3,将解答填入对应栏内。
[说明]
设有下列关于学生成绩管理系统的E-R图(见图2-1)。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体间的联系。假定已通过下列SQL语言建立了基本表:
CREATE TABLE STUDENT(SNo CHAR(6)NOT NULL UNIQUE,
SName CHAR(20),
Sex CHAR(1),
Dept CHAR(20),
Age SMALLINT);
CREATE TABLE COURSE(CNo CHAR(6)NOT NULL UNIQUE,
CName CHAR(20),
Hour SMALLINT,
Credit SMALLINT);
CREATE TABLE SC (SNo CHAR(6),
CNo CHAR(6),
GRADE SMALLINT,
PRIMARY KEY (SNo,CNo));
为了答题的方便,图中的实体和属性同时给出了中英文两种名字,回答问题时只须写出英文名即可。
填充下列SQL程序5.1~5.4中的(1)~(6),使它们分别完成以下查询功能:
程序5.1:检索选修所有课程的学生姓名。
程序5.2:给出全体学生人数。
程序5.3:按学号给出每个学生的平均成绩。
程序5.4:按学号给出每个学生选修课程的门数。
[程序5.1]
SELECT SName FROM STUDENT WHERE (1)
(SELECT FROM COURSE WHERE (2)
(SELECT * FROM SC WHERE (3) ))
[程序5.2]
SELECT (4) FROM STUDENT
[程序5.3]
SELECT (5) FROM SC GROUP BY SNO
[程序5.4]
SELECT (6) FROM SC GROUP BY SNO
(1)
-
(2)
-
加工2的细化图(图1-3中的B)中有一条错误的数据流,请指出该数据流的起点或终点(若可以,指出两者)。
-
小说明是用来描述加工的。小说明的描述方法有哪些?请分别用这些描述方法描述加工1.2。
-
阅读下列说明和图,回答问题1至问题3,将解答填入对应栏内。
[说明]
某汽车数字仪表系统将完成下述功能:
(1)通过模一数转换,实现传感器和微处理器的接口。
(2)在发光二极管面板上显示数据。
(3)指示速度(mph)、行驶里程、油耗(mpg)等。
(4)指示加速或减速。
以下是经分析得到的数据流图,有些地方有待填充,假定顶层数据流图是正确的。图1-1是顶层数据流图,图1-2是第0层数据流图,图1-3是第1层数据流图,其中A是加工1的细化图,B是加工2的细化图。图中,△sps表示转速sps的瞬时变化值,若△sps>0则汽车加速,△sps<0则减速,△sps=0则匀速。假定题中提供的顶层图是正确的,请回答下列问题。
[图1-1]
[图1-2]
[图1-3]
第0层数据流图(图1-2)中有一条缺失的数据流,请指出该数据流的起点和终点。
加工1的细化图(图1-3中的A)中有一条缺失的数据流,请指出该数据流的起点和终点。