1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 31及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读以下说明和流程图,回答问题 1至问题 3,将答案写在对应栏内。 【说明】 流程图描述了某高校图书订购与编目系统的处理流程。全校的图书典藏在校图书馆和各系的资料室中。学校每年分若干批向出版单位订购图书,同一批订购的图书将陆续邮寄到学校。出版单位在寄出图书的同时附上到书清单和发票,发票上仅给出一份到书清单中书的总册数和总金额。学校收到图书和发票后,先参照订购单验收,然后进行编目,并把有关 信息存放在书种文件、书名文件、作者文件和复本文件中,以供读者检索。 书种文件记录
2、了每种书的有关信息。所谓一种书是指同一作者、同一书名、同一出版单位和同一出版年份出版的书。例如, 2004年张明在科技出版社出版了软件工程 (印数 8000册 )和数据库基础 (印数 5000册 ),则张明在 2004年出版了两种书。在全校的藏书中,如果一种书只有一册,则该书的信息存放在书种文件中:如果一种书有多册,则其中一册书的信息存放在书种文件中,其余的书作为复本将信息存放在复本文件中。复本文件的结构与书种文件的结构相同,每种书都有 一个书号,书号唯一地标识了一种书。在书库中,每册书有一个登录号,登录号唯一地标识了一册书。此外,为了图书检索的方便,将图书按学科分类,分类号用来标识不同的学科
3、领域。 各类单据和文件的结构如下所示。 订购单:订购批号、书名、作者名、出版单位、出版年份、单价、订购册数、订购部门代码、订购日期。 到书清单:订购批号、书名、作者名、出版单位、出版年份、单价、册数。 发票:订购批号、发票号、总册数、总金额。 书种文件:分类号、登录号、书名代码、作者代码、出版单位、出版年份、单价、复本标志、典藏部门代码、借出标志。 其 中,复本标志用来指示该种书在书库中有没有复本:对于书名相同的若干种书,书名代码是相同的。 书名文件:书名代码、书名。 作者文件:作者代码、作者名。 【问题 1】 指出验收文件至少应由哪些数据项组成。 【问题 2】 由于处理 5和处理 6的分类,
4、可能导致分类后的文件中一张发票无法找到与它对应的那些书,从而当一组发票的金额之和与一组到书清单中的书价之和不等时,无法知道是哪一张发票和哪一份清单不一致。如果仍使用原流程图,那么当到书清单文件的结构做何改动后,能找出不一致的发票和相应的书目。 【问题 3】 若在书种文件中增加 数据项 “书号 ”,则如何重新设计复本文件的结构,使数据冗余最小。 2 阅读以下说明,回答问题 1至问题 3,将答案写在对应栏内。 【说明】 在一个航空公司的航班管理系统中,有以下一些事实。 (1)一个航班可能是一个或多个乘客的运输工具,每个乘客可能是一个或多个航班的旅客。 (2)一个且仅一个飞行员必须对每个航班负责,每
5、个飞行员可能负责一个或多个航班。 (3)一个或多个飞行员必须对每个乘客负责,每个飞行员必须对一个或多个乘客负责。 现有飞行员的实体如下: 飞行员 (飞 行员编号,航班编号,姓名,工资,起飞地,到达地,飞行信用时间 ) 说明:飞行信用时间是一个特定的航班分配给一名飞行员,授权他可以驾驶管理这个航班。 【问题 1】 实体 “飞行员 ”是否符合 1NF,如果不符合,如何将它规范化。 【问题 2】 由问题 1得到的实体 “飞行员 ”是否符合 2NF,如果不符合,如何将它规范化。 【问题 3】 指出最后得到关系模式的候选码。 3 阅读以下说明和图,回答问题,将答案写在对应栏内。 【说明】 银行客户需要从
6、 ATM取 100元,他向 ATM的读卡机插 卡,读卡机读取他的卡号,然后 ATM屏幕初始化, ATM提示输入密码,客户输入密码 (123456), ATM打开他的账户,密码有效,因此 ATM提示选择事务,客户选择取钱, ATM提示输入金额,客户输入 100元, ATM验证账户上有足够的钱,就从账上减去 100元, ATM吐出 100元,并退出的卡。 【问题】 根据上面的描述,在下面填写,完成未完成的协作图。 1插卡 (客户一读卡机 ) 2 _(_) 3 _(_) 4 提示输入 PIN (123456) (ATM 显示屏 客户 ) 5 _(_) 6 _(_) 7 验证PIN(_) 8 提示选择
7、事务 (_) 9 _(客户 ATM 屏幕 ) 10提示金额 (ATM屏幕 客户 ) 11输入金额 (客户 ATM 屏幕 ) 12取钱 (ATM屏幕 的账户 ) 13 _(_) 14 _(_) 15 _(_) 16 提供收据 (客户的账户 取钱机 ) 17 _(_) 4 阅读下列 C程序和程序说明,将应填入 (n)处的字句写在对应栏内。 【说明】本程序从正文文件 text.in中读入一篇英文短文,统计该短文中不同单词及出现次数,并按词典编辑顺序将单词及出现次数输出到正文文件 word out中。 程序用一棵有序二叉树存储这些单词及其出现的次数,边读入边建立,然后中序遍历该二叉树,将遍历经过的二叉
8、树上的结点的内容输出。 #include stdio.h #include malloc.h #include ctype.h #include string.h #define INF “text.in“ #define OUTF “wotd.out“ typedef struct treenode char *word; int count; struct treenode *left, *right; BNODE int getword (FILE *fpt, char *word) char c; c=fgetc (fpt); if ( c EOF) return 0; while(!
9、(tolower(c) =a void binary_tree(BNODE *t, char *word) BNODE *ptr, *p; int compres; P=NULL; (1); while (ptr) /*寻找插入位置 */ compres=strcmp (word, (2) ); /*保存当前比较结果 */ if (!compres) (3); return; else (4); ptr=compres 0? ptr- right: ptr- left; ptr= (BNODE*) malloc (sizeof (BNODE) ; ptr- left = ptr- right
10、= NULL; ptr- word= (char*) malloc (strlen (word) +1) ; strcpy (ptr- word, word); ptr- count - 1; if (p=NULL) (5); else if (compres 0) p- right = ptr; else p- left = ptr; void midorder (FILE *fpt, BNODE *t) if (t=NULL) return; midorder (fpt, t- left); fprintf (fpt, “%s %dn“, t- word, t- count) midord
11、er (fpt, t- right); void main() FILE *fpt; char word40; BNODE *root=NULL; if (fpt=fopen (INF,“r“) =NULL) printf (“Cant open file %sn“, INF ) return; while (getword (fpt, word) =1 ) binary_tree ( fclose (fpt); fpt = fopen (OUTF, “w“); if (fpt=NULL) printf (“Cant open file %sn“, OUTF) return; midorder
12、 (fpt, root); fclose(fpt); 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 5 阅读下列 C+程序和程序说明,将应填入 (n)处的字句写在对应栏内。 【说明】 以下 C+程序的功能是计算三角形、矩形和正方形的面积并输出。程序由 4个类组成:类 Triangle、 Rectangle和 Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数 getArea(),作为计算上述 3种图形面积的通用接口。 #include iostream.b #includ
13、e math.h class Figure public: virtual double getArea0=0; /纯虚拟函数 ; class Rectangle: (1) protected: double height; double width; public: Rectangle(); Rectangle(double height, double width) This- height=height; This- width=width; double getarea() return (2); ; class Square: (3) public: Square(double wi
14、dth) (4); ; class Triangle: (5) double la; double lb; double lc; public: Triangle(double la, double lb, double lc) this- la=la; this- lb; this- lc; double getArea() double s=(la+lb+lc)/2.0; return sqrt(s*(s-la)*(s-lb)*(s-lc); ; viod main() Figure* figures3= new Triangle(2,3,3), new Rectangle(5,8), n
15、ew Square(5); for(int i=0;i 3;i+) cout “figures“ i “area=“ (figuresi)- getarea() endl; 6 阅读下列 Java程序和程序说明,将应填入 (n)处的字句写在对应栏内。 【说明】 StringEditor类的功能是:已知一个字符串,返回将字符串中的非字母字符都删除后的字符串。 public (1) public static String removeNonLetters( (2) ) StringBuffer aBuffer=(3); char aCharacter; for(int i=0; i origin
16、al.length();i+) aCharacter=(4); if(Character.isLetter(aCharacter) aBuffer.append( (5) ); return new String(aBuffer); public class StringEditorTester public static void main(String args) String original=“Hi!, My Name is Mark, 234I think you are my classmate?!“; System.out.println(StringEditor.removeN
17、onLetters(original); 软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 31答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 问题 1 书名、作者名、出版单位、出版年份、单价、册数、订购部门代码 (或典藏部门代码 )。 问题 2 在到书清单中增加 “发票号 ”。 问题 3 书号、登录号、典藏部门代码、借出标志。 【试题解析】 阅读流程图,可以看出验收文件是一个中间文件,既有数据来源,又要提供数据给其他文 件,数据来源是订购单文件、发票文件和到书清单文件,所以它的数据项应该由这 3个文件直接或间接处理产生。验收文件还要用于在处理 8更新书种
18、文件、书名文件、作者文件和复本文件 4个文件,所以它的数据项还要保证处理 8能够更新这 4个文件,即这 4个文件没有,但更新又需要的数据项。 比照涉及到的各个文件的数据项组成,可以推出,验收文件至少应该包含书名、作者名、出版单位、出版年份、单价、册数、订购部门 /典藏部门代码等数据项。 问题 2内容很长,看起来很复杂,其实就是关于 “发票 ”对号的问题,所以,稍加分析,可以得出结论 :在到书清单中增加 “发票号 ”。 由说明可知,每种书都有一个书号,书号唯一地标识了一种图书。一种图书的不同复本的著录信息是相同的,但登录号对于每一册图书是唯一的,典藏部门代码和借出标志也是针对某一册图书而有所不同
19、的。所以,在书种文件中增加数据项“书号 ”后,复本文件中关于该种图书的出版发行信息及分类号,书名代码、作者代码等的数据项可以删除而不影响系统的功能。 2 【正确答案】 问题 1 航班 (航班编号,起飞地,到达地 ) 飞行员 (飞行员编号,航班编号,飞行员姓名,工资,飞行信用时间 ) 问 题 2 飞行员 (飞行员编号,飞行员姓名,工资 ) 信用时间 (飞行员编号,航班编号,信用时间 ) 问题 3 航班一航班编号;飞行员 飞行员编号:信用时间 飞行员编号,航班编号 【试题解析】 为了将飞行员实体转换成 1NF,必须将它划分成两个实体:飞行员和航班。 航班 (航班编号,起飞地,到达地 ) 飞行员 (
20、飞行员编号,航班编号,飞行员姓名,工资,飞行信用时间 ) 问题 1中得到的飞行员实体不属于 2NF,因为尽管复合键是 (Flight-Id, Pilot-Id),但是 Flight-Time-Credited是只依赖于 Flight-Id,而不依赖于 Pilot-Id。因此,应将它划分为两个实体,即飞行员和信用实现。如下: 飞行员 (飞行员编号,飞行员姓名,工资 ) 信用时间 (飞行员编号,航班编号,信用时间 ) 3 【正确答案】 1插卡 (客户 读卡机 ) 2读卡号 (读卡机 读卡机 ) 3屏幕初始化 (读卡机 ATM 屏幕 ) 4提示输入 PIN(ATM显示屏 客户 ) 5输入 PIN(1
21、23456)(客户 ATM 屏幕 ) 6打开账户 (ATM屏幕 客户的账户 ) 7验证 PIN(ATM屏幕 客户的账户 ) 8提示选择事务 (ATM屏幕 客户 ) 9选择事务 (取钱 )(客户 ATM 屏幕 ) 10提示金额 (ATM屏幕 客户 ) 11输入金额 (100元 )(客户 ATM 屏幕 ) 12取钱 (100元 )(ATM屏幕 客户的账户 ) 13验钱 (100元 )(客 【试题解析】 这道题和模拟试题 4中的试题 3是相似的,一个需求描述的时序图和协作图是可以相互转换的,所以,这个取钱过程的时序图的分析方法同样可以用在协作图的分析上。 根据上述的分析方法并结合题中已经给出的提示可
22、以得出答案,答案如下。 4 【 正确答案】 (1)ptr=*t (2)ptr- word或 (*ptr).word 或 ptr0.word (3)ptr- count+ (4)p=ptr (5)*t=ptr 【试题解析】 (1)ptr=*t 本处填空是函数 binary_tree的开始处,进行初始化,应该是让指针 ptr指向树的根结点 *t。因此应该填入: ptr=*t。 (2)ptr- word或 (*ptr).word 或 ptr0.word 本处填空是将要插入的单词 word与当前指针 ptr所指的结点的 word比较大小。 (3)ptr- count+ 本处填空是当要插入的单词 wor
23、d与指针 ptr所指的结点的 word相同时的处理,必然是将指针 ptr所指结点的计数器 count加 1。因此应该填入: ptr-count+。 (4)p=ptr 本处填空是当要插入的单词 word与指针 ptr所指结点的 word不相同时的处理,必然是让 p指向 ptr,而 ptr指向其左子树或右子树。因此应该填入: p=ptr。 (5)*t=ptr 本处填空是当 p为空时的处理,应该是让树的根结点指针指向 ptr以便返回。 二、选答题 (共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 5 【正确答案】 (1)
24、public Figure (2)height*width或 width*height或 this- height*this- width或 this- width*this-height (3)public Rectangle (4)this- height=this- width=width或 height=this- width=width (5)public Figure 【试题解析】 (1)public Figure 本处由于 Rectangle是派生类,需要公有继承 Figure。 (2)height*width或 width*height或 this- height*this-
25、width或 this- width*this- height 本处是计算矩形的面积。 (3)public Rectangle 本处由于 Square是派生类,需要公有继承 Rectangle。 (4)this- height=this- width=width或 height=this- width=width 本处是正方形的构造函数,是给继承的 Rectangle赋初值,由于正方形长等于宽,因此应该填入: this- height=this- width=width或 height=this-width=width。 (5)public Figure 本处由于 Triangle是派生类,需
26、要公有继承 Figure,因此应该填入: public Figure。 6 【正确答案】 (1)class StringEditor (2)String original (3)new StringBuffer(original.length() (4)original.charAt(i) (5)new Character(aCharacter) 【试题解析】 (1)class StringEditor 类 StringEditor的头部。 (2)String original StringEditor类的方法 removeNonLetters的形参是 String类型。 (3)new StringBuffer(original.length() 动态生成一个 StringBuffer类对象,长度是形参字符串 original的长度。 (4)original.charAt(i) 取 original字符串的第 i个字符。 (5)new Character(aCharacter) 将生成一个字母字符,值为 aCharacter,添加到字符串 aBuffer的尾部。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1