1、中级软件设计师下午试题-27 及答案解析(总分:74.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 次)表 3 测试用例表(分数:15.00)_二、试题二(总题数:1,分数:15.00)【说明】某城市电信局受理了许多用户申请在指定电话上开设长话业务。长话包括国内长途和国际长途。电信局保存了长话用户档案和长话业务档案。长话用户档案的记录格式为用户编码
2、 用户名 用户地址长话业务档案的记录格式为电话号码 用户编 码 国内长途许可标 志 国际长途许可标 志电话用户每次通话的计费数据都自动地记录在电信局程控交换机的磁带上。计费数据的记录格式为日期 电话号码 受话号码 通话开始时间 通话持续时间该电信局为了用计算机自动处理长话收费以提高工作效率,开发了长话计费管理系统。该系统每月能为每个长话用户打印出长话缴费通知单。长话缴费通知单的记录格式为用户名 用户地址 国内长途话费 国际长途话费 话费总额流程图描述了该系统的数据处理过程。该系统每天对原始的计费数据进行分类排序,并确定每个通话记录的通话类型(市话/国内长途/国际长途),再根据话费单价文件算出每
3、个通话记录应收取的话费。因此,形成的日计费文件中,增加了两个数据项:通话类型和话费。该系统每日对日计费文件进行累计 (按电话号码和通话类型,对该类型的话费进行累计,得到该电话号码该通话类型的当月话费总计),形成月计费文件。月计费文件经过长话出账处理形成长话账单文件。长话账单文件的记录格式为月份 用户编码 电话号码 国内长途话费 国际长途话费 话费总额长话账单文件经过处理 5 和处理 6 的处理后,就可以形成长话缴费通知单。1. 【问题 1】(1)请说明流程图 1 中的文件 F0、F1 分别是哪个文件。(2)处理 1 和处理 5 分别按照哪些数据项进行分类?(分数:15.00)_三、试题三(总题
4、数:1,分数:11.00)1.【函数 3 说明】函数 DeleteNode(Bitree * r,int e)的功能是:在树根结点指针为 r 的二叉查找(排序)树上删除键值为e 的结点,若删除成功,则函数返回 0,否则函数返回-1。二叉查找树结点的类型定义为:typedef struct Tnodeint data; /*结点的键值*/struct Tnode * Lchild,*Rchild; /*指向左、右子树的指针*/* Bitree;在二叉查找树上删除一个结点时,要考虑三种情况:若待删除的结点 p 是叶子结点,则直接删除该结点;若待删除的结点 p 只有一个子结点,则将这个子结点与待删除
5、结点的父结点直接连接,然后删除结点P;若待删除的结点 p 有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点 s,用结点 s 的值代替结点 p 的值,然后删除结点 s,结点 s 必属于上述、情况之一。【函数 3】int DeleteNode(Bitree * r,int e)Bitree p=*r,pp,s,c;while( (1) ) /*从树根结点出发查找键值为 e 的结点*/pp=p;if(ep-data)p=p-Lchild;else p=p-Rchild;if(!p)return-1; /*查找失败*/if(p-Lchild for(i=0; tti;i+)if(tti=A
6、)for(i=0; tti;i+)if(tti=A)&( (1) )(2) ;return( (3) );main()charn81;printf(“/nPlease enter a string:“);gets(tt);printf(“/nThe result string is:/n%s“,fun(tt);(分数:11.00)_正确答案:(1)tti=Z (2)tti+=32 (3)tt)解析:解析 填空 1:此处考查判断大写字母的方法,如果字符的 ASCII 码大于字符 A 的 ASCII 码,并且小于字符 Z 的 ASCII 码,则此字符为大写字母。填空 2:考生必须掌握,大写字母转换
7、为小写字母的方法,小写字母的 ASCII 码比大写字母的 ASCII 码大 32。填空 3:函数 fun 的返回值为字符型指针,而字符型的数组名就是字符型指针,所以返回 tt。五、试题五(总题数:1,分数:11.00)3.【说明】在类体中添加函数 move(double ax,double ay)的定义,使得点的坐标 x 和 y 分别移动 ax 和 ay 个单位。在类定义外完成重载的两个构造函数 CPosition()和 CPosition(double dx,double dy),其中前者为不带参数的构造函数,使 CPosition 对象的默认值为 x=0,y=0,后者为带参数的构造函数,把
8、数据成员x 和 y 分别初始化为参数 dx 和 dy 的值。完成函数 double distance(double bx,double by)的定义,该函数返回*this 和点(bx, by)的距离。注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。源程序文件 test5.cpp 清单如下:#includeiostream.h#includemath.hclass CPositionpublic:CPosition();CPosition(double dx,double dy);double getx();double gety();(1) double distance(doub
9、le bx,double by);private:double x;double y;(2) x=0;y=0;CPosition:CPosition(doub,e dx,doub,e dy)x=dx; y=dy;double CPosition:getx()return x;double CPosition:gety()return y;double CPosition:distance(double bx,double by)(3) vold main()double a,b;cout“|nput x,y position of a point:“;cin a b;CPosition psA
10、(a,b);cout“Input x,y position of another point:“;cin a b;cout “The distance is“ psA.distance(a,b) end1;(分数:11.00)_正确答案:(1)void move(double ax,double ay)x+=ax;y+ =ay;(2)CPosition:CPosition() (3)return sqrt(pow(x-bx, 2)+pow(y-by,2);)解析:解析 本题主要考查考生对于类的定义和重载构造函数的掌握情况。在(3)中使用了基本的数学函数 sqrt(x)求 x 的开方,pow(x
11、,n)函数是求 x 的 n 次方。六、试题六(总题数:1,分数:11.00)4.【说明】下面是一个 Applet 程序,其功能是建立一个图形用户界面的窗口,包括一个文本显示区和一个按钮,点击按钮,可以在文本区已有的文本基础上追加显示 10 条“Welcome to China“信息,并且文本区由滚动条控制文本的上下滚动。程序运行结果如图 4 所示。import javax.swing.*;import java.awt.*;import java.awt.event.*;/*appletcode=“ex5_6.class“ width=800 height=400/applet(分数:11.0
12、0)_正确答案:(1)jtp.setText(jtp.getText() (2)getContentPane()(3)BorderLayout.SOUTH,jb(4)WindowsAdapter() (5)frm.getContentPane()解析:解析 本题主要考查 Applet 和 swing 结合进行图形用户界面设计的综合应用。解题关键是掌握swing 的基本构件 JTextPanel,JButton, JScrollPanel 的用法,掌握 BorderLayout 布局管理器的使用方法,以及熟练掌握最基本的对象概念。本题中,JTextPanel 的 2 个基本的方法,set- Text()和getText()的功能,熟悉这 2 个功能,则很容易就能将错误改正;应该是通过 BorderLayout 布局管理器在窗口的最下方添加一个 JButton 对象,需要清楚程序中每个对象所对应的类。