软件水平考试

解析:[C代码] #include <stdio.h> #defin

来源:网考网软件水平 所有评论

【分析解答题】[C代码] #include <stdio.h> #define OBS_MAXNUM 20 /*一个OfficeDoc变量最多能够关联的*/ /*DoeExplorer变量的个数*/ typedef void({{U}} (1) {{/U}})(struct OfficeDoc*,streetDocExplorer*); structDocExplorer{ func update;/*DocExplorer结构采用的更新函数*/ /*其他的结构字段省略*/ }; struct OfficeDoc{ {{U}} (2) {{/U}}myObs[OBS_MAXNUM]; /*存储所有与OfficeDoc相关联的DoeExplorer结构指针*/ int index;/*与OfficeDoc结构变量相关联的DocExplorer结构变量的个数*/ }; void attach(struet OfficeDoc *doc, struetDocExplorer *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, structDocExplorer *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[{{U}} (3) {{/U}}]; doc->myObs[doe->indox-1]=NULL; doe->index--; break; } } } void updatel(struct OfficeDoc *doc,structDocExplorer *ob){/*更新ob结构的值,更新代码省略*/ } void update2(stmct OfficeDoc *doc, structDocExplorer *ob){/*更新ob结构的值,更新代码省略*/ } void notifyObs(struet OfficeDoc *doc){ /*当doc结构的值发生变化时,通知与之关联的所有DocExplorer结构变量*/ int loop; for(loop=0; loop <doc->index; loop++){(doc->myObs[loop])->update({{U}} (4) {{/U}}); } } void main(){stmct OfficeDoc doc;/*定义一OfficeDoc变量*/structDocExplorer 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对象*//*其他代码省略*/{{U}} (5) {{/U}};/*通知与OfficeDoc相关的所有DocExplorer变量*/return; }
网考网解析:
试题答案: 答案解析:(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相关的其他结构。 document.getElementById("warp").style.display="none"; document.getElementById("content").style.display="block"; 查看试题解析出处>>

相关推荐

发布评论 查看全部评论