第六章 顺序控制
第六章 顺 序 控 制
顺序控制提供了操作和数据被组合成程序和程序集合的框架 涉及两个方面的问题:操作执行顺序的控制(顺序控制) 以及数据在子程序间的传递(数据控制)(下一章) 61隐式和显式顺序控制 顺序控制结构可分为三组 1、用于表达式中的结构(也针对语句,表达式是语句的基 本建筑块)。如:优先级规则和括号 2、用于语句或语句组间的结构。如:条件和迭代 3、用于子程序间的结构,如:子程序调用和协同例程 这种分法并不是精确的,如LⅠSP和APL中只有表达式而无语 顺序控制结构可以是隐含的(缺省的)(由语言定义、程序 员可显式修改)或显式的(程序员可用来显式地修改隐含顺 序)
顺序控制提供了操作和数据被组合成程序和程序集合的框架。 涉及两个方面的问题:操作执行顺序的控制(顺序控制), 以及数据在子程序间的传递(数据控制)(下一章) 6.1 隐式和显式顺序控制 顺序控制结构可分为三组: 1、用于表达式中的结构(也针对语句,表达式是语句的基 本建筑块)。如:优先级规则和括号。 2、用于语句或语句组间的结构。如:条件和迭代。 3、用于子程序间的结构,如:子程序调用和协同例程。 这种分法并不是精确的,如LISP和APL中只有表达式而无语 句。 顺序控制结构可以是隐含的(缺省的)(由语言定义、程序 员可显式修改)或显式的(程序员可用来显式地修改隐含顺 序)
62算术表达的顺序控制 考虑方程求根: B±√B2-4×A×C root 2×A 该公式至少涉及15个分开的操作,用汇编或机器语言至少需 要15条指令甚至更多。而写成 Fortran程序则为: ROOT=(B+SQRT(B**2-4 *A*C)/(2*A) 这是自然的表达方法,由翻译器而不是程序员来考虑各种优 化问题。 然而,翻译器如何控制正确的操作顺序?
6.2 算术表达的顺序控制 考虑方程求根: 该公式至少涉及15个分开的操作,用汇编或机器语言至少需 要15条指令甚至更多。而写成Fortran程序则为: ROOT=(-B+SQRT(B**2-4*A*C))/(2*A) 这是自然的表达方法,由翻译器而不是程序员来考虑各种优 化问题。 然而,翻译器如何控制正确的操作顺序? A B B A C root − − = 2 4 2
树结构表示 目前,我们将表达式考虑为单个实体,忽略了其计值必须的 实际语法和语义。 表达式中的基本顺序控制机制是“函数复合”:刻划操作及 其操作数 函数复合是表达式呈树结构特征,根为主操作,中间节点为 中间层次操作,叶为操作数。如图6.1,求方程根的表达式的 树表示阐明了表达式的控制结构,低层的数据引用和操作作 为高层操作的操作数,必须先计值,但树表示也留下一些计 值顺序没有指定 如:一B和B*2谁先计值?B是否可组合为同一引用? 通常语言定义只在树表示级定义表达式计值顺序,允许实现 者决定计值细节
树结构表示 目前,我们将表达式考虑为单个实体,忽略了其计值必须的 实际语法和语义。 表达式中的基本顺序控制机制是“函数复合”:刻划操作及 其操作数。 函数复合是表达式呈树结构特征,根为主操作,中间节点为 中间层次操作,叶为操作数。如图6.1,求方程根的表达式的 树。 树表示阐明了表达式的控制结构,低层的数据引用和操作作 为高层操作的操作数,必须先计值,但树表示也留下一些计 值顺序没有指定。 如:-B和B**2谁先计值?B是否可组合为同一引用? 通常语言定义只在树表示级定义表达式计值顺序,允许实现 者决定计值细节
平方根公式的表示 2 A SORT B A
平方根公式的表示