3.1 顺序控制结构
程序是一个语句序列,执行程序就是按特定的次序执行程序中的语句。程序中执行点的
变迁称为控制流程,当执行到程序中的某一条语句时,也说控制转到了该语句。由于复杂问 题的解法可能涉及复杂的执行次序,因此编程语言必须提供表达复杂控制流程的手段,称为 编程语言的控制结构。
程序的控制流程可以用流程图(flowchart)来形象地表示。流程图采用标准化的图形符 号来描述程序的执行步骤,是一种常用的程序设计工具。在较低的抽象级上,流程图中的每 一个步骤可能都是单条语句,而在较高的抽象级上,每个步骤都可以是由多条语句构成的语 句块。本书中不另辟章节来系统地介绍各种标准的流程控制符号,而是通过例子演示常用流 程控制图形符号及其用法,因为这些内容是非常直观易懂的。
最简单的控制结构是顺序控制结构。编程语言并不提供专门的控制流语句来表达顺序控 制结构,而是用程序语句的自然排列顺序来表达。计算机按此顺序逐条执行语句,当一条语 句执行完毕,控制自动转到下一条语句。
现实世界中这种顺序处理的情况是非常普遍的,例如我们接受学校教育一般都是先上小 学,再上中学,再上大学;又如我们烧菜一般都是先热油锅,再将蔬菜入锅翻炒,再加盐加 佐料,最后装盘。如果一个处理过程由顺序执行的步骤 S1、S2、…、Sn 组成,用流程图表示 的话即如图 3.1 所示:
图 3.1 顺序控制结构
① 指命令式(或过程式)编程语言。函数式和逻辑式编程语言中没有这里所说的控制流语句。
作为例子,我们来写一个顺序控制结构的简单程序——温度转换程序。当中国人去美国旅游,听到导游说当地气温是 80 度,一定会感到困惑。其实美国人用的是华氏温标,与中国人用的摄氏温标不同。如果能写一个程序将华氏温度转换成摄氏温度,就可以帮助中国游客 知冷知热。实现温度转换的算法非常简单,只需顺序执行三个步骤:输入华氏温度值;转换 成摄氏温度值;输出摄氏温度值。下面是这个算法的流程图(图 3.2)及 Python 实现:
图 3.2 温度转换算法
【程序 3.1】eg3_1.py
f = input("Temperature in degrees Farenheit: ")
c = (f – 32) * 5.0 / 9
print "Temperature in degrees Celsius:", c
执行这个程序,并输入 80,将看到屏幕显示转换结果是摄氏 26.6666666667 度,是一个 适合旅游的舒适温度。
图 3.2 中的三个步骤(除了开始、结束)恰好可以用程序 3.1 中的三条语句实现,但如前 所述,我们可以在比语句更高的级别上来考虑顺序执行的步骤。图 3.1 中的诸 Si 不一定对应 着单条语句,完全可以是一个语句块,并且这个语句块本身可由各种控制结构组成。例如程 序 3.1 的三个步骤就可以构成别的程序的一个步骤,如图 3.3 所示:
图 3.3 低级别步骤抽象成高级别步骤
这种将若干低级别步骤看成整体并构成一个高级别步骤的做法也是抽象的一种形式,是程序设计中广泛使用的思维方式,对此在 3.5.2 中有更一般的阐述。 顺序控制结构是最简单、最普遍的控制结构,计算机执行程序时的缺省控制流就是语句的自然排列顺序。但是,仅靠顺序执行的步骤是不足以解决复杂问题的,复杂问题一般需要 根据情况来改变执行顺序。