填空题阅读以下说明和C代码,将应填入(n)处的字句写在对应栏内。[说明]函数combine(a,b,c)是计算两个整数的组合数。由于计算结果可能超出10ng整型的可表示范围,故采用数组方式存储,例如:k位长整数m用数组c[]存储结构如下:m=c[k]×10k-1+c[k-1]×10k-2+…+c[2]×10+c[1],利用c[0]存储长整数m的位数,即c[0]=k。数组的每个元素只存储长整数m的一位数字,长整数运算时,产生的中间结果的某位数字可能会大于9,这是就应该调用format将其归整,使数组中的每个元素始终只存储长整数的一位数字。整数a和b(a>b)的组合数为:,其中u1=a,u2]=a-1,…,ub=a-b+1,d1=1,d2=2,…,db=b。为了计算上述分式,先从u1,u2,…,ub中去掉d1×d2×…×db的因子,得到新的u1,u2,…,ub,然后再将它们相乘。[函数]#defineNAXN100intgcd(inta,intb)//求两个整数a和b的最大公因子if(a<b)intC=a;a=b;b=c;for(inti=b;i>=2;i--)if((1))returni;return1;voidformat(int*a)//将长整数数组归整inti;for(i=1;i<a[0]||a[i]>=10;i++)if(i>=a[0])(2);a[i+1]+=a[i]/10;a[i]=a[i]%10;if(i>a[0])(3);voidcombine(inta,intb,int*C)inti,J,k,x;intd[MAXN],u[MAXN];k=0;for(i=a;i>=a-b+1;i--)u[++k]=i;u[0]=b;for(i=1;i<=b;i++)d[i]=i;for(i=1;i<=u[0];i++)//从u中各元素去掉d中整数的因子for(j=1;j<=b;j++)x=gcd(u[i],d[j]);//计算最大公约数u[i]/=X;d[j]/=x;(4);C[1]=1;//长整数c初始化for(i=1;i<=u[0];i++)(//将u中各整数相乘,存于长整数c中if(u[i]!=1)for(j=1;j<=c[0];j++)C[j]=(5);format(C);//将长整数c归整
填空题
阅读以下说明和c++代码,将应填入{{U}} (n) {{/U}}处的字句写在答题纸对应栏内。
[说明]
很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查Singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是c++语言实现,能够正确编译通过。
[C++代码] class USTax{ {{U}}
(1) {{/U}}: USTax(){};//构造函数
public: static USTax* getInstance();
private: static USTax*instance; };
{{U}} (2) {{/U}}=NULL;
USTax*USTax::get Instance(){ if(instance==NULL){
//进行某种同步 cout
if({{U}} (3) {{/U}}){
cout instance={{U}}
(4) {{/U}}; cout
} else{
cout } }
else{ cout
} return{{U}} (5) {{/U}};
}
填空题阅读下列函数说明和C++代码,将应填入(n)处的字句写在对应栏内。[说明]在销售系统中常常需要打印销售票据,有时需要在一般的票据基础上打印脚注。这样就需要动态地添加一些额外的职责。如下展示了Decorator(修饰)模式。SalesOrder对象使用一个SalesTicket对象打印销售票据,先打印销售票据内容,然后再打印脚注。图5-1显示了各个类间的关系。以下是C++语言实现,能够正确编译通过。[图5-1][C++代码]classComponentpublic:(1)voidprtTicket()=0;;classSalesTicket:publicComponentpublic:voidprtTicket()cout<<"SalesTicket!"<<endl;;classDecorator:publicComponentpublic:virtualvoidprtTicket();Decorator(Component*myC);private:(2)myComp;;Decorator::Decorator(Component*myC)myComp=myC;voidDecorator::prtTicket()myComp->prtTicket();classFooter:publicDecoratorpublic:Footer(Component*myC);voidprtTicket();voidprtFooter();;Footer::Footer(Component*myC):(3)voidFooter::prtFooter()cout<<"Footer"<<endl;voidFooter::prtTicket()(4);prtFooter();classSalesOrderpublic:voidprtTicket();;voidSalesOrder::prtTicket()Component*myST;myST=newFooter((5));myST->prtTicket();
填空题执行指令时,计算页号与页内地址,判断“该页在内存吗”,若在,则进行地址映射过程;若不在内存,则产生缺页中断。当发生缺页中断时,保存当前进程现场,判断“有空闲页面吗”,如有,直接调入所需的页面。若没有,按照某种算法选择一页置换,判断“该页被修改过吗”,如果被修改过,就必须把它写回磁盘以便更新该页在磁盘上的副本;如果该页没有被修改过,那么它在磁盘上的副本已经是最新的了,则不需要写回,调入的所需的页面直接覆盖被淘汰的页。调整页表及内存分配表,恢复被中断进程现场。补充缺页中断处理流程图4-1中的判断(1)~(3)。[图4-1]
填空题[说明]已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开会讨论决定。采用责任链设计模式(ChainofResponsibility)对上述过程进行设计后得到的类图如图5-1所示。[C++代码]#include<string>#include<ioStream>USingnamespacestd;ClassPurchaseRequestpublic:doubleAmount;//一个采购的金额intNumber;//采购单编号stringPurpose;//采购目的;classApprover//审批者类public:Approver()successor=NULL;virtualvoidProcessRequest(PurchaseRequestaRequest)if(successor!=NULL)(successor->(1);)voidSetSuccessor(Approver*aSuccessor)successor=aSuccessor;)private:(2)successor;;classCongress:publicApproverpublic:voidProcessRequest(purchaseRequestaRequest)if(aRequest.Amount>=500000)/*决定是否审批的代码省略*/)else(3)ProcessRequest(aRequest);;ClassDirector:publicApproverpublic:voidProcessRequest(purchaseRequestaRequest)/*此处代码省略*/);ClassPresident:publicApproverpublic:voidProcessRequest(PurchaseRequestaRequest)/*此处代码省略*/;ClassVicePresident:publicApproverpublic:voidProcessRequest(PurchaseRequestaRequest)/*此处代码省略*/);VOidmain()CongresSMeeting;vicePresidentSam;DirectorLarry;PresidentTammy;//构造责任链Meeting.SetSuccessor(NULL);Sam.SetSuccessor((4));Tammy.SetSuccessor((5));Larry.SetSuccessor((6));PurchaseRequestaRequest;//构造一采购审批请求Cin>>aRequest.Amount;//输入采购请求的金额(7).ProcessRequest(aRequest);//开始审批return;
填空题[说明]以下函数完成求表达式的值,请填空使之完成此功能。floatsum(floatx){floats=0.0;intsign=1;{{U}}(1){{/U}};for(inti=1;{{U}}(2){{/U}};i++){t=t*x;s=s+{{U}}(3){{/U}};sign=-sign;{{U}}(4){{/U}};}
填空题[问题2] 如果将关系模式R分解为: R1(A#,B#,E) R2(B#,C,D) 指出关系模式R2的键,并说明该关系模式最高满足第几范式(在1NF~BCNF之内)
填空题[说明] 编写程序,把从键盘上输入的一批整数(以-1作为终止输入的标志)保存到文本文件“a: xxk1. dat”中。 (1) # include <fstream. h > # include < stdlib. h > void main ( ) (2) if ( ! four) cerr < <“文件没有找开!” < <end1; exit (1); int x; cin > >x; while( (3) ) (4) cin> >x; (5)
填空题
阅读下列函数说明和C代码,将应填入{{U}} (n) {{/U}}处的字句写上。 [说明]
若要在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<{{U}}(1){{/U}};i++){/*共n-1条边*/
minWeight=(float)MAX;
min=i;
/*从所有边(vx,vy)中选出最短的边*/
for(j=i; j<pGraph->n-1; j++){
if(mst[j].weight<minWeight){
minWeight={{U}}(2){{/U}};
min=j;
}
}
/*mst[minl是最短的边(vx,vy),将mst[min]加入最小生成树*/
edge=mst[min];
mst[min]=mst[i];
mst[i]=edge;
vx={{U}} (3) {{/U}};/*vx为刚加入最小生成树的顶点下标*/
/*调整mst[i+1]到mst[n-1]*/
for(j=i+1;j<pGraph->n-1;j++){
vy=mst[j].StopVex;
if({{U}} (4) {{/U}}){/*计算(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={{U}} (5) {{/U}};
if(weight<mst[j].weight){
mst[j].weight=weight;
mst[j].StartVex=vx;
}
}
} }
填空题
阅读以下说明和C++代码,将应填入{{U}} (n) {{/U}}处的字句写上。 [说明]
现有一个显示系统,要显示的图形有线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: {{U}}
(1) {{/U}}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={{U}} (2) {{/U}};
} void Circle::display() {
pxc->{{U}} (3) {{/U}}; }
class Factory{ public: {{U}}
(4) {{/U}}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.{{U}} (5) {{/U}};
if(s==NULL){ cout<<"Error get
the instance!"<<endl; return;
} s->display();
delete s; return;
}
填空题[说明]某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏需要模拟的鸭子种类及其特征如表下表所示。为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(strategy)设计的类图如图5-1所示。其中,Duck为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;类FlyBehavior与QuackBehavior为抽象类,分别用于表示抽象的飞行行为与发声行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。请填补以下代码中的空缺。[C++代码]#include<iostream>usingnamespace(1);classFlyBehaviorpublic:(2)fly()=0;;classQuackBehaviorpublic:(3)quack()=0;ClassFlyWithWings:publicF1yBehaviorpublic:voidfly()cout<<"使用翅膀飞行!"<<endl;;classFlyNoWay:publicFlyBehaviorpublic:voidfly()cout<<"不能飞行!">>endl;;classQuack:publicQuackBehaviorpublic:voidquack()cout<<"发出\'嘎嘎'\声!"<<endl;;classSqueak:publicQuackBehaviorpublic:voidquack()cout<<"发出空气与橡皮摩擦声!"<<endl;;classQuackNOWay:publicQuackBehaViorpublic:voidquack()cout<<"不能发声!"<<endl;;C1assDuckprotected:FlyBehavior*(4);QuackBehaVior*(5);public:VOidfly()(6);VOidquack()(7);;virtualvoiddisplay()=0;;classRubberDuck:publicDuckpublic:RubberDuck()flyBehavior=new(8);quackBehavior=new(9);~RubberDuck()if(!flyBehavior)deleteflyBehaVior;if(!quackBehavior)deletequackBehavior;Voiddisplay()/*此处省略显示橡皮鸭的代码*///其他代码省略