填空题阅读以下说明和程序流程图,将应填入{{U}}(n){{/U}}处的字句写在对应栏内。[说明]当一元多项式中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指受和对应系数。为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指数递减顺序存储。例如:多项式8x5-2x2+7的存储结构为:流程图图3-1用于将pC(Node结构体指针)节点按指数降序插入到多项式C(多项式POLY指针)中。流程图中使用的符号说明如下:(1)数据结构定义如下:#defineEPSI1e-6structNode{/*多项式中的一项*/doublec;/*系数*/inte;/*指数*/StructNode*next;};typedefstruct{/*多项式头节点*/intn;/*多项式不为零的项数*/structNode*head;}POLY;(2)Del(POLY*C,structNode*p)函数,若p是空指针则删除头节点,否则删除p节点的后继。(3)fabs(doublec)函数返回实数C的绝对值。[图3-1]
填空题[说明] 编写一个Application,从键盘输入整数n,并计算从1到n的累加和。 import java. io. *; public class Application1 public static void main(String [] args) String s = " "; int n, sum = 0; System. out. println (“计算从1到n 的累加和。”); System. out. print( “请输入n的值:”); try (1) BufferedReader br = new BufferedReader(isr); (2) catch(Exception e) (3) for(int i=l; i< =n; i++) (4) System. out. println ( “你刚才的输入是:” + n); System. out. println ( “1到n的累加和是:”+ sum);
填空题
阅读以下说明和Java代码,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。 [说明]
在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(连不用的功能)都要全面初始化的话,会连带影响到应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。
以下示例展示了Proxy(代理)模式,PrinterProxy类执行一些比较“轻”的方法——设置名称和取得名称,需要真正执行“重”的方法——真正打印——时才初始Print类。图6-1显示了各个类间的关系。
[图6-1] [Java代码]
//Printable.Java publiC{{U}} (1) {{/U}}Printable{
public abstract void setPrinterName(String name);
public abstract String getprinterName(); public abstract
void print(String string); } //Printer.Java
public class Printer implements Printable{
private String name; public Printer(){
System.out.println("正在产生Printer的对象实例"); }
public Printer(String name){ this.name=name;
heavyJob("正在产生Printer的对象实例("+name+")"); public void
setPrinterName(String name){ this.name=name;
public String getPrinterName(){ return name;
public void print(String string){
System.out.println("===" +name+" ====");
System.out.println(string); } }
//PrinterProxy.Java public class
PrinterProxy{{U}} (2) {{/U}}Printable{ private String
name; private Printer real; public
PrinterProxy(){} public PrinterProxy(String name){
this.name=name; } public gynchronized
void setPrinterName(String name){ if({{U}} (3) {{/U}}){
real.setPrinterName(name); }
this.name=name; } public String
getprinterName(){ return name; }
public void print(String string){ {{U}} (4)
{{/U}}; real.print(string); }
private synchronized void realize(){//产生真正的Printer对象
if(real==null){ real={{U}} (5) {{/U}};
} } }
填空题阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。[说明]在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(连不用的功能)都要全面初始化的话,会连带影响到应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。以下示例展示了Proxy(代理)模式,PrinterProxy类执行一些比较“轻”的方法——设置名称和取得名称,需要真正执行“重”的方法——真正打印——时才初始Print类。图6-1显示了各个类间的关系。[图6-1][Java代码]//Printable.JavapubliC(1)PrintablepublicabstractvoidsetPrinterName(Stringname);publicabstractStringgetprinterName();publicabstractvoidprint(Stringstring);//Printer.JavapublicclassPrinterimplementsPrintableprivateStringname;publicPrinter()System.out.println("正在产生Printer的对象实例");publicPrinter(Stringname)this.name=name;heavyJob("正在产生Printer的对象实例("+name+")");publicvoidsetPrinterName(Stringname)this.name=name;publicStringgetPrinterName()returnname;publicvoidprint(Stringstring)System.out.println("==="+name+"====");System.out.println(string);//PrinterProxy.JavapublicclassPrinterProxy(2)PrintableprivateStringname;privatePrinterreal;publicPrinterProxy()publicPrinterProxy(Stringname)this.name=name;publicgynchronizedvoidsetPrinterName(Stringname)if((3))real.setPrinterName(name);this.name=name;publicStringgetprinterName()returnname;publicvoidprint(Stringstring)(4);real.print(string);privatesynchronizedvoidrealize()//产生真正的Printer对象if(real==null)real=(5);
填空题Private Sub Command1_ Click( )If List1. ListIndex > = (1) Then List1. RemoveItem (2) Label1. Caption = (3) ElseMsgBox “请选择要删除的项目”End IfEnd Sub
填空题[说明] 若s和t是用单链表存储的两个串,设计一个函数将s串中首次与串t匹配的字串逆置。 linkstring * invert - substring ( s, t) linkstring * s, * t; linkstring *prior, *p, *t1, *r, *q, *u; prior =s; p=s; t1 =t; if ( (1) ) printf ( "error/n") ; else while p ! = NULL t1 = t1- >link; else (2) p = prior - > link; t1 = t- >link; if ( t1 ! : NULL) printf ("cannot find"); else (3) r = q- >link; q- >link = p; while (r ! = p) u = r- >link; (4) q=r; r = u; (5)
填空题[说明] 设计一个普通函数distance (Point
public:
Point(int i, int j) {{{U}} (1) {{/U}}
int getx( ) { return x;}
int gety( ) { return y; }
void disp( )
{
{{U}} (2) {{/U}}
}
};
float distance( Point
{{U}}(3) {{/U}}
return d;
}
void main( )
{
{{U}} (4) {{/U}}
p1. disp ( ); cout < <“与”; p2. diap( );
cout< <“之间距离=” < <distance (p1,p2) < <end1;
}
填空题[说明] 已有一个工程文件,窗体上有两个图片框,名称为P1,P2。分别用来表示信号灯合汽车,其中在P1中轮流装入“黄灯.ico”、“红灯.ico”、“绿灯.ico”文件来实现信号灯的切换;还有两个计时器 Timer1 和Timer2,Timer1 用于变换信号灯,黄灯1秒,红灯2秒,绿灯3秒;Timer2用于控制汽车向左移动。运动时,信号灯不断变换,单击“开车”按钮后,汽车开始移动,如果移动到信号灯前或信号灯下,遇到红灯或黄灯,则停止移动。下面是实现上述功能的程序,请填空。
Private Sub Timer41_ Timer()
a=a+1
If{{U}} (1) {{/U}}Then
a=1
End If
Select Case a
Case 1
P1. Picture = LoadPicture( “黄灯.ico” )
Case 2, 3
P1. Picture = LoadPicture( “红灯”.ico” )
Case4, 5, 6
P1. Picture = LeadPicture( “绿灯. ico” )
{{U}} (2) {{/U}}
End Select
End Sub
Private Sub Timer2_Timer( )
If{{U}} (3) {{/U}}And (P2. Left > P1. Left And P2. Left < P1. Left + P1. Width) Or P2. Left < = 100 Then
Timer2. Enabled = False
Else
{{U}} (4) {{/U}}
End If
End Sub
填空题[说明] 若s和t是用单链表存储的两个串,设计一个函数将s串中首次与串t匹配的字串逆置。
linkstring * invert - substring ( s, t)
linkstring * s, * t;
{
linkstring *prior, *p, *t1, *r, *q, *u;
prior =s;
p=s;
t1 =t;
if ({{U}} (1) {{/U}}) printf ( "error/n") ;
else
{
while { p ! = NULL
t1 = t1- >link;
}
else
{
{{U}} (2) {{/U}}
p = prior - > link;
}
t1 = t- >link;
}
if ( t1 ! : NULL) printf ("cannot find");
else
{
{{U}} (3) {{/U}}
r = q- >link;
q- >link = p;
while (r ! = p)
{
u = r- >link;
{{U}} (4) {{/U}}
q=r;
r = u;
}
{{U}} (5) {{/U}}
}
}
}
填空题
阅读以下函数说明和Java代码,将应填入{{U}} (n) {{/U}}处的字句写上。 [说明]
现有一个显示系统,要显示的图形有线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 {{U}}(1) {{/U}}void display(); }
//XXCircle.jave文件 public class XXCircle{
public void displayIt(){
//省略具体实现 } }
//Circle.java文件 public class Circle{{U}} (2) {{/U}}Shape{
private XXCircle pcx={{U}} (3) {{/U}};
public void display(){
pcx.displayIt(); }
} //Factory.java文件 public class Factory{
public{{U}} (4) {{/U}}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.{{U}} (5) {{/U}};
if(s==null){
System.out.println("Error get the instance!");
return;
}
s.display(); return;
} }
填空题阅读下列说明和E-R图,回答问题1至问题3,将解答填入对应栏内。[说明]设有下列关于学生成绩管理系统的E-R图(见图2-1)。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体间的联系。假定已通过下列SQL语言建立了基本表:CREATETABLESTUDENT(SNoCHAR(6)NOTNULLUNIQUE,SNameCHAR(20),SexCHAR(1),DeptCHAR(20),AgeSMALLINT);CREATETABLECOURSE(CNoCHAR(6)NOTNULLUNIQUE,CNameCHAR(20),HourSMALLINT,CreditSMALLINT);CREATETABLESC(SNoCHAR(6),CNoCHAR(6),GRADESMALLINT,PRIMARYKEY(SNo,CNo));为了答题的方便,图中的实体和属性同时给出了中英文两种名字,回答问题时只须写出英文名即可。填充下列SQL程序5.1~5.4中的(1)~(6),使它们分别完成以下查询功能:程序5.1:检索选修所有课程的学生姓名。程序5.2:给出全体学生人数。程序5.3:按学号给出每个学生的平均成绩。程序5.4:按学号给出每个学生选修课程的门数。[程序5.1]SELECTSNameFROMSTUDENTWHERE{{U}}(1){{/U}}(SELECTFROMCOURSEWHERE{{U}}(2){{/U}}(SELECT*FROMSCWHERE{{U}}(3){{/U}}))[程序5.2]SELECT{{U}}(4){{/U}}FROMSTUDENT[程序5.3]SELECT{{U}}(5){{/U}}FROMSCGROUPBYSNO[程序5.4]SELECT{{U}}(6){{/U}}FROMSCGROUPBYSNO
填空题[说明]已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10~50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开会讨论决定。采用责任链设计模式(ChainofResponsibility)对上述过程进行设计后得到的类图如图6-1所示。[Java代码]classPurchaseRequestpublicdoubleAmount;//一个采购的金额publicintNumber;//采购单编号publicStringPurpose;//采购目的;classApprover//审批者类publicApprover()successor=null;publicvoidProcessRequest(purchaseRequestaRequest)if(successor!=null)successor.(1);)publicvoidSetSuccessor(ApproveraSuccesssor)successor=aSuccesssor:private(2)successor;;classCongressextendsApproverpublicvoidProcessRequest(purchaseRequestaRequest)if(aRequest.Amount>=500000)/*决定是否审批的代码省略*/)else(3).ProcessRequest(aRequest);;classDirectorextendsApproverpublicvoidProcessRequest(PurchaseRequestaRequest)/*此处代码省略*/;classPresidentextendsApproverpublicvoidProcessRequest(PurchaseRequestaRequest)/*此处代码省略*/;classVicePresidentextendsApproverpublicvoidProcessRequest(purchaseRequestaRequest)/*此处代码省略*/);publicclassrspublicstaticvoidmain(String[]args)throwsIOExceptionCongressMeeting=newCongress();VicePresidentSam=newVicePresident();DirectorLarry=newmirector();PresidentTammy=newPresident();//构造责任链Meeting.SetSuccessor(null);Sam.SetSuccessor((4));Tammy.SetSuccessor((5));Larry.SetSuccessor((6));//构造一采购审批请求PurchaseRequestaRequest=newPurchaseRequest();BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));aRequest.Amount=Double.parseDouble(br.readLine());(7).processRequest(aRequest);//开始审批return;
填空题阅读以下说明和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)