编辑: 星野哀 | 2019-07-02 |
1、顺序计值:1*3+2=
52、取a一次:1*3+1=
43、在取a前调用fun:2*3+2=8执行序不同导致不同结果. 表达式的计值(2):副作用 对表达式中副作用的使用有两种选择:
1、不允许副作用不允许有副作用的函数或对副作用可能影响的表达式的值改为未定义.
2、允许副作用但语言定义应精确地给出计值顺序,这将使很多优化不可能.通常,语句允许有副作用,如:赋值必须产生副作用. 表达式的计值(3):出错条件 对可能失败和产生出错条件的操作,涉及一种特殊的副作用.一般的副作用只涉及到程序员定义的函数,而出错条件可能在很多原操作中出现(溢出、被零除等).这类副作用是不希望被排除的,而出错条件的意义在于其出现甚至会受到表达式的计值顺序的影响.这样,程序员需要精确的计值顺序控制. 表达式的计值(4):短路布尔表达式 考虑例子:if ((A==0)||(B/A>
C)){……}While(IC)){……}两个例子中,第二个条件可能产生出错条件.第一个操作数用于防止错误产生.在很多语言中,求布尔操作需先计值操作数,这将产生不期望的错误,因为人们期望左操作数短路右操作数.Ada中提供了两个特殊的布尔操作来解决这个问题.and then 和or else.显式地提供短路机制.例:if (A=0) or else (B/A>
C) then这将不会失败,因A=0将导致整个表达式计值结束. 返回 8.3 语句间的顺序控制 基本语句语句级顺序控制的形式语句级顺序控制的语句结构化顺序控制结构的程序设计简介结构顺序控制语句结构顺序控制中的问题顺序控制的结构化:素程序 基本语句 任何程序的结果由其基本语句确定.这里我们不再考虑语句中表达式,而是将语句作为考虑的单元来代表一单步计算.数据对象的赋值通过向数据对象赋值而改变计算状态是影响计算状态的主要机制. 基本语句 数据对象的赋值赋值语句主要目的是将某表达式的右值赋给某数据对象的左值.赋值为每个基本数据类型定义的中心操作.输入语句大多数语言有一种语句形式,从终端用户、文件或通讯线读数据.这样的语句也通过赋值改变变量的值.其他赋值操作参数传递:给形参赋值隐含赋值:如SNOBOL4中的引用,Prolog目标匹配,声明时初始值等. 返回 语句级顺序控制的形式 三种主要的语句级顺序控制:复合:语句顺序放置,顺序执行.选择:两个语句序列可形成选择,使得一个或另一个序列被执行,但不能同时执行.迭代:一个语句序列被重复执行零次或多次.这是三种常见结构,语句被组成这三种结构而形成程序. 返回 显式顺序控制 goto语句,两种形式无条件goto和条件gotoGoto语句导致无结构的设计.语言的很多形式模型均不允许goto存在.此外,goto也是多余的,没有goto也可以写出同样能力的程序.Break语句通常使控制被前移到一个显式点(在给定控制结构的结束处).如C中Break语句使得立即退出while、for、switch语句.C中还有Continue语句,只结束本次循环. 结构化break语句 返回 结构的程序设计 70年代,goto语句受到很大攻击,以至有的语言完全删去了goto.goto 语句有一些优点:①如果标号只是局部语法标记,则对高效执行有直接的硬件支持.②在小程序中使用简单、容易.③为汇编语言和老语言用户熟悉.④可作为通用建筑块来表示(仿真)其他控制形式. 结构的程序设计 它也有严重的缺点: