2.2.1结构化程序设计的原则
2.2.2结构化程序的基本结构与特点
2.2.3结构化程序设计原则和方法的应用
2.2.1结构化程序设计的原则
结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块画,限制使用 goto 语句。
1.自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。
2. 逐步求精:对复杂的问题,应设计一些子目标作过渡,逐步细化。
3.模块化:一个复杂问题,肯定是由若干个稍简单的问题构成。模块化是把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标称为一个模块。
4. 限制使用 goto 语句
实际上,结构化程序设计方法的起源来自对 GOTO语句的的认识和争论。肯定的结论是,在块和进程的非正常出口往往需要用 GOTO 语句,使用 GOTO语句会使程序执行效率较高;在合成程序目标时, GOTO 语句往往是有用的,如返回语句用 GOTO 。否定的结论是, GOTO语句是有害的,是造成程序混乱的祸根,程序的质量与 GOTO 语句的数量成反比,应该在所有高级程序设计语言中取消 GOTO 语句。取消GOTO 语句后,程序易理解、易排错、易维护,程序容易进行正确性证明。作为争论的结论, 1974 年 Knuth发表了令人信服的总结,并证实了:
( 1 )滥用 GOTO 语句确实有害,应尽量避免;
( 2 )完全避免使用 GOTO 语句也并非是个明智的方法,有些地方使用 GOTO语句,会使流程更清楚、效率更高;
( 3 )争论的焦点不应该放在是否取消 GOTO语句,而应该放在用什么样的程序结构上。
其中关键的是,肯定以提高程序清晰性为目标的结构化方法。
2.2.2 结构化程序的基本特点
结构化程序设计方法是程序设计的先进方法和工具。采用结构化程序设计方法编写程序,可使程序结构良好、易读、易理解、易维护。1966 年, Boehm 和 Jacopini证明了程序设计语言仅仅使用顺序、选择和重复三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。
1. 顺序结构:顺序结构是一种简单的程序设计,它是最基本、最常用的结构,如图 2.1所示。顺序结构是顺序执行的结构,所谓顺序执行,就是按照程序语句行的自然顺序, 一条语句一条语句地执行程序。
2.选择结构:选择结构又称为分支结构,它包括简单选择和多分支选择结构,这种结构可以根据设定的条件,判断应该选择哪一分支来执行相应的语句序列。图2.2 列出了包含 2 个分支的简单选择结构。
图2.1 顺序结构 图2.2 选择结构
3.重复结构:重复结构又称为循环结构,它根据给定的条件,判断是否需要重复执行某一相同的或类似的程序段,利用重复结构可以简化大量的程序行。在程序设计语言中,重复结构对应两类循环语句,对先判断后执行循环体的称为当性循环结构,如图2.3 所示。对先执行循环体后判断的称为直到型循环结构,如图 2.4 所示。
图2.3 当型循环 图2.4 直到型循环
总之,遵循结构化的程序的设计原则,按结构化程序设计方法设计出的程序具有明显的优点,其一,程序易于理解、使用和维护。程序员采用结构化编程方法,便于控制、降低程序的复杂性,因此容易编写程序。便于验证程序的正确性,结构化程序清晰易读,可理解性好,程序员能够进行逐步求精、程序证明和测试,以确保程序的正确性,程序容易阅读并被人理解,便于用户使用和维护。其二,提高了编程工作的效率,降低了软件开发的成本。由于结构化编程方法能够把错误控制到最低限度,因此能够减少调试和查错的时间。结构化程序是由一些为数不多的基本结构模块组成,这些模块甚至可以由机器自动生成,从而极大地减轻了编程工作量。
2.2.3 结构化程序设计原则和方法的应用
基于结构化程序设计原则、方法以及结构化程序基本构成结构的掌握和了解,在结构化程序设计的具体实施中,要注意把握如下要素:
1. 使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑;
2. 选用的控制结构只准有一个入口和一个出口;
3. 程序语句组成容易识别的块,每块只有一个入口和一个出口;
4. 复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现;
5. 语言中没有的控制结构,应该采用前后一致的方法来模拟;
6. 严格控制 GOTOYUJU 的使用。其意思是指:
( 1 )用一个非结构化的程序设计语言去实现一个结构化的构造;
( 2 )若不使用 GOTO 语句会使功能模糊;
( 3 )在某种可以改善而不是损害程序可读性的情况下。