1、操作员调整指令 工资调整系统1D 教师工资档案工资低于$26,000 教师的原有工资与新工资对照表 操作员取教师档案,找出年工资少于$26,000 的人的信息存入数据表 A,包括如下数据项:n-工资少于$26,000 的人数表 A 字段 1:姓名表 A 字段 2:原工资表 A 字段 3:赡养人数表 A 字段 4:被雇佣日期表 A 字段 5:新工资i=1WHILE in调整第 i 个教师的工资用表 A 修改教师档案数据库相应记录“调整第 i 个教师的工资”子程序:w=A(i,2)i=i+1m=A(i,3)用 A(i,4)计算此教师的工龄存入变量 kw=w+100*m+50*kk1 w=w+100
2、*mw=26000w26000A(i,5)=w打印表 A 的第 1、2、5 字段 讨论:这两框的位置能否调换?软件工程张海藩四章习题 8美国某大学共有 200 名教师,校方与教师工会刚签定了一项协议。按照协议,所有年工资超过$26,000(含$26,000)的教师工资将保持不变,年工资少于$26,000 的教师将增加工资,所增加的工资按下述方法计算: 给每个由此教师赡养的人(包括教师本人)每年补助 $100,此外,教师有一年工龄每年再多补助$50,但是,增加后的年工资总额不得多于$26,000。教师的工资档案存储在行政办公室的磁带上,档案中有目前的年工资、赡养的人数、雇佣日期等信息。需要写一个
3、计算程序计算并印出每名教师的原有工资和调整后的新工资。要求:画出此系统的数据流图;写出需求说明;设计上述的工资调整程序(要求用判断树描述),设计时请分别采用下述两种算法,并比较这两种算法的优缺点;a 搜索工资档案数据,找出年工资少于$26,000 的人,计算新工资,校核是否超过$26,000,储存新工资,印出新旧工资对照表;b 把工资档案数据按工资从做低到最高次序排序,当工资数额超过$26,000 时即停止排序,计算新工资,校核是否超过限额,储存性工资,印出结果。你所画出的数据流图适应于哪种算法?解: 系统的数据流图 需求说明: 程序框图:算法说明:1 此算法是先找出工资少于$26,000 的
4、人, 再进行工资调整,属算法 a2 算法 a 适于数据库的记录不太多的情况,在数据库中查找较费时。但是,调整系统的主要部分少一个判断,结构清晰一些。产生随机数 a,b,c,d,e,f,a1,b1,c1,d1,e1,f1A= a,c,e, a1, c1, e1B= b,d,f, b1, d1, f1A 同花B 同花B 不同花 A 胜 B 负A、B 各自排序,依次比较A 点大 A 胜 B 负B 点大 B 胜 A 负A 不同花B 同花B 不同花A 顺A 同点B 胜 A 负A、B 点一样大 平局B 顺 B 点大 B 胜 A 负A、B 点一样大 平局A 点大 A 胜 B 负B 不顺 A 胜 B 负A 不
5、顺B 顺B 不顺B 胜 A 负A 不同点B 不同点 A 胜 B 负B 同点 B 点大 B 胜 A 负A、B 点一样大 平局A 点大 A 胜 B 负B 同点 B 胜 A 负B 不同点A 有对子A 没有对子B 没有对子 A 胜 B 负B 有对子B 对大 B 胜 A 负A、B 对一样大A 对大 A 胜 B 负B 点大 B 胜 A 负A、B 点一样大 平局A 点大 A 胜 B 负B 有对子 B 胜 A 负B 没有对子3 算法 b 适于数据库的记录较多的情况,利用数据库的排序功能可很快地将教师的档案数据按工资大小排好序,调整程序只对前若干个记录进行操作。这个算法对于修改数据库回更便捷些。4 总的说来,算
6、法 b 比算法 a 的效率要高。四章习题 9扑克游戏,设计模拟程序,其功能是:发两手牌(随机数),确定赢者和赢牌的类型,模拟N 次游戏,计算每种类型牌赢或平局的概率。画出高层控制流图。游戏规则如下:有两人玩,分别称为 A 和 B;一付扑克有 52 张牌,4 种花色(方块、梅花、红桃、黑桃),每 2 种花色的点数按升序排列有2,3,4,10,J,Q,K,A 等 13 种。给每人发三张牌,牌面向上(即亮牌),赢者立即可以确定;最高等级的一手牌称为同花,即三张牌均为同一种花色,最大的同花牌是同花色的 Q、K、A;第二等级的牌称为顺子,即点数连续的三张牌,最大的顺子是花色不同的 Q、K、A;第三等级的
7、牌是同点,即点数相同的三帐派,最大的同点是 A、A、A;第四等级的牌是对子,即三张牌中有两张点数相同,最大的对子是 A、A、K;第五等级的牌是杂牌,即除去上列四等之外的任何一手牌,最大的杂牌是不同花色的 A、K、J;若两人的牌型不同,则等级高者胜;若等级相同,则点数高者胜;若点数也相同,则为平局。解:系统框图条件 A成立 不成立操作 1 操作 2操作 3DO-WHILE A & x=1END DO操作 1x=0操作 3p成立 不成立q成立f不成立gnpWHILE q DOF TfgnDO-WHILE x=1END DOx=1操作 2x=0四章习题 10假设只有顺序和 DO-WHILE 两种控制
8、结构,怎样利用它们 IF-THEN-ELSE 操作?解:IF-THEN-ELSE 操作框图如下: 等价的 DO-WHILE 操作框图如下:四章习题 11画出下列伪码程序的程序流程图和盒图:STARTIF p THENWHILE q DOFEND DOELSEBLOCKgnEND BLOCKENDIFSTOP解:程序流程图: 盒图:TABLE(I) = ITEMI=(START+FINISH)/2FLAG= 1=TABLE(I) ITEMSTART=I-1(FINISHSTART) 1TABLE(START) = ITEM =TABLE(FINISH) = ITEM=FLAG=0四章习题 12研
9、究下列伪码程序:LOOP: Set I to (START+FINISH)/2If TABLE(I) = ITEM goto FOUNDIf TABLE(I) ITEM Set FINISH to (I1)If (FINISHSTART) 1 goto LOOPIf TABLE(START) = ITEM goto FOUNDIf TABLE(FINISH) = ITEM goto FOUNDSet FLAG to 0Goto DONEFOUND: Set FLAG to 1DONE: Exit要求: 画出程序流程图; 程序是结构化的吗?说明理由; 若程序是非结构化的,请设计一个等价的结构化程
10、序并且画出程序流程图; 此程序的功能是什么?它完成预定功能有什么隐含的前提条件吗?解: 此程序的流程图如下:I=(START+FINISH)/2FLAG= 1TABLE(I) ITEMSTART=I-1TABLE(I) = ITEMor TABLE(START) = ITEMor TABLE(FINISH) = ITEMYESFLAG=0while (FINISHSTART) 1 doNO解: 程序不是结构化的,明显标志是程序中有多个“goto”语句。解: 修改该程序为一个结构化程序:do while (FINISHSTART) 1set I to (START+FINISH)/2if TAB
11、LE(I) ITEM then set FINISH to (I1)endifenddoif TABLE(I) = ITEM or TABLE(START) = ITEM or TABLE(FINISH) = ITEM thenset FLAG to 1else set FLAG to 0endifExit其框图如下开始cA Bd eC D E停止TFTF T开始I=1DO CASE 1cA BTF dC DTF eD ETFI=2 I=3 I=4 I=4 I=4 I=4I=4停止1 2 3FTF解: 此程序的功能是:用“逐步搜索”法在一个一维表(TABLE) 中搜索指定的值(ITEM)前提是
12、:TABLE 中的值是按从小到大存放着程序中,变量 START 的初始值应该是 TABLE 表中表头的值,最小;变量 FINISH 的初始值应该是 TABLE 表中表尾的值,最大原程序是从两头逐步向中间移动,用两头的中间处的值与 ITEM 进行比较,若中间处的值比 ITEM 大,则表的尾部向表头移一步;若中间处的值比 ITEM 小,则表的头部向表尾移一步。直到找到了与 ITEM 相同的值为止。若找到了,则置 FLAG=1;未找到,则置FLAG=0。四章习题 13用 Ashcroft-Manna 技术可以将非结构化的程序转换为结构化程序,下图是一个转换的例子。 为什么说原程序不是结构化的?你能否
13、从这个例子总结出 Ashcroft-Manna 技术的一些基本方法? 请用伪代码程序实现上图给出的结构化设计,不允许使用 GOTO 语句,可以使用 DO CASE 语句。 进一步简化上图给出的结构化设计。解: 原程序框图中“d”条件的一个出口指向操作框“D” ,同时“e” 条件的一个出口也指向操作框“D”,这就势必会语言程序中出现“GOTO”语句。所以原程序框图是非结构化的。从例子看,Ashcroft-Manna 技术的基本做法是:原程序中有几个简单判断语句,就在框图中设置几个分支的 CASE 语句,每个 CASE 分支对应一条判断语句。 将框图转换成程序只需在 DO CASE 语句前加一条语
14、句“DO_UNTIL I=4”,并把判断“I=4”改成该循环的结束语句即可。 其实要将这个非结构化的框图改成结构化的,完全可以不用 CASE 语句,只要将公共的转移点分开即可。修改如下:开始cA Bd eC D E停止TFTF TFD四章习题 14某交易所规定给经纪人的手续费计算方法如下:总手续费等于基本手续费加上与交易中的每股价格和股数有关的附加手续费。如果交易总额少于 1000 元,则基本手续费为交易金额的 8.4%;如果交易金额在 1000 元到 10000 元之间,则基本手续费为交易金额的 5%,再加 34 元;如果交易金额超过 10000 元,则基本手续费为交易金额的 4%加上 84
15、 元。当每股售价低于 14 元时,附加手续费为基本手续费的 5%,除非买进、卖出的股数不是 100 的倍数,在这种情况下附加手续费为基本手续费的 9%。当每股售价在 14 元到 25 元之间时,附加手续费为基本手续费的 2%,除非交易的股数不是 100的倍数,在这种情况下附加手续费为基本手续费的 6%。当每股售价超过 25 元时,如果交易的股数不是 100 的倍数,则附加手续费为基本手续费的4%,否则附加手续费为基本手续费的 1.5%。要求: 用判定表表示手续费的计算方法; 用判定树表示手续费的计算方法。解:判定表:说明:1,每一笔交易有 3 种属性:“交易总额” 、 “每股售价” 、 “股数
16、” 。2, “交易总额”有 3 种值;“每股售价”有 3 种值;“股数”有 2 种值。所以每笔交易有 18 种状态。(表有 19 列,第 1 列是说明列)3,每种状态有一个决策公式。判定表中的决策方案有 18 行。4,每个计算公式中只有一个变量“交易额“,设为 a。a1000 y y y y y y n n n n n n n n n n n n1000a 10000 n n n n n n y y y y y y n n n n n n交易金额(a) a10000 n n n n n n n n n n n n y y y y y yb14 y y n n n n y y n n n n y y n n n n14b25 n n y y n n n n y y n n n n y y n n每股售价(b) b25 n n n n y y n n n n y y n n n n y y交易股数是否为 100 的倍数? y n y n y n y n y n y n y n y n y na8.4%(15%) xa8.4%(19%) xa8.4%(12%) xa8.4%(16%) xa8.4%(11.5%) xa8.4%(14%) xx