1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 33及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读下列说明和流程图,回答问题 1至问题 3。 【说明】 某考务处理系统具有以下功能: (1)输入报名单; (2)自动编制准考证号; (3)输出准考证; (4)输入成绩清单; (5)输出成绩通知单; (6)输出成绩分布表; (7)输入合格标准、输出录取通知单; (8)试题难度分析,并输出试题难度分析表。 这里给出了实现上述要求的部分不完整的数据流图,其中部分数据流的组成如下所示。 报名单 =报名号 +姓名 +通信地址 考生名册 =报名号 +准考证号 +姓名 +通信地址
2、 成绩册 =准考证号 +(课程号 +成绩 )(其中 W表示 W重复多次 ) 准考证 =报名号 +姓名 +准考证号 【问题1】 指出 0层图中可以删去的部分。 【问题 2】 在加工 1子图中将遗漏的数据流添加在答题纸上。 【问题 3】 加工 2子图分解成如图所示的 4个子加工及相关的文件 (即数据存储 )。试在此基础上将相关的 DFD成份添加在答题纸上,以完成该加工子图。 2 阅读下列说明,回答问题 1至问题 3。 【说明】 请设计一个图书馆数据库,此数据库中对每个借阅者 保存的读者记录包括:读者号、姓名、地址、性别、年龄、单位。对每本书存有:书号、书名、作者、出版社。对每本书被借出的书存有读者
3、号、借出日期和应还日期。 【问题 1】 给出 E-R图 【问题 2】 转换成关系模型 【问题 3】 给其中任何一个表用 SQL语句建表。 3 阅读下列函数说明和 C代码,将应填入 (n)处的字句写在对应栏内。 【说明】 某公司的用品采购流程如下所述。 (1)由营业部门提出需求用品清单。 (2)将需求用品清单交采购部门建立采购采买单据。 (3)采购部门建立采购采买单据后,交财务部门,向财务部申请 款项,预支定金。 (4)财务部建立应付帐款单据后,核支款项。 (5)采购部门再收到款项后,进行采买。 (6)采买完成,执行: 发票核剩余款项交财务部,即由财务部门处理。 用品点交营业部门发放,即由营业部
4、门处理。 (7)进行财务结算处理,执行: 采购部门:采购单据结案。 财务部门:帐款冲销结案。 【问题】 完成下面的 UML活动图对象流分析, 1 11为活动,设计此采购活动的流程。 4 阅读下列函数说明和 C+代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】函数 int Toplogical(LinkedWDigraph G)的功能是对图 G中的顶点进行拓扑排序,并返回关键路径的长度。其中图 G表示一个具有 n个顶点的 AOE一网,图中顶点从 1 n依次编号,图 G的存储结构采用邻接表表示,其数据类型定义如下: typedef struct Gnode /*邻接表的表结点类型 *
5、/ int adivex; /*邻接顶点编号 */ int weight; /*弧上的权值 */ bstmct Gonde*nextare; /*指示下一个弧的结点 */ Gnode; typedef struct Adjlist /*邻接表的头结点类型 */ char vdata; /*顶点的数据信息 */ struct Gnode*Firstadj; /*指向邻接表的第 1个表结点 */ Adjlist; typedef struct LinkedWDigraph /*图的类型 */ int n, e; /*图中顶点个数和边数 */ struct Adjlist head; /*指向图中第
6、 1个顶点的邻接表的头结点 */ LinkedWDigraph; 【函数】 int Toplogical(LinkedWDigraph G) Gnode *p; int j,w,top=0; int *Stack,*ve,*indegree; ve=(int *)mallloc(G.n+1)* sizeof(int); indegree=(int *)malloc(G.n+1)*sizeof(int);/*存储网中个顶点的入度 */ Stack=(int *)malloc(G.n+1)*sizeof(int); /*存储入度为 0的顶点的编号 */ if(!ve!indegree!Stack)
7、 exit(0); for(j=1;j =G.n;j+) vej=0; indegreej=0; /*for*/ for(j=1;j =G.n;j+) /*求网中各顶点的入度 */ p=G.headj.Firstadj; while(p) (1); p=p- nextarc; /*while*/ /*for*/ for(i=1;j =G.n;j+) /求网中入度为 0的顶点并保存其编号 */ if(!indegreej) Stack+top=j; while(top 0) w=(2); printf(“%c“, G.headw.vdata); p=G.headw.Firstadj; while
8、(p) (3); if(!indegreep- adjvex) Stack+top=p- adjvex; if( (4) ) vep- adjvex=vew+p- weight; p=p- nextarc; /*while*/ return (5); /*Toplogical*/ 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 5 阅读下列 C+程序和程序说明,将应填入 (n)处的字句写在对应栏内。 【说明】 C+语言本 身不提供对数组下标越界的判断。为了解决这一问题,在程序 6中定义了相应的类模板,使
9、得对厂任意类型的二维数组,可以在访问数组元素的同时,对行下标和列下标进行越界判断,并给出相应的提示信息。 #include iostream.h template class T class Array; template class T class ArrayBody friend (1) T* tpBody; int iRows, iColumns, iCurrentRow; ArrayBody (int iRsz, int iCsz) tpBody =(2) iRows = iRsz; iColumns =iCsz; iCurrentRow =-1; public: T row_erro
10、r=column_error=false; try if (iCurrentRow 0 | iCurrentRow =iRows) row_error=true; if (j 0 | j =iColumns) column_error=true; if ( row_error=true | column_error = true) (3) catch (char) if (row_error=true) cerr “行下标越界 “ iCurrentRow “ “; if (column_error= true ) cerr “列下标越界 “ j “; cout “n“; return tpBo
11、dyiCurrentRow * iColumns +j; ; ArrayBody ( ) delete tpBody; ; template class T class Array ArrayBody T tBody; public: ArrayBody T Array (int iRsz, int iCsz) :(5) ; void main() Array int a1(10, 20); Array double a2(3, 5); int b1; double b2; b1=a1-510; /有越界提示:行下标越界 -5 b1=a11015; /有越界提示:行下标越界 10 b1=a11
12、4; /没有越界提示 b2=a226; /有越界提示:列下标越界 6 b2=s21020; /有越界提示:行下标越界 10列下标越界 20 b2=a214; /没有越界提示 6 阅读下列 Java程序和程序说明,将应填入 (n)处的字句写在对应栏内。 【说明】下面的程序先构造 Point类,再顺序构造 Ball类。由于在类 Ball中不能直接存取类 Point中的 xCoordinate及 yCoordinate属性值, Ball中的 toString方法调用 Point类中的 toString方法输出中心点的值。在 MovingBall类的 toString方法中, super.toStri
13、ng调用父类 Ball的 toString方法输出类 Ball中声明的属性值。 public class Point private double xCoordinate; private double yCoordinate; public Point 0 public Point(ouble x, double y) xCoordinate = x; yCoordinate = y; public String toString() return “( + Double.toString(Coordinate)+ “,“ + Double.toString(Coordinate) + “)
14、; /other methods public class Ball (1); /中心点 private double radius; /半径 private String colour; /颜色 public Ball() public Ball(double xValue, double yValue, double r)/ 具有中心点及半径的构造方法 center=(2);/调用类 Point 中的构造方法 radius = r; public Ball(double xValue, double yValue, double r, String c) / 具有中心点、半径及颜色的构造方
15、法 (3); /调用 3个参数的构造方法 colour = c; public String toString() return “A ball with center“ + center, toString() + “, radius“ + Double.toString(radius) + “, colour“ + colour; /other methods public class MovingBall. (4) private double speed; public MovingBall() public MovingBall(double xValue, double yValu
16、e, double r, String e, double s) (5);/ 调用父类 Ball中具有 4个参数的构造方法 speed = s; public String toString( ) return super, toString( ) + “, speed “+ Double.toString(speed); /other methods public class Tester public static void main(String args) MovingBall mb = new MovingBall(10,20,40,“green“,25); System.out.p
17、rintln(mb); 软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 33答案与解析 一、必 答题(共 4道大题,每道大题 15分) 1 【正确答案】 【问题 1】 成绩册文件可删。【问题 2】 补充后的加工 1子图如下所示。 【问题 3】 完成后的加工 2子图如下所示。【试题解析】 0层图中的成绩册文件只被加工成绩处理使用,是个局部文件,按照数据隐蔽的规则,不应出现在 0层图中。 加工 1子图中,对比 0层图,很明显缺少输入数据流 “报名单 ”,输出数据流 “准考证 ”。 问题 3是要完善加工 2子图,显得比较繁杂。这种题的出现频率应该非常低,但它是对考生实际处理问题能力的一个
18、非常有效的检验,要比问题 1、 2复杂,容易发生遗漏和错误。所以,建议考生在做模拟试题时,在基本完成试题的情况下,还要多加思考,考虑如果遇到像问题 3这样,应该如何解决,这将对考生的应试能力和实际工作有相当大的帮助。 完善加工子图,其实就是要补充数据流图的基本成分。数据流图的基本成分是:加工、数据流、数据存储 (数据文件 )、外部实体。其中,在这个题目中,外部实体不用考虑。 首先考虑加工。加工 2子图中,目前有 4个子加工,即: (1)成绩清单录入, (2)制作成绩通知单, (3)制作录取通知单, (4)试题难度分析。根据说明中关于功能的第 8项,很明显缺少一个实现 “输出试题成绩分布表 ”的
19、子加工。现在这 5个加工已经全面实现了加工 2。 接着,看是否还缺少数据文件,经过对说明的分析,可以肯定没有其它的数据文件。 最后,就是要补充数据流。这一步最为复杂,容易遗漏和错画。必须把握一个原则:围绕数据文件,按加工顺序,依据说明逐步进行。 加工 1.1需要输入考生名册的数据,经过加工,向成绩册输出数据。 加工 2.2需要输入考生名册和成绩册的数据,经过加工,输出成绩通知单。 加工 2.3需要输入考生名册和成绩册的数据,经过加工,输出合格 标准和录取通知单。 加工 2.4只需要输入成绩册的数据,经过加工,输出试题难度分析表。 加工 2.5需要输入成绩册的数据,经过加工,输出成绩分布表。 2
20、 【正确答案】 【问题 1】 【问题 2】 关系模型为: 读者 (读者号,姓名,地址,性别,年龄,单位 ) 书 (书号,书名,作者,出版社 ) 借书 (读者号,书名,借出日期,应还日期 )【问题 3】 对关系模式 “借书 ”建表: CREATE TABLE RB(RNO CHAR(5), BNO CHAR(5), OUT_DATE 【试题解析】 这个数据库的设 计比较简单,但需要考生对一些基本知识有所掌握。 通过分析,可以得到:有 2个实体和一个联系。 实体:读者、书。 联系:借书。 读者和书之间是 “一对多 ”的借书联系。 实体 “读者 ”应该有如下属性:读者号,姓名,年龄,单位,地址,性别
21、。 实体 “书 ”应该有如下属性:书号,书名,作者,出版社。 联系 “借书 ”应该有如下属性:借出日期,应还时期。 由以上分析画出的 E-R图如下所示。 3 【正确答案】 1送出需求用品清单 (营业部门 )。 2建立采购采买单据 (采购部门 )。 3向财务部门申请款项:预支定金 (财务部门 )。 4财务部建立应付账款单据后:核支款项 (财务部门 )。 5收到款项,进行采买 (采购部门 )。 6采买完成 (采购部门 )。 7用品点交发放 (营业部门 )。 8发票及剩余款项交财务 (财务部门 )。 9采购单据结案 (采购部门 )。 10账款冲销结帐 (财务部门 )。 11关闭采购单据 (采购部门
22、)。 【试题解析】 活动图 (Active Diagram)是一种用来设计系统动态视图的图形,是UML中的流程图,而且可以设计活动与活动之间的流程控制,因此运用活动图可以设计 系统的动态角度。 利用活动图设计系统的动态视图时,应用的方式有两种: (1)设计工作流程 (对象流程 )。 (2)设计操作。 对象流 (Object Flow):是将对象放置在活动图上,来指定参与此活动图的事务,接着将建立、修改或销毁这些对象的活动或转换,运用依赖关系连在一起,这种对象和依赖关系的使用方式称为 “对象流 ”。 问题中有 11个活动, 3个对象:营业部门,采购部门,财务部门。其中营业部门有 2个活动,采购部
23、门有 5个活动,财务部门有 4个活动。 分析已知的采购流程描述,先区分出 各个对象独自的活动,和对象之间联系的活动,从整个活动图的 “初始状态 ”和 “最终状态 ”入手,再从每个对象的第一个活动和最后一个活动入手,注意并发的活动。通过这些方法,可以比较顺利的得到结果。 这道题需要考生对 UML知识的扎实掌握,并且有一定的软件工程和面向对象的实践,才能很好的解决这类问题。 最后给出完整的采购流程活动图对象流分析中的 11个动作。 4 【正确答案】 (1)indegreep- adjvex+及其等价形式 (2)Stacktop-及其等价形式 (3)indegreep- adjvex-及其等价形式
24、(4)vew+p- weight vep- adjvex及其等价形式 (5)vew及其等价形式 【试题解析】 (1)indegreep- adjvex+及其等价形式 此填空在 for(j=1;j =G.n;j+)中,求网中各顶点的入度。遍历邻接表G.headj.Firstadj,将每个结点 p- adjvex的入度 indegreep- adjvex加 1。邻接表是 j的出度结点表。 (2)Stacktop-及其等价形式 栈 Stack中存放的是入度为 0的结点号,此 while循环中, w取栈顶值开始搜索打印这些结点。 (3)indegreep- adjvex-及其等价形式 由于 p=G.h
25、eadw.Firstadj;因此 while循环是遍历这个邻接链表,将每个结点的入度减 1。将入度为 0的结点号入栈 Stack中。 (4)vew+p- weight vep- adjvex及其等价形式 若 vew+p- weight大于 vep- adjvex,则 vew+p- weight是最长路径,用vew+p- weight取代 vep- adjvex。 (5)vew及其等价形式 最终返回的是 w结点的 vew值作为整个 AOE网的最长路径值。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 5
26、 【正确答案】 (1)class Array T (2)new TiRsz*iCsz (3)throw e (注: throw后可以填写任意的字符常数 ) (4)tBody.iCurrentRow=i (5)tBody (iRsz,iCsz) 【试题解析】 (1)的前面是友元关键词 friend,但在程序中,没有独立的函数,所以只能是另一个模板类 Array,所以 (1)应填写 class Array T。 在类模板 ArrayBody的定义中,声明了成员变量 T tpBody,且在析构函数中有delete tpBody,由于在 C+中, delete总是和 new成对出现的,所以 (2)应该
27、使用new对 tpBody进行初始化。通过程序中 return tpBodyiCurrentRow * iColumns+j行,可以发现该题中采用的是以一维数组来模拟二维数组的创建。在构造函数有两个参数,分别为行数和列数所以 (2)应填写 new TiRsz * iCsz。 (3)的前后有 try 和 catch 语句序列,这是 C料中典型的异常处理搭配语句。由于 (3)前面已作处理,当有行下标越界时,置 row error=true;当有列下标越界时,置 col error=true。且 (3)前面的判断是 “row error=true|column errortrue”,也就是说只要有行
28、下标越界或是列 下标越界就执行 (3)。错误处理语句写好放在 catch中, catch是当正常程序段发生异常时才执行的,并且这里指明了是catch(char),所以只要在 (3)抛出一个 char异常,即可进行错误处理。所以 (3)应填: throw e(这里可以是任何字符 )。 再来看 Array类中的两个空。首先看 (5),这显然是做一些初始化工作,给其成员变量赋初值,而 Array类只有一个成员变量 tBody,且 tBody是 ArrayBody类型的, ArrayBody的构造函数需要传递两个参数,分别代表数组的行和列。因此, (5)应填写 tBody (iRsz, iCsz)。
29、main中实例化 Array,而在类 Array的构造函数对 tBody这个变量进行实例化,这时就以一维数组的形式创建了二维数组。在类 Array中口运算符重载函数中返回了一个 ArrayBody类,而在 ArrayBody也存在着 运算符重载函数,并且在 ArrayBody的重载函数中对行下标和列下标同时进行了检查,且返回了一个 T类型,对 Array int来说就是返回了 int,也就是数组的一个元素。那么通过对类 ArrayBody的观察,发现在整个 ArrayBody中并没有任何地方对 iCurrentRow进行赋值,而在 ArrayBody的 运算符重载中却利用其对数组行下标进行判断
30、,而数组的行下标只在 Array的口运算符重载中出现,那么 (4)就应该是对类ArrayBody的成员变量 iCurrentRow进行赋值,所以 (4)应填入 tBody.iCurrentRow=i。 6 【正确答案】 (1)private Point center (2)new Point (xValue, yValue) (3)this(xValue, yValue, r) (4)extends Ball (5)super(xValue, yValue, r, c) 【试题解析】 (1)private Point center Ball类以 Point类的 center对象作为私有成员。 (2)new Point (xValue, yValue) 用类 Point中的构造方法 Point构造 Point类的 center对象。 (3)this(xValue, yValue, r) 利用 this指针调用本类的 3个参数的重载构造方法。 (4)extends Ball MovingBall类由 Ball类扩展而来。 (5)super(xValue, yValue, r, c) 调用父类 Ball中具有 4个参数的构造方法: Ball(double xValue, double yValue, double r, String c)
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1