早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->软考中级 -->

阅读以下说明和C代码,将应填入(n)处。[说明] 在一公文处理系统中,开发者定义了一个公文结构Office

题目

阅读以下说明和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 || b==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;

}

参考答案
正确答案:(1) *func (2) struct DocExplorer* (3) doc->index-1或等价形式 (4) doc和doc->myObs[loop]或等价形式 (5) notifyObs(&doc)
(1) *func (2) struct DocExplorer* (3) doc->index-1,或等价形式 (4) doc和doc->myObs[loop],或等价形式 (5) notifyObs(&doc) 解析:DocExplorer中func是中类型,而且根据(1)处的其余部分,此定义是一个函数类型的定义,因此(1)处答案为 *func。
一个OfficeDoc关联多个DocExplorer,因此(2)处应该为Docexplorer或者 DocExplorer*,注释中明确说明是指针,所以答案为DocExplorer*。
for循环中检测doc结构指针是否是需要解除关联的结构,如果是,那么将doc结构数组中最后一个指针覆盖此doc指针所在位置,然后将最后一个指针域置空。所以(3)处应为index-1。
notifyObs函数更新所有与OfficeDoc doc结构相关联的DocExplorer结构。因为 update的第一个参数是OfficeDoc结构指针,第二个参数是DocExplorer结构指针。因此,(4)空处应该填写doc和doc->myObs[loop],表示doc结构和其相关的DocExplorer结构。
第(5)空处要求调用notifyObs方法,其参数要求为一个OfficeDoc结构指针,所以将doc的地址传递给参数,答案为notifyObs(&doc),表示通知所有与doc相关的其他结构。
看了阅读以下说明和C代码,将应填入...的网友还看了以下:

石缝间的生命作者通过对“石缝间的生命”的描写,赞扬了作者怎样的精神?表现了怎样的主题?仔细阅读全文 语文 2020-05-14 …

一本名著带来的诚实王寅阅读答案1贯穿全文的线索是什么?文章表达了作者怎样的思想感情?2说一说下列语 语文 2020-05-22 …

请你评价下面这段话,说一说作者的表达方法毽子好像被一更弹簧绳栓在佳佳脚上似的,不停地在她脚上跳上跳 语文 2020-06-06 …

樵夫,别砍那棵树1、你能理解“原谅我愚蠢的泪水”中的“愚蠢”一词吗?说一说作者的眼泪从何而来?2、 语文 2020-06-19 …

《淡淡的花香》阅读答案1.“当我把百合抱在怀中的时分,真有一种无法描述的高兴与满足.”结合语境说一 语文 2020-06-22 …

淡淡的花香席慕容1.选文写出了作者对“生命”特有的感悟,阅读全文,在理解的基础上,说一说作者认为生 语文 2020-06-22 …

风雨这篇课文,作者有着锐利的眼光,能在狂风暴雨中看清楚景物的细节及其变化,试举课文的一两处,说一说 语文 2020-06-26 …

阅读下面的文言文,完成后面题目。(19分)仲兄①字文甫说(宋)苏洵淘读《易》至《涣》之六四曰:“涣 语文 2020-07-26 …

中,鲁迅把百草园写的有声有色,有形有味,给我们留下的深刻的印象,试着说一说作者是从哪些角度来写的? 其他 2020-12-25 …

《满井游记》作者用了一连串的比喻,形神惧似,景中有情,说一说作者笔下的水像什么?山像什么?作者以什么 语文 2020-12-25 …