考试总分:7分
考试类型:模拟试题
作答时间:60分钟
已答人数:967
试卷答案:有
试卷介绍: 2005年下半年软件设计师下午试题
A(1)____)(strucOfficeDoc*,structDocExplorer*);structDocExplorer{funcupdate;/*DocExplorer结构采用的更新函数*//*其它的结构字段省略*/};structOfficeDoc{___
B(2)____myObs[OBS_MAXNUM];/*存储所有与OfficeDoc相关联的DocExplorer结构指针*/intindex;/*与OfficeDoc结构变量相关联的DocExplorer结构变量的个数*/};voidattach(structOfficeDoc*doc,structDocExplorer*ob){/*关联Obersver结构ob与OfficeDoc结构doc*/intloop=0;if(doc->index>=OBS_MAXNUM||ob==NULL)return;for(loop=0;loopindex;loop++)if(doc->myObs[loop]==ob)return;doc->myObs[doc->index]=ob;doc->index++;}voiddetach(structOfficeDoc*doc,structDocExplorer*ob){/*解除doc结构与ob结构间的关系*/intloop;if(ob==NULL)return;for(loop=0;loopindex;loop++){if(doc->myObs[loop]==ob){if(loopindex-2)doc->myObs[loop]=doc->myObs[____
C(3)____];doc->myObs[doc->index-1]=NULL;doc->index--;breack;}}}voidupdate1(structOfficeDoc*doc,structDocExplorer*ob){/*更新ob结构的值,更新代码省略*/}voidupdate2(structOfficeDoc*doc,structDocExplorer*ob){/*更新ob结构的值,更新代码省略*/}voidnotifyObs(structOfficeDoc*doc){/*当doc结构的值发生变化时,通知与之关联的所有DocExplorer结构变量*/intloop;for(loop=0;loopindex;loop++){(doc->myObs[loop])->update(____
D(4)____);}}voidmain(){structOfficeDocdoc;/*定义一OfficeDoc变量*/structDocExplorerexplorer1,explorer2;/*定义两个DocExplorer变量*//*初始化与OfficeDoc变量相关的DocExplorer变量个数为0*/doc.index=0;explorer1.update=update1;/*设置explorer1变量的更新函数*/explorer2.update=update2;/*设置explorer2变量的更新函数*/attach(&doc,&explorer1);/*关联explorer1与doc对象*/attach(&doc,&explorer1);/*关联explorer1与doc对象*//*其它代码省略*/_____
E(5)____;/*通知与OfficeDoc相关的所有DocExploer变量*/return;}[15分]
A(1)____;for(i=0;i<ITEMS;i++)/*在基桶查找空闲单元,若找到则将元素存入*/if(Bucket[Index].KeyData[i]==NULLKEY){Bucket[Index].KeyData[i]=NewElemKey;break;}if(____
B(2)____)return0;/*若基桶已满,则在溢出桶中查找空闲单元,若找不到则申请新的溢出桶*/_____
C(3)_____;t=Bucket[Index].Link;if(t!=NULL){/*有溢出桶*/while(t!=NULL){for(k=0;kKeyData[k]==NULLKEY){/*在溢出桶链表中找到空闲单元*/t->KeyData[k]=NewElemKey;break;}/*if*/if(____
D(4)____)t=t->Link;elsebreak;}/*while*/}/*if*/if(____
E(5)____){/*申请新溢出桶并将元素存入*/s=(BUCKET*)malloc(sizeof(BUCKET));if(!s)return-1;s->Link=NULL;for(k=0;kKeyData[k]=NULLKEY;s->KeyData[0]=NewElemKey;_____
F(6)_____;}/*if*/return0;}/*InsertToHashTable*/[15分]
A(1)____;classDocExploer{//关注OfficeDoc公文对象的类public:DocExplorer(____
B(2)____*doc);//构造函数_____
C(3)____voidupdate(OfficeDoc*doc)=0;//更新自身状态的函数//其它相关属性和方法省略}classOfficeDoc{//公文类private:DocExploer*myObs[OBS_MAXNUM];//关注此公文类的DocExplorer类对象指针数组intindex;//与OfficeDoc对象关联的DocExploer对象的个数public:OfficeDoc(){index=0;}voidattach(DocExploer*o){//将一DocExploer对象与OfficeDoc对象相关联if(index>=OBS_MAXNUM||o==NULL)return;for(intloop=0;loop____
D(4)____;//DocExplorer对象更新自身状态}}//其它公文类的相关属性和方法};DocExplorer::DocExplorer(OfficeDoc*doc){//DocExploer类对象的构造函数doc->____
E(5)____;//将此DocExplorer对象与doc对象相关联}[15分]
A(1)___个TenPopulate实例对象最合适,一个TenPopulate类实例对象最多需要和____
B(2)____个Items_on_loan实例对象交互。[15分]
A(1)____);}//OfficeDoc.java文件importjava.util.*;publicclassOfficeDocimplementsSubject{//OfficeDoc类实现Subject接口privateVectorObserverVector=newjava.util.Vector();//存储与OfficeDoc相关联的DocExplorer对象publicvoidattach(Obseverobserver){//将某DocExplorer对象与OfficeDoc相关联ObserverVector.addElement(observer);}publicvoiddetach(Observerobserver){//解除某DocExplorer对象与OfficeDoc的关联关系ObserverVector.removeElement(observer);}publicvoidnotifyObservers(){//当OfficeDoc对象状态已发生变化时,通知所有的DocExplorer对象Enumerationenumeration=______
B(2)_____;while(enumeration.hasMoreElements()){((Observer)enumeration.nextElement())._____
C(3)_____;}}publicEnumerationObservers(){returnObserverVector.elements();}//其它公文类的属性和方法省略}//DocExplorer.java文件publicclassDocExplorerimplements_____
D(4)____{publicvoidupdate(____
E(5)____){//更新DocExplorer自身的状态,代码省略}}[15分]