软件设计师2020试题 2020软件设计师试题 pdf




软件设计师下午考试科目为案例分析,考试题型为主观题,4道必答题,2道(5、6题)选答题,考试时长2个半小时,共75分。 阅读以下说明和c代码,将应填入 (n) 处。 [说明] 在一公文处理系统中,开发者定义了一个公文结构officedoc,其中定义了公文应该具有的属性(字段)。当公文的内容或状态发生变化时,与之相关联的docexplorer结构的值都需要发生改变。一个officedo

软件设计师下午考试科目为案例分析,考试题型为主观题,4道必答题,2道(5、6题)选答题,考试时长2个半小时,共75分。
阅读以下说明和c代码,将应填入 (n) 处。
[说明]
在一公文处理系统中,开发者定义了一个公文结构officedoc,其中定义了公文应该具有的属性(字段)。当公文的内容或状态发生变化时,与之相关联的docexplorer结构的值都需要发生改变。一个officedoc结构能够关联一组docexplorer结构。当officedoc结构的内容或状态发生变化时,所有与之相关联的docexplorer结构都将被更新,这种应用被称为观察者模式。以下代码采用c语言实现,能够正确编译通过。
[c代码]
#include
#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 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 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 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)
软考资料: 2024年软考论文范文> 软考考试核心重点难点汇总> 查看更多>
备考刷题:章节练习+每日一练> 软考历年试题+模拟题>查看更多>