1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 15及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读以下算法说明和流程图,回答问题 1和问题 2。 【算法说明】 下面是一段插入排序的程序,将 Rk+1插入到 R1.k的适当位置。 R0=Rk+1; j=k; while(Rj R0) Rj+1=Rj; j-; Rj+1=R0;1 指出算法的流程图中 (1) (3)处的内容。 2 指出测试用例设计中 (4) (9)处的内容。 3 阅读以下说明和流程图,回答问题 1至问题 3。 【说明】 某城市电信局受理了许多用户申请在指定电话上开设长话业务。长话包括国内长途和国际长
2、途。电信局保存了长话用户档案和长话业务档案。3 (1)请说明流程图 1中的文件 F0、 F1分别是哪个文件。 (2)处理 1和处理 5分别按照哪些数据项进行分类 ? 4 处理 4能发现哪些错误 (不需考虑设备故障错误 )? 5 说明处理 6的功能。 【流程图】 (如图 3所示 ) 6 阅读下列函数说明和 C函数,将应填入 (n)处。 【函数 3说明】 函数 DeleteNode(Bitree * r, int e)的功能是:在树根结点指针为 r的二叉查找 (排序 )树上删除键值为 e的结点,若删除成功,则函数返回 0,否则函数返回 -1。二叉查找树结点的类型定义为: typedef struc
3、t Tnode int data; /*结点的键值 */ struct Tnode * Lchild, *Rchild; /*指向左、右子树的指针 */ * Bitree; 在二叉查找树上删除一个结点时,要考虑三种情况: 若待删除的结点 p是叶子结 点,则直接删除该结点; 若待删除的结点 p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点 P; 若待删除的结点 p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点 s,用结点 s的值代替结点 p的值,然后删除结点 s,结点 s必属于上述 、 情况之一。 【函数 3】 int DeleteNode(Bitree
4、* r, int e) Bitree p=*r, pp, s, c; while(1) /*从树根结点出发查找键值为 e的结点 */ pp=p; if(e p- data)p=p- Lchild; else p=p- Rchild; if(!p)return-1; /*查找失败 */ if(p- Lchild for(i=0; tti; i+) if(tti =A) float ConcretePrice; public: Money(float f,float c); float Tota|Money(float fencelen, float conarea); ; Money:Money
5、(float f,float c) (3) float Money:Tota|Money(float fencelen, float conarea) (4) void main( ) float radius, fence, concrete; cout. setf(ios: fixed); cout. setf(ios: showpoint); cout. precision (2); cout “Enter the radius of the pool:“; cin radius; cout “Enter the FencePrice:“; cin fence; cout “Enter
6、the ConcretePrice: “; cin concrete; Circle Pool(radius); Circle PoolRim(radius + WIDTH); Money mon( fence, concrete); float totalmoney = mon. TotalMoney( PoolRim. Circumference( ), ( PoolRim. Area ( ) - Pool. Area ( ) ) ); cout “The total money is RMB“ totalmoney end|; 10 【说明】 下面是一个 Applet程序,其功能是将完整
7、 的图像显示于 Applet的区块中,然后可以通过拖动鼠标让图像随着鼠标拖动的轨迹而移动。 程序运行结果如图 5所示。 import java. applet. *; import java. awt. *; /* applet code=“ex4_7.class“, width=800 height=400 /applet */ public class ex4_7 extends Applet private |mage ilmg; private int xPos, yPos; public void init() xPos = yPos=(1); ilmg=getlmage(2)“ex
8、4_7.jpg“); publicvoid paint(Graphics g) g. drawlmage(ilmg, xPos, yPos, (3); public boolean (4) (Evente, int x, int y) xPos=x; yPos=y; (5); return true; ex4_7. html HTML HEAD TITLE ex4_7 /TITLE /HEAD BODY appletcode=“ ex4_7. class“ width =800 height =400 /applet /BODY /HTML 软件水平考试(中级)软件设计师下午(应用技术)试题模
9、拟试卷 15答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 (1)F(2)Rj+1=R0(3)T 2 【正确答案】 (4) (5) (6) (7) (8)1(9)3 【试题解析】 本题考查用路径覆盖方法为算法设计 足够的测试用例,属于基本概念的送分题。这类题拿分的关键是考生平时对于理论的理解和临场的细心。 3 【正确答案】 (1)F0是长话业务档案 f1是长话用户档案。 (2)处理 1:电话号码 处理 5:用户编码。 4 【正确答案】 (1)根据月计费文件中的电话号码,在长话业务档案中找不到相应的用户编码。 (2)在月计费文件中,某电话号码有国内长途通话的话费,但在
10、长话业务档案中,国内长途许可标志却不许可。 (3)在月计费文件中,某电话号码有国际长途通话的话费,但在长话业务档案中,国际长途许可标志却不许可。 5 【正确答案】 对长话帐单文件中的每个记录,根据用户编码查询长途电话用户档案,找到相应的用户名和用户地址,形成长话缴费通知单。 【试题解析】 本题给出的流程图是长话计费管理的处理流程,用来生成长话缴费通知单。系统的数据源是记录在电信局程控交换机磁带上的原始计费数据,这些数据在处理之前需要先进行分类,以提高系统的效率。原始计费数据记录的是每次通话的数据,长话缴费通知单是针对每个电话用户的,因此在处理 1中应该按照电话号码进行分类。 F0是在处理 4(
11、出账 )中用来生成长话账单文件所要用到的“长话业务档案 ”。由试 题的说明可知,月计费文件中含有各种通话类型的话费,所以处理 4(出账 )的功能是长话话费从月计费文件中分离出来,并进行数据的验证。根据以上的分析得知 10应该是长话业务档案。 F1是在处理 6中生成长话缴费通知单所要用到的 “长话用户档案 ”。因为用户编码是用户在系统中的惟一标识,所以应该先将长话账单文件按照用户编码进行分类,再根据 F1长话用户档案,得到用户名和用户地址,产生长话缴费通知单。因此 F1应该是长话用户档案。 6 【正确答案】 (1)p&p- data!=e或 p&(*p).data!=e(2)p - Lchild
12、或 (*p).Lchild (3)s- Rchild或 (*s).Rchild(4)p- Lchild或 (*p).Lchild(5)p=pp- Lchild或 p(*pp).Lchild 【试题解析】 (1)程序的第一条语句是变量的声明及赋初值, p指向二叉查找树的根。接下来从 while循环的注释部分可以看出,该循环的功能是查找键值为 e的结点。当循环的判断条件 e p- data时,进入左子树查找,否则到右子树查找。程序中没有关于找到结点的处理代码,即循环内部只处理了没找到结点的情况,所以循 环条件应该是当找到键值为 e的结点时退出循环。另外,应注意一个隐含的限制条件 “p NULL”时
13、,表示已经查找完毕,无需进入循环。通过分析, (1)应填p &p- data!=e。 (2)if程序段是处理第三种情况的,由循环中的语句 “s=s-Rchild; ”可看出, s用于要删结点的左子树中查找键值最大的结点,所以 s的初值应是要删除结点的左子结点。可见, (2)应填写 p- Lchild。 (3)根据前面所述的二叉树规则可知,要找的结点 s应是左子树中查找键值最大的结点,所以,的初值应是要删除结点的左子结点。可见, (3)应填 p- Rehild。本题把 、 结合在一起进行处理,所以引入了一个中间变量 c,用 c来存储用于替换 p的结点。现在的关键问题是什么条件可以使这两种情况和在
14、一起,因为若删除的结点为叶子结点时, p- Rchild与 p- Lchild都为 NULL;若删除的结点有一个子结点时,如果有左子结点,则 p- Rchild为 p- Rchild;如果有右子结点,则 p- Lchild为NULL。当 p- Lchild不为 NULL时,说明是第二种情况, p结点含左子结点,所以 c=p- Lchild;当 p- Lchild为 NULL时,说明有两种可能: 第一: p- Rchild也为 NULL,则 p是叶子结点。 第二: p- Rchild不为 NULL,则 p是有右子结点的结点。 这两种情况都可以用 c=p- Rchild,因为当 p是叶子结点的时候
15、用 NULL代替 p的位置即可,所以第 (4)应填 p- Lehild。在程序中很多地方都出现了变量 pp,其实只要仔细看一下前面的程序就知道, pp一直指向的是 p结点的前一个结点,即p的父结点,所以 (5)的作用是判断 p是其父结点的左子结点还是右子结点, (5)应填 pp- Lchild =p。 7 【正确答案】 (1)tti =Z(2)tti+=32(3)tt 【试题解析】 填空 1:此处考查判断大写字母的方法,如果字符的 ASCII码大于字符 A的 ASCII码,并且小于字符 Z的 ASCII码,则此字符为大写字母。填空2:考生必须掌握,大写字母转换为小写字母的方法,小写字母的 AS
16、CII码比大写字母的 ASCII码大 32。填空 3:函数 fun的返回值为字符型指针,而字符型的数组名就是字符型指针,所以返回 tt。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的 试题数超过 1道,则仅题号小的 1道题解答有效。 8 【正确答案】 (1)(NODE *)malloc(sizeof(NODE)(2)makeTree() (3)*str=, (4)putchar(t- val) (5)walkTree(t- subTreei) 【试题解析】 (1)该句分配一块内存,大小为 sizeof(NODE),并使定义的 NODE型指针 S指向
17、这块内存。 (2)使用递归思想,建立子树。上层函数中的 str指针首先被保存,然后,在该 maketree函数内部, str指向了上层函数 中括号内的第一个字符。 (3)*Str=, 判断是否还有子树。 (4)对树根元素进行存储。 (5)也是利用递归,对子树分别输入到列表中。 9 【正确答案】 (1)const float PI=3.14159f; const float WIDTH=3.00f; (2)Circle(floatr):radius(r); (3)FencePrice=f; ConcretePrice=c; (4)return FencePrice * fencelen+Conc
18、retePrice*conarea; 【试题解析】 本题考查了考生对符号常量的定义及类的定义与实现等方面的内容。注意常类型的定义应使用 const关键字。 10 【正确答案】 (1)0(2)getDocumentBase()(3)this(4)mouseDrag(5)repaint() 【试题解析】 本题主要考查在 Applet窗口中显示图像,并结合鼠标事件处理的综合应用。解题关键是熟悉图像文件的加载过程,会跟踪鼠标拖动的事件,并将鼠标在 Applet窗口中的坐标信息作为参数传递给 drawImage()方法,用于在新的位置显示图 像,从而实现拖动效果。本题中, getImage()方法应该有 2个参数,第一个参数是 getDocumentBase()方法的返回值,即图像文件的路径; drawImage()方法最后一个参数应该是 this,确定是在当前运行的对象中绘制图像;应该调用repaint()方法,进行重画,而不是 paint()方法。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1