填空题 阅读下列说明和E-R图,回答问题1至问题3,将解答填入对应栏内。
[说明] 某学校的教学系统描述如下:
学生信息包括:学号(SNo)、姓名(Sname)、性别(Sex)、年龄(Age)、入学年份(Year)、主修专业(Major),其中学号是入学时唯一编定的。
课程信息包括:课程号(CNo)、课程名称(CName)、学时(Period)、学分(Credit),其中课程号是唯一编定的。
一个学生可选多门课,每个学生选每门课有一个成绩。图2-1是经分析得到的E-R图。
[图2-1]
设基本表:Student(SNo,SName,Sex,Age,Year,Major),Course(CNo,Cname,Period,Credit),Grade(SNo,CNo,Grade)通过如下SQL语句建立,请在SQL语句空缺处填入正确的内容。
CREATE TABLE Student(SNO CHAR(6)NOT NULL,
SName CHAR(20), Sex CHAR(1), Age
INTEGER, Year CHAR(4), Major CHAR(20),
{{U}} (1) {{/U}}); CREATE TABLE
Course(CNo CHAR(6)NOT NULL, CName CHAR(20),
Period INTEGER, Credit INTEGER, {{U}}
(2) {{/U}}); CREATE TABLE Grade(SNo CHAR(6)NOT NULL,
CNo CHAR(6)NOT NULL, Grade REAL,
{{U}} (3) {{/U}}, {{U}} (4) {{/U}},
{{U}} (5) {{/U}});
填空题简述Belady异常。
填空题[说明] 设计一个普通函数distance (Point public: Point(int i, int j) (1) int getx( ) return x; int gety( ) return y; void disp( ) (2) ; float distance( Point (3) return d; void main( ) (4) p1. disp ( ); cout < <“与”; p2. diap( ); cout< <“之间距离=” < <distance (p1,p2) < <end1;
填空题
阅读下列函数说明和C++代码,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。
[说明]
在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(包括不用的功能)都要全面初始化的话,会导致应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。
以下示例展示了Proxy(代理)模式,PrinterProxy类执行一些比较“轻”的方法,需要真正执行“重”的方法时才初始化Print类。图5-1显示了各个类间的关系。
[图5-1] [C++代码]
class Printable{ public: virtual void
setPrinterName(string name)=0; virtual string
getprinterName()=0; virtual void print(string name)=0;
}; class Printer:public Printable{
private: string name; public:
Printer(string name){ cout<<"正在产生Printer的对象实例"<<endl;
this->name=name; } void
setPrinterName(string name){ this->name=name;
} string getPrinterName(){ return name;
} void print(string msg){
cout<<"======="<<name<<"==========="<<endl;
cout<<msg<<endl; } };
class printerproxy :public{{U}} (1) {{/U}}{
private: String name; Printer *real;
public: PrinterProxy(string name){
{{U}} (2) {{/U}}=NULL; this->name=name;
} void setPrinterName(string name){
if({{U}} (3) {{/U}})real->setPrinterName(name);
this->name=name; } string
getPrinterName(){ return name; }
void print(string msg){ {{U}} (4) {{/U}};
real->print(msg); } void
realize(){ if(real==NULL)real={{U}} (5) {{/U}};
} };
填空题[说明]现有一个显示系统,要显示的图形有线Line、矩形Square,抽象出一个Shape类(接口),有方法显示display()。需要新增图形Circle,又已知有类XXCircle实现了所需要实现的功能:显示displayIt()。为了继承自Shape以提供统一接品,又不希望从头开发代码,希望使用XXCircle。这样将XXCircle作为Circle的一个属性,即Circle的对象包含一个XXCircle对象。当一个Circle对象被实例化时,它必须实例化一个相应的XXCircle对象;当Circle对象收到的做任何事的请求都将转发给这个XXCircle对象。通过这种称为Adapter模式,Circle对象就可以通过“让XXCircle做实际工作”来表现自己的行为了。图显示了各个类间的关系。以下是C++语言实现,能够正确编译通过。[C++代码]classShapepublic:______voiddisplay()=0;;classLine:publicShape//省略具体实现;classSquare:publicShape//省略具体实现;classXXCirclepublic:voiddisplayIt()//省略具体实现//省略其余方法和属性;classCircle:publicShapeprivate:XXCircle*pxc;public:Circle();voiddisplay();;Circle∷Circle()pxc=______;voidCircle∷display()pxc->______;classFactorypublic:______getShapeInstance(inttype)//生成特定实例switch(type)case1:returnnewSquare;case2:returnnewLine;case3:returnnewCircle;default:returnNULL;;voidmain(intargc,char*argv[])if(argc!=2)cout<<"errorparameters!"<<end1;return;inttype=atoi(argv[1]);Factoryfactory;Shape*s=factory.______;if(s==NULL)cout<<"Errorgettheinstance!"<<end1;return;s->display();deletes;return;
填空题阅读下列函数说明和C++代码,将应填入(n)处的字句写在对应栏内。[说明]在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(包括不用的功能)都要全面初始化的话,会导致应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。以下示例展示了Proxy(代理)模式,PrinterProxy类执行一些比较“轻”的方法,需要真正执行“重”的方法时才初始化Print类。图5-1显示了各个类间的关系。[图5-1][C++代码]classPrintablepublic:virtualvoidsetPrinterName(stringname)=0;virtualstringgetprinterName()=0;virtualvoidprint(stringname)=0;;classPrinter:publicPrintableprivate:stringname;public:Printer(stringname)cout<<"正在产生Printer的对象实例"<<endl;this->name=name;voidsetPrinterName(stringname)this->name=name;stringgetPrinterName()returnname;voidprint(stringmsg)cout<<"======="<<name<<"==========="<<endl;cout<<msg<<endl;;classprinterproxy:public(1)private:Stringname;Printer*real;public:PrinterProxy(stringname)(2)=NULL;this->name=name;voidsetPrinterName(stringname)if((3))real->setPrinterName(name);this->name=name;stringgetPrinterName()returnname;voidprint(stringmsg)(4);real->print(msg);voidrealize()if(real==NULL)real=(5);;
填空题[问题1] 把上面用关系表示的实体,实体与实体之间的联系,用E-R图表示出来,要求在图中表示联系的类型(1:1,L:N,M:N)。
填空题
阅读以下函数说明和Java代码,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。
[说明]
很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是Java语言实现,能够正确编译通过。
[Java代码] public class USTax {
private static USTax instance=null; {{U}} (1)
{{/U}}USTax(){} private{{U}} (2) {{/U}}static void
doSync(){ if(instance==null){
System.out.println("实例不存在,创建实例.."); instance={{U}}
(3) {{/U}}; System.out.println("实例创建成功");
}else{ System.out.println("实例已被创建了"); }
} public static USTax getInstance(){
if(instance==null){
System.out.println("实例暂时不存在"); {{U}} (4)
{{/U}};//同步控制 }else{
System.out.println("实例已经存在"); }
return{{U}} (5) {{/U}}; }
}
填空题
阅读下列函数说明和C代码,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。 [说明]
HufTman树又称最优二叉树,是一类带权路径长度最短的树,在编码中应用比较广泛。
构造最优二叉树的Huffman算法如下:
①根据给定的n各权值{W1,w2,…,wn)构成n棵二叉树的集合F={T1,T2,…,Tn},其中每棵树Ti中只有一个带权为wi的根节点,其左右子树均空。
②在F中选取两棵根节点的权值较小的树作为左右子树,构造一棵新的二叉树,置新构造二叉树的根节点的权值为其左右予树根节点的权值之和。
③从F中删除这两棵树,同时将新得到的二叉树加入到F中。 重复②③,直到F中只剩一棵树为止。
函数中使用的预定义符号如下: #define INT MAX 10000
#define ENCODING LENGTH 1000 typedef
enum(none,left_child,right_child) Which; /*标记是左孩子还足右孩子*/
typedef char Elemtype; typedef struct
TNode{//Huffman树节点 Elemtype letter; int
weight; //权值 int parent;
//父节点 Which sigh; char *code;
//节点对应编码 }HTNode,*HuffmanTree;
int n; char coding[50];//储存代码 [函数]
void Select(HuffmanTree HT,int end,int *sl,int *s2)
/*在0~END之间,找出最小和次小的两个节点序号,返吲S1、S2*/ {
int i; int min 1=INT_MAX; int min
2=INT_MAX; for(i=0;i<=end;i++){/*找最小的节点序号*/
if(({{U}} (1) {{/U}})&&(HT[i].weight<minl)){
*s1=i; min 1=HT[i].weight; }
} for(i=0;i<=end;i++){/*找次小节点的序号*/
if((HT[i].parent==0)&&({{U}} (2) {{/U}}) &&(min
2>HT[i].weight)){ *s2=i; min 2=HT[i].weight;
} } } void
HuffmanTreeCreat(HuffmanTree&HT)/*建立HUFFMAN树*/ {
int i; int m=2*n-1; int s1,s2;
for(i=n;i<m;i++){ Select({{U}} (3)
{{/U}}); HT[s1].parent=i; HT[s2].parent=i;
HT[s1].sigh=left child; HT[s2].sigh=right
child; HT[i].weight={{U}} (4) {{/U}};
} } void HuffmanTreeEncoding(char
sen[],HuffmanTree HT) { /*将句子进行编码*/ int
i=0; int j; while(sen[i] !='\0'){
for(j=0;j<n;j++){ if(HT[j].letter==sen[i])(/*字母吻合则用代码取代*/
strcat(coding,{{U}} (5) {{/U}});
break; } }
i++; if (Sen [1]==32) i++; }
printf("/n%s",coding); }
填空题[问题2] 各个事务的内部结构如下所示。若事务不施加任何锁,则有多少可能的调度。T1: R1 ( Get A into t1 ;t1: = t1 + 1 ); U1 ( Update A from t1 );T2: R2 ( Get A into t2 ;t2: = t2 * 2); U2 ( Update A from t2);T3:1t3 ( Get A into t3; display t3 ); U3 ( Update A from 1 );
填空题[说明] 假设二叉树采用链式存储方式存储,编写一个后序遍历二叉树的非递归方式。
Void postorder (btree * B)
{
btree * stack [m0] , *p;
int tag [m0], top =0;
p=b;
do
{
while (p! =NULL)
{
top+ +;
{{U}}(1) {{/U}}
tag [top] =0;
p =p- >left;
}
if (top >0)
{
{{U}}(2) {{/U}}
if (tag[top3 = =1)
{
{{U}}(3) {{/U}}
print ("%d", p- >data);
}
if(top>0)
{
{{U}}(4) {{/U}}
tag [top] = 1;
}
}
} while (p! = NULL && top ! =0)
}
填空题[说明] 编写一个函数根据用户输入的偶对(以输入。表示结束)建立其有向图的邻接表。一个图的邻接表存储结构定义如下:
# include < stdio. h >
# define MAXVEX 30
struct edgenode
{
int adjvex;
char info;
struct edgenode * next;
}
struct vexnode
{
char data;
struct edgenode * link;
}
typedef struct vexnode adjlist [MAXVEX];
实现要求的函数如下:
void creatadjlist ( adjlist g)
{
int i, j, k;
street vexnode * s;
for( k=1; k< =n; k+ +)
{
{{U}}(1) {{/U}}
g [k]. link = NULL;
}
printf ( “输一个对:” );
scanf ("%d, %d",
while{{U}} (2) {{/U}}
{
{{U}} (3) {{/U}}
s- >adjvex =j;
{{U}} (4) {{/U}}
g [i].link =s;
{{U}} (5) {{/U}}
}
}
填空题[问题1] 该关系模式满足2NF吗?为什么?
填空题[问题1] 通过该程序的算法用等价类设计测试用例,检查逻辑覆盖标准。
填空题[说明]欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如下表所示。不同的绘图程序DP1DP2绘制直线draw_a_line(x1,y1,x2,y2)drawline(x1,x2,y1,y2)绘制圆draw_a_circle(x,y,r)drawcircle(x,y,r)该绘图软件的扩展性要求,将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况,现采用桥接(Bridge)模式来实现上述要求,得到如下图所示的类图。某绘图软件类图[C++代码]classDP1{public:staticvoiddraw_aline(doublex1,doubley1,doublex2,doubley2){/*代码省略*/}staticvoiddrawa_circle(doublex,doubley,doubler){/*代码省略*/}classDP2(public:staticvoiddrawline(doublex1,doublex2,doubley1,doubley2){/*代码省略*/}staticvoiddrawcircle(doublex,doubley,doubler){/*代码省略*/}classDrawing{public:________;________;};classV1Drawing:publicDrawing{public:voiddrawLine(doublex1,doubley1,doublex2,doubley2){/*代码省略*/}voiddrawCircle(doublex,doubley,doubler){________;}};classV2Drawing:publicDrawing{public:voiddrawLine(doublexl,doubleyl,doublex2,doubley2>{/~~~~~~~/}voiddrawCircle(doublex,doubley,doubler){________;}classShape{publie:________;Shape(Drawing*dp){_dp=dp;}voiddrawLine(doublex1,doubley1,doublex2,doubley2){_dp->drawLine(x1,y1,x2,y2);}voiddrawCircle(doublex,doubley,doubler){_dp->drawCircle(x,y,r);}private:Drawing*_dp;classRectangle:publicShape{public:voiddraw(){/*代码省略*/}classCircle:publicShape{private:double_x,_y,_r;public:Circle(Drawing*dp,doublex,doubley,doubler):________{_x=x;_y=y;_r=r;}voiddraw(){drawCircle(_x,_y,_r);}};
填空题[说明]某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。Command模式的类图如下图所示。Command模式类图[C++代码]classLight{public:Light(stringname){/*代码省略*/}voidon(){/*代码省略*/}//开灯voidoff(){/*代码省略*/}//关灯}:classCommand{public:________;}classLightonCommand:publicCommand{//开灯命令private:Light*light;public:LightonCommand(Light*light){this->light=light;}Voidexecute(){________;}};classLightoffCommand:publicCommand{//关灯命令private:Light*light;public:LightoffCommand(Light*light){this->light=light;}Voidexecute(){________;}};classRemoteControl{//遥控器private:Command*onCommands[7];Command*offCommands[7];public:RemoteControl(){/*代码省略/}voidsetCommand(intslotCommand*onCommand,Command*offCommand){________=onCommand;________=offCommand;}voidonButtonWasPushed(intslot){________:)voidoffButtonWasPushed(intslot){________:});intmain(){RemoteControl*remoteControl=newRemoteControl();Light*livingRoomLight=newLight("LivingRoom");Light*kitchenLight=newLight("kitchen");LightonCommand*IivingRoomLighton=newLightonCommand(livingRoomLight);LightoffCommand*livingRoomLightoff=newLightoffCommand(livingRoomLight);LightonCommand*kitchenLighton=newLightonCommand(kitchenLight);LightoffCommand*kitchenLightoff=newLightoffCommand(kitchenLight);remoteControl->setCommand(0,livingRoomLighton,livingRoomLightoff);remoteControl->setCommand(1,kitchenLighton,kitchenLightoff);remoteControl->onButtonWasPushed(0);remoteControl->offButtonWasPushed(0);remoteControl->onButtonWasPushed(1);remoteControl->offButtonWasPushed(1);/*其余代码省略*/return0;}
填空题[说明] 这是一个用户名校验程序,如用户名正确,即输出欢迎字样,否则,弹出警告窗并直接退出程序。下面是实现上述功能的程序,请填空。“Option Explicit”此语句的作用:强制显示声明
Dim UserName (2) As String
Dim Flag As Boolean
{{U}} (1) {{/U}}
Private Sub Form _ Load( )
UserName (0) = "AA": UserName (1) = "BB": UserName(2) = "CC"
Flag = False
inputName = InputBox( “请输入名称:“,”身份确认”“,”)
Dim i As Integer
For i = 0 To False
If inputName = UserName(i) Then
{{U}}(2) {{/U}}
End If
Next i
If{{U}} (3) {{/U}}Then
MsgBox “用户身份确失败!退出应用”, vbOKOnly, “警告”
End
End If
End Sub
Private Sub Form_ Paint( )
{{U}}(4) {{/U}}
End Sub
填空题阅读以下函数说明和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文件publicinterfaceShapepublic(1)voiddisplay();//XXCircle.jave文件publicclassXXCirclepublicvoiddisplayIt()//省略具体实现//Circle.java文件publicclassCircle(2)ShapeprivateXXCirclepcx=(3);publicvoiddisplay()pcx.displayIt();//Factory.java文件publicclassFactorypublic(4)getShapeInstance(inttype)switch(type)case1:returnnewLine();case2:returnnewSquare();case3:returnnewCircle();default:returnnull;//Main.java文件publicclassMainpublicstaticvoidmain(String[]args)inttype=1;Factoryfactory=newFactory();Shapes;s=factory.(5);if(s==null)System.out.println("Errorgettheinstance!");return;s.display();return;
填空题阅读以下说明和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++代码]classShapepublic:(1)voiddisplay()=0;;classLine:publicShape//省略具体实现;classSquare:publicShape//省略具体实现;classXXCirclepublic:voiddisplayIt()//省略具体实现//省略其余方法和属性;classCircle:publicShapeprivate:XXCircle*pxc;public:Circle();voiddisplay();;Circle::Circle()pxc=(2);voidCircle::display()pxc->(3);classFactorypublic:(4)getshapeInstance(inttype)//生成特定类实例switch(type)case1:returnnewSquare;case2:returnnewLine;case3:returnnewCircle;default:returnNULL;;voidmain(intargc,char*argv[])if(argc!=2)cout<<"errorparameters!"<<endl;return;inttype=atoi(argv[1]);Factoryfactory;Shape*s=factory.(5);if(s==NULL)cout<<"Errorgettheinstance!"<<endl;return;s->display();deletes;return;
填空题[说明] 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
main ( )
{
int n, i;
printf ( "/n please input a number: /n");
scanf ( "% d" ,
printf ( "%d =" ,n);
for({{U}} (1) {{/U}})
{
while({{U}} (2) {{/U}})
{
if({{U}} (3) {{/U}})
{ printf ("%d*",i);
{{U}}(4) {{/U}}
}
else
break;
}
}
printf (“%d”,n);}
