c语言while if嵌套,整个程序简单地是一系列嵌套的if语句(在单个while循环中),这样.ppt...

整个程序简单地是一系列嵌套的if语句(在单个while循环中),这样.ppt

第八章 顺序控制 顺序控制提供了操作和数据被组合成程序和程序集合的框架。 涉及两个方面的问题: 操作执行顺序的控制(顺序控制) 数据在子程序间的传递(数据控制) 执行顺序控制 控制的层次和形式 语句内(即表达式)的顺序控制 算术表达的顺序控制 非算术表达式的顺序控制 语句间的顺序控制 8.1 隐式和显式顺序控制 顺序控制结构可分为四组: 1、用于表达式中的结构(也针对语句,表达式是语句的基本建筑块)。如:优先级规则和括号。 2、用于语句或语句组间的结构。如:条件和迭代。 3、用于申明式程序设计语言的程序结构。如逻辑程序设计语言 4、用于子程序间的结构,如:子程序调用和协同例程。 这种分法并不是精确的,如LISP和APL中只有表达式而无语句。 顺序控制结构可以是隐含的(缺省的)(由语言定义,除非程序员显式修改)或显式的(程序员可用来修改隐含顺序)。 8.2 算术表达的顺序控制 考虑方程求根: 该公式至少涉及15个分开的操作,用汇编或机器语言至少需要15条指令甚至更多。而写成Fortran程序则为: ROOT=(-B+SQRT(B**2-4*A*C))/(2*A) 这是自然的表达方法,由翻译器而不是程序员来考虑各种优化问题。 然而,翻译器如何控制正确的操作顺序? 算术表达的顺序控制 算术表达式的表示 语法:直观表示和形式化表示 语义:决定计值方式和过程 运算符的优先级 算术表达式在执行时的表示 树结构表示 目前,我们将表达式考虑为单个实体,忽略了其计值必需的实际语法和语义。 表达式中的基本顺序控制机制是“函数复合”:刻划操作及其操作数。 函数复合使表达式呈树结构特征,根为主操作,中间节点为中间层次操作,叶为操作数。 树结构表示 求方程根的表达式的树。 树表示阐明了表达式的控制结构,低层的数据引用和操作作为高层操作的操作数,必须先计值,但树表示也留下一些计值顺序没有指定。 如:-B和B**2谁先计值?B是否可组合为同一引用? 通常语言定义只在树表示级定义表达式计值顺序,允许实现者决定计值细节。 表达式的语法 表达式(a+b)×(c-a)的树结构 表达式的语法 表达式可表示为树结构,但为了在程序中表示,线性化是需要的。 前缀(波兰前缀)记法。 这是波兰数学家发明的无括号记号法。如:f(x,y,z),×+ab-ca LISP使用了该记号法的变种,称为剑桥波兰,用括号将操作符及其操作数括起来,如:(X(+ab)(-ca))。 后缀(逆波兰)记号法 类似于前缀,但操作符数在后面,如:ab+ca-× 中缀记号法 最适合二元操作,也是我们最常用的方式。 表达式的语义 (1/3) 上三种记号法对语言的设计都有一些有用的属性,在如何计算表达式值方面也有不同。 前缀计值 可以通过一遍扫描计值每个表达式,然而需要知道每个操作的操作数量。除了可省去括号外,前缀表达式在语言设计中有如下价值: 1、一般的函数调用均采用前缀方式。 2、可表示有任意数量操作数的操作,写表达式只需一个语法规则。 3、解码可以机械地很容易地进行,将其翻译成简单代码序是容易的。 表达式的语义 (1/3) 前缀计值 下面算法用一个执行栈计值表达式:对表达式P, 1、如P中下一项是操作子,压入栈项,设置所需参数数目。 2、如P中下一项是操作数,压入栈项。 3、如栈项n项是操作数(对栈中第一个n元操作),则可以进行计值,用计值结果替代该操作符和操作数。 表达式的语义 (2/3) 后缀计值 后缀计值时,操作符紧跟其操作数后而且操作数已被计值。 1、如P中下一项是操作数,压入栈顶 2、如P中下一项是n元操作符,n个参数必须是栈顶部的n个元素,计算结果并替换这n个元素。 这种计值策略直接、简单,是很多翻译器中生成表达式代码的基础。 表达式的语义 (3/3) 中缀计值 中缀是常见的,但用于程序语言中会导致一些问题: 1、只适合于二元操作。语言单用中缀是不够的,还需使用前缀,这二者的混合使翻译更为复杂。 2、表达式中涉及多个中缀操作时,如不使用括号,则存在固有二义性。为解决这个问题,通常引入隐含的规则。 操作子计值顺序 操作的层次 即操作的优先规则 结合律 然而,当语言引入新的,不是源自传统数学的操作符时,优先规则可能不再有用,因此,需要有不同方法来处理扩展的操作集。 C语言:使用扩展的优先规则集合,大多数使用从左到右的结合律。大多数C规则是合理的。 APL:操作数为数组和矢量,语言没有优先规则。所有表达式计值从右到左。这规则对大多数表达式也是合理的,除了一些典型的表达式,如a-b-c-意为a-(b-c)。 Smalltalk:模型类似APL,没有优先规则,表达式计值从左到右。 Forth:用于实时过程控制。其运行时结构为栈,语言是纯后缀的,没有优先规则。 执行时表示 对中缀形式的表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值