当前位置:文档之家› 第5章习题(修改ok)-答案

第5章习题(修改ok)-答案

1.简述详细设计的任务。

包括模块的算法设计、模块内的数据结构设计、模块接口设计、其它根据软件特点需要完成的设计、模块测试用例设计、设计文档编写、设计评审。

2.简述详细设计的原则。

①模块的逻辑描述应清晰易读、正确可靠;②设计的处理过程应该简明易懂;③选择恰当的描述工具来描述模块算法。

3.简述结构化程序设计基本要求和特点。

要点:a.采用自顶向下、逐步求精的程序设计方法b.使用三种基本程序控制结构构造程序1).用顺序方式对过程分解,确定各部分的执行顺序。

2).用选择方式对过程分解,确定某个部分的执行条件。

3).用循环方式对过程分解,确定某个部分重复的开始和结束的条件。

c.主程序员组的组织形式。

特点:①自顶向下、逐步求精;②具有单入、单出的控制结构(取消GOTO语句)4.简述用户界面设计的基本原则(1)可靠性用户界面应当提供可靠的、能有效减少用户出错的、容错性好的环境。

一旦用户出错,应当能检测出错误、提供出错信息,给用户改正错误的机会。

(2)简单性简单性能提高工作效率。

用户界面的简单性包括输入、输出的简单性;系统界面风格的一致性;命令关键词的含义、命令的格式、提示信息、输入输出格式等的一致性。

(3)易学习性和易使用性用户界面应提供多种学习和使用方式,应能灵活地适用于所有的用户。

(4)立即反馈性用户界面对用户的所有输入都应立即做出反馈。

当用户有误操作时,程序应尽可能明确地告诉用户做错了什么,并向用户提出改正错误建议。

三、下图是使用Basic语言编写的一个打印A,B,C三数中最小者的程序的流程图。

其中出现了6个GOTO语句,一个向前,5个向后,程序可读性很差。

if ( A < B ) goto 120;if ( B < C ) goto 110;100 print C;goto 140;110 print B;goto 140;120 if ( A < C ) goto 130;goto 100;130 print A;140试利用基本控制结构,将程序中的GOTO语句消去。

(10分)三、答案:使用if - then - else结构化构造,则上述程序段可改成如下形式。

if ( A < B and A < C ) thenprint Aelse if ( A >= B and B < C ) thenprint Belseprint C;4.请使用流程图、PAD图各PDL语言描述下列程序的算法。

(1)在数据A(1)-A(10)中求最大数和次大数。

(2)输入三个正整数作为边长、判断该三条边构成的三角形是等边、等腰或一般三角形。

答:(1)1)流程图:2)PAD图3)PDL语言定义n1=n2=0输入A(1).......A(10)n1=n2=A(1)while i>10if A(i)>=n1n2=n1n1=A(i)end while四、选择一种将三个数从小到大排序的算法,分别用(1)流程图,(2)N-S图,(3)PAD图描述其详细过程。

设数为a,b,c,其详细过程如下:(1)流程图(2)N-S图(3)PAD图40.请使用PAD图和PDL语言描述在数组A(1)~A(10)中找最大数的算法。

解:PDL语言:N=1WHILE N<=10 DOIF A(N)<=A(N+1) MAX =A(N+1);ELSE MAX =A(N) ENDIF;N=N+1;ENDWHILE;PAD图:[解析]人工查找时,是从第一个元素开始查找,用当前元素与下一个元素比较,将较大者作为当前元素又与下一元素比较,如此循环,直到数组末尾。

2、将下面给出的伪码转换为N-S图和PAD图。

void root ( float root1, float root2 ) {i = 1;j = 0;while ( i <= 10 ) {输入一元二次方程的系数a, b, c;p = b*b – 4*a*c;if ( p < 0 ) 输出“方程i无实数根”;else if ( p > 0 ) 求出根并输出;if ( p == 0 ) {求出重根并输出;j = j + 1;} i = i +1;}输出重根的方程的个数j ; } 【解答】(1)N-S 图(2)PAD 图9.下图给出的程序流程图代表一个非结构化的程序,请问: (1)为什么说它是非结构化的? (2)设计一个等价的结构化程序。

(3)在(2)题的设计中你使用附加的标志变量flag 吗?若没用,请再设计一个使用flag 的程序;若用了,再设计一个不用flag 的程序。

i = 1; j = 0;while ( i <= 10 )输入a, b, c; 计算 p = b 2 - 4ac ;p < 0 ?输出“方程i ”求出根并输出↓ p > 0 ?p == 0 ?求出重根并输出; j = j + 1; ↓i = i + 1;输出重根的方程个数iF TTTFFi = 1; j = 0; 输出重根的方程个数iwhile ( i <= 10 )输入a,b,c; 计算 p = b 2–4ac;求出根并输出 p > 0 ? p < 0 ? 输出方程i 无实根 p = 0 ?求出重根并输出; j = j+1; i = i + 1;STARTIF p THENWHILE q DO f END DO ELSEBLOCK g nEND BLOCK END IF STOP答:(1)通常所说的结构化程序,是按照狭义的结构程序的定义衡量,符合定义规定的程序。

图示的程序的循环控制结构有两个出口,显然不符合狭义的结构程序的定义,因此是非结构化的程序。

(2)使用附加的标志变量flag ,至少有两种方法可以把该程序改造为等价的结构化程序,图4-3描绘了等价的结构化程序的盒图。

(a )解法1(b )解法2图4-3 与该图等价的结构化程序(用flag)(3)不使用flag把该程序改造为等价的结构化程序的方法如图4-4所示。

图4-4 与该图等价的结构化程序(不用flag)12.某厂对部分职工重新分配工作的政策是:年龄在伙岁以下者,初中文化程度脱产学习。

高中文化程度当电工;年龄在20岁到40岁之间者,中学中学文化程度男性当钳工,女性当车工,大学文化程度都当技术员。

年龄在40岁以上者,中学文化程度当材料员,大学文化程序当技术员。

请用结构化语言、判定表或判定树描述上述问题的加工逻辑。

(1)结构化语言:根据职工年龄和文化程序:REPEATIf 年龄<=20If 初中文化 Then 脱产学习 endifelse if 高中文化 Then 电工 endifendifIf 20<年龄<40If 中学文化If 男性 Then 钳工Else车工Endifelse if 大学文化 Then 技术员endifendifendifIf 年龄>=40If 中学文化 Then 材料员else if 大学文化 Then 技术员endifendifendifUntil 没有剩余未分配员工判定表年龄 C C D D D D D E E E 文化G H H G G H I G H I 性别-- -- M M F F -- -- -- -- 脱产学习√电工√钳工√√车工√√技术员√√材料员√√条件取值表条件名取值符号取值数年龄<=20 CM1=3 >20,<40 D>=40 E文化程度中学GM2=3 高中H大学I性别男MM3=2 女 F8.画出下列伪码程序的流图,计算它的环形复杂度。

你觉得这个程序的逻辑有什么问题吗?C EXAMPLELOOP:DO WHILE X>0A=B+1IF A>10THEN X=AELSE Y=ZEND IFIF Y<5THEN PRINT X,YELSE IF Y=2THEN GOTO LOOPELSE C=3END IFEND IFG=H+REND DOIF F>0THEN PRINT GELSE PRINT KEND IFSTOP答:(1)该伪码的流程图如图4-8所示:图4-8 程序流程图根据该程序流程图,可得该程序流图如图4-9所示:图4-9 程序流图环形复杂度V(G)=流图中的区域数=流图中判定结点数目+1=5+1=6(2)该算法问题在于控制最外层循环的变量Z不仅没有经过初始化,并且在该循环内部没有任何有可能该变Z的语句。

因此,该段代码中的WHILE循环部分代码要么不会执行,要么可能出现死循环。

相关主题