1.过程设计任务
- 确定模块算法
- 确定模块使用数据结构
- 确定模块接口(系统外部接口、用户界面、内部模块间接口细节、输入数据和输出数据)

2.结构化程序设计
结构化程序设计技术是过程设计一关键技术。
2.1定义
(1)经典定义
程序代码通过顺序、选择、循环三种控制结构连接,单入口单出口。暗指不要使用goto语句。
(2)扩展定义
可限制使用GOTO语句、DO_UNTIL和DO_CASE
(3)修正定义
LEAVE(跳过本层循环)和BREAK(跳出循环),可从循环中转移出来。
3.结构化程序设计工具
3.1程序流程图
历史最悠久、使用最广泛的过程设计工具。
(1)顺序型
几个连续的加工依次序排列

(2)选择型
由某个判定的取值决定选择两个加工中一个。

(3)当型循环型
当循环控制条件成立时,重复执行特定的加工。

(4)直到型循环型
重复执行特定的加工,直到循环控制条件成立时。

(5)多种情况选择型
列出多种加工情况根据控制变量的取值,选择执行其一

程序设计流程图标准化图符

优点
对控制流程描绘直观,便于初学者掌握。
缺点
- 不是逐步求精好工具,过早考虑控制流程,非整体结构;
- 用箭头代表控制流,程序员随意转移控制;
- 不易表示数据结构和调用关系。
示例
计算n阶乘的程序流程图

3.2 N-S图
基本图符


示例
计算n阶乘的N-S图

特点
- 功能域(一特定控制结构的作用域)明确;
- 不可能任意转移控制;
- 容易确定局部和全程数据的作用域;
- 容易表现嵌套关系,也可表示模块的层次结构。
3.3 PAD图
基本图符

示例
计算n阶乘的PAD图

优点
- 使用PAD图设计的程序必然是结构化程序;
- PAD图描绘的程序结构十分清晰;
- 用PAD图表现程序逻辑,易读、易懂、易记;
- 容易将PAD图转换成高级语言源程序;
- 支持自顶向下逐步求精。
逐步求精

3.4 判定表
能清晰表示复杂的条件组合与应做动作间对应关系。
组成:四部分
- 左上部列出所有条件;
- 左下部所有可能做的动作;
- 右上部表示各种条件组合的一矩阵;
- 右下部是和每种条件组合相对应的动作。
示例
行李托运算法的判定表

3.5 判定树
判定表变种,表示复杂条件组合与应做动作间对应关系。

优点
形式简单,易看出含义,易于掌握和使用。
缺点
简洁性不如判定表,相同数据元素重复写多遍,越接近叶端重复次数越多。
3.6 过程设计语言PDL
伪码,用正文形式表示数据和处理过程设计工具。
PDL具有严格关键字外部语法,定义控制结构和数据结构;
PDL表示实际操作和条件的内部语法灵活自由,适应各种工程项目需要。
4.程序复杂度
介绍使用比较广泛的McCabe方法。
4.1根据过程设计结果画出相应流图
流图描述程序控制流,基本图形符号如下图所示。

由流程图映射成流图

复合条件下流图映射

4.2计算流图的环形复杂度
三种方法
- V(G)=区域数
- V(G)=E-N+2,E为流图中边数,N为流图中节点数
- V(G)=P+1,P为判定点数,一个进去多个出来
4.3示例

- V(G)=4 (区域数)
- V(G)=11(边数)-9(结点数)+2=4
- V(G)=3(判定结点数)+1=4