1.3 结构化程序设计方法
结构化程序设计是指,为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。结构化程序设计的原则是:采用自顶向下、逐步求精的方法;程序结构模块化,每个模块只有一个入口和一个出口;使用 3 种基本控制结构描述程序流程。其中,模块化是结构化程序设计的重要原则。所谓模块化就是把一个大型的程序按照功能分解为若干相对独立的、较小的子程序(即模块),并把这些模块按层次关系进行组织。按照结构化程序设计的原则,一个程序只能由顺序结构、选择结构和循环结构这 3 种基本结构组成。
人们解决复杂问题普遍采用自顶向下、逐步求精和模块化的方法,在这种设计方法的指导下开发出来的程序,具有清晰的层次结构,容易阅读和维护,软件开发的成功率和生产率可极大地提高。因此,使用结构化方法设计出的程序等于数据结构加算法。
已经证明,任何复杂的算法都可以用顺序、选择、循环这3种结构组合而成。所以,这3种控制结构称为程序的3种基本控制结构。
1.顺序结构
顺序结构如图1.3所示,图中(b)是N-S流程图。其中A和B是顺序执行的关系,即先执行模块A操作,再执行模块B操作。
图1.3 顺序结构
图1.2就是例1.1中求两个整数m与n之和的传统流程图结构,它只需顺序结构就能解决问题。
2.选择结构
选择结构又称为分支结构,如图1.4所示,图中(b)是N-S流程图。其中,P代表一个条件,当条件P成立时(或称为“真”时),执行模块A,否则执行模块B。注意,只能执行A 或B之一,两条路径汇合在一起结束该分支结构。通过下面的例子,读者可以了解如何用自然语言、N-S流程图描述分支结构。
图1.4 选择结构
图1.5 例1.2算法
【例1.2】 求a、b两个整数中较小的数。
用自然语言求解该问题的步骤如下。
步骤1:输入整数a和b。
步骤2:进行判断,如果a<b,则min=a,否则min=b。
步骤3:输出两数中较小的数min。
用N-S流程图求解该问题的过程如图1.5所示。
3.循环结构
循环结构又称为重复结构,有两种循环形式。一种是当型循环结构,如图1.6所示。其中,P代表一个条件,当条件P成立(“真”)时,反复执行模块A操作,直到P 为“假”时才停止循环。另一种是直到型循环结构,如图1.7所示。先执行模块 A操作,再判断条件P是否为“假”,若P为“假”,再执行A,如此反复,直到 P为“真”为止。
图1.6 当型循环结构
图1.7 直到型循环结构
下面通过例题,使读者了解如何用自然语言、N-S结构图描述循环结构。
【例1.3】 计算1+2+3+4+…+100。
用自然语言求解该问题的步骤如下。
步骤1:定义变量sum用来存放和值,并将初值0赋给sum,使sum的值为0;定义变量k,用来存放每一项的值,并将1赋给k。
步骤2:判断k的值是否小于或等于100,如果是,则继续执行步骤3,否则转到步骤5,退出循环。
步骤3:将sum与k的和赋给sum。
步骤4:将k的值增1,返回步骤2重复执行。
步骤5:输出和值sum。
用N-S流程图求解该问题的过程如图1.8所示。
图1.8 例1.3算法
可以看到,3种基本控制结构共有的特点是:有一个入口,有一个出口;结构中每一部分都有被执行到的机会,也就是说,每一部分都有一条从入口到出口的路径通过它(至少通过一次);没有死循环(无终止的循环)。
结构化程序要求每一基本控制结构具有单入口和单出口的性质是非常重要的,这是为了便于保证和验证程序的正确性。在设计程序时,一个结构一个结构地顺序写下来,整个程序结构如同砌墙一样顺序清楚,层次分明;在需要修改程序时,可以将某一基本控制结构单独取出来进行修改,由于其具有单入口单出口的性质,不会影响到其他的基本控制结构。可以把每个基本控制结构看作是一个算法单位,整个算法则由若干个算法单位组合而成。这样的算法称为结构化算法。而这样设计出的程序清晰易读,可理解性好,容易设计,容易验证其正确性,也容易维护。同时,由于采用了“自顶向下、逐步细化”的实施方法,能有效地组织人们的思路,有利于软件的工程化开发,提高编程工作的效率,降低软件的开发成本。