[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷64及答案与解析.doc

上传人:jobexamine331 文档编号:507234 上传时间:2018-11-29 格式:DOC 页数:16 大小:382KB
下载 相关 举报
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷64及答案与解析.doc_第1页
第1页 / 共16页
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷64及答案与解析.doc_第2页
第2页 / 共16页
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷64及答案与解析.doc_第3页
第3页 / 共16页
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷64及答案与解析.doc_第4页
第4页 / 共16页
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷64及答案与解析.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 64及答案与解析 一、必答题(共 4道大题,每道大题 15分) 0 阅读下列说明和图,回答问题 l至问题 3,将解答填入答题纸的对应栏内。【说明】 C市刚开通了地铁线,为方便乘客,计划开发自动售票系统。该公司在每一个地铁站放置了多台自动售票机,每一台售票机有一唯一编号,售票记录统一汇总主机。自动售票机只发售从该站起始的各种地铁票,因此乘客只需输入目的站,起始站默认为该站,售票机给出从该站到达目的站的单程票。打印地铁票时为其编一个唯一的流水号,并同时打印自动 售票机的编号及票价。售票机的状态变化如下: “空闲 ”时,显示地铁线路图,等待

2、乘客输入目的站;当乘客输入目的站后,转入“目的站确认票数输入 ”状态,同时给出票价,此时若目的站有误,可返回到空闲状态重新输入,否则,输入票数;乘客输入票数后,转入 “票数确认付款 ”状态,同样此时若票数有误,可返回到上一状态重新输入,否则,投入钱币付款;当付款金额足够时, “出票找零 ”(有必要时进行找零 );然后转入 “空闲 ”等待输入目的站状态。该系统采用面向对象方法开发,系统中的类以及类之间的关系用 UML类图表示,图 1一 1是该系统类图 的一部分,图 12描述了自动售票机的状态转换图。【图 11】【图 12】 1 根据题意,给出 “自动售票机 ”类的主要属性。 2 根据题意,给出

3、“地铁票 ”类的主要属性。 3 根据题中所述术语,指出图 12中状态 l到状态 4分别是什么 ? 3 阅读下列说明和图,回答问题 1至问题 3,将解答填入答题纸的对应栏内。【说明】图书管理系统详细记录图书库存情况、读者信息以及读者借阅记录 (包括借书日期和还书日期 )。新书入库时要为该书编制图书卡片,包括分类目录号、图书流水号 (要保证每本书都有唯一的流水号,即使同类图 书也是如此 )、书名、作者、内容摘要、价格和购书日期。同一个书名由于版次、作者等不同有可能存在多 “种 ”图书,其间用 “分类目录号 ”区分。系统为每一位合法读者编制一个唯一的借书证号,读者需要提供姓名、单位。一个读者最多可以

4、同时借阅 5本图书。借阅图书时,新添借阅记录,并将对应的 “归还标记 ”字段置为 “false”,表示 “尚未归还 ”;归还图书时,将相应的 “归还标记 ”字段置为 “true”,表示 “已经归还 ”。一本书可能供多位读者借阅,同一本书读者可以重复借阅。图 2 1为该系统的 ER图。【图 2 1】4 实体间的联系 有 “一对一 ”、 “一对多 ”和 “多对多 ”,指出 “借阅 ”联系属于哪一种 ?“借阅关系模式的外键是什么 ?有主键吗 ?为什么 ? 5 由于同一个分类目录号 (同一种图书 )有多个副本,若用表 Book(图书流水号,分类目录号,书名,作者,内容摘要,价格,购书日期 )存储图书信

5、息则有很多的冗余信息,该如何分解使之满足 BCNF,并指出分解后的关系模式的主键。 6 若用表 Reader存储读者信息, Book表存储图书信息, Borrow表存储借阅情况。以下 SQL语句是 “查询证号为 12345的读者当前所借阅的图书书名 (即尚未归还的图书 )”,请补充完整。 SELECT书名 FROM Book WHERE流水号 (1) (SELECT流水号 FROM(2) WHERE证号 =“12 345”AND (3) ) 以下 SQL语句是 “查询书名包含 软件设计师 的图书情况 ”,请补充完整。 SELECT*FROM Book WHERE书名 (4)“软件设计师 ” 7

6、 阅读下列说明和图,回答问题,将解答填入答题纸的对应栏内。【说明】本流程图描述了某子程序的处理流程,现要求用白盒测试法对其进行测试。【问题】根据判定覆盖、条件覆盖、判定条件覆盖、多重条件覆 盖 (条件组合覆盖 )、路径覆盖 5种覆盖标准,从供选择的答案中分别找出满足相应覆盖标准的最小的测试数据组 (用 回答 )。供选择的答案: 8 阅读下列函数说明、图和 C代码,将应填入 (n)处的字句写在答题纸对应栏内。【说明】当一元多项式 中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指数和对应系数。为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指

7、数递减顺序存储。例如:多项式 8x5一 2x2+7的存储结构为:函数中使用的预定义符号如下: #define EpSI1e一 6structNode( *多项式中的一项* double c; *系数 * int e; *指数 * structN0de *next; ; typedef struct *多项式头节点 * int n; *多项式不为零的项数 * struct Node *head; )POLY;【函数】 void Del(PoLY*C, struct Node*p) *若 p是空指针则删除头节点,否则删除 p节点的后继 * struct Node*t; *c是空指针或 c没有节点

8、* if(C=NULL C一 head=NULL)return; if(1) +删除头节点 * t=C一 head: C一 head=t一 next; return; *if* t=p一 next; p一 next=t一 next; ); *Del* voidInsert(POLY *C, structN0de *pC) *将 pc节点按指数降序插入到多项式 c中 * *若 c中存在 pc对应的指数项,则将系数相加;若其结果为零,则删除该节点 * struct N0de*t, *tp; *pc为 空指针或其系数近似为零 * if(pC=NULL fabs(pC一 c) head=NuLL)(

9、*若 C为空,作为头节点插入 * C一 head=pC; pC一 next =NULL; C一 n+: retUrn; *i * *若 pc的指数比头节点的还大,插入到头节点之前 * if(pC一 eC一 head一 e) (2) ; C一 head=pC; C一 n+: return: / *i *, (3) ; t=C一 head: while(t!=NULL) if(t一 epC一 e)( tp=t; t=t一 next: else if(t一 e=pc一 e) *c中已经存在该幂次项 * t一 c+=pc一 c; *系数相加 * i (fabs(t一 c)n一一: (5) ; else

10、 t=NuLL; *c中已经不存在该幂次项 * *while* if(t=NuLL) *适当位置插入 * pC一 next=tp一 next; tp一 next=pC; C一 n+: /*if*, ; *Insert* 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 9 阅读下列函数说明和 c+代码,将应填入 (n)处的字句写在答题纸对应栏内。 【说明】 任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略 (Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换

11、整个算法,简化改为采用其他方法来解决同样问题。以下是一个 “剪刀石头布 ”游戏。猜拳时的 “策略 ”有 2种方法:第一种是 “猜赢后继续出同样的招式 ”(WinningStrategy),第二种是 “从 上一次出的招式中,以概率分配方式求出下一个招式的几率 ”(ProbStrategy)。程序中定义了 Hand类表示猜拳时的 “手势 ”,类内部以 O(石头 )、 1(剪刀 )、 2(布 )来表示。 Hand类的实例只会产生 3个。以下是 C+语言实现,能够正确编译通过。 【 C+代码】 ClasS Hand private: int handvalue; StatiC Hand*hand0;

12、StatiC Hand*handl; Static Hand*hand2: (1): Hand(int handvalue) thiS一 handvalue=handvalue; publiC: (2)Hand*getHand(int handvalue)( *省略具体实现 * ; Hand*Hand: hand0=new Hand(0); Hand*Hand: handl=new Hand(1); Hand*Hand: hand2=new Hand(2); ClasS Strategy public: (3)Hand*nextHand()=0; ; class WinningStrategy

13、 : public strategy private: boo1 won; Hand*prevHand; public: WinningStrategy() won=false; Hand*nextHand() if(!won) prevHand=Hand: getHand(rand() 3); return prevHand; ; class probStrategy: public strategy public: Hand*nextHand() int handvalue=0; *省略具体实现 * return Hand: getHand(handvalue); ; Class Play

14、er( private: string name; Strategy*Strategy; public: Player(string name, (4)strategy) thiS一 name=name; thiS一 strategy=strategy; Hand*nextHand()(向战略请示手势 return (5); ; 10 阅读以下说明和 JaVa代码,将应填入 (n)处的字句写在答题纸对应栏内。 【说明】 任何一种程序都是为了解 决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略 (strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其

15、他方法来解决同样问题。以下是一个 “剪刀石头布 ”游戏。猜拳时的 “策略 有 2种方法:第一种是 “猜赢后继续出同样的招式, (winningStrategy),第二种是 “从上一次出的招式种,以概率分配方式求出下一个招式的几率 ”(ProbStrategy)。程序中定义了 Hand类表示猜拳时的 “手势 ”,类内部以 0(石头 )、 1(剪刀 )、 2(布 )来表示。 Hand类的实例只会产 生 3个。以下是 JaVa语言实现,省略了不相关属性及方法,方法实现体亦有所省略,能够正确编译通过。 【 Java代码】 Hand.Java文件 publiC class Hand public sta

16、tic final int HANDVALUEGUU=0;石头 public static final int HANDVALUECHO=1;剪刀 public static final int HANDVALUEPAA=2;布 public static final Handhand= new Hand(HANDVALUE_GUU), new Hand(HANDVALUECHO), new Hand(HANDVALUEPAA), ; private int handvalue; (1) Hand(int handvalue) this handvalue=handvalue; publ ic

17、(2)Hand getHand(int handvalue)从值取得对象实例 return hand fhandvalue: Strategy java文件 public interface Strategy( public (3)Hand nextHand(); ProbStrategy。 Java文件 import java.util Random; public class ProbStrategy implements Strategy( public Hand nextHand() int handvalue=0; *省略具体实现 * return Hand.getHand(hand

18、value); WinningStrategy Java文件 import java/util Random; public class WinningStrategy implements Strategy *省略了不相关属性 * public Hand nextHand() if(!won) prevHand=Hand.getHand(random nextInt(3); return prevHand; Player Java艾件 public class Player private string name; private strategy strategy; public Play

19、er(string name, (4)strategy) this name=name; this strategy=strategy; public Hand nextHand()向战略请示手势 return(5); 11 阅读以下函数说明和 C代码,将应填入 (n)处的字句写在答题纸对应栏内。 【说明】 任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略 (Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同 样问题。以下是一个 “剪刀石头布 ”游戏。猜拳时的 “策略 ”有 2种方法:第一种是 “猜赢后继续出

20、同样的招式 ”(WinningStrategy),第二种是 “从上一次出的招式种,以概率分配方式求出下一个招式的几率 ”(ProbStrategy)。程序中定义了 Hand类表示猜拳时的 “手势 ”,类内部以 0(石头 )、 1(剪刀 )、 2(布 )来表示。 Hand类的实例只会产生 3个。以下是 C语言实现,省略了不相关属性及方法,方法实现体亦有所省略,能够正确编译通过。 【 C代码】 typedef(1) (*funl)(); enum HandValueHANDVALUE_GUU=0, HANDVALUE CHO=1,HANDVALUE_PAA=2); 手势可取值,依次为 “石头 ”、

21、 “剪刀 ”、 “布 ” 其大小顺序是循环相克的,即:石头赢剪刀,剪刀赢布,布赢石头 bool won; struct Hand WSpreVHand; struct Hand手势 enum HandValue handvalue: )hand3=HANDVALUE_GUU, HANDVALUE_CHO, HANDVALUE_PAA); int fight(struct Hand*h1, Struct Hand*h2) 比较 h1和 h2。 h1代表的手势较大时返回 1, h1较小时返回一 1,相等时返回0 if(h1一 handvalue=h2一 handvalue) return 0; )

22、else if(h1一 handvalue+1) (2)=h2一 handvalue)( return1; e1Se return一 1; Struct Hand*getHand(int handvalue)( 依据手势代表的值取得手 势,若 handvalue不合法,返回 NULL switch(handvalue) Case 0: return 软件水平考试(中级)软件设计师下午 (应用技术)试题模拟试卷 64答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 “自动售票机 ”类的主要属性有:编号、所在地铁站名 【试题解析】 “每一台售票机有一唯一编号 ”,因此自动

23、售票机应有属性 “编号 ”。“自动售票机只发售从该站起始的各种地铁票 ”,亦即自动售票机只发售其所在站为起始站的地铁票,故应有属性 “地铁站名 ”。 2 【正确答案】 “地铁票 ”类的主要属性有:起始站、目的站、票价、流水号、自动售票机编号。 【试题解析】 地铁票应有属性:起始站、目的站、票价、流水号 、自动售票机编号。 3 【正确答案】 状态 1: “目的站确认票数输入 ”状态 2: “票数确认付款 ”状态3: “出票找零 ”状态 4: “空闲 ” 【试题解析】 根据售票机状态变化的描述,易于得出答案。状态 1应为 “目的站确认票数输入 ”,状态 2应为 “票数确认付款 ”,状态 3应为 “

24、出票找零 ”,状态 4应为 “空闲 ”。 4 【正确答案】 “借阅 ”联系是 “多对多 ”联系,外键有:借书证号、图书流水号。“借阅 ”关系模式不存在主键,因为同一本书读者可以重复借阅,即使加上 “借书目期 ”亦不能唯一标识,读者可以在同一天借阅并 归还再借阅,应增加一个属性 (如借阅流水号 )来标识。 【试题解析】 “一个读者最多可以同时借阅 5本图书,一本书可能供多位读者借阅,同一本书读者可以重复借阅 ”,因此联系 “借阅 ”是多对多联系。要特别分清“一本图书 ”与 “一种图书 ”,一本图书是由流水号标识的,一种图书是由分类目录号标识的。对借阅联系,借阅的是具体的某本书,因此外键有:借书证

25、号、图书流水号。 “借阅 ”关系模式不存在主键,因为同一本书读者可以重复借阅,即使加上 “借书日期 ”也不能唯一标识,读者可以在同一天借阅并归还再借阅,应增加一个属性 (如借阅流水号 )来标识。 5 【正确答案】 图书 (分类目录号,书名,作者,内容摘要,价格,购书日期 ),主键:分类目录号副本 (图书流水号,分类目录号 ),主键:图书流水号 【试题解析】 由于同一个分类目录号 (同一种图书 )有多个副本,同一个分类目录号具有相同的很多信息:书名、作者,内容摘要,价格等,同一种书中的不同副本由图书流水号区分。故可分解如下:图书 (分类目录号,书名,作者,内容摘要,价格,购书日期 ),主键:分类

26、目录号副本 (图书流水号,分类目录号 ),主键:图书流水号 6 【正确答案】 (1)IN(2)BorTOW(3)归还标记 =”false”(4)LIKE 【试题解析】 空 (1)是引出子查询的,该类连接词有: IN、 NOTIN、 EXISTS、NOTEXISTS, EXISTS引出的子查询一般是 SEL,ECT*型,故排除;再据语意分析应填 IN。子查询的语意是 “查询当前所借阅的图书流水号 (即尚未归还的图书 )”,因此应从 Bon“OW表中查询,而且归还标记应为。 false,故空 (2)应填Borrow,空 (3)应填:归还标记 =“false”。对字符串进行的操作通常是使用操作符LI

27、KE的模式匹配,正符合题意,故空 (4)应填 “LIKE”。 7 【正确答案】 判定覆盖 条件覆盖 判定条件覆盖 多重条件覆盖 路径覆盖 【试题解析】 本题考察的是测试用例的设计。软件测试的目的是希望以最少的人力和时间发现潜在的各种错误和缺陷。这样测试用例就显得尤为重要。软件测试大体上可分为两大类:基于 “白盒 ”的路径测试技术和基于 “黑盒 ”的事务处理流程测试技术 (又称功能测试 )。白盒测试依据的是程序的逻辑结构,而黑盒测试技术依据的是软件行为的描述。 路径测试 (PX):执行所有可能的穿过程序的控制流程路径。在路径测试中,该策略是最强的 ,一般不可实现。 语句测试 (PI):至少执行程

28、序中所有语句一次。 100语句覆盖率用 CI表达。语句覆盖是最弱的逻辑覆盖准则。 分支测试 (P2):至少执行程序中每一分支一次。 100分支覆盖率用 C2表达。 条件组合测试:使每个判定中的所有可能的条件取值组合至少执行一次。只要满足条件组合覆盖,就一定满足分支覆盖。 8 【正确答案】 (1)P=NULL (2)pC一 next=C一 head一 next (3)tp=NULL (4)Del(C, tp) (5)break 【试题解析】 根据注释, Del函 数当 p是空指针时,删除头节点,因此易知 (1)空应填 P=NULL。 (2)空是插入头节点的特殊情况,应填 pC一 next=C一

29、head一 next。 由注释可知空 (4)是删除操作,需调用 Del函数,进一步确定实参。此处需要删除节点 t,结合 Del函数的说明,实参 P需要空指针 (NULL)或 t节点的前驱指针,由if(t一 epC一 e)(tp: t; t=t一 next;可知, tp正是 t节点的前驱指针。因此应填 Del(C, tp)。由此也可以确定空 (3),当需要删除头节点时, tp应是空指针,因此空 (3)应填 tp=NULL。至于空 (5),应填 break。此时,节点 p已正确处理完毕,应该结束 while循环,而且必须终止,否则 while循环结束后 t值为 NULL,将会错误的执行插入操作。

30、二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 9 【正确答案】 (1)private(2)static(3)virtual (4)Strategy*(5)strategy一 nextHand() 【试题解析】 Hand类要保证只产生 3个实例,就要求 不能随便生成 Hand类,因此其构造方法需要是 private型的,故空 (1)应填 pnvate。先看空 (3),由后面的“=0”易判知 nexthand()函数是纯虚函数,故空 (3)应填 virtual。再来看空 (2),由对getHand()方法

31、的调用方式 land: gettland(1rand() 3)及 land:getHand(handvalue),可知该方法是类 Hand的静态方法,故空 (2)应填 static。 由语句 this一 strategy=strategy;可知: this一 strategy与 strategy同数据类型, this表示自身指针,而 this一 strategy是 Strategy*类型,故空 (4)应填Strategy*,注意是指针。方法 nextHand0是 “向战略请示手势 ”,取得手势足通过其所采用的 “策略 ”实现的,故空 (5)应填 strategy一 nextHand0。注意指针

32、写法。 10 【正确答案】 (1)private (2)static (3)abstract (4)Strategy (5)strategy nextHand() 【试题解析】 Hand类要保证只产生 3个实例, 就要求不能随便生成 Hand类,因此其构造方法需要是 private型的,故空 (1)填 private。先看空 (3), nexthand0是接口 Strategy方法,应为抽象方法,故空 (3)应填 abstract。再来看空 (2),由对getHand()方法的调用方式 HanDgetHand(handValue)及HanDgetHand(random nextInt(3),可

33、知该方法是类 Hand的静态方法,故空 (2)应填 static。由语句 this strategy=strategy;可知: this strategy与 strategy是同数据类型, this表示自身引用,而 this strategy是 Strategy类型,故空 (4)应填 Strategy。方法 nextHand0是 “向战略请示手势 ”,取得手势是通过其所采用的“策略 ”实现的,故空 (5)应填 strategy nextHand0。 11 【正确答案】 (1)structHand* (2)3 (3)NULL (4)structStrategy* (5)strcpy 【试题解析】

34、 先看空 (2)。条件 (hl一 handvalue+1) (2)=h2一 handvalue是指h1大于 h2,根据手势间大小顺序:石头 (O)赢剪刀 (1),剪刀 (1)赢布 (2),布 (2)赢石头 (0)。可得应填 3。例如 hl为布 (2), h2为石头 (O)时, hl一 handvalue+1) (2)的值应为 0。所以空 (2)填 3。 handvalue取值为: 0、 1、 2,由注释 “若 handbalue不合法,返回 NULL”可得空 (3)应填 NULL。先看空 (5)。结构体 WSplayer的strategy字符数组,对字符数组的赋值需调 strcpy库函数。故空

35、 (5)应填 strcpy。来看空 (4)。由语 句 “WSplayer strategy=&wS; ”及 “StrategyWS; ”可知,结构体WSplayer的 strategy应该是 Strategy结构体指针。故空 (4)应填 structStrategy*。最后来看空 (1)。这明显是一个函数指针,函数指针的定义:函数返回类型函数指针变量名 (参数列表 )。故空 (1)是该函数的函数返回类型。用到该定义的是在结构体Strategy, “funlnextHand;下一个手势 ”,此处只是一个声明,不能判断其返回类型,真正应用的是语句 “WS nextHand=WSnextHand; ”,而其右端的函数原型为 structHand*WSnextHand(),因此该函数指针的返回类型应为structHand*。故空 (1)应填 structHand*。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1