软题库 学习课程
当前位置:信管网 >> 在线考试中心 >> 信息系统项目管理师题库 >> 试题查看
试卷年份2005年下半年
试题题型【分析简答题】
试题内容

试题七
阅读以下说明和C代码,将应填入  (n)  处。
[说明]
在一公文处理系统中,开发者定义了一个公文结构OfficeDoc,其中定义了公文应该具有的属性(字段)。当公文的内容或状态发生变化时,与之相关联的DocExplorer结构的值都需要发生改变。一个OfficeDoc结构能够关联一组DocExplorer结构。当OfficeDoc结构的内容或状态发生变化时,所有与之相关联的DocExplorer结构都将被更新,这种应用被称为观察者模式。以下代码采用C语言实现,能够正确编译通过。
[C代码]
#include <stdio.h>
#define OBS_MAXNUM 20  /*一个OfficeDoc变量最多能够关联的*/
/*DoeExplorer变量的个数*/
typedef void(  (1)  )(struct OfficeDoc*,street DocExplorer*);
struct DocExplorer{
func update;/* DocExplorer结构采用的更新函数*/
/*其他的结构字段省略*/
};
struct OfficeDoc{
(2)  myObs[OBS_MAXNUM];
/*存储所有与OfficeDoc相关联的DoeExplorer结构指针*/
int index;/*与OfficeDoc结构变量相关联的DocExplorer结构变量的个数*/
};
void  attach(struet OfficeDoc *doc, struet DocExplorer *ob){
/*关联Obersver结构ob与OfficeDoe结构doc*/
int loop=0;
if(doc->index >=OBS_MAXNUM || ob==NULL) return;
for(loop=0; loop <doc->index; loop++)
if(doc->myObs[loop]==ob)return;
doc->myObs[doe->index]=ob;
doc->index++;
)
void  detach(struct OfficeDoc *doc, struct DocExplorer *ob){
/*解除doc结构与ob结构间的关系*/
int loop;
if(ob==NULL)return;
for(loop=0; loop <doc->index; loop6++){
if(doc->myObs[loop]==ob){
if(loop<=doc->index-2)
doe->myObs[loop]=doc->myObs[  (3)  ];
doc->myObs[doe->indox-1]=NULL;
doe->index--;
break;
}
}
}
void updatel(struct OfficeDoc *doc,struct DocExplorer *ob){
/*更新ob结构的值,更新代码省略*/
}
void update2(stmct OfficeDoc *doc, struct DocExplorer *ob){
/*更新ob结构的值,更新代码省略*/
}
void notifyObs(struet OfficeDoc *doc){
/*当doc结构的值发生变化时,通知与之关联的所有DocExplorer结构变量*/
int loop;
for(loop=0; loop <doc->index; loop++){
(doc->myObs[loop])->update(  (4)  );
}
}
void main(){
stmct OfficeDoc doc;/*定义一OfficeDoc变量*/
struct DocExplorer explorer1, explorer2;/*定义两个DocExplorer变量*/
/*初始化与OfficeDoc变量相关的DocExplorer变量个数为0*/
doc.index=0;
explorer1.update=update1;/*设置explorer1变量的更新函数*/
explorer2.update=update2;/*设置explorer2变量的更新函数*/
attaeh(&doc,&explorer1);/*关联explorer1与doc对象*/
attach(&doc,&explorer2);/*关联explorer2与doc对象*/
/*其他代码省略*/
(5)  ;/*通知与OfficeDoc相关的所有DocExplorer变量*/
return;
}

查看答案

相关试题

4题:

试题四
阅读下列函数说明、图和C代码,将应填入  (n)  处的字句。
[说明]
散列文件的存储单位称为桶(BUCKET)。假如一个桶能存放m个记录,当桶中已有 m个同义词(散列函数值相同)的记录时,存放第m+1个同义词会发生“溢出”。此时需要将第m+1个同义词存放到另一个称为“溢出桶”的桶中。相对地,称存放前m个同义词的桶为“基桶”。溢出桶和基桶大小相同,用指针链接。查找指定元素记录时,首先在基桶中查找。若找到,则成功返回,否则沿指针到溢出桶中进行查找。
例如:设散列函数为Hash(Key)=Key mod 7,记录的关键字序列为15,14,21,87,97,293,35,24,149,19,63,16,103,77,5,153,145,356,51,68,705,453,建立的散列文件内容如图4-1所示。
[图4-1]

为简化起见,散列文件的存储单位以内存单元表示。
函数InsertToHashTable(int NewElemKey)的功能是:将元素NewEIemKey插入散列桶中,若插入成功则返回0,否则返回-1。
采用的散列函数为Hash(NewElemKey)=NewElemKey % P,其中P为设定的基桶数目。
函数中使用的预定义符号如下:
#define NULLKEY  -1           /*散列桶的空闲单元标识*/
#define P   7                 /*散列文件中基桶的数目*/
#define ITEMS  3              /*基桶和溢出桶的容量*/
typedef struct BucketNode{    /*基桶和溢出桶的类型定义*/
int KcyData[ITEMS];
struct BucketNode *Link;
}BUCKET;
BUCKET Bucket[P];             /*基桶空间定义*/
[函数]
int lnsertToHashTable(int NewElemKey){
/*将元素NewElemKey插入散列桶中,若插入成功则返回0,否则返回-1*/
/*设插入第一个元素前基桶的所有KeyData[]、Link域已分别初始化为NULLKEY、
NULL*/
int Index;    /*基桶编号*/
int i,k;
BUCKET *s,*front,*t;
(1)  ;
for(i=0; i<ITEMS;i++)/*在基桶查找空闲单元,若找到则将元素存入*/
if(Bucket[Index].KeyData[i]=NULLKEY){
Bucket[Index].KeyData[i]=NewElemKey;  break;
}
if(  (2)  ) return 0;
/*若基桶已满,则在溢出桶中查找空闲单元,若找不到则申请新的溢出桶*/
(3)  ;        t=Bucket[Index].Link;
if(t!=NULL)   {/*有溢出桶*/
while (t!=NULL){
for(k=0; k<ITEMS; k++)
if(t->KeyData[k]=NULLKEY){/*在溢出桶链表中找到空闲单元*/
t->KeyData[k]=NewElemKey;   break;
}/*if*/
front=t;
if(  (4)  )t=t->Link;
else break;
}/*while*/
}/*if*/
if(  (5)  ) {/*申请新溢出桶并将元素存入*/
s=(BUCKET*)malloe(sizeof(BUCKET));
if(!s)  return-1;
s->Link=NULL;
for(k=0; k<ITEMS; k++)
s->KeyData[k]=NULLKEY;
s->KeyData[0]=NewElemKey;
(6)  ;
}/*if*/
return 0;
}/*InsertToHashTable*/



答案解析与讨论:www.cnitpm.com/st/2453217604.html

5题:

试题五
阅读以下说明和C++代码,将应填入  (n)  处。
[说明]
在一公文处理系统中,开发者定义了一个公文类OfficeDoc,其中定义了公文具有的属性和处理公文的相应方法。当公文的内容或状态发生变化时,关注此OfficeDoc类对象的相应的DocExplorer对象都要更新其自身的状态。一个OfficeDoc对象能够关联一组 DocExplorer对象。当OfficeDoc对象的内容或状态发生变化时,所有与之相关联的 DocExplorcr对象都将得到通知,这种应用被称为观察者模式。以下代码写在一个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:
OfficeDoe()
index=0;
}
void  attach(DocExplorer *o){
//将一DoeExplorer对象与OfficeDoe对象相关联
if(index >=OBS_MAXNUM ||o=NULL)return;
for(int loop=0; loop<index; loop++)
if(myObs[loop]==o) return;
myObs[index]=o;
index++;
}
void  detaeh(DocExplorer *o){
//接触某DoeExplorer对象与OfficeDoc对象的关联
if(0==NULL) return;
for(int loop=0; loop<index; loop++){
if(myObs[loop]==o){
if(loop<=index-2)myObs[loop]=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对象相关联
}

答案解析与讨论:www.cnitpm.com/st/2453319636.html

6题:

试题六
阅读以下说明和Java代码,将应填入  (n)  处。
[说明]
在一公文处理系统中,开发者定义了一个公文类OfficeDoc,其中定义了公文具有的属性和处理公文的相应方法。当公文的内容或状态发生变化时,关注此OfficeDoc类对象的相应的DocExplorer对象都要更新其自身的状态。一个OfficeDoc对象能够关联一组 DocExplorer对象。当OfficeDoc对象的内容或状态发生变化时,所有与之相关联的 DocExplorer对象都将得到通知,这种应用被称为观察者模式。以下代码采用Java语言实现,能够正确编译通过。
[Java代码]
//Subject.java 文件
public interface Subject {
public void attach(Observer DocExplorer);
public void detach(Observer DocExplorer);
void notifyObservers();
}
//Observer.java 文件
public interface Observer{
void update(  (1)  );
}
//OfficeDoc.java 文件
import java.util.*;
public class OfficeDoc implements Subject(//OfficeDoc 类实现 Subject 接口
private Vector ObserverVeetor=new java.util.Vector();
//存储与OfficeDoc相关联的DocExplorer 对象
public void attach(Observer  observer){
//将某 DocExplorer 对象与OfficeDoc 相关联
ObserverVector.addElement(observer);
}
public void detach(Observer observer){
//解除某DocExplorer 对象与OfficeDoc的关联关系
ObserverVector.removeElement(observer);
}
public void notifyObservers(){
//当OfficeDoc对象状态已发生变化时,通知所有的DocExplorer对象
Enumeration enumeration=  (2)  ;
while (enumeration.hasMoreElements()){
((Observer)enumeration.nextElement()).  (3)  ;
}
}
public Enumeration Observers(){
return  ObserverVector.elements();
}
//其他公文类的属性和方法省略
}
//DoeExplorer.java 文件
public class DocExplorer implements   (4)  {
public void update(  (5)  ){
//更新DocExplorer自身的状态,代码省略
}
}

答案解析与讨论:www.cnitpm.com/st/2453419400.html