【计算机类职业资格】中级软件设计师下午试题-79及答案解析.doc
《【计算机类职业资格】中级软件设计师下午试题-79及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】中级软件设计师下午试题-79及答案解析.doc(18页珍藏版)》请在麦多课文档分享上搜索。
1、中级软件设计师下午试题-79 及答案解析(总分:105.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)阅读下列说明和图,回答问题 1 至问题 3,将解答填入对应栏内。 说明 某汽车数字仪表系统将完成下述功能: (1)通过模一数转换,实现传感器和微处理器的接口。 (2)在发光二极管面板上显示数据。 (3)指示速度(mph)、行驶里程、油耗(mpg)等。 (4)指示加速或减速。 以下是经分析得到的数据流图,有些地方有待填充,假定顶层数据流图是正确的。图 1-1 是顶层数据流图,图 1-2 是第 0 层数据流图,图 1-3 是第 1 层数据流图,其中 A 是加工 1 的
2、细化图,B 是加工 2 的细化图。图中,sps 表示转速 sps 的瞬时变化值,若sps0 则汽车加速,sps0 则减速,sps=0 则匀速。假定题中提供的顶层图是正确的,请回答下列问题。图 1-1 图 1-2 图 1-3 (分数:15.00)(1).第 0 层数据流图(图 1-2)中有一条缺失的数据流,请指出该数据流的起点和终点。 加工 1 的细化图(图 1-3 中的 A)中有一条缺失的数据流,请指出该数据流的起点和终点。 (分数:5.00)_(2).加工 2 的细化图(图 1-3 中的 B)中有一条错误的数据流,请指出该数据流的起点或终点(若可以,指出两者)。 (分数:5.00)_(3).
3、小说明是用来描述加工的。小说明的描述方法有哪些?请分别用这些描述方法描述加工 1.2。 (分数:5.00)_二、B试题二/B(总题数:1,分数:15.00)阅读下列说明和 E-R 图,回答问题 1 至问题 3,将解答填入对应栏内。 说明 设有下列关于学生成绩管理系统的 E-R 图(见图 2-1)。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体间的联系。假定已通过下列 SQL 语言建立了基本表:(分数:15.00)(1).(分数:2.50)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_三、B试题三/B(总题数:1,分数:15.00)阅读以下说明和程序流程图
4、,将应填入U (n) /U处的字句写在对应栏内。 说明 当一元多项式中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指受和对应系数。为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指数递减顺序存储。例如:多项式 8x5-2x2+7 的存储结构为: 流程图图 3-1 用于将 pC(Node 结构体指针)节点按指数降序插入到多项式 C(多项式 POLY 指针)中。 流程图中使用的符号说明如下: (1)数据结构定义如下: #define EPSI 1e-6 struct Node /*多项式中的一项*/ double c; /*系数*/ int
5、e; /*指数*/ Struct Node *next; typedef struct /*多项式头节点*/ int n; /*多项式不为零的项数*/ struct Node *head; POLY; (2)Del(POLY *C,struct Node *p)函数,若 p 是空指针则删除头节点,否则删除 p 节点的后继。 (3)fabs(double c)函数返回实数 C 的绝对值。 图 3-1 (分数:15.00)(1).(分数:3.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_四、B试题四/B(总题数:1,分数:15.00)阅读下列说明和 C 程序,将应填入U (n) /
6、U处的字句写在对应栏中。 说明 借助一个栈结构,可实现二叉树的非递归遍历算法。InOrderTraverse 数实现中序非递归遍历,遍历过程如下: 若不是空树,根节点入栈,进入左子树;若已经是空树,则栈顶元素出栈,访问该元素(根节点),进入该节点的右子树,继续直到遍历完成。 函数中使用的预定义符号如下: typedef struct BiTNode int data; struct BiTNode *iChiid,*rChiid; BiTNode,*BiTree; typedef struct SNode/*链栈的节点类型*/ BiTree elem; struct SNode *next;
7、SNode; 函数 int InOrderTraverse(BiTree root) BiTree P; SNode *q,*stop=NULL;/*不带头节点的单链表作为栈的存储结构*/ P=root; while(p !=NULL | stop !=NULL) if(U (1) /U) /*不是空树*/ q=(SNode*)malloc(sizeof q); if(q=NULL)return-1; /*根节点指针入栈*/ U (2) /U; q-elem=P; stop=q; P=U (3) /U; /*进入根的左子树*/ else q=stop; U (4) /U; /*栈顶元素出栈*/
8、 printf(“%d|,q-elem-data); /*防问根节点*/ P=U (5) /U; /*进入根的右子树*/ free(q); /*释放原栈顶元素*/ /*if*/ /*while*/ return 0; /*InOrderTraverse*/ (分数:15.00)(1).(分数:3.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_五、B试题五/B(总题数:1,分数:15.00)阅读下列函数说明和 C+代码,将应填入U (n) /U处的字句写在对应栏内。 说明 在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(包括不用的功能)都要全面
9、初始化的话,会导致应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。 以下示例展示了 Proxy(代理)模式,PrinterProxy 类执行一些比较“轻”的方法,需要真正执行“重”的方法时才初始化 Print 类。图 5-1 显示了各个类间的关系。 图 5-1 C+代码 class Printable public: virtual void setPrinterName(string name)=0; virtual string getprinterName()=0; virtual void print(string name)=0; ; cl
10、ass Printer:public Printable private: string name; public: Printer(string name) cout“正在产生 Printer 的对象实例“endl; thisname=name; void setPrinterName(string name) this-name=name; string getPrinterName() return name; void print(string msg) cout“=“name“=“endl; coutmsgendl; ; class printerproxy :publicU (1)
11、 /U private: String name; Printer *real; public: PrinterProxy(string name) U (2) /U=NULL; this-name=name; void setPrinterName(string name) if(U (3) /U)real-setPrinterName(name); this-name=name; string getPrinterName() return name; void print(string msg) U (4) /U; real-print(msg); void realize() if(r
12、eal=NULL)real=U (5) /U; ;(分数:15.00)(1).(分数:3.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_六、B试题六/B(总题数:1,分数:15.00)阅读以下说明和 Java 代码,将应填入U (n) /U处的字句写在对应栏内。 说明 在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(连不用的功能)都要全面初始化的话,会连带影响到应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。 以下示例展示了 Proxy(代理)模式,PrinterProxy 类执行一些比较“轻”的方
13、法设置名称和取得名称,需要真正执行“重”的方法真正打印时才初始 Print 类。图 6-1 显示了各个类间的关系。 图 6-1 Java 代码 /Printable.Java publiCU (1) /UPrintable public abstract void setPrinterName(String name); public abstract String getprinterName(); public abstract void print(String string); /Printer.Java public class Printer implements Printabl
14、e private String name; public Printer() System.out.println(“正在产生 Printer 的对象实例“); public Printer(String name) this.name=name; heavyJob(“正在产生 Printer 的对象实例(“+name+“)“); public void setPrinterName(String name) this.name=name; public String getPrinterName() return name; public void print(String string)
15、 System.out.println(“=“ +name+“ =“); System.out.println(string); /PrinterProxy.Java public class PrinterProxyU (2) /UPrintable private String name; private Printer real; public PrinterProxy() public PrinterProxy(String name) this.name=name; public gynchronized void setPrinterName(String name) if(U (
16、3) /U) real.setPrinterName(name); this.name=name; public String getprinterName() return name; public void print(String string) U (4) /U; real.print(string); private synchronized void realize()/产生真正的 Printer 对象 if(real=null) real=U (5) /U; (分数:15.00)(1).(分数:3.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_七、B试题七/B(总
17、题数:1,分数:15.00)阅读以下说明和 C 代码,将应填入U (n) /U处的字句写在对应栏内。 说明 下面程序用来将打乱的单词还原为原来的次序,比如将 rty 还原为 try。单词的原来次序存储于wordlist.txt 文件中,原则上可用穷举法(rty 对应的穷举为:rty、ryt、try、tyr、ytr、yrt),但考虑到破译速度,采用如下方法。 注意到单词列表中不存在组成字符完全相同的单词(如 Hack12 与 Hack21 包含完全相同的字符),因此将单词中的字符进行重组再进行比较,例如,try 单词重组为 rty(按 ASC码顺序),这样不管打乱的单词是什么顺序,只要是由 r、
18、t、y 三个字母组成的均破译为 try,大大提高破译速度。程序中借助二叉排序树以进一步提高查找效率,二叉排序树左子树(如果有)上的节点对应的值均小于根节点的值,右子树(如果有)上的节点对应的值均大于根节点的值。 函数中使用的符号定义如下: #define NumberofWords 1275/单词总数 #define MaxLength 10/最长单词所含字符数 char WordListNumberofWordsMaxLength;/存储单词列表 int cmp(Node *q,Node *p);/q 与 p 比较。p 小,返回负值;P 大返回正值:相等,返回 0 typedef struc
19、t Node(/二叉树节点 char *eleLetters;/重组后的字符串 int index;/对应单词表中的下标 struct Node *lChiId,*rChiid;/左右子节点 Node; C 代码 void reCompose(Node *p,char *temp) /重纰,亦即将 temp 字符串中的字符升序排序,存储于 p 节点中 /采用直接插入排序法 char c; strcpy(p-eleLetters,temp);/ int len=strlen(temp); int i,j,k; for(i=0;ilen1;i+) k=i; for(j=i+1;jlan;j+) i
20、f(p-eleLettersjP-eleLettersk)k=J; if(U (1) /U) C=P-eleLettersi; P-eleLettersi=P-eleLettersk; P-eleLettersk=c; /if /for ; int find(Node &root,char *temp) /在二叉排序树 root 中查找与 temp 匹配的单词。 /若匹配返回相应单词在 WordList 中下标;若查找失败,返回-1 Node *P,*q; int flag; P=U (2) /U;/临时存储 reCompose(p,temp);/将 temp 重组 q=&root; whil
21、e(flag=U (3) /U)q !=NULL) if(flag0)/搜索左子树 q=q-lChiid; else(/搜索右子树 q=q-rChild; /while if(flag=0)/找到匹配的,保存下标 returnU (4) /U; if(U (5) /U)/查找失败 printf(“cant unscramble the following word:%s“,temp); return -1; ;(分数:15.00)(1).(分数:3.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_中级软件设计师下午试题-79 答案解析(总分:105.00,做题时间:90 分钟)一
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 中级 软件 设计师 下午 试题 79 答案 解析 DOC
