1、中级软件设计师下午试题-113 及答案解析(总分:51.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)【算法说明】下面是一段插入排序的程序,将 Rk+1插入到 R1.k的适当位置。R0=Rk+1;j=k;while(RjR0)Rj+1=Rj;j-;Rj+1=R0;【流程图】【测试用例设计】(while 循环次数为 0、1、2 次)测试用例表(分数:15.00)(1).【问题 1】指出算法的流程图中(1)(3)处的内容。(分数:7.50)_(2).【问题 2】指出测试用例设计中(4)(9)处的内容。(分数:7.50)_二、试题二(总题数:1,分数:10.00)【说明】本流
2、程图实现从成绩文件生成学生成绩一览表。某中学某年级的学生成绩数据(分数)登录在成绩文件 10 中,其记录格式见表 1:表 1学号 姓名 课程 1 成绩 课程 2 成绩 课程 6 成绩由该成绩文件生成见表 2 的学生成绩一览表。生成的学生成绩一览表按学号升序排列。表中的名次是指该生相应课程在年级中的名次。表 2学号 姓名 课程 1 课程 2 课程 6成绩 名次 成绩 名次 成绩 名次流程图中的顺序文件 F0 是学生成绩文件,F0 文件经处理 1 处理后产生顺序文件 F,然后经过处理 2至处理 4 对文件 F 进行处理和更新。在处理 5 中,仅对文件 F 的纪录进行学生成绩一览表的编排输出,不进行
3、排序和增加名次等处理。(分数:10.00)(1).【问题 1】流程图中文件 F 的纪录格式设定为见表 3 形式:表 3学号 姓名 课程代码 其中的、应定义为何种数据项?(分数:5.00)_(2).【问题 2】简述处理 2、处理 3 和处理 4 作何种处理,若有排序处理则需指明排序的键及序(升序或降序)。【流程图】*(分数:5.00)_三、试题三(总题数:1,分数:10.00)1.有下列关于运动会管理系统的 ER 图,如图所示。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体之间的关系。假定已通过下列 SQL 语言建立了基本表。 CREATE TABLE ATHLETEANAME
4、CHAR(20),ASEX CHAR(1),ATEAM CHAR(20);CREATE TABLE |TEM(INO CHAR(6)NOT NULL,INAME CHAR(20),ITIME CHAR(12),IPLACE CHAR(20);CREATE TABLE GAMES(ANO CHAR(6)NOTNULL,INO CHAR(6)NOT NULL,SCORRE CHAR(10);为了答题的方便,图中的实体和属性同时给出了中英文两种文字,回答问题时只需写出英文名即可。【E-R 图】(分数:10.00)_四、试题四(总题数:1,分数:1.00)2.例如:设散列函数为 Hash(Key)=K
5、ey mod 7,记录的关键字序列为15,14,21,87,97,293,35,24,149,19,63,16,103,77,5,153,145,356,51,68,705,453,建立的散列文件内容如图所示。(分数:1.00)_五、试题五(总题数:1,分数:15.00)3.【说明】下面的程序先构造 Point 类,再顺序构造 Ball 类。由于在类 Ball 中不能直接存取类 Point 中的xCoordinate 及 yCoordinate 属性值,Ball 中的 toString 方法调用 Point 类中的 toStrinS 方法输出中心点的值。在 MovingBsll 类的 toSt
6、ring 方法中,super.toString 调用父类 Ball 的 toString 方法输出类Ball 中声明的属性值。【Java 代码】/Point.java 文件public class Pointprivate double xCoordinate;private double yCoordinate;public Point()public Point(double x,double y)xCoordinate=x;yCoordinate=y;public String toStrthg()return“(“+Double.toString(xCoordinate)+“,“+Do
7、uble.toString(yCoordinate)+“)“;/other methods/Ball.java 文件public class Ballprivate (1) ;/中心点private double radius;/半径private String color;/颜色public Ball()public Ball(double xValue, double yValue, double r)/具有中心点及其半径的构造方法center= (2) ;/调用类 Point 中的构造方法radius=r;public Ball(double xValue, double yValue,
8、 double r, String c)/具有中心点、半径和颜色的构造方法(3) ;/调用 3 个参数的构造方法color=c;public String toString()return “A ball with center“+center.toString()+“,radius “+Double.toString(radius)+“,color“+color;/other methodsclass MovingBall (4) private double speed;public MovingBall()public MoyingBall(double xValue, double y
9、Value, double r, String c, double s)(5) ;/调用父类 Ball 中具有 4 个参数的构造方法speed=s;public String toString()return super.toString()+“,speed“+Double.toString(speed);/other methodspublic class testpublic static void main(String args)MovingBall mb=new MovingBall(10,20,40,“green“,25);System.out.println(mb);(分数:15
10、.00)_中级软件设计师下午试题-113 答案解析(总分:51.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)【算法说明】下面是一段插入排序的程序,将 Rk+1插入到 R1.k的适当位置。R0=Rk+1;j=k;while(RjR0)Rj+1=Rj;j-;Rj+1=R0;【流程图】【测试用例设计】(while 循环次数为 0、1、2 次)测试用例表(分数:15.00)(1).【问题 1】指出算法的流程图中(1)(3)处的内容。(分数:7.50)_正确答案:(1)F (2)Rj+1=R0 (3)T)解析:(2).【问题 2】指出测试用例设计中(4)(9)处的内容。(分数:
11、7.50)_正确答案:(4) (5) (6) (7) (8)1 (9)3)解析:解析 本题考查用路径覆盖方法为算法设计足够的测试用例,属于基本概念的送分题。这类题拿分的关键是考生平时对于理论的理解和临场的细心。二、试题二(总题数:1,分数:10.00)【说明】本流程图实现从成绩文件生成学生成绩一览表。某中学某年级的学生成绩数据(分数)登录在成绩文件 10 中,其记录格式见表 1:表 1学号 姓名 课程 1 成绩 课程 2 成绩 课程 6 成绩由该成绩文件生成见表 2 的学生成绩一览表。生成的学生成绩一览表按学号升序排列。表中的名次是指该生相应课程在年级中的名次。表 2学号 姓名 课程 1 课程
12、 2 课程 6成绩 名次 成绩 名次 成绩 名次流程图中的顺序文件 F0 是学生成绩文件,F0 文件经处理 1 处理后产生顺序文件 F,然后经过处理 2至处理 4 对文件 F 进行处理和更新。在处理 5 中,仅对文件 F 的纪录进行学生成绩一览表的编排输出,不进行排序和增加名次等处理。(分数:10.00)(1).【问题 1】流程图中文件 F 的纪录格式设定为见表 3 形式:表 3学号 姓名 课程代码 其中的、应定义为何种数据项?(分数:5.00)_正确答案:(成绩 名次)解析:(2).【问题 2】简述处理 2、处理 3 和处理 4 作何种处理,若有排序处理则需指明排序的键及序(升序或降序)。【
13、流程图】*(分数:5.00)_正确答案:(课程代码按升序排列、成绩按降序排列)解析:解析 处理 2 对每个文件 F 进行排序。处理 3 对每个课程代码,确定学生名次,写入文件 F 的相应字段。处理 4 按学号(升序)、课程代码(升序)对文件 F 排序。三、试题三(总题数:1,分数:10.00)1.有下列关于运动会管理系统的 ER 图,如图所示。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体之间的关系。假定已通过下列 SQL 语言建立了基本表。 CREATE TABLE ATHLETEANAME CHAR(20),ASEX CHAR(1),ATEAM CHAR(20);CREAT
14、E TABLE |TEM(INO CHAR(6)NOT NULL,INAME CHAR(20),ITIME CHAR(12),IPLACE CHAR(20);CREATE TABLE GAMES(ANO CHAR(6)NOTNULL,INO CHAR(6)NOT NULL,SCORRE CHAR(10);为了答题的方便,图中的实体和属性同时给出了中英文两种文字,回答问题时只需写出英文名即可。【E-R 图】(分数:10.00)_正确答案:(1)COUNT(*)(若答 COUNT 或 COUNT,得 2 分)(2)GAMES.INO=IFEM.INO(3)GAMES.ANO=100872(注:(2
15、)、(3)可互换、无前缀得 1 分)(4)EXISTS(5)*或 ANO 或 INO 或 SCORE 或后 3 个列名的任意组合(6)CREATEVIEW(7)ATHLETE,ITEM,GAMES(3 项可交换。)注:(4)、(5)也可为(4)ANOIN(5)ANO)解析:解析 本题是关于系数据库标准语言SQL(Structured Query Language)语言的题目,由题目中给出的 ER 图可知 3 个表中,ATH- LETE 和 ITEM 是基本表,表 ATHETE 的主键是运动员编号 ANO,表 I-TEM 的主键是项目编号 INO,表 GAMES 是一个视图,以 ANO、INO
16、为外键。程序 1 统计参加比赛的男运动员人数,也就是表 ATHLETE 中, AEX=M的记录的个数,所以要用到库函数COUNT(*)。这里要注意的是 COUNT 与 COUNT(*)区别,COUNT 的功能是对一列中的值计算个数,而 COUNT(*)才是计算数据库中记录的个数。所以填空的答案为“COUNT(*)”。程序的 2 统计 100872 号运动员参加的所有项目及比赛时间和地点,所以 SELECT 后面的内容是项目编号ITEM.INO、项目名称 INAME 时间 ITIME 及地点 IPLACE。统计涉及比赛表 GAMES 和项目表 ITEM,所以 FROM后面的内容为 GAMES、I
17、TEM。本题考的是连接查询,所谓连接查询指的是涉及两个以上的表的查询。由于是统计 100872 号运动员参加的所有项目及比赛时间和地点,所以查询条件中必然有 GAMES.INO=100872(程序中引用到字段时,若字段名在各个表中是惟一的,则可以把字段名前的表名去掉,否则,应当加上表名作为前缀,以免引起混淆)。由于 GAMES 表中只有比赛的成绩,那些关于项目的数据必须从项目表 ITEM 中取得,所以还应该有两个表之间的关联,即 GAMES.INO=TYEM.INO。所以填空和可交换,不影响查询结果。程序 3 要求查参加 100035 项目的所有运动员名单。分析查询表达式,必首先查询 GAME
18、S 表,找出参加100035 项目的那些运动员的编号 ANO,即 GAMES.ANO=ATHLETE.ANO AND INO=100035,然后再根据查询到的运动员号 ANO 从 ATHLETE 表中抽取运动员的数据。所以填空的答案为“EXISTS”或“ANOIN”,填空的答案为“ANO”。程序 4 要求建立运动员成绩视图。建立视图的命令为 CREATE- VIEW,所以填空的答案一定是“CREATEVIEW”。建立的是运动员成绩视图,那么一定涉及运动员情况、运动员参加的项情况和该项目的成绩,所以要用到 ATHLETE、ITEM 和 GAMES 这 3 个表,因此 FROM 子句后为 ATHL
19、ETE、GAMES、ITEM,3 个表可以是任意次序,不影响结果。四、试题四(总题数:1,分数:1.00)2.例如:设散列函数为 Hash(Key)=Key mod 7,记录的关键字序列为15,14,21,87,97,293,35,24,149,19,63,16,103,77,5,153,145,356,51,68,705,453,建立的散列文件内容如图所示。(分数:1.00)_正确答案:(1) Index=NewElemKey % P(2) iITEMS(3) front= kITEMS;k+)if(t-KeyDatak=NULLKEY)/*在溢出桶链表中找到空闲单元*/t-KeyDatak
20、=NewElemKey; break;/*if*/front=t;if( (4) )t=t-Link;else break;/*while*/*if*/由于每个溢出桶都可以存储 ITEMS 个元素,所以在溢出桶中查找空闲单元与在基桶中的查找过程相同,代码如下。for(k=0;kITEMS;k+)if(t-KcyDatak=NULLKEY)/*在溢出桶链表中找到空闲单元*/t-KeyDatak=NewElemKey; break;/*if*/若在指针 t 指向的溢出桶中找到空闲单元则插入元素,否则,由“t=t-Link”得到下一个溢出桶的指针,因此“kITEMS”可作为是否在当前溢出桶中找到空闲
21、单元的判定条件。显然,在桶号 Index 的基桶和其所有溢出桶都已满的情况下,t 的值为空指针。此时才需要申请新的溢出桶并建立链接关系,因此在上面查找溢出桶中空闲单元时,进行指针 t 的后移“t=t-Link”前应先用front 记录 t 的值,以便于后面建立链接关系。所以空(3)处应给 front 置初值,即“front=private double yCoordinate;public Point()public Point(double x,double y)xCoordinate=x;yCoordinate=y;public String toStrthg()return“(“+Dou
22、ble.toString(xCoordinate)+“,“+Double.toString(yCoordinate)+“)“;/other methods/Ball.java 文件public class Ballprivate (1) ;/中心点private double radius;/半径private String color;/颜色public Ball()public Ball(double xValue, double yValue, double r)/具有中心点及其半径的构造方法center= (2) ;/调用类 Point 中的构造方法radius=r;public Ba
23、ll(double xValue, double yValue, double r, String c)/具有中心点、半径和颜色的构造方法(3) ;/调用 3 个参数的构造方法color=c;public String toString()return “A ball with center“+center.toString()+“,radius “+Double.toString(radius)+“,color“+color;/other methodsclass MovingBall (4) private double speed;public MovingBall()public Mo
24、yingBall(double xValue, double yValue, double r, String c, double s)(5) ;/调用父类 Ball 中具有 4 个参数的构造方法speed=s;public String toString()return super.toString()+“,speed“+Double.toString(speed);/other methodspublic class testpublic static void main(String args)MovingBall mb=new MovingBall(10,20,40,“green“,2
25、5);System.out.println(mb);(分数:15.00)_正确答案:(1) Point center(2) new Point(xValue,yValue)(3) this(xValue,yValue,r)(4) extends Ball(5) super(xValue,yValue,r,c)解析:解析 在类 Ball 的有参数构造函数中,对成员变量 center 通过调用 Point 类的构造方法初始化,而 center 在类 Ball 中尚未声明。结合注释可得空(1)是将 center 变量声明为 Point 对象引用,故空(1)应填 Point。空(2)是调用 Point
26、 类的构造函数,根据题意,此处应将 xValue 和 yValue 作为参数调用类Point 的有参数构造函数,故空(2)应填 new Point(xValue,yValue)。根据注释,空(3)是调用类 Ball 的有 3 个参数的构造方法,而其所在方法本身就是类 Ball 的一个构造方法,因此可用 this 来调用自身的构造方法,故空(3)应填 this(xValue,yValue,r)。根据题述“在 MovingBall 类的 toString 方法中,super.toString 调用父类 Ball 的 toString 方法输出类 Ball 中声明的属性值”,可知类 MovingBall 是类 Ball 的子类,因此空(4)应填 extends Ball。根据注释,空(5)是调用父类 Ball 中具有 4 个参数的构造方法,通过 super 关键字实现,故空(5)应填super(xValue,yValue,r,c)。