中级软件设计师下午试题-65_第1页
中级软件设计师下午试题-65_第2页
中级软件设计师下午试题-65_第3页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中级软件设计师下午试题-65(总分:102.99,做题时间:90分钟)一、试题一(总题数:1,分数:15.00)说明一个新的音像商店准备向比较广泛的人群岀租录像带和光碟。该商店的管理决定在计算机系统的支持下来 运作。音像商店在货架上存放着题材广泛的当前流行的电影库。由于同一个电影片名可能有于不同的导演而有不 同的版本,因此电影用电影代码区分,而不用电影片名;同一个版本有多份拷贝,因此音像制品用一个唯 一的编号标识。某个特定的电影可以存放在录像带或光碟上,录像带和光碟的租金不同。录像带要么是Beta格式要么是VHS格式;光碟为DVD格式,容量比较大,一张光碟可以存储同一电影片名的不同版本。每个

2、电影都有特定的租用期(用天表示),并带有在租用期内的租金。音像商店必须能够立即回答关于某个电影 的库存和有多少供租用的带子或光碟。音像商店的店员负责定购音像、联系客户、音像上架,并对客户的询问给岀答复。该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图1-1是该系统的用例图,图1-2是该系统的类图的一部分。图 1-1图 1-2(分数:15.00 )(1) .根据题意,给岀“电影”类的主要属性。(分数:5.00 ) 正确答案:(电影代码、电影片名、导演)解析:“由于同一个电影片名可能有于不同的导演而有不同的版本,因此电影用电影代码区分,而不用电 影片名;同一个版本有多份拷

3、贝,因此音像制品用一个唯一的编号标识。”,由此可得电影的主要属性: 电影代码、电影片名、导演。注意:“编号”不是“电影”的属性,而是“音像制品”的属性。(2) .根据题意,指出图1-1中缺失的用例。(分数:5.00 ) 正确答案:(A) “定购音像” (B) “联系客户”)解析:图1-1是该系统的用例图。根据题述,“音像商店的店员负责定购音像、联系客户、音像上架,并 对客户的询问给岀答复”,易知缺失的用例为:“定购音像”和“联系客户”。(3) .根据题意,补充图1-2的类图中缺失的类之间的关系,用UML表示法表示。要求标出重复度。在UML中,重复度(Multiplicity)定义了某个类的一个

4、实例可以与另一个类的多少个实例相关联。通常把它写成一个表示取值范围的表达式或者一个具体的值。(分数:5.00 ) 正确答案:(*)解析:UML中的关系有依赖、关联、泛化和实现。依赖(dependency)是两个事物之间的语义关系,其中一个事物发生变化会影响另一个事物的语义。关联是一种结构关系,聚集(aggregation)是一种特殊类型的关联,描述整体和部分之间的结构关系。泛化(generalization)是一种特殊/ 一般关系。实现(realization)是类元之间的语义关系,其中一个类元制定了由另一个类元保证执行的契约。“音像制品”是电影的载体,自然与“电影”有关联, 关联度是多少呢?

5、先来看“音像制品”与“录像带”及“光碟”间的关系,“录像带”及“光碟”都是“音像制品”的不同存储格式,因此“录像带”及“光 碟”都是“音像制品”的特殊化。再回到“音像制品”与“电影”的关联度,“录像带”只存储一个电影 版本,而“光碟”可以存储多个版本,因此一个“音像制品”有一个或多个“电影”,一个“电影”可以 存储于多个“音像制品”中(当然也可能没有)。一个“音像制品”对应多个“租用记录”,一个租用记录只对应一个“音像制品”。二、试题二(总题数:1,分数:13.00)说明为了有效记录交通事故情况,欲设计一个交通事故记录系统。一辆汽车有一个唯一的“车牌号”,车主购买汽车时需要提供相关信息,包括身

6、份证、姓名、年龄、性别、地址等。一个车主可以拥有多辆汽车,而一辆汽车只有一个车主。驾驶员不一定是车主,因此记录交通事 故时要记录驾驶员身份证号,同时记录事故发生时刻。图2-1描绘了人、汽车、交通事故三个实体类型及实体间联系的一个E-R图。图 2-1对应的关系模式为:人(身份证号,姓名,性别,年龄,地址)汽车(车牌号,型号)事故(车牌号,身份证号,时刻,损失,描述 )拥有(身份证号,车牌号)(分数:12.99 )(1) .指岀每种关系模式的主键。(分数:4.33 ) 正确答案:(人:身份证汽车:车牌号 事故:(车牌号,身份证)拥有:车牌号)解析:身份证号是唯一的,可作为人的主键。依题述,“一辆汽

7、车有一个唯一的车牌号”,因此汽车 关系的主键为:车牌号。一起事故自然与某量车(车牌号标识)相关,而“驾驶员不一定是车主”,因此还须记录驾驶员(身份证标识),故其主键为:(车牌号,身份证号)。“一个车主可以拥有多辆汽车,一辆汽 车只有一个车主”,因此拥有关系的主键为:车牌号。(2) .创建人表时,“身份证号”使用INTEGER数据类型,并且要求此列值不能为空、值惟一,姓名列不能为空。请在下列用于创建表人的SQL语句空缺处填入正确的内容。CREATE TABLEX (身份证号 INTEGER,姓名 CHAR(20) (1),性另U CHAR(1),年龄 INTEGER,地址 CHAR(20),(2

8、)(分数:4.33 ) 正确答案:(1)NOT NULL (2)PRIMARY KEY(身份证号)解析:要求姓名列非空,故空 (1)填NOT NULL列级约束。身份证号是该表的主键,创建表时需要声明,故空(2)应填PRIMARY KEY!份证号),是表级约束。声明主键也可以用列级约束实现,即在列后紧跟NOT NULL和UNQUIE(3) .请在下列SQL查询语句空缺处填入正确的内容(1) 查询身份证号为“ 123456'的人作为驾驶员时所有的事故记录。SELECT * FROM事故 WHERE (1)查询身份证号为“ 123456'的车主所拥有的汽车的事故记录。SELECT *

9、 FROM事故 WHERE车牌号(2)(SELECT车牌号 FROM (3) WHERE身份证号="123456")(3)查询车牌号为“ 123456'汽车在车主是驾驶员时的事故记录。SELECT * FRO M 事故 WHERE (4)(SELECT * FROM (5) WHERE 车牌号="123456"AND _(6)J (分数:4.33 )正确答案:( 身份证号="123456" (2)IN (3) 拥有(4)EXISTS(5) 拥有(6)拥有.身份证号=事故.身份证号) 解析:这里都是一些比较简单的小查询。空(1)

10、处填身份证号="123456",表示“身份证号为123456'语意。空填IN。连接子查询的连接词有:IN、NOT IN、EXISTS NOT EXISTS根据语意,此处应为IN。FROM之后应跟表名或视图名,根据语意,应该是从拥有表中选岀满足条件的车牌号,故空(3)应填“拥有”。查询要求车牌号是123456、车主是驾驶员的事故记录,空(4)同空,据语意应填EXISTSo空(5)同空 (3),据语意可得应填“拥有”,车主信息是在拥有表中,事故时驾驶员信息是在事故表中,要求车主是驾驶员,则空(6)应为:拥有.身份证号=事故.身份证号,“拥有.身份证号"即为车主

11、信息,“事故 .身份 证号"即为事故时驾驶员信息。三、试题三(总题数:1,分数:15.00)1.说明在数据链路层扩展局域网时使用网桥。网桥工作在数据链路层,它根据MAC帧的目的地址对收到的帧进行转发。网桥具有过滤帧的功能:当网桥收到一个帧时,并不是向所有的端口转发此帧,而是先检查此帧的 目的MAC地址,然后确认将该帧转发到哪个端口。最简单的网桥有两个端口 (即接口)。网桥的每个端口与一个网段相连。每当收到一个帧时,通过查找转发 表将收到的帧转发。当一个网桥刚刚连接到局域网上时,其转发表是空的,此时若收到一个帧,按照以下算法处理和建立自己 的转发表:(1)从端口 x收到的无差错的帧(如

12、有差错即丢弃),在转发表中查找目的站MAC地址;如有,则查找出到此 MAC地址应走的端口 d,然后进行,否则转到(5);(3)如到这个MAC地址去的端口 d=x,则丢弃此帧(因为这表示不需要经网桥进行转发),否则从端口 d转发此帧;转到(6);(5) 向网桥除x以外的所有端口转发此帧(这样做可以保证找到目的站);(6) 如源站不在转发表中,则将源站MAC地址加入转发表,登记该帧进入网桥的端口号,设置计时器,然后转到(8),如源站在转发表中,则执行(7);(7) 更新计时器;(8) 等待新的数据帧,转到(1)。这时,网桥就在转发表中登记以下三个信息:站地址一一登记收到帧的源MAC地址、端口一一登

13、记收到的帧进入该网桥的端口号、时间登记收到的帧进入该网桥的时间。现有五个工作站分别连接在三个局域网上,并且用两个网桥连接起来,如图3-1。每一个网桥的两个端口号都标明在图上。在一开始,两个网桥中的转发表都是空的。以后有以下各站向其他的站发送了数据帧,即H1发送给H5, H3发送给H2, H4发送给H3, H2发送给H1。图 3-1试将有关数据填写在表中。其中,网桥的处理有:转发、丢弃或登记。假定帧均无差错。发送的帧网桥1的转发 表网桥2的转发 表网桥1的 处理网桥2的 处理站地址端口站地址端口H1->H5H3->H2H4->H3H2->H1(分数:15.00 ) 正确答

14、案:(发送的帧网桥1的转发表网桥2的转发表网桥1的处 理网桥2的处 理站地址端口站地址端口H1->H5H11H11登记,转发登记,转发H3->H2H32H31登记,转发登记,转发H4->H3H4r 2r H412登记,丢弃登记,转发H2->H1H21登记,丢弃收不到)解析:本题考察的是网桥的工作原理。网桥工作在数据链路层,它根据MAC帧的目的地址对收到的帧进行转发。网桥具有过滤帧的功能:当网桥收到一个帧时,并不是向所有的端口转发此帧,而是先检查此帧的目的MAC地址,然后确认将该帧转发到哪个端口。认真阅读建立转发表的算法不难解答该题。需要特别注意的是:步骤(6)是检查源站

15、,而不是目的站,若源站不在转发表,将其加入,以后作为目的站地址待查。四、试题四(总题数:1,分数:15.00)说明在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度, 通常都要画岀与单词列表所对应的单词查找树。程序构造一棵二叉排序树,每个节点存储一个单词,按字典序列,较小的在左子树,较大的在右子树。函数中使用的预定义符号如下:typedef struct TreeNode/*二叉排序树节点 */char *word;struct TreeNode *left, *right;BNODE;函数int getWord(FILE *fpt, char *wor

16、d)/*从文件fpt中读取单词到 word中,到达文件结束时返回 0*/char c;c = fgetc(fpt);if(c = EOF)return 0;/*跳过单词间的非字母字符*/while(!(tolower(c) >= 'a' && tolower(c) <= 'z')c = fgetc(fpt);if(c = EOF)return 0;/*不区分大小写*/while(tolower(c) >= 'a' && tolower(c) <= 'z')*word+ = c

17、;c = fqetc(fpt);*word = 70:return 1;void BTree(BNODE *t, char *word)BNODE *ptr, *p;int compres;p = NITLL;;while(ptr)compres = strcmp(word, (2);if(!compres)return;else(3);ptr = compres > 0 ? ptr->right : ptr->left;ptr = (BNODE*)malloc(sizeof ptr);ptr->left = ptr->right = NULL;ptr->w

18、ord = (char*)malloc(strlen(word) + 1); strcpy(ptr->word, word);if(p = NULL);else if(compres > 0)p->right = ptr;elsep->left = ptr;int main()FILE *fpt;char word40;BNODE *root = NULL;if(fpt = fope n("text.i n", "r") = NULL) printf("不能打开文件 text.in! /n"); return

19、1;while(getWord(fpt, word) = 1)BTree (5);fclose(fpt);return 0;(分数:15.00 ) 正确答案:(ptr=*t)解析: 正确答案:(ptr->word)解析:正确答案:(p=ptr)解析:正确答案:解析:(*t=ptr)正确答案:(&root,word)解析:ptr指针在使用前需要初始化,空(1)应填ptr=*t。构造的是二叉排序树,空(2)自然是比较单词 word与ptr指针所指的节点单词,故应填ptr->word 。空接下来的修改指针ptr使ptr指向了其子节点,为了正确插入节点,需要记录父节点指针。因此pt

20、r需要保存下来,故空(3)应填p=ptr。p=NULL对应的是空树的情况,因此空(4)应填*t=ptr。参照BTree函数的定义,空(5)应填&root,word。注意是&root而不是root。五、试题五(总题数:1,分数:15.00)说明任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续岀同样的招式”(Winningstrategy),第二种是“从上一次出

21、的招式中,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势",类内部以0(石头)、1(剪刀)、2(布)来表示。Hand类的实例只会产生 3个。以下是C+语言实现,能够正确编译通过。C+代码class Handprivate:int handvalue;static Hand *hand0;static Hand *hand1;static Hand *hand2;(1);Hand(int handvalue)this->handvalue = handvalue;public:(2) Hand* getHand(int

22、handvalue)/*省略具体实现*/>Hand *Hand:handO = new Hand(0);Hand *Hand:hand1 = new Hand(1);Hand *Hand:hand2 = new Hand(2);class Strategypublic:(3) Hand* nextHand() = 0;class Winningstrategy : public Strategyprivate:bool won;Hand *prevHand;public:winningStrategy()won = false;Hand* nextHand()if(!won)prevHa

23、nd = Hand:getHand(rand()%3);return prevHand;class probstrategy : public Strategypublic:Hand* nextHand()int handvalue = 0;/*省略具体实现*/return Hand:getHand(handvalue);>class Playerprivate:string name;Strategy* strategy;public:Player(string name, (4) strategy)this->name = name;this->strategy = st

24、rategy;Hand *nextHand()(向战略请示手势return (5);(分数:15.00 )正确答案:解析:(1)private)正确答案:解析:(static)正确答案:解析:(virtual)正确答案:解析:(Strategy*)正确答案:(strategy->nextHand()解析:Hand类要保证只产生3个实例,就要求不能随便生成Hand类,因此其构造方法需要是private型的,故空应填private 。先看空,由后面的“ =0"易判知nexthand()函数是纯虚函数,故空(3)应填virtual 。再来看空(2),由对 getHand()方法的调用

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

26、。注意指针写法。六、试题六(总题数:1,分数:15.00)说明任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续岀同样的招式"(WinningSt rategy),第二种是“从上一次出的招式种,以概率分配方式求出下一个招式的几率"(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势",类内部以 0(石头)、1(剪刀)、2(布)来

27、表示。Hand类的实例只会产生3个。以下是Java语言实现,省略了不相关属性及方法,方法实现体亦有所省略,能够正确编译通过。Java代码/Hand.java 文件public class Handpublic static final int HANDVALUE_GUU = 0; /石头public static final int HANDVALUE_CHO = 1; /剪刀public static final int HANDVALUE_PAA = 2; /布public static final Hand hand =new Hand(HANDVALUE_GUU),new Hand(H

28、ANDVALUE_CHO),new Hand(HANDVALUE_PAA), private int handvalue;(1) Hand(int handvalue) this.handvalue = handvalue;从值取得对象实例public (2) Hand getHand(int handvalue)( return handhandvalue;/Strategy.java 文件public interface Strategy public (3) Hand nextHand();/ProbStrategy.java 文件public class ProbStrategy im

29、plements Strategypublic Hand nextHand()int handvalue = 0;/*省略具体实现*/return Hand.getHand(handvalue);/WinningStrategy.java 文件public class Winningstrategy implements Strategy/*省略了不相关属性*/public Hand nextHand()if(!won)prevHand = Hand.getHand(random.nextlnt(3);return prevHand;/Player.java 文件public class Pl

30、ayerprivate String name;private Strategy strategy;public Player(String name, (4) strategy) = name;this.strategy = strategy;public Hand nextHand()/向战略请示手势return (5);(分数:15.00)正确答案:解析:(private)正确答案:解析:(static)正确答案:解析:(abstract)正确答案:解析:(Strategy)正确答案:(strategy.nextHand()解析:Hand类要保证只产生3个实例,就要求不

31、能随便生成Hand类,因此其构造方法需要是private型的,故空(1)填private。先看空(3) ,nexthand()是接Strategy 方法,应为抽象方法,故空 (3)应填abstract。再来看空(2),由对getHand()方法的调用方式 Hand.getHand(handvalue) 及Hand.getHand(random.nextInt(3),可知该方法是类 Hand的静态方法,故空(2)应填static 。由语句this.strategy = strategy;可知:this.strategy 与strategy 是同数据类型,this 表示自身引用,而 this.st

32、rategy 是 Strategy 类型,故空(4)应填 Strategy 。方法nextHand()是“向战略请示手势”,取得手势是通过其所采用的“策略”实现的,故空(5)应填strategy.nextHand() 。七、试题七(总题数:1分数:15.00)说明任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续岀同样的招式”(Winningstrategy),第二种是“从上

33、一次出的招式种,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势",类内部以 0(石头)、1(剪刀)、2(布)来表示。Hand类的实例只会产生3个。以下是C语言实现,省略了不相关属性及方法,方法实现体亦有所省略,能够正确编译通过。C代码typedef (1) (*funl)();enum HandValueHANDVALUE_GUU=O, HANDVALUE_CHO=1, HANDVALUE_PAA=2;/手势可取值,依次为“石头”、“剪刀”、“布”/其大小顺序是循环相克的,即:石头赢剪刀,剪刀赢布,布赢石头bool won;

34、struct Hand *WSprevHand;struct Hand/ 手势enum HandValue handvalue;hand3=HANDVALUE_GUU, HANDVALUE_CHO, HANDVALUE_PAA;int fight(struct Hand *h1, struct Hand *h2)/比较h1和h2o h1代表的手势较大时返回 1,h1较小时返回-1,相等时返回0/ if(h1->handvalue = h2->handvalue)return 0;else if(h1->handvalue+1)% (2) = h2>handvalue)return 1;else return -1;struct Hand* getHand(int handvalue)/依据手势代表的值取得手势,若handvalue不合法,返回NULLswitch(handvalue)case 0:return & hand0;break;case 1:return & hand1;bteak;case 2;return & hand2;break;return (3);struct Strategy/ 策略 funl nextHand;/下一个手势struct Hand

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论