1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 4及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读以下说明,回答问题 1 3,将解答填入对应的解答栏内。 说明 一个简单的图书馆的对象由图书馆、书、书的副本以及读者组成。对象模型见图。1 利用存在的依赖关系构造一个图书馆的对象模型。 2 张三到图书馆借阅一本书,两个月后,他把这本逾期的书返还给图书馆。画出这个场景的时序图。 3 画出上一问中使用的图书馆程序的层次结构图。 4 阅读以下说明,回答问题 1 2,将解答 填入对应的解答栏内。 说明 设某商业集团数据库中三个实体集。一是 “仓库 ”实体集,属性有仓库号、仓库
2、名和地址等;二是 “商店 ”实体集,属性有商店号、商店名、地址等;三是 “商品 ”实体集,属性有商品号、商品名、单价。 设仓库与商品之间存在 “库存 ”联系,每个仓库可存储若干种商品,每种商品存储在若干仓库中,每个仓库每存储一种商品有个日期及存储量;商品与商品之间存在着 “销售 ”联系,每个商品可销售若干种商品,每种商品可在若干商店里销售,每个商店销售一种商品有月份和月销售量两个属性;仓库、商店、商品之间存在着 “供应 ”联系,有月份和月供应量两个属性。 4 试画出 ER图,并在图上注明属性、联系类型、实体标识符; 5 将 ER图转换成关系模型,并说明主键和外键。 6 阅读以下说明,回答问题
3、1 5,将解答填入对应的解答栏内。 说明 编写一个函数根据用户输入的偶对 (以输入。表示结束 )建立其有向图的邻接表。一个图的邻接表存储结构定义如下: # include stdio. h # define MAXVEX 30 struct edgenode int adjvex; char info; struct edgenode * next; struct vexnode char data; struct edgenode * link; typedef struct vexnode adjlist MAXVEX; 实现要求的函数如下 : void creatadjlist ( ad
4、jlist g) int i, j, k; street vexnode * s; for( k=1; k =n; k+ +) (1) g k. link = NULL; printf ( “输一个对: ” ); scanf (“%d, %d“, while (2) (3) s- adjvex =j; (4) g i.link =s; (5) 7 阅读以下说明,回答问题,将解答填入对应的解答栏内。 . 说明 请完成流程图以描述在数据 A(1)至 A(10)中求最大数和次大数的程序的算法。并将此改成 PAD图。该算法的流程图如下图: 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题
5、中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 8 阅读以下说明和 C+码,将应 填入 (n)处的字名写在的对应栏内。 说明 设计一个普通函数 distance (Point public: Point(int i, int j) (1) int getx( ) return x; int gety( ) return y; void disp( ) (2) ; float distance( Point (3) return d; void main( ) (4) p1. disp ( ); cout “与 ”; p2. diap( ); cout “之间距离
6、=” distance (p1,p2) end1; 9 阅读以下说明和 Java 码,将应填入 (n)处的字名写在的对应栏内。 说明 编写一个完整的 JavaApplet 程序使用复数类 Complex 验证两个复数 1+2i 和3+4i 相加产生一个新的复数 4+6i。 复数类 Complex 必须满足如下要求: (1) 复数类 Complex 的属性 有: RealPart: int 型,代表复数的实数部分 ImaginPart: int 型,代表复数的虚数部分 (2) 复数类 Complex 的方法有: Complex():构造函数,将复数的实部和虚部都置 0 Complex (intr
7、, inti):构造函数,形参 r为实部的初值, i为虚部的初值。 ComplexeomplexAdd (Complexa):将当前复数对象与形参复数对象相加,所得的结果仍是一个复数值,返回给此方法的调用者 String ToString():把当前复数对象的实部、虚部组合成 s+ bi 的字符串形式,其中 a和 b分别为实部和虚部的数据。 importjava. applet. * ; importjava. awt. * ; publicclassabcextends Applet Complex a, b, c; publi cvoid init( ) a = newComplex(1,
8、2); b = newComplex(3,4); c = newComplex(); publievoidpaint (Graphicsg) (1) g. drawstring( “第一个复数: ” + a. toString(), 10,50); g. drawstring( “第二个复数: ” + b. toString( ), 10,70 ); g. drawstring( “两复之和: ” + c. toString( ), 10,90); class Complex int RealPart; int ImaginPart; Complex( ) (2) Complex( intr
9、, inti) (3) ComplexeomplexAdd (Complexa) Complextemp = newComplex( ); temp. BealPart = RealPart + a. BealPart; (4) returntemp; public StringtoString( ) return( RealPart + “ + “ + ImaginPart + “ i “); 10 阅读以下说明和 Visual Basic 码,将应填入 (n)处的字名写在对应栏内 说明 已有一个工程文件,窗体上有两个图片框,名称为 P1, P2。分别用来表示信号灯合汽车,其中在 P1中轮流
10、装入 “黄灯 .ico”、 “红灯 .ico”、 “绿灯 .ico”文件来实现信号灯的切换;还有两个计时器 Timer1 和 Timer2, Timer1 用于变换信号灯,黄灯 1秒,红灯 2秒,绿灯 3秒; Timer2用于控制汽车向左移动。运动时,信号灯不断变换,单击 “开车 ”按钮后,汽车开始移动,如果移动到信号灯前或信号灯下,遇到红 灯或黄灯,则停止移动。下面是实现上述功能的程序,请填空。 Private Sub Timer41_ Timer() a=a+1 If (1) Then a=1 End If Select Case a Case 1 P1. Picture = LoadPi
11、cture( “黄灯 .ico” ) Case 2, 3 P1. Picture = LoadPicture( “红灯 ”.ico” ) Case4, 5, 6 P1. Picture = LeadPicture( “绿灯 . ico” ) (2) End Select End Sub Private Sub Timer2_Timer( ) If (3) And (P2. Left P1. Left And P2. Left P1. Left + P1. Width) Or P2. Left = 100 Then Timer2. Enabled = False Else (4) End If
12、End Sub 软件水平考试(中级)软件设计师下午(应用 技术)试题模拟试卷 4答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 2 【正确答案】 3 【正确答案】 【试题解析】 本题中的图书馆有一个书和读者的聚合关系。即图书馆确实是由书和读者组成。书和副本之间的关系既不是集合关系也不是继承关系。对象 “书 ”表示书的抽象,而副本为借出的实际书籍。读者和副本之间的关系称为 “租借 ”。从副本的观点来看,任务是 “借出被登记 ”,而从读者的角度来看,任务是 “借出登记 ”。多重性指出一个副本可以不进行借出登记,也可以只借给一个读者 (01)。另一多重性 (0*)指出一个
13、读者每次可以具有 0个、 1个或多个 “借出登记 ”关系。 存在依赖关系定义如下:如果该较低类 (子女 )只在较高 (双亲 )类存在时存在并且较低 (子女 )类只与较高 (双亲 )类的一个实例相联系的话,就说一个类 (双亲 )可以与一个较低类 (子女 )相连关系。该关系和继承关系可以用来表示任何问题的领域。如题中的关系模式所示,除 “租借 ”外的所有关系以及图书馆 -书都满足存在依赖的要求。但不满足 “租借 ”关系,因为一个副本对象可以存在于登记借阅它的凑者对象之前。不过,可以建立一个确实满足 ED关系的租借 对象。对象 “书 ”不能是图书馆的子女,因为书可存在特定的图书馆之前或之后。可以将
14、“人员 ”增加到图中,以显示在 “图书馆 ”上不属于存在 -依赖的那部分读者。 时序图中,垂直的线代表类的实例。每条垂直线在顶部用类名、后跟一个冒号,最后为实例名来标记。水平箭头描述功能调用。箭头的尾部位于调用类的线上,箭头的头部位于被调用类的线上。功能名位于箭头上。垂直线上的宽方块给出被调用功能的执行时间。时序图比对象模型更接近设计阶段。这个图中使用的有些功能在对象模型中没有使用,而且图中调用的时序是由实际的设计所决定的。 层次结构图给出系统的调用结构。图中的每个框代表一项功能。层次结构图通常在面向对象的开发中不使用,但它是用于理解系统的动态结构的一个非常有用的图。 4 【正确答案】 5 【
15、正确答案】 根据转换规则,上面的 ER图可以转换成 6个关系模式: 仓库 ( 仓库号 ,仓库名,地址 ) 商品 ( 商品号 ,商品名,单价 ) 商店 ( 商店号 ;商店名,地址 ) 库存 ( 仓库号,商品号, 日期, 库存量 ) 销售 ( 商店号,商品号, 月份, 月销售量 ) 供应 ( 仓库号,商店号,商品号, 月份, 月供应量 ) 6 【正确答案】 (1) gk.data=k; (2) i! =0 (4) s- next = gi.link; (5) printf(“输入一个偶对: ”); scanf(“%d, %d“, 【试题解析】 本题的算法思想是:先产生邻接表的 n个头结点 (其结点数值域从 1到 n),然后接收用户输入的 (以其中之一为 0结束标志 ),对于每条这 样的边,申请一个邻接结点,并插入到 vi的单链表中,如此反复,直到将图中所有边处理完毕,则建立了该有向图的邻接表。 7 【正确答案】 (1)max2 =A(1) mex1 =A(2)(2)i6 If b Then Timer2. Enabled =b (a(4) P2. Move P2. Left - 10, P2. Top, P2. Width, P2. Height