要在8×8的棋盘上摆放8个“皇后”,要求“皇后”之间不能发生冲突,即任何两个“皇后”不能再同一行、同一列和相同的对角线上,则一般采用______来实现。
相对于DES算法而言,RSA算法的 (1) ,因此,RSA (2) 。
操作序列T1、T2、T3对数据A、B、C的并发操作如表6-8所示,T1与T2间并发操作 (14) ,T2与T3间并发操作 (15) 。 表6-8 操作序列T1、T2、T3对数据A、B、C的并发操作 时间 T1 T2 T3 t1 读A=50 t2 读B=200 t3 X1=A+B t4 读B=200 t5 读B=200 t6 B=B-100 t7 写B t8 读A=50 t9 读B=100 t10 X1=A+B t11 验算不对 写B=B+50 t12 写B
在数据库系统中,数据完整性约束的建立需要通过数据库管理系统提供的______语言来实现。
属于面向对象、解释型程序设计语言的是______。
______是一个类与它的一个或多个细化类之间的关系,即一般与特殊的关系。
在数据库管理系统中,______不属于安全性控制机制。
在有n个无序无重复元素值的数组中查找第i小的数的算法描述如下:任意取一个元素r,用划分操作确定其在数组中的位置,假设元素r为第k小的数。若i等于k,则返回该元素值;若i小于k,则在划分的前半部分递归进行划分操作查找第i小的数;否则在划分的后半部分递归进行划分操作查找第k-i小的数。该算法是一种基于______策略的算法。
某货车运输公司有一个中央仓库和n个运输目的地,每天要从中央仓库将货物运输到所有运输目的地
假设员工关系EMP(员工号,姓名,部门,部门电话,部门负责人,家庭住址,家庭成员,成员关系)如表6-17所示。如果一个部门可以有多个员工,一个员工可以有多个家庭成员,那么关系EMP属于 (41) ,且 (42) 问题;为了解决这一问题,应该将员工关系EMP分解为 (43) 。 表6-17 关系表 员工号 姓名 部门 部门电话 部门负责人 家庭住址 家庭成员 成员关系 0011 张晓明 开发部 808356 0012 北京海淀区1号 张大军 父亲 0011 张晓明 开发部 808356 OOl2 北京海淀区1号 胡敏铮 母亲 0011 张晓明 开发部 808356 0012 北京海淀区1号 张晓丽 妹妹 0012 吴俊 开发部 808356 0012 上海昆明路15号 吴胜利 父亲 0012 吴俊 开发部 808356 0012 上海昆明路15 王若垚 母亲 0021 李立丽 市场部 808.358 0021 两安雁塔路8号 李国庆 父亲 0021 李立丽 市场部 808358 002l 西安雁塔路8号 罗明 母亲 0022 王学强 市场部 808356 0021 西安太白路12路 王国钧 父亲 0031 吴俊 财务部 808360 西安科技路18号 吴鸿翔 母亲
填空题ADO对象模型是目前最流行的可编程数据访问对象模型,它是基于Microsoft的OLE DB数据库接口而设计的。在ADO对象中,______对象表示一个OLE DB数据源的开放式连接,而在该对象属性中,______用于指定连接到的数据源名称,使用方法及含义同ADO数据控件。
填空题阅读下列说明和Java代码,将应填入(n)处的字句写在对应栏内。[说明]现欲构造一棵文件/目录树,采用组合(Composite)设计模式来设计,得到的类图如图18-20所示。[Java代码]importJava.util.ArrayList;importJava.util.List;(1)classAbstractFileprotectedStringname;publicvoidprintName()System.out.printin(name);publicabstractbooleanaddChild(AbstractFilefile);publicabstractbooleanremoveChild(AbstractFilefile);publicabstractList<AbstractFile>getChildren();classFileextendsAbstractFilepublicFile(Stringname)this.name=name;publicbooleanaddChild(AbstractFilefile)returnfalse;publicbooleanremoveChild(AbstractFilefile)returnfalse;publicList<AbstractFile>getChildren()return(1);classFoiderextendsAbstractFiieprivateList<AbstractFile>childList;publicFolder(Stringname)this.name=name;this.childList=newArrayList<AbstractFile>();publicbooleanaddChild(AbstractFilefile)returnchildList.add(file);publicbooleanremoveChild(AbstractFilefile)returnchildList.remove(file);public(3)<AbstractFile>getChildren()return(4):publicclassClientpublicstaticvoidmain(String[]args)//构造一个树形的文件/目录结构AbstractFilerootFoider=newFoider("C://");AbstractFilecompositeFolder=newFolder("composite");AbstractFilewindowsFoider=newFoider("windows");AbstractFilefile=newFile("TeStCompoSite.java");rootFolder.addChild(compositeFoider);rootFoider.addChild(windowsFolder);compositeFolder.addChild(file);//打印目录文件树printTree(rootFolder);privatestaticvoidprintTree(AbstractFileifile)ifile.printName();List<AbstractFile>children=ifile.getChildren();if(children==null)return;for(AbstractFilefile:children)(5);该程序运行后输出结果为:C:/compositeTestComposite.javaWindows
填空题阅读下列说明和C++代码,将应填入(n)处的字句写在对应栏内。[说明]某公司的组织结构图如图18-23所示,现采用组合(Composition)设计模式来构造该公司的组织结构,得到如图18-24所示的类图。其中,Company为抽象类,定义了在组织结构图上添加(Add)和删除(Delete)分公司/办事处或者部门的方法接口。类ConcreteCompany表示具体的分公司或者办事处,分公司或办事处下可以设置不同的部门。类HRDepartment和FinanceDepartment分别表示人力资源部和财务部。[C++代码]#include<iostream>#include<list>#include<string>usingnamespacestd;classCompany//抽象类protected:stringname;public:Company(stringname)(1)=name;(2);//增加子公司、办事处或部门(3);//删除子公司、办事处或部门;classConcreteCompany:publicCompanyprivate:list<(4)>children;//存储子公司、办事处或部门public:ConcreteCompany(stringname):Company(name)voidAdd(Company*c)(5).push_back(c);voidDelete(Company*c)(6).remove(c);;classHRDepartment:publicCompanypublic:HRDepartment(stringname):Company(name)//其他代码省略;classFinanceDepartment:publicCompanypublic:FinanceDepartment(stringname):Company(name)//其他代码省略;voidmain()ConcreteCompany*root=newComcreteCompany("北京总公司");root->Add(newHRDepartment("总公司人力资源部"));root->Add(newFinanceDepartment("总公司财务部"));ConcreteCompany*comp=newConcreteCompany("上海分公司");comp->Add(newHRDepartment("上海分公司人力资源部"));comp->Add(newFinanceDepartment("上海分公司财务部"));(7);Concretecompany*compl=newConcreteCompany("南京办事处");comp1->Add(newHRDepartment("南京办事处人力资源部"));comp1->Add(newFinanceDepartment("南京办事处财务部"));(8);//其他代码省略
填空题阅读下列说明和Java代码,将应填入(n)处的字句写在对应栏内。[说明]已知某类库开发商提供了一套类库,类库中定义了Application类和Document类,它们之间的关系如图18-16所示,其中,Application类表示应用程序自身,而Document类则表示应用程序打开的文档。Application类负责打开一个已有的以外部形式存储的文档,比如一个文件,一旦从该文件中读出信息后,它就由一个Document对象表示。当开发一个具体的应用程序时,开发者需要分别创建自己的Application和Document子类,例如图18-16中的类MyApplication和类MyDocument,并分别实现Application类和Document类中的某些方法。已知Application类中的openDocument()方法采用了模板方法(TemplateMethod)设计模式,该方法定义了打开文档的每一个主要步骤,如下所示。(1)检查文档是否能够被打开,若不能打开,则给出出错信息并返回。(2)创建文档对象。(3)通过文档对象打开文档。(4)通过文档对象读取文档信息。(5)将文档对象加入到Application的文档对象集合中。[Java代码]abstractclassDocumentpublicvoidsave()/*存储文档数据,此处代码省略*/publicvoidopen(StringdocName)/*打开文档,此处代码省略*/publicvoidclose()/*关闭文档,此处代码省略*/publicabstractvoidread(StringdocName);;abstractclassApppiicationprivateVector<(1)>docs;/*文档对象集合*/publicbooleancanOpenDocument(StringdocName)/*判断是否可以打开指定文档,返回真值时表示可以打开返回假佰时表示不可打开,此处代码省略*/publicvoidaddDocument(DocumentaDocument)/*将文档对象添加到文档对象集合中*/docs.add((2));publicabstractDocumentdoCreateDocument();/*创建一个文档对象*/publicvoidopenDocument(StringdocName)/*打开文档*/if((3))System.out.println("文档无法打开!");return;(4)adoc=(5);(6);(7);(8);;
填空题阅读下列说明和C++代码,将应填入(n)处的字句写在对应栏内。[说明]已知某类库开发商提供了一套类库,类库中定义了Application类和Document类,它们之间的关系如图18-15所示,其中,Application类表示应用程序自身,而Document类则表示应用程序打开的文档。Application类负责打开一个已有的以外部形式存储的文档,比如一个文件,一旦从该文件中读出信息后,它就由一个Document对象表示。当开发一个具体的应用程序时,开发者需要分别创建自己的Application和Document子类,例如图18-15中的类MyApplication和类MyDocument,并分别实现Application类和Document类中的某些方法。已知Application类中的openDocument()方法采用了模板方法(TemplateMethod)设计模式,该方法定义了打开文档的每一个主要步骤,如下所示。(1)检查文档是否能够被打开,若不能打开,则给出出错信息并返回。(2)创建文档对象。(3)通过文档对象打开文档。(4)通过文档对象读取文档信息。(5)将文档对象加入到Application的文档对象集合中。[C++代码]#include<iostream>#include<vector>usingnamespacestd;C1assDocumentpublic:voidsave()/*存储文档数据,此处代码省略*/voidopen(stringdocName)/*打开文档,此处代码省略*/voidclose()/*关闭文档,此处代码省略*/virtualvoidread(StringdocName)=0;;classAppplicationprivate:vector<(1)>docs;/*文档对象集合*/public:boolcanopenDocument(StringdocName)/*判断是否可以打开指定文档,返回真值时表示可以打开返回假时值表示不可打开,此处代码省略*/voidaddDocument(Document*aD0cument)/*将文档对象添加到文档对象集合中*/docs.push_back((2));virtualDocument*doCreateDocument()=0;/*创建一个文档对象*/voidopenDocument(stringdocName)/*打开文档*/if((3))cout<<"文档无法打开!"<<end1;return;(4)adoc=(5);(6);(7);(8);;
填空题阅读以下说明和C++代码,将应填入 (n) 处的字句写在对应栏内。 [说明] 在一公文处理系统中,开发者定义了一个公文类OfficeDoc,其中定义了公文具有的属性和处理公文的相应方法。当公文类的内容或状态发生变化时,关联此OfficeDoc类对象的相应的DocExplorer对象都要更新其自身的状态。一个OfficeDoc对象能够关联一组DocExplorer对象。当OfficeDoc对象的内容或状态发生变化时,所有与之相关联的DocExplorer对象都将得到通知,这种应用被称为观察者模式。以下代码写在一个C++源文件中,能够正确编译通过。 [C++代码] #include<iostream> const OBS_MAXNUM=20//最多与OfficeDoc对象相关联的DocExplorer对象个数 (1) ; class DocExplorer //关注OfficeDoc公文对象的类 public: DocExplorer( (2) *doc); //构造函数 (3) void update(OfficeDoc *doc)=0; //更新自身状态的函数 //其他相关属性和方法省略 class OfficeDoc//公文类 private: DocExplorer *myObs[OBS_MAXNUM]; //关注此公文类的DocExplorer类对象指针数组 int index;//与OfficeDoc对象关联的DocExplorer对象的个数 public: OffiCeDoc() index=0; void attach(DocExplorer *o) //将一DocExplorer对象与OfficeDoc对象相关联 if(index>=OBS_MAXNUM||o==NULL)return; for(int loop=0;loop<index;loop++) if(myOhs[100p]==o)return; myObs[index]=o; index++; void detach(DocExplorer *o) //解除某DocExplorer对象与OfficeDoc对象的关联 if(o==NULL)return; for(int loop=0;loop<index;loop++) if(myObs[100p]==o) if(loop<=index-2)myObs[100p]=myObs[index-1]; myObs[index-1]=NULL; index--; break; private: void notifyObs()//通知所有的DocExplorer对象更改自身状态 for(int loop=0;loop<index;loop++) myObs[loop]-> (4) ;//DocExplorer对象更新自身状态 //其他公文类的相关属性和方法 ; DocExplorer::DocExplorer(OfficeDoc *doc)(//DocExplorer类对象的构造函数 doc-> (5) ; //将此DocExplorer对象与doc对象相关联
填空题阅读下列函数说明和C代码,将应填入(n)处的字句写在对应栏内。[说明]函数intToplogical(LinkedWDigraphG)的功能是对图G中的顶点进行拓扑排序,并返回关键路径的长度。其中图G表示一个具有n个顶点的AOE网,图中顶点从1~n依次编号,图G的存储结构采用邻接表表示,其数据类型定义如下:typedefstructGnode/*邻接表的表结点类型*/intadjvex;/*邻接顶点编号*/intweight;/*弧上的权值*/structGnode*nextarc;/*指示下一个弧的结点*/Gnode;typedefstructAdjlist/*邻接表的头结点类型*/charvdata;/*顶点的数据信息*/structGnode*Firstadj;/*指向邻接表的第一个表结点*/Adjulist;typedefstructLinkedWDigraph/*图的类型*/intn,e;/*图中顶点个数和边数*/structAdjlist*head;/*指向图中第一个顶点的邻接表的头结点*/LinkedWDigraph;例如,某AOE网如图21-1所示,其邻接表存储结构如图21-2所示。[本题函数]intToplogical(LinkedWDigraphG)Gnode*p;intj,W,top=0;int*Stack,*ve,*indegree;ve=(int*)malloc((G.n+1)*sizeof(int));indegree=(int*)maZZoc((G.n+1)*sizeof(int));/*存储网中各顶点的入度*/Stack=(int*)malloc((G.n+1)*sizeof(int));/*存储入度为0的顶点的编号*/if(!ve||!indegree||!Stack)exit(0);for(j=1;j<=G.n;j++)ve[j]=0;indegree[j]=0;/*for*/for(j=1;j<=G.n;j++)/*求网中各顶点的入度*/p=G.head[j].Firstadj;while(p)(1);p=p->nextarc;/*while*//*for*/for(j=1;j<=G.n;j++)/*求网中入度为0的顶点并保存其编号*/if(!indegree[j])stack[++top]=j;while(top>0)w=(2);printf("%c",G.head[w].vdata);p=G.head[w].Firstadj;while(p)(3);if(!indegree[p->adjvex])Stack[++top]=p->adjvex;if((4))ve[p->adjvex]=ve[w]+p->weight;p=p->nextarc;/*while*//*while*/return(5);/*Toplogical*/
填空题阅读下列说明和Java代码,将应填入(n)处的字句写在对应栏内。[说明]某公司的组织结构图如图18-25所示,现采用组合(Composition)设计模式来设计,得到如图18-26所示的类图。其中,Company为抽象类,定义了在组织结构图上添加(Add)和删除(Delete)分公司/办事处或者部门的方法接口。类ConcreteCompany表示具体的分公司或者办事处,分公司或办事处下可以设置不同的部门。类HRDepartment和FinanceDepartment分别表示人力资源部和财务部。[Java代码]importjava.util.*;(1)CompanyprotectedStringname;publicCompany(Stringname)(2)=name;publicabstractvoidAdd(Companyc);//增加子公司、办事处或部门publicabstractvoidDelete(Companyc);//删除子公司、办事处或部门classConcreteCompanyextendsCompanyprivateList<(3)>chiidren=newArrayList<(4)>();//存储子公司、办事处或部门publicConcreteCompany(Stringname)super(name);publicvoidAdd(Companyc)(5).add(c);publicvoidDelete(Companyc)(6).remove(c);ClassHRDepartmentextendsCompanypublicHRDepartment(Stringname)super(name);//其他代码省略classFinanceDepartmentextendsCompanypublicFinanceDepartment(Stringname)super(name);//其他代码省略publicclassTestpublicStaticvoidmain(String[]args)ConcreteCompanyroot=newConcreteCompany("北京总公司");root.Add(newHRDepartment("总公司人力资源部"));root.Add(newFinanceDepartment("总公司财务部"));ConcreteCompanycomp=newConcreteCompany("上海分公司");comp.Add(newHRDepartment("上海分公司人力资源部"));comp.Add(newFinanceDepartment("上海分公司财务部"));(7);ConcreteCompanycomp1=newConcreteCompany("南京办事处");comp1.Add(newHRDepartment("南京办事处人力资源部"));comp1.Add(newFinanceDepartment("南京办事处财务部"));(8);//其他代码省略
填空题阅读下列说明、图和C代码,将应填入(n)处的字句写在对应栏内。[说明1]B树是一种多叉平衡查找树。一棵m阶的B树,或为空树,或为满足下列特性的m叉树。①树中每个结点至多有m棵子树;②若根结点不是叶子结点,则它至少有两棵子树:③除根之外的所有非叶子结点至少有[m/2]棵子树:④所有的非叶子结点中包含下列数据信息:(n,A0,K1,A1,K2,A2,…,K11,A11)其中,K(i=1,2,…,n)为关键字,且K<Ki+1(i=1,2,…,n-1);Ai(i=0,1,…,n)为指向子树根结点的指针,且指针Ai-1所指子树中所有结点的关键字均小于Ki,Ai+1所指子树中所有结点的关键字均大于Ki,n为结点中关键字的数目。⑤所有的叶子结点都出现在同一层次上,并且不带信息(可以看作是外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空)。例如,一棵4阶B树如图21-4所示(结点中关键字的数目省略)。B树的阶m、Bool类型、关键字类型及B树结点的定义如下。#defineM4/*B树的阶数*/typedefenumFALSE=0,TRUE=1bool;typedefintE1emKeyType;typedefstructBTreeNodeintnumkeys;/*结点中关键字的数目*/structBTreeNode*parent;/*指向父结点的指针,树根的父结点指针为空*/StructBTreeNode*A[M];/*指向子树结点的指针数组*/ElemKeyTypeK[M];/*存储关键字的数组,K[0]闲置不用*/BTreeNode;函数SearchBtree(BTreeNode*root,ElemKeyTypeakey,BTreeNode**ptr)的功能是:在给定的一棵m阶B树中查找关键字akey所在结点,若找到则返回TRUE,否则返回FALSE。其中,root是指向该m阶B树根结点的指针,参数ptr返回akey所在结点的指针,若akey不在该B树中,则ptr返回查找失败时空指针所在结点的指针。例如,在如图21-4所示的4阶B树中查找关键字akey时,ptr返回指向结点e的指针。注:在结点中查找关键字akey时采用二分法。[本题函数]boolSearchBtree(BTreeNode*root,ElemKeyTypeakey,BTreeNode**ptr)intlw,hikmid;BTreeNode*P=root;*ptr=NULL;while(p)lw=1;hi=(1);while(lw<=hi)mid=(lw+hi)/2;if(p->K[mid]==akey)*ptr=p;returnTRUE;elseif((2))hi=mid-1;elselw=mid+1;*ptr=p;p=(3);returnFALSE;[说明2]在m阶B树中插入一个关键字时,首先在最接近外部结点的某个非叶子结点中增加一个关键字,若该结点中关键字的个数不超过m-1,则完成插入;否则,要进行结点的“分裂”处理。所谓“分裂”,就是把结点中处于中间位置上的关键字取出来并插入其父结点中,然后以该关键字为分界线,把原结点分成两个结点。“分裂”过程可能会一直持续到树根,若树根结点也需要分裂,则整棵树的高度增1。例如,在如图21-4所示的B树中插入关键字25时,需将其插入结点e中,由于e中已经有3个关键字,因此将关键字24插入结点e的父结点b中,并以24为分界线将结点e分裂为e1和e2两个结点,结果如图21-5所示。函数Isgrowing(BTreeNode*root,ElemKeyTypeakey)的功能是:判断在给定的m阶B树中插入关键字akey后,该B树的高度是否增加,若增加则返回TRUE;否则返回FALSE。其中,root是指向该m阶B树根结点的指针。在函数Isgrowing中,首先调用函数SearchBtree,查找关键字akey是否在给定的m阶B树中,若在则返回FALSE(表明无须插入关键字akey,树的高度不会增加);否则,通过判断结点中关键字的数目考察插入关键字akey后该B树的高度是否增加。[本题函数]boolIsgrowing(BTreeNode*root,ElenlKeyTypeakey)BTreeNode*t,*f;if(!SearchBtree((4)))t=f;while((5))t=t->parent;if(!t)returnTRUE:returnFALSE:
填空题阅读以下说明和C++代码,将应填入(n)处的字句写在对应栏内。[说明]传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(已关闭)、Opening(正在打开)、StayOpen(保持打开)、Closing(正在关闭)5种状态。触发传输门状态转换的事件有crick、complete和timeout三种。事件与其相应的状态转换如图18-5所示。下面的“C++代码1”与“C++代码2”分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。[C++代码1]constintCLOSED=1;constintOPENING=2;constintOPEN=3;constintCLOSZNG=4;constintSTAYOPEN=5;//定义状态变量,用不同整数表示不同状态classDoorprivate:intstate;//传输门当前状态voidsetState(intstate)(this->state=state;)//设置当前状态public:Door():state(CLOSED):voidgetstate()//根据当前状态输出相应的字符串switch(state)caseOPENING:cout<<""OPENING""<<end1;break;caseCLOSED:cout<<("CLOSED"<<end1;break;caseOPEN:cout<<"OPEN"<<end1;break;caseCLOSZNG:cout<<"CLOSZNG"<<end1;break;caseSTAYOPEN:cout<<"STAYOPEN"<<end1;break;voidcliok()//发生click事件时进行状态转换if((1))setStsate(OPENING);elseif((2))setState(CLOSZNG);elseif((3))aetState(STAYOPEN);voidtimeout()//发生timeout事件时进行状态转换if(state==OPEN)setState(CLOSZNG);voidcomplete()//发生complete事件时进行状态转换if(state==OPENING)setState(OPEN):elseif(state==CLOSZNG)setState(CLOSED);;intmain()DooraDoor;aDoor.getState();aDoor.click();aDoor.getStaLe();aDoor.Complete();aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();aDoor.getState();return0;[C++代码2]ClassDoorpublic:Doorstate*CLOSED,*OPENING,*0PEN,*CLOSZNG,*STAYOPEN,*state:Door():virtual~Door()……//释放申请的内存,此处代码省略);voidsetState(Doorstate*state)(this->state=state;voidgetState()//此处代码省略,本方法输出状态字符串//例如,当前状态为CLOSED时,输出字符串为"CLOSED";voidC1ick();voidtimeout();voidcomplete();;Door::Door()CLOSED=newDoorClosed(this);OPENING=newDooropening(this);OPEN=newDoorOpen(this);CLOSING=newDoorClosing(this);STAYOPEN=newDoorStayOpen(this);state=CLOSED:voidDoor::C1ick()((4);voidDoor::timeout()((5);voidDoor::complete()((6);classDoorState//定义一个抽象的状态,它是所有状态类的基类protected:Door*door;public:DoorState(Door*door)(this->door=door;virtual~DoorState(void);virtualvoidclick()virtualvoidcomplete()virtualvoidtimeout();classDoorClosed:PubliCDoorState(//定义一个基本的Closed状态public:DoorClosed(Door*door):DoorState(door)Virtual~DoorClosed()voidclick();;voidDoorClosed::click()((7);intmain()DooraDoor;aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.timeout();aDoor.getState();return0;