1
2009-7-29
第 4章 逻辑运算和选择结构
§ 1 关系表达式
§ 2 逻辑表达式
§ 3 逻辑 if语句
§ 4 用块 if实现选择结构
2
2009-7-29
§ 1 关系表达式 (p80-81)
关系表达式是 由关系运算符连接算术量构成的式子 。用来比较两个量的大小,一般形式为:
<算术量 ><关系运算符 ><算术量 >
算术量可以是算术型常量、变量、数组元素、
或算术表达式。
关系运算符有六个:
运算符 含义 运算符 含义
.gt,>(大于 ),ge,≥(大于等于 )
.lt,<(小于 ),le,≤(小于等于 )
.eq,=(等于 ),ne,≠(不等于 )
3
2009-7-29
关系表达式就是对两个算术量进行比较运算,
结果为逻辑常量,true.或,false,。当给定的关系成立时,取值为,true.,否则取值为,false.。
注意,由关系运算符连接算术量构成的表达式实际上是 算术关系表达式 。另外,对两个字符量也可以进行关系运算,称为字符关系表达式 。
§ 1 关系表达式
a≥b
x+y<z-w
m除以 2的余数是否 =1即 m是否为奇数
| f |>10-6
a.ge.b
x+y.lt.z-w
mod(m,2).eq.1
abs(f).gt.1e-6
4
2009-7-29
需要注意的问题:
关系运算符的两侧各有一个英文句号,不要漏写。
关系表达式的运算顺序,计算算术量? 将两边算术量的计算结果转换为同一类型? 对 算术量进行比较 。
在对实数进行,eq.,.ne.运算时,考虑计算机中实数的近似表示,在实际编程中,建议不要采用 a.eq.b形式,尽量采用 abs(a-b).lt.1e-6形式。
§ 1 关系表达式例,x+y,gt,m-n
5
2009-7-29
将下面条件写成关系表达式( p96习题一)
§ 1 关系表达式
① x≥y
x.ge.y
② a+b<c+f
(a+b).lt.(c+f)
③ t+3≠v-4
(t+3).ne.(v-4)
④ (3+a)(b+8)+sin45o≤ex·4lnx
((3+a)*(b+8)+sin(3.1416/4)).le.(exp(x)*4*log(x))
⑤ x+6y=5x+3y+6
(x+6*y).eq.(5*x+3*y+6)
6
2009-7-29
由逻辑运算符连接逻辑量构成的式子 。其一般形式为:
<逻辑量 ><逻辑运算符 ><逻辑量 >
1,逻辑量,包括 逻辑常量,逻辑变量,关系表达式
逻辑常量,.true,(逻辑真 )和,false.(逻辑假 )。
关系表达式,(见上节 )
逻辑变量,存放逻辑常量的变量。 可用逻辑赋值语句将逻辑常量赋给逻辑变量 。
§ 2 逻辑表达式 (p81-85)
§ 2 逻辑表达式
7
2009-7-29
例如,logical a,b
a =,true.
b =,false.
2,逻辑运算符共有五个逻辑运算符:
运算符 含义 运算符 含义
.and,逻辑与,eqv,逻辑等
.or,逻辑或,neqv,逻辑不等
.not,逻辑非
§ 2 逻辑表达式
8
2009-7-29
a b,not.a a.and.b a.or.b a.eqv.b a.neqv.b
.true.,true.,false,true.,true.,true.,false.
.true.,false.,false,false.,true.,false.,true.
.false.,true.,true.,false.,true.,false.,true.
.false.,false.,true.,false.,false.,true.,false.
.not.,原值取反 。
.and.,同时为“真”则为“真”,否则为
“假”。
.or.,两者之一为“真”则为“真” 。
.eqv.,两者相同则为“真”,否则为“假”。
.neqv.,两者不同则为“真”,否则为“假”。§ 2 逻辑表达式
9
2009-7-29
3,逻辑表达式的运算顺序
§ 2 逻辑表达式运算类别 运 算 符 优 先 级括 号 ( ) 1
算术运算
**
*,/
+,-
2
3
4
关系运算,gt.,,ge.,,lt..le.,,eq.,,ne,5
逻辑运算
.not.
.and.
.or.
.eqv.,,neqv.
6
7
8
9
10
2009-7-29
例:设 a=3.5,b=5.0,c=2.5,d=1.0,求下列逻辑表达式的值:
a,ge,0.0,and,a+c,gt,b+d,or.,not.,true.
6.0
§ 2 逻辑表达式
6.0
.true.,false.
.false..false.
.false.
11
2009-7-29
【 例 4.1】 判断 3个数 a,b,c能否构成三角形,能则输入 YES,否则输出 NO。
logical x,y,z
read(*,*) a,b,c
x=a+b.gt.c
y=a+c.gt.b
z=b+c.gt.a
If(x.and.y.and.z) then
write(*,*) ‘YES’
else
write(*,*) ‘NO’
end if
end
可以合并至下面的语句中。
§ 2 逻辑表达式
12
2009-7-29
4,表达式小结:
算术表达式的运算对象是算术量 (数值量 ),运算结果也是算术量 。
关系表达式的运算对象也是算术量,运算结果是逻辑量 。
关系运算符不能连续使用,如,a<b<c,不能写成 a,lt,b,lt,c,可写成 a,lt,b,and,b,lt,c。
逻辑表达式的运算对象是逻辑量,运算结果也是逻辑量 。
§ 2 逻辑表达式
13
2009-7-29
1.逻辑 if语句,if (逻辑表达式 ) 一条语句逻辑 if语句流程图一条语句逻辑表 达式.true.,false.
功能:
当逻辑表达式值为真时,执行“一条语句”,否则什么也不执行,继续下面的语句。 (单一条件选择)
§ 3 逻辑 if语句 (p95-96)
§ 3 逻辑 if语句
14
2009-7-29
§ 3 逻辑 if语句
【 例 4.2】 计算,用逻辑 if语句实现。 )(
)(
0
0
82
63
2?



x
x
xx
xy
real x,y
write(*,*)'请输入 x的值,'
read(*,*)x
if(x.ge.0) y=3*x+6
if(x.lt.0) y=-x**2+2*x-8
write(*,*)'y=',y
end
15
2009-7-29
§ 4 用块 if实现选择结构 (p85-94)
一、块 if结构 (双分支选择结构 )
二,块 if的退化形式三,多分支选择结构的实现四,小结
16
2009-7-29
§ 4 用块 if实现选择结构
1,执行过程
① 求逻辑表达式的值。
② 若为真,则执行 if块;若假,则执行 else块。
③ 跳到 end if语句,块 if结构执行结束。
一、块 if结构一般形式:
块 if结构流程图
if块逻辑表 达式
else块
.true.,false.
if (逻辑表达式 ) then
if块
else
else块
end if 逻辑表 达式.true.
if块 else块
.false.
块 if结构 N-S图
17
2009-7-29
2,块 if结构的说明
⑴ 块 if结构实现两分支选择。
⑵ 块 if结构不是一个语句,
而是由若干个语句组成的 。
§ 4 用块 if实现选择结构
if (逻辑表达式 ) then
if块
else
else块
end if
① if语句,一条语句,单独占一行。
② if块 (then块 ),由若干个语句组成,每条语句占一行。
③ else语句,一条语句,单独占一行。
④ else块,若干语句组成,每条语句占一行。
⑤ end if语句,一条语句,单独占一行。
18
2009-7-29
§ 4 用块 if实现选择结构
if (逻辑表达式 ) then
if块
else
else块
end if
⑶ 逻辑表达式两边需加括号。
⑷ 一个块 if必须 以 if语句开始,以 end if语句结束 ;
一个 if语句必须和一个
end if语句对应。
⑸ 块 if结构可以只有 if块和 else块其中之一,
即块 if的简化 (退化 )形式。
19
2009-7-29
【 例 4.3】 计算
)(
)(
0
0
82
63
2?



x
x
xx
xy
real x,y
write(*,*)'请输入 x的值,'
read(*,*)x
if(x.ge.0) then
y=3*x+6
else
y=-x**2+2*x-8
end if
write(*,*)'y=',y
end
§ 4 用块 if实现选择结构
20
2009-7-29
二、块 if的退化形式
1,一般形式一般形式如右图。当块 if
中仅有 else块时,可对逻辑表达式取,not,。
若 if块中仅有一条语句,
可进一步简化为 逻辑 if语句 。
if (逻辑表达式 ) then
if块
else
end if
逻辑表达式.true.
if块
.false.单分支结构
if (逻辑表达式 ) then
if块
end if
§ 4 用块 if实现选择结构
21
2009-7-29
2,块 if退化形式(含逻辑 if语句)的说明
块 if退化形式(含逻辑 if语句)实现的是 单分支选择结构 。
当块 if中仅有一条语句时等价于逻辑 if语句 。
利用块 if退化形式(含逻辑 if语句)也可实现两分支结构的功能。
§ 4 用块 if实现选择结构
22
2009-7-29
三、多分支选择结构的实现
Fortran77中没有实现多分支选择的专门语句。
但有下述两种实现多分支的基本方法:
方法 1,转化为单分支,采用多个块 if退化形式
(含逻辑 if语句)并列的方法实现。
方法 2,转化为多层次的两分支,采用 块 if的嵌套 或 else if结构 实现。
§ 4 用块 if实现选择结构
23
2009-7-29
§ 4 用块 if实现选择结构
1,块 if的嵌套一个块 if中又包含另一个(或多个)块 if,称为块 if嵌套 。
例如:
if(e1) then
if(e2) then
if块
else
else块
end if
else
else块
end if
if块
24
2009-7-29
§ 4 用块 if实现选择结构
write(*,*)'请输入一个成绩,'
read(*,*)score
if(score.ge.80) then
write(*,*)'A'
else
if(score.ge.60) then
write(*,*)'B'
else
write(*,*)'D'
end if
end if
end
【 例 4.4】 输入学生成绩,≥80分的输出,A”,60
分~ 79分之间的输出,B”,<60分的输出,D”。
例 4.4 N-S流程图 1
输出
A
输出
D
输出
B
T
T F
≥80? F
≥60?
25
2009-7-29
【 例 4.4】 输入学生成绩,≥80分的输出,A”,60
分~ 79分之间的输出,B”,<60分的输出,D”。
例 4.4 N-S流程图 1
输出
A
输出
D
输出
B
T
T F
≥80? F
≥60?
§ 4 用块 if实现选择结构例 4.4N-S流程图 2
输出
D
输出
B
输出
A
T
T F
≥60? F
≥80?
26
2009-7-29
【 例 4.4】 输入学生成绩,≥80分的输出,A”,60
分~ 79分之间的输出,B”,<60分的输出,D”。
§ 4 用块 if实现选择结构例 4.4N-S流程图 2
输出
D
输出
B
输出
A
T
T F
≥60? F
≥80?
write(*,*)'请输入一个成绩,'
read(*,*)score
if(score.ge.60) then
if(score.ge.80) then
write(*,*)'A'
else
write(*,*)'B'
end if
else
write(*,*)'D'
end if
end
27
2009-7-29
2,块 if的嵌套说明
必须完整嵌套,不能出现交叉。
为使程序清晰,应将每一个内嵌的块 if结构向右缩进几格,同一个块 if的 if语句,else语句,end
if语句应写在同一列。
可以多层嵌套。
【 例 4.5】 输入学生成绩,≥80分的输出,A”,
70~ 79分之间输出,B”,60~ 69分之间输出,C”,
小于 60分的输出,D”。
§ 4 用块 if实现选择结构
28
2009-7-29
§ 4 用块 if实现选择结构
write(*,*)'请输入一个成绩,'
read(*,*)score
if(score.ge.60) then
if(score.ge.70) then
if(score.ge.80) then
write(*,*)'A'
else
write(*,*)'B'
end if
else
write(*,*)'C'
end if
else
write(*,*)'D'
end if
end
例 4.5 N-S流程图输出
D
输出
C
输出
B
输出
A
T
≥70?
≥60?
T
T
F
F≥80?
F
第二层第一层
29
2009-7-29
2,else if结构当块 if的嵌套是在 else块中实现时 可采用 else if
结构形式(可理解为嵌套的简化写法)。
【 例 4.6】 输入学生成绩,≥80分的输出,A”,
70~ 79分之间输出,B”,60~ 69分之间输出,C”,
小于 60分的输出,D”。要求用 else if语句实现。
例 4.6 N-S流程图输出
D
输出
C
输出
B
输出
A
T
≥70?
≥80?
T
T
F
F≥60?
F
§ 4 用块 if实现选择结构
30
2009-7-29
§ 4 用块 if实现选择结构
write(*,*)'请输入一个成绩,'
read(*,*)score
if(score.ge.80) then
write(*,*) 'A'
else
if(score.ge.70) then
write(*,*) 'B'
else
if(score.ge.60) then
write(*,*) 'C'
else
write(*,*) 'D'
end if
end if
end if
end
例 4.6 N-S流程图输出
D
输出
C
输出
B
输出
A
T
≥70?
≥80?
T
T
F
F≥60?
F
31
2009-7-29
§ 4 用块 if实现选择结构
write(*,*)'请输入一个成绩,'
read(*,*)score
if(score.ge.80) then
write(*,*) 'A'
else
if(score.ge.70) then
write(*,*) 'B'
else
if(score.ge.60) then
write(*,*) 'C'
else
write(*,*) 'D'
end if
end if
end if
end
write(*,*)'请输入一个成绩,'
read(*,*)score
if(score.ge.80) then
write(*,*) 'A'
else if(score.ge.70) then
write(*,*) 'B'
else if(score.ge.60) then
write(*,*) 'C'
else
write(*,*) 'D'
end if
end
32
2009-7-29
else if结构的一般形式
§ 4 用块 if实现选择结构
if (e1) then
块 1
else if(e2) then
块 2
else if(e3) then
块 3
……
else
else块
end if
e1
e2
e3
块 1
块 2
块 3
T
T
T
F
F
F
33
2009-7-29
else if结构的一般形式
§ 4 用块 if实现选择结构
if (e1) then
块 1
else if(e2) then
块 2
else if(e3) then
块 3
……
else
else块
end if
特点:
与块 if结构一样,else
if结构有一个 if语句,以及一个与之对应的 end if语句。
else if结构 可以有多个 else if语句,但只能有一个 else语句 。
34
2009-7-29
§ 4 用块 if实现选择结构
【 例 4.7】 利用 else if结构实现下列函数:
)(
)(
)(
)(
)(
)(
.
50
5040
4020
200
010
10
0
50
5030
20
202
0






x
x
x
x
x
x
x
x
x
y
write(*,*)'请输入 x的值,'
read(*,*)x
if (x.lt.-10) then
y=0
else if (x.lt.0) then
y=2*x+20
else if (x.lt.20) then
y=20
else if (x.lt.40) then
y=30-0.5*x
else if (x.lt.50) then
y=50-x
else
y=0
end if
write(*,*)'y=',y
end
35
2009-7-29
3,用单分支语句实现多分支选择结构方法:转化为单分支,采用多个块 if退化形式
(逻辑 if语句 )并列的方法实现。
【 例 4.7】 利用逻辑 if语句实现下列函数:
)(
)(
)(
)(
)(
)(
.
50
5040
4020
200
010
10
0
50
5030
20
202
0






x
x
x
x
x
x
x
x
x
y
§ 4 用块 if实现选择结构
36
2009-7-29
write(*,*)'请输入 x的值,'
read(*,*)x
if (x.lt.-10) y=0
if (x.ge.-10,and,x.lt.0) y=2*x+20
if (x.ge.0,and,x.lt.20) y=20
if (x.ge.20,and,x.lt.40) y=30-0.5*x
if (x.ge.40,and,x.lt.50) y=50-x
if (x.ge.50) y=0
write(*,*)'y=',y
end
§ 4 用块 if实现选择结构
【 例 4.7】 利用逻辑 if语句实现下列函数:
)(
)(
)(
)(
)(
)(
.
50
5040
4020
200
010
10
0
50
5030
20
202
0






x
x
x
x
x
x
x
x
x
y
注意,此时条件必须书写完整
37
2009-7-29
§ 4 用块 if实现选择结构
write(*,*)'请输入 x的值,'
read(*,*)x
if (x.lt.-10) y=0
if (x.lt.0) y=2*x+20
if (x.lt.20) y=20
if (x.lt.40) y=30-0.5*x
if (x.lt.50) y=50-x
if (x.ge.50) y=0
write(*,*)'y=',y
end
【 例 4.7】 利用逻辑 if语句实现下列函数:
)(
)(
)(
)(
)(
)(
.
50
5040
4020
200
010
10
0
50
5030
20
202
0






x
x
x
x
x
x
x
x
x
y
错误!
38
2009-7-29
§ 4 用块 if实现选择结构四、本节小结
块 if结构:实现两分支选择。
块 if的退化形式(包括逻辑 if语句):实现单分支选择。
多分支选择:
转变为多层次的两分支:块 if的嵌套,else
if结构。
转变为多个并列的单分支。
39
2009-7-29