6.1 结构化程序设计
6.2 详细设计工具
6.3 面向数据结构的设计方法退出第六章 详细设计
6.1 结构化程序设计
A
B
( a ) 顺序结构 ( b) 选择结构
B
e xp
A
F T
e xp A
T
F
e xp
A
F
T
( c ) 循环结构或三种基本的控制结构逐步求精方法是由 Wirth提出的一种早期的自顶向下的设计策略 。 面对现实的复杂问题,我们首先不要一下子就力图触及到问题解法的细节,而应当先从问题的全局出发,用较自然的抽象语句来表示问题,从而得到抽象算法 。 这时的算法主要是描述
,做什么,,或者说是把问题描述为几个子问题或子功能 。 接下来对子问题,也就是对抽象算法进行细化,在这一阶段设计的算法中,已经开始含有程序设计语言的成分 。 随着算法的不断细化,越来越多地开始完成,如何做,,算法中程序设计语言的成分也越来越多,当最后把算法全部细化为程序设计语言描述时,程序设计也就随之完成了 。
结构化程序设计技术是一种设计程序的技术,
它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构,并且只包含顺序,选择和循环三种控制结构 。
DO
C A S E I
( a ) DO _ U N T I L 型循环结构
e x p
A
F
T
C A S E 1 C A S E 2 C A S E n?
( b ) D O _ C A S E 型多分支结构其他常用的控制结构
6.2 详细设计工具
6.2.1 程序流程图
6.2.2 盒图退出
6.2.3 PAD图
6.2.4 过程设计语言
6.2.5 判定表
6.2.6 判定树
6.2.1 程序流程图程序流程图中常用的符号起止端点 数据 处理 准备或预处理 预先定义的处理条件判断 循环上界限 循环下界限 文档 流线虚线 省略符 并行方式 注释程序流程图虽然比较直观,灵活,并且比较容易掌握,但是它的随意性和灵活性却使它不可避免地存在着一些缺点:
( 1) 由于程序流程图的特点,它本身并不是逐步求精的好工具 。 因为它使程序员容易过早地考虑程序的具体控制流程,而忽略了程序的全局结构;
( 2) 程序流程图中用箭头代表控制流,这样使得程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制;
( 3) 程序流程图在表示数据结构方面存在不足 。
值 1
C a s e 1
部分
C a s e 条件第一个任务第二个任务第三个任务
( a ) 顺序结构
F 条件 T
E L S E
部分
T H E N
部分
( b) 选择结构 ( c ) 多分支结构循环条件
D O _W H I L E
部分循环条件
DO_ U N T I L
部分
( d) 循环结构
A
( e ) 调用子程序 A
值 2
C a s e 2
部分
值 n
C a s e n
部分
6.2.2 盒图( N-S图)
N-S图的基本符号
N-S图有以下一些特点:
( 1) 功能域 ( 即某一个特定控制结构的作用域 )
有明确的规定,并且可以很直观地从 N-S图上看出来;
( 2) 它的控制转移不能任意规定,必须遵守结构化程序设计的要求;
( 3) 很容易确定局部数据和全局数据的作用域;
( 4) 很容易表现嵌套关系,也可以表示模块的层次结构 。
A
B
( a ) 顺序结构
A
B
P
( b) 选择结构
W H I L E P S
( c ) W H I L E 型循环结构
U N T I L P S
( d) U N T I L 型循环结构
A 1
A2
P=
An
P1
P2
P n
( e ) 多分支结构
( f ) 语句标号
( g) 定义
6.2.3 PAD图
PAD图的基本符号
PAD图提供的定义功能
A
C
B1
B 2
P 1
W H I L E P 3 C4
C
d e f
C1
C2
C3
P 2
PDL语言具有下述特点:
( 1) PDL虽然不是程序设计语言,但是它与高级程序设计语言非常类似,只要对 PDL描述稍加变换就可变成源程序代码 。 因此,它是详细设计阶段很受欢迎的表达工具 。
( 2) 用 PDL写出的程序,既可以很抽象,又可以很具体 。 因此,容易实现自顶向下逐步求精的设计原则 。
( 3) PDL描述同自然语言很接近,易于理解 。
( 4) PDL描述可以直接作为注释插在源程序中,成为程序的内部文档 。 这对提高程序的可读性是非常有益的 。
( 5) PDL描述与程序结构相似,因此自动产生程序比较容易 。
PDL的缺点是不如图形描述形象直观,因此人们常常将
PDL描述与一种图形描述结合起来使用 。
6.2.4 过程设计语言
6.2.5 判定表一张判定表由四部分组成:
( 1) 左上部列出所有条件;
( 2) 左下部是所有可能做的动作;
( 3) 右上部为各种可能组合条件,其中每一列表示一种可能组合;
( 4) 右下部的每一列是和每一种条件组合所对应的应做的工作 。
1 2 3 4 5
教授 T F F F
副教授 F T F F
讲师 F F T F
助教 F F F T
讲座 T F F F F
50 ×
30 ×
25 ×
20 ×
15 ×
例:某校制定了教师的讲课课时津贴标准 。 对于各种性质的讲座,无论教师是什么职称,
每课时津贴费一律是 50元;而对于一般的授课,则根据教师的职称来决定每课时津贴费:教授 30元,副教授 25
元,讲师 20元,助教 15元 。
6.2.6 判定树教师课时津贴判定树课时津贴一般授课讲座教授副教授讲师助教
30
25
20
15
50
6.3 面向数据结构的设计方法
6.3.1 Jackson图
6.3.2 Jackson程序设计方法退出
6.3.1 Jackson图
Jackson图表示方法
A
C B D
( a ) 顺序结构
A
C
o
B
o
D
o
( b ) 选择结构
A
B *
( c ) 重复结构
Jackson图的优点:
( 1) Jackson图不仅便于表示层次结构,而且也有利于对结构自顶向下分解;
( 2) Jackson图形象直观,可读性好;
( 3) Jackson图不仅能表示数据结构,也能表示程序结构 ( 因为程序结构也可以由上述 3种基本结构组成 ) 。
Jackson图的缺点:
在选择结构和重复结构中,选择条件或循环结束条件不能直接在 Jackson图中表示出来 。 这样就影响了图形的表达能力,也不利于直接把图翻译成程序 。
( a ) 顺序结构
A
C B D
( c ) 选择结构
A
C
o
B
o
D
o
S ( i )
( b ) 可选结构
A
B
o
_o
S ( i )
A
B*
( d ) 重复结构
I ( i )
改进的 Jackson图例:高考后将考生的基本情况文件 ( 简称考生基本情况文件 ) 和考生高考成绩文件 ( 简称考分文件 ) 合并成一个新文件 ( 简称考生新文件 ) 。 考生基本情况文件和考分文件都是由考生记录组成的 。 为简便起见,考生基本情况文件中的考生记录的内容包括:准考证号,姓名,
通讯地址 。 考分文件中的考生记录的内容包括:准考证号和各门考分 。 合并后的考生新文件自然也是由考生记录组成,内容包括:准考证号,姓名,通讯地址和各门考分 。
Jackson程序设计方法由五个步骤组成:
6.3.2 Jackson程序设计方法第一步 数据结构表示对要求解的问题进行分析,确定输入数据和输出数据的逻辑结构,并用 Jackson图描述这些数据结构 。
考生新文件考生记录 *
准考证号 姓名 通讯地址 考分考生情况文件考生记录 *
准考证号 姓名 通讯地址考分文件考生记录 *
准考证号 考分
I I
( a ) 输入数据结构 ( b ) 输出数据结构
I
第二步 找出输入数据结构和输出数据结构的对应关系找出输入数据结构和输出数据结构中有对应关系的数据单元,即有直接因果关系,在程序中可以同时处理的数据单元 。 需要注意的是,对于重复的数据单元,必须是重复的次序,次数都相同才有可能有对应关系 。
考生情况文件考生记录 * 考生记录 *
考生新文件 考分文件考生记录 *
I
I
I
第三步 确定程序结构图根据下述三规则,由 Jackson图导出相应的程序结构图:
( 1) 为每对有对应关系的数据单元,按照它们在数据结构图中所处的层次,在程序结构图中的相应层次画一个处理框 。 如果这对数据单元在输入数据结构图和输出数据结构图中所处的层次不同,那么应以它们在输入数据结构图和输出数据结构图中层次较低的那个层次作为它们在程序结构图中的处理框所处的层次;
( 2) 对于输入数据结构中剩余的数据单元,根据它们所处的层次,在程序结构图的相应层次为每个数据单元画上相应的处理框;
( 3) 对于输出数据结构中剩余的数据单元,根据它们所处的层次,在程序结构图的相应层次为每个数据单元画上相应的处理框 。
实际上,这一步是一个综合的过程:每对有对应关系的数据单元合画一个处理框,没有对应关系的数据单元则各画一个处理框 。
产生新文件处理考生记录 *
产生准考证号 产生姓名 产生通讯地址 产生考分
I
第四步 列出并分配所有操作和条件列出所有操作和条件 ( 包括分支条件和循环结束条件 ),
并把它们分配到程序结构图的适当位置 。
操作,( 1) 停止;
( 2) 打开两个输入文件;
( 3) 建立输出文件 。
( 4) 从输入文件中各读一条记录 。
( 5) 生成一条新记录 。
( 6) 将新记录写入输出文件 。
( 7) 关闭全部文件 。
条件,I( 1) 文件结束 。
把操作和条件分配到程序结构图的适当位置产生新文件处理考生记录 *
分析考生记录产生准考证号 产生姓名 产生通讯地址 产生考分
I ( 1)
3 2 4 7 1
6 5 4
第五步 用伪码表示程序
Jackson方法中使用的伪码与 Jackson图是完全对应的 。
针对三种基本程序结构,有相对应的 Jackson伪码 。
( 1) 顺序结构
A seq
B
C
D
A end
( 2) 选择结构 ( 3) 重复结构
A select condition1
B
A or condition2
C
A or condition3
D
A end
A iter until( 或 while)
condition
B
A end
用 Jackson伪码描述的程序:
产生新文件 seq
打开两个输入文件从输入文件中各读一条记录分析考生记录 iter until文件结束处理考生记录 seq
产生准考证号产生姓名产生通讯地址产生考分生成一条新记录将新记录写入输出文件从输入文件中各读一条记录处理考生记录 end
关闭全部文件停止产生新文件 end