1、中级软件设计师下午试题-114 及答案解析(总分:71.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)阅读下列说明和数据流图,回答问题 1 至问题 3,将解答填入对应栏内。 说明 下面给出的是某房产管理系统的一套分层数据流图。其功能描述如下: (1)系统随时根据住房送来的入住单更新住户基本信息文件; (2)每月初系统根据物业管理委员会提供的月附加费(例如清洁费、保安费、大楼管理费等)表和房租调整表,计算每家住户的月租费(包括月附加费),向住户发出交费通知单。住户交费时,系统输入交费凭证,核对后输出收据给住户; (3)系统定期向物业管理委员会提供住房分配表和交费清况表;
2、(4)住户因分户或换房,在更新住户基本信息文件的同时,系统应立即对这些住户做月租费计算,以了结分户或换房前的房租。 以下是经分析得到的数据流图及部分数据字典,有些地方有待填充,假定顶层数据流图是正确的。图 1 是项层数据流图,图 2 是第 0 层数据流图,图 1-3 是第 1 层数据流图,其中 A 是加工 1 的细化图,B 是加工2 的细化图。假定题中提供的顶层图是正确的,请回答下列问题。 图 1 * 图 2 *图 3 * *(分数:15.00)(1).指出图 2 中的哪些文件可不必画出。(分数:5.00)_(2).指出在哪些图中遗漏了哪些数据流。回答时请用如下形式之一: 1)图中遗漏了加工(
3、或文件)流向加工(或文件)的数据流; 2)图中加工遗漏了输入(或输出)数据流。(分数:5.00)_(3).指出图 3 的 B 中加工 2.3 能检查出哪些不合格交费凭证。(分数:5.00)_二、试题二(总题数:1,分数:15.00)1.说明下面的流程图(如图所示)用 N - S 盒图形式描述了数组 A 中的元素被划分的过程。其划分方法是:以数组中的第一个元素作为基准数,将小于基准数的元素向低下标端移动,而大于基准数的元素向高下标端移动。当划分结束时,基准数定位于 Ai,并且数组中下标小于 i 的元素的值均小于基准数,下标大于 i 的元素的值均大于基准数。设数组 A 的下界为 low,上界为 h
4、igh,数组中的元素互不相同。例如,对数组(4,2,8,3,6),以 4 为基准数的划分过程如下:(分数:15.00)_三、试题三(总题数:1,分数:11.00)2.根据题意回答以下问题:设某商业集团数据库中有 3 个实体集:一是“商店”实体集,属性有商店编号,商店名,地址等;二是“商品”实体集,属性有商品号,商品名,规格,单价等;三是“职工”实体集,属性有职工编号,姓名,性别,业绩等。商店与商品间存在“销售”联系,每个商店可以销售多种商品,每种商品也可以在多个商店和职工间存在“聘用”联系,每个商店有许多职工,每个职工只能在一个商店工作,商店聘用职工有聘期和月薪。问题:1请根据题意完善下面 E
5、R 图。2将 ER 图转换成关系模型,并注明主键和外键。3请写出要查出员工“小李”在三月份的销售业绩的关系代数式。(分数:11.00)_四、试题四(总题数:1,分数:15.00)3.说明 请完成流程图以描述在数据 A(1)至 A(10)中求最大数和次大数的程序的算法。并将此改成 PAD图。该算法的流程图如下图:(分数:15.00)_五、试题五(总题数:1,分数:15.00)4.【说明】定义类 Table 的私有数据成员 x 和 y,分别用于表示九九表中的两个乘数(x*y),它们都是 int 型的数据。完成类 Table 的成员函数 print()的定义,该函数以“x*y=z”的格式打印出九九表
6、中的一个乘法算式,请使用格式化输出函数 printf 实现。完成类 Table9 的成员函数 print()的定义,该函数调用基类 Table 的 print()函数,将九九表输出到屏幕。补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。源程序文件 test8_3.cpp 清单如下:#include iostream, h #include stdio, h class Table(1) int z;public:void print (int x,int y,int z); void Table:print (int x,int y,int z)(2) Class Table9:p
7、ublic Tablepublic:void print();void Table9:print()(3) int x,y,z;for(i=1;i10;i+)for(j=1;ji+1;j+)x=i;y=j;z=i*j;Table:print(y,x,z);printf(“/n“);main()/* *4* *return 0;(分数:15.00)_中级软件设计师下午试题-114 答案解析(总分:71.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)阅读下列说明和数据流图,回答问题 1 至问题 3,将解答填入对应栏内。 说明 下面给出的是某房产管理系统的一套分层数据流图。其
8、功能描述如下: (1)系统随时根据住房送来的入住单更新住户基本信息文件; (2)每月初系统根据物业管理委员会提供的月附加费(例如清洁费、保安费、大楼管理费等)表和房租调整表,计算每家住户的月租费(包括月附加费),向住户发出交费通知单。住户交费时,系统输入交费凭证,核对后输出收据给住户; (3)系统定期向物业管理委员会提供住房分配表和交费清况表; (4)住户因分户或换房,在更新住户基本信息文件的同时,系统应立即对这些住户做月租费计算,以了结分户或换房前的房租。 以下是经分析得到的数据流图及部分数据字典,有些地方有待填充,假定顶层数据流图是正确的。图 1 是项层数据流图,图 2 是第 0 层数据流
9、图,图 1-3 是第 1 层数据流图,其中 A 是加工 1 的细化图,B 是加工2 的细化图。假定题中提供的顶层图是正确的,请回答下列问题。 图 1 * 图 2 *图 3 * *(分数:15.00)(1).指出图 2 中的哪些文件可不必画出。(分数:5.00)_正确答案:(“房租文件”和“交费文件”)解析:分层数据流图中,只涉及单个加工的文件不必画出,可在子图中再画。依此标准,图 2 中文件“房租文件”和“交费文件”不必画出。(2).指出在哪些图中遗漏了哪些数据流。回答时请用如下形式之一: 1)图中遗漏了加工(或文件)流向加工(或文件)的数据流; 2)图中加工遗漏了输入(或输出)数据流。(分数
10、:5.00)_正确答案:(加工 1 子图中,遗漏了从住户基本信息文件到加工 1.1(入住单校验)的数据流。加工 1子图中,加工 1.6(制作住房分配报告)遗漏了输出数据流:住房分配表。加工 2 子图中,加工 2.1(计算月租费)遗漏了输入数据流:月附加费表。加工 2 子图中,加工 2.4(制作收据)遗漏了输出数据流:收据。)解析:分层数据流图时刻牢记父图与子图平衡原则。对这种数据流缺失题目,认真对照父图与子图就可得出答案。另外,还要注意与文件的交互,包括错误数据流大多也是出在此。(3).指出图 3 的 B 中加工 2.3 能检查出哪些不合格交费凭证。(分数:5.00)_正确答案:(交费凭证中有
11、非法字符;交费文件中不存在与之对应的交费凭证。)解析:二、试题二(总题数:1,分数:15.00)1.说明下面的流程图(如图所示)用 N - S 盒图形式描述了数组 A 中的元素被划分的过程。其划分方法是:以数组中的第一个元素作为基准数,将小于基准数的元素向低下标端移动,而大于基准数的元素向高下标端移动。当划分结束时,基准数定位于 Ai,并且数组中下标小于 i 的元素的值均小于基准数,下标大于 i 的元素的值均大于基准数。设数组 A 的下界为 low,上界为 high,数组中的元素互不相同。例如,对数组(4,2,8,3,6),以 4 为基准数的划分过程如下:(分数:15.00)_正确答案:(1)
12、j- (2)i+ (3)Aipivot 或jpivot (4) A,L,k-1 或 A,L,k(5)A,k+1,H 或 A,k,H)解析:解析 题目考查快速排序算法。快速排序采用了一种分治的策略,通常称为分治法。其基本思想是:将原问题分解为若干个规模更小,但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。快速排序的具体过程为:第一步,在待排序的 n 个记录中任取一个记录,以该记录的排序码为基准,将所有记录分成 2 组,第一组各记录的排序码都小于等于该排序码,第二组各记录的排序码都大于该排序码,并把该记录排在这 2 组中间,这个过程称为一次划分。第二步,采用同
13、样的方法,对划分出来的 2 组元素分别进行快速排序,直到所有记录都排到相应的位置为止。在进行一次划分时,若选定以第一个元素为基准,就可将第一个元素备份在变量 pivot 中,如图中的第步所示。这样基准元素在数组中占据的位置就空闲出来了,因此下一步就从后向前扫描。如图中的第步所示,找到一个比基准元素小的元素时为止,将其前移,如图中的第步所示。然后再从前向后扫描,如图中的第步所示,找到一个比基准元素大的元素时为止,将其后移,如图中的第步所示。这样,从后向前扫描和从前向后扫描交替进行,直到扫描到同一个位置为止,如图中的第步所示。由题目中给出的流程图可知,以第一个元素作为基准数,并将 Alow备份至
14、pivot,i 用于从前向后扫描的位置指示器,其初值为 low, j 用于从后往前扫描的位置指示器,其初值为 high。当 ij 时退出循环。退出循环时,将 pivot 赋给当前的 Ai(Aipivot)。递归函数的目的是执行一系列调用,直到到达某一点时递归终止。为了保证递归函数正常执行,应该遵守下面的规则:1)每当一个递归函数被调用时,程序首先应该检查基本的条件是否满足,例如,某个参数的值等于 0,如果是这种情形,函数应停止递归。2)每次当函数被递归调用时,传递给函数一个或多个参数,应该以某种方式变得“更简单”,即这些参数应该逐渐靠近上述基本条件。例如,一个正整数在每次递归调用时会逐渐变小,
15、以至最终其值到达 0。本题中,递归函数 sort(int A,int L, int H)有 3 个参数,分别表示数组 A 及其下界和上界。根据流程图可知,这里的 L 相当于流程图中的 i,这里的 H 相当于流程图中的 j。因为 P()返回基准数所在数组A 中的下标,也就是流程图中最后的“Aipivot”中的 i。根据快速排序算法,在第一趟排序后找出了基准数所在数组 A 中的下标,然后以该基准数为界(基准数在数组中的下标为 k),把数组 A 分成 2 组,分别是 AL,k-1)和 Ak+1,H),最后对这 2 组中的元素再使用同样的方法进行快速排序。三、试题三(总题数:1,分数:11.00)2.
16、根据题意回答以下问题:设某商业集团数据库中有 3 个实体集:一是“商店”实体集,属性有商店编号,商店名,地址等;二是“商品”实体集,属性有商品号,商品名,规格,单价等;三是“职工”实体集,属性有职工编号,姓名,性别,业绩等。商店与商品间存在“销售”联系,每个商店可以销售多种商品,每种商品也可以在多个商店和职工间存在“聘用”联系,每个商店有许多职工,每个职工只能在一个商店工作,商店聘用职工有聘期和月薪。问题:1请根据题意完善下面 ER 图。2将 ER 图转换成关系模型,并注明主键和外键。3请写出要查出员工“小李”在三月份的销售业绩的关系代数式。(分数:11.00)_正确答案:(如图 5 所示。)
17、解析:四、试题四(总题数:1,分数:15.00)3.说明 请完成流程图以描述在数据 A(1)至 A(10)中求最大数和次大数的程序的算法。并将此改成 PAD图。该算法的流程图如下图:(分数:15.00)_正确答案:(1)max2 =A(1) mex1 =A(2)(2)i =10(3)max1 =A(i)1max2 = max1(4)i=i+1PAD 图描述如下:)解析:解析 本题的算法思想是:先输入 A(1)到 A(10)的值,然后判断前两个数的大小。用变量 max1 存储最大数,用变量 max2存储次大数。然后逐个读入数据,分别和 max1,max2 比较,保证最大的存入max1,次大的存入
18、 max2。五、试题五(总题数:1,分数:15.00)4.【说明】定义类 Table 的私有数据成员 x 和 y,分别用于表示九九表中的两个乘数(x*y),它们都是 int 型的数据。完成类 Table 的成员函数 print()的定义,该函数以“x*y=z”的格式打印出九九表中的一个乘法算式,请使用格式化输出函数 printf 实现。完成类 Table9 的成员函数 print()的定义,该函数调用基类 Table 的 print()函数,将九九表输出到屏幕。补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。源程序文件 test8_3.cpp 清单如下:#include iostr
19、eam, h #include stdio, h class Table(1) int z;public:void print (int x,int y,int z); void Table:print (int x,int y,int z)(2) Class Table9:public Tablepublic:void print();void Table9:print()(3) int x,y,z;for(i=1;i10;i+)for(j=1;ji+1;j+)x=i;y=j;z=i*j;Table:print(y,x,z);printf(“/n“);main()/* *4* *return 0;(分数:15.00)_正确答案:(1)int x;int y;(2)printf(“%d*%d=%d“,x,y,z);if(z10)printf(“ “);(3)int i,j;(4)Table9 t_9;t_9. print();)解析:解析 主要考查考生将具体问题抽象为类,将类的定义补充完整,并进行类定义测试的能力。注意(2)中格式化输出函数 printf 的使用格式,%d 代表输出的为整型。