2005年下半年软件设计师下午试题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2005年下半年软件设计师下午试题及答案下午试题
C++题目#include
const OBS_MAXNUM=20;
__(1)___;
class DocExplorer{
public:
DocExplorer ((2)*doc);
___(3)___ void update(OfficeDoc *doc)=0;
};
class OfficeDoc {
private:
DocExplorer *myObs[OBS_MAXNUM]
int index;
public:
OfficeDoc(){
index=0;
void attach (DocExplorer *o){
if (index >=OBS_MAXNUM||o== NULL) return;
for (int loop = 0; loop if(myObs[loop] == o) return;
myObs[index] = o;
index++;
}
void detach(DocExplorer) *o{
if(o==null) return;
for (int loop = 0;loop if(myObs[loop] ==o){
if(loop<=index-
2) myObs[loop] = myObs[index-1];
myObs[index-1]=NULL;
index--;
break;
}
}
}
private:
void notifyObs() {
for(int loop=0;loop
myObs[loop]->____(4)____;
}
};
DocExplorer:ocexplorer(OfficeDoc *doc){
doc->______(5)_____;
}
试题四:
散列文件的存储单位称为桶(BUCKET)。
假如一个桶能存放m个记录,当桶中已经有m个同义词(散列函数值相同)的记录时,存放第m+1个同义词会发生“益出”。
此时需要将第m+1个同义词存放到另一个“益出桶”的桶中。
相对的,称存放前m个同义词的桶称为基桶。
益处桶和基桶大小相同,用指针链接。
查找指定元素记录时,首先在基桶中查找。
若找到,则成功返回,否则沿指针到益处桶中查找。
为了简化起见,散列文件的存储单位以内存单元表示。
函数InsertToHashTable(int NewElemKey)的功能是:若新的元素NewElemKey正确插入散列文件中。
则返回1,否则 0。
采用的散列函数为Hash(NewElemKey)= NewElemKey% P,其中P 为设定的基桶数目。
函数中使用的预定仪符号为:
#define NULLKEY –1 /*散列桶的空闲单元标示*/
#define P 7 /*散列文件基桶的数目*/
#define ITEMS 3 /*基桶和益处桶的容量*/
typedef struct BucketNode{ /*基桶和益处桶的类型定义*/ int KeyData[ITEMS];
struct BucketNode *link;
}BUCKET;
BUCKET Bucket
; /*基桶的空间定义*/
Int InsertToHashTable(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 ==NULLKEY)
{
Bucket[Index].KeyData = NewElemKey; break;
}
if(____(2)___) return 0; /*若基桶已满,则在益出桶查找空闲单元,若找到则申请新的益出桶*/
_________(3)___; t = Bucket[Index].Link;
if(t!= NULL)
{
while(t != NULL)
{
for (k=0;kif (tà KeyData[k] == NULLKEY) /*在益出桶链表中找到空闲单元*/
{
tà KeyData[k] = NewElemKey; break;
}/*if*/
front = t;
if (___(4)___) t = tàLink;
else break;
}/*while*/
}
if(___(5)___) /*申请新的益出桶并将元素存入*/ {
s=(BUCKET *)malloc(sizeof(BUCKET));
if (!s) return –1;
sàLink = NULL;
for(k = 0;ksà KeyData[k] = NULLKEY;
sà KeyData[0] = NewElemKey;
______(6)____;
}
return 0;
}
网友一答案
下午两道:
第四道C的
1.index=NewDataKey%P
2.i
3.front=Bruster+index或者front=&Bruster[index] 4,t->Link!=NULL
5,t==NULL
6.front->Link=s
1.class OfficeDoc
2.OfficeDoc
3.virtual
4.updata(this)
5.attch(this)
网友二答案
第四道
1.index=NewDataKey%P
2.i
3.front=Bruster+index或者front=&Bruster[index] 4,t->Link!=NULL
5,t==NULL
6.front->Link=s
第五道:
1.class OfficeDoc
2.OfficeDoc
3.virtual
4.updata(this)
5.attch(this)
网友三答案
1.index=NewDataKey%P
2.i
3.front=&Bruster[index]
4.k>=ITEMS
5,t==NULL
6.front->Link=s
第五道:
1.class OfficeDoc
2.OfficeDoc
3.virtual
4.updata(this)
5.attch(this)。