首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明和C代码(代码13-4),将应填入(n)处的字句写在对应栏内。 【说明】 在一公文处理系统中,开发者定义了一个公文结构OfficeDoc,其中定义了公文应该具有的属性。当公文的内容或状态发生变化时,与之相关联的DocExplorer结构的值都
阅读以下说明和C代码(代码13-4),将应填入(n)处的字句写在对应栏内。 【说明】 在一公文处理系统中,开发者定义了一个公文结构OfficeDoc,其中定义了公文应该具有的属性。当公文的内容或状态发生变化时,与之相关联的DocExplorer结构的值都
admin
2010-01-15
67
问题
阅读以下说明和C代码(代码13-4),将应填入(n)处的字句写在对应栏内。
【说明】
在一公文处理系统中,开发者定义了一个公文结构OfficeDoc,其中定义了公文应该具有的属性。当公文的内容或状态发生变化时,与之相关联的DocExplorer结构的值都需要发生改变。一个OfficeDoc结构能够关联一组DocExplorer结构。当OfficeDoc结构的内容或状态发生变化时,所有与之相关联的DocExplorer结构都将被更新,这种应用被称为观察者模式。以下代码采用C语言实现,能够正确编译通过。
【代码13-4】
# include<stdio.h>
# define OBS_MAXNUM 20 /*一个OfficeDoc变量最多能够关联的DocExplorer变量的个数*/
typedef void( (1) )(struc OffieeDoc*, struct DoeExplorer*)I;
struct DocExplorer{
func update;/*DocExplorer结构采用的更新函数*/
/*其它的结构字段省略*/
};
struet OffieeDoc{
(2) myObs[OBS_MAXNUM];
/*存储所有与OfficeDoc相关联的DocExplorer结构指针*/
int index;/*与OffieeDoc结构变量相关联的DoeExplorer结构变量的个数*/
};
void attaeh(struct OfficeDoc*doc, struct DocExplorer*ob){
/*关联Observer结构ob与OffieeDoe结构doe*/
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 detaeh(struct OfficeDoc*doc, struct DocExplorer*ob){
/*解除doc结构与ob结构间的关联*/
int loop;
if(ob==NULL)return;
for(loop=0;loop<doc->index; loop++){
if(doe->myObs[loop]==ob){
if(loop<=doc->index-2)
doc->myObs[loop]=doc->myObs[(3)];
doc->myObs[doc->index-1]=NULL;
doc->index——;
breack;
}
}
}
void updatel(struct OfficeDoe*doe, struct DoeExplorer *ob){
/*更新ob结构的值,更新代码省略*/
} void update2(struct OffieeDoc*doc,struet DocExplorer *ob){
/*更新ob结构的值,更新代码省略*/
}
void notifyObs(struct OfficeDoc* doc){
/*当doc结构的值发生变化时,通知与之关联的所有DocExplorer结构变量*/
int loop;
for(loop=0; loop<doc->index; loop++){
(doc->myObs[loop])->update((4));
}
}
void main(){
struct OfficeDoc doc; /*定义一了OfficeDoe变量*/
struct DocExplorer explorer1, explorer2; /*定义两个DocExplorer变量*/
/*初始化与OfficeDoc变量相关的DocExplorer变量个数为0*/
doc.index=0;
explorer1.update=update1; /*设置explorer1变量的更新函数*/
explorer2. update=update2; /*设置explorer2变量的更新函数*/
attach(&doc, &explorer1); /*关联explorer1与doc对象*/
attach(&doc, &explorer2); /*关联explorer2与doc对象*/
/*其它代码省略*/
(5); /*通知与OfficeDoe相关的所有DoeExploer变量*/
return;
}
选项
答案
(1)*func (2)struct DocExplorer* (3)doc->index-1,或等价形式(4)doc,doc->myObs[loop],或等价形式 (5)notifyObs(&doc)
解析
在结构体DocExplorer的定义中,func是一种类型,语句“func update;”定义了类型为 func的变量update,又根据(1)空所在行的其它信息,可知typedef是在声明指向函数的指针类型,该函数的参数列表为(struc OfficeDoc*,struct DocExplorer*),返回值类型为 void,因此第(1)空填:*func。这是用tpyedet。声明指向函数的指针类型的格式。
根据第(2)空下一行的注释可知,该语句是将DocExplorer结构体指针存储在OfficeDoc中,所以可知第(2)空是定义一个DocExplorer指针数组变量,因此,第(2)空填: struct DocExplorer*。
根据函数detach里面的语句“doc->myObs[doc->index-1]=NULL;doe-> index——;”可知,其功能是使关联个数减1。并将数组。myObs的最后一个关联结构体的指针置空。如果要解除关联的是数组的最后一个元素doc->myObs[doc->—index-1],那么可直接将其置空;但如果要解除关联的结构体不是最后一个呢?显然,语句:
if(loop<=doc->—index-2)
doc->—myObs[loop]=doc->—myObs[ (3) ];便是用来处理这种情况的。由于关联总个数减1,导致最后一个元素丢失,而在这种情况下要解除关联的结构体并非最后一个元素,因此不能丢失最后一个元素,而要将其保存在要解除关联的结构体指针中,这样一举两得,既保存了不该解除的,又解除了该解除的结构体。因此,第(3)空填:doe->index-1。
第(4)空是要填函数update的实参列表,而update是func类型,对照第(1)空所在行的形参列表,显然可得第(4)空填“doc,doc->myObs[loop]”。特别要注意,不能少了逗号,因为update函数有两个参数。
函数notifyObs的形参为结构体OfficeDoc的指针类型,因此第(5)空在调用该函数时要传递一个地址,所以填:notifyObs(&doc)。
转载请注明原文地址:https://kaotiyun.com/show/FcDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
在面向对象技术中,(43)是一组具有相同结构、相同服务、共同关系和共同语义的(44)集合,其定义包括名称、属性和操作。(44)
以下关于汇编语言的叙述中,错误的是______。A.汇编语言源程序中的指令语句将被翻译成机器代码B.汇编语言的指令语句必须具有操作码字段,可以没有操作数字段C.汇编程序以汇编语言源程序为输入,以机器语言表示的目标程序为输出D.汇编程序先将源程序中的
某文件管理系统采用位示图(bitmap)记录磁盘的使用情况。如果系统的字长为32位,磁盘物理块的大小为4MB,物理块依次编号为:0、1、2、…,位示图字依次编号为:0、1、2、…,那么16385号物理块的使用情况在位示图中的第(24)个字中描述;如果磁盘的
假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间为10μs,由缓冲区送至用户区的时间是5μs,系统对每个磁盘块数据的处理时间为2μs。若用户需要将大小为10个磁盘块的Docl文件逐块从磁盘读入缓冲区,并送至用户区进行处理,那么采用单缓冲区需要花费的时间
______不是正确的软件测试目的。A.尽最大的可能找出最多的错误B.设计一个好的测试用例对用户需求的覆盖度达到100%C.对软件质量进行度量和评估,以提高软件的质量D.发现开发所采用的软件过程的缺陷,进行软件过程改进
关于软件著作权产生的时间,表述正确的是(10)。
在编码阶段对系统执行的测试类型主要包括单元测试和集成测试,(40)属于单元测试的内容。
对某商店业务处理系统采用数据流图(DFD)进行功能建模,其中“检查订货单”是其中的一个①。由于在进行订货单检查时,需要根据客户的欠款情况、订单金额等多个条件判断是否采取发出催款单、准备货物、发出发货单等行为,此时适合采用②进行描述。②处
某软件公司项目组的程序员在程序编写完成后均按公司规定撰写文档,并上交公司存档。此情形下,该软件文档著作权应由______享有。
软件测试使用各种术语描述软件出现的问题,以下叙述正确的是______。A.软件错误(error)是指在软件生命周期内的不希望或不可接受的人为错误,其结果是导致软件故障的产生B.软件缺陷(defect)是存在于软件(文档、数据、程序)之中的那些不希望或不
随机试题
在对管道FBE涂层补口时,采用的工艺是高压静电喷涂。
哪一种物质不是初级胆汁酸?
某企业第1年初向银行借款500万元,年利率为7%,银行规定每季度计息一次。若企业向银行所借本金与利息均在第4年末一次支付,则支付额为( )万元。
下列属于输出设备常见的有()。
借款人应当向银行如实提供所有开户行、账号及存贷款余额情况,使银行可以真实掌握借款人资金运行情况。银行通过调查、审查、检查了解借款人的生产经营情况,确保贷款的()
“如果你的两个得力下属一直吵架.你会怎么处理?”这类问题属于()。
哪一个运动员不想出现在奥运会的舞台上,并在上面尽情表演?如果以上陈述为真,以下哪项陈述必定为假?()
为了防止森林火灾,美国的森林专家想出了一个“以火防火”的好办法:要求森林管理人员定期选择风速小、气温低、温度大的天气,人为烧去乔木下面的小树、灌木、干枝和枯叶,以预防自然起火,并有助于扑灭森林大火。由此不可推出的结论是( )。
做产品的初心,一定可以归结到便利二字,因为一切新技术、能促使消费者大规模换代的新产品,大多是为了解决现实世界中_______的、不够便利的问题而生。因此,真正能做到了“简便”的产品,往往是_______的。填入画横线部分最恰当的一项是:
青藏铁路(Qinghai-TibetRailway)是西部大开发(WesternDevelopmentProgram)的标志性工程,是中国新世纪四大工程之一。该铁路东起青海西宁,西至西藏拉萨,全长1956公里。新建线路1110公里,于2001年6月2
最新回复
(
0
)