Fortran逻辑运算和选择结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4
二、关系表达式
关系表达式是最简单的一种逻辑表达式。
其一般形式为:
<算术量>
<关系运算符>
<算术量>
算术量:数值常数、数值型变量、数值函数、算术表达式。 关系运算符:关系比较符。 FORTRAN中有六种关系运算符
5
6
几点注意:
1. 关系运算符字母两侧各有一个句点,不要漏写。
2. 在一个关系表达式中可能包括算术运算符和关系运算符, 先进行算术运算,然后进行关系运算。(建议加括号) i+j.ne.m+n 相当于 (i+j).ne.(m+n)
read(*,*) grade if(grade.ge.80.) then write(*,*) 'A ' else if(grade.ge.70.) then write(*,*) 'B' else if(grade.ge.60.) then write(*,*) 'C' else write(*,*) 'D' end if end
2
例:计算职工工资。正常工资rate (yuan/h),一周超过 40 hours时,超过部分按1.5 rate (yuan/h) 。
3
c
Payroll with overtime program payroll read(*,*) rate, hours if(hours.gt.40.0) then regpay=rate*40.0 ovtpay=1.5*rate*(hours-40.0) else regpay=rate*hours ovtpay=0.0 end if pay=regpay+ovtpay write(*,*) 'rate=', rate, ' hours=', hours write(*,*) 'regular pay=', regpay, ' overtime pay=', ovtpay write(*,*) 'total pay=', pay end
21
read(*,*) x if(x.lt.-10.0) then y=0.0 else if(x.lt.0.0) then y=2.0*x+20.0 else if(x.lt.20.0) then y=20.0 else if(x.lt.40.0) then y=30.0-0.5*x else if(x.lt.50.0) then y=50.0-x else y=0.0 end if write(*,*) 'y=',y end
if(grade.ge.60.) then else print *, ’No.’, num print *, ’grade’, grade end if
4. 块IF的嵌套 一个块IF可以嵌套另一个块IF,但另一个块if必须 完整地出现在then块或else块的位置。
14
read(*,*) grade if(grade.ge.60.) then if(grade.ge.70.) then if(grade.ge.80.) then write(*,*) 'A' else write(*,*) 'B' end if else write(*,*) 'C' end if else write(*,*) 'D' end if end
read(*,*) grade if(grade.le.60.) then write(*,*) ‘D ' else if(grade.le.70.) then write(*,*) ‘C' else if(grade.le.80.) then write(*,*) ‘B' else write(*,*) ‘A' end if end
求函数值
22
六、逻辑IF语句
逻辑IF语句只有“条件为真”时才有操作,为“假” 时不进行任何操作,且条件为“真”时只能执行一条执行 语句,而后不论“真”或“假”,都接着执行逻辑IF语句 的下一条语句。逻辑IF语句又称行IF语句。 如果在块IF结构中else块空块,而then块只有一条语句, 则用逻辑IF语句比较方便。 if(x.lt.60.0) then write(*,*) grade end if end if(x.lt.60.0) write(*,*) grade
因为不论“真”或“假”,都接着执行逻辑IF语句 的下一条语句,故逻辑IF语句的条件要写全。
23
பைடு நூலகம்
read(*,*) grade if(grade.ge.80.) write(*,*) 'A' if(grade.ge.70..and.grade.lt.80.) write(*,*) 'B' if(grade.ge.60..and.grade.lt.70.) write(*,*) 'C' if(grade.lt.60.) write(*,*) 'D' end
10
例如,A=3.5, B=5.0, C=2.5, D=1.0
11
算术运算符的运算对象是数值量,运算结果为数值。 关系运算符的运算对象是数值量,运算结果为逻辑量。 逻辑运算符的运算对象是逻辑量,运算结果仍为逻辑量。
逻辑运算符和算术运算符可以连续用运算符连接运算量, 但关系运算符不可以。
逻辑运算符可以写成:(设L1,L2,L3,L4为逻辑变量) L1 .AND. L2 .AND. L3 .AND. L4 算术运算符可以写成:A+B+C+D 但关系运算符不能写成:A .LT. B .LT. C .LT. D
成绩分级 A : ≥80 B : ≥70且<80 C : ≥60且<70 D : <60
15
给a, b, c三个数排序,要求从小到大输出
16
read(*,*) a,b,c if(a.le.b) then else t=a a=b b=t end if if(b.le.c) then else t=b b=c c=t if(a.le.b) then else t=a a=b b=t end if end if write(*,*) a,b,c end
9
4. 逻辑表达式 <逻辑量> <逻辑运算符> <逻辑量>
FORTRAN77逻辑量包括:
逻辑常量 逻辑型变量 关系表达式
(a.lt.b).and.(a.gt.c) (x.lt.0.).or.(a.gt.100.) .not.(x.le.0.) (a.gt.b).eqv.(c.gt.d) (l1.lt.0.).neqv..true. 注意:.AND.和.EQV.的区别。
18
read(*,*) grade if(grade.ge.60.) then if(grade.ge.70.) then if(grade.ge.80.) then write(*,*) 'A' else write(*,*) 'B' end if else write(*,*) 'C' end if else write(*,*) 'D' end if end
第一章 算法 第二章 计算机和计算机程序 第三章 Fortran语言程序设计初步 第四章 逻辑运算和选择结构 第五章 循环结构的实现 第六章 Fortran的数据结构 第七章 数据的输入、输出 第八章 常用算法的程序设计举例
1
一、引言
在FORTRAN77中,用块IF结构来实现选择结构, 其形式为: IF(条件)THEN then 块 ELSE else 块 END IF
7
三、逻辑表达式
1. 逻辑常量 FORTRAN只有两个逻辑常量 .TRUE. .FALSE. 2. 逻辑型变量 Fortran 用LOGICAL语句说明逻辑变量。 logical a, b a=.true. b=(x+y).gt.z
8
表示“真”,即满足逻辑条件 表示“假”,即不满足逻辑条件
3. 逻辑运算符
12
四、用块IF实现选择结构
IF(逻辑表达式)THEN 块1 ELSE 块2 END IF 几点说明:
1. 一个块IF是有若干个语句组成的,其中三条语句均 不能单独是使用。
2. 一个块IF必须以块IF语句开始,以END IF语句结束。 一个块IF语句必须和一个END IF语句对应。
13
3. 一个块IF可以不包含ELSE语句和else块,也可以不 包含then块。 if(grade.lt.60.) then print *, ’No.’, num print *, ’grade’, grade end if
read(*,*) grade if(grade.ge.80.) write(*,*) 'A' if(grade.ge.70.) write(*,*) 'B' if(grade.ge.60.) write(*,*) 'C' write(*,*) 'D' end
24
C
单价850,100以上95折优惠,求货款。 price=850 read(*,*) n if(n.ge.100) price=price*0.95 amount=n*price write(*,*) 'n=',n,' amount=',amount end
17
五、ELSE IF 语句
read(*,*) grade if(grade.ge.60.) then if(grade.ge.70.) then if(grade.ge.80.) then write(*,*) 'A' else write(*,*) 'B' end if else write(*,*) 'C' end if else write(*,*) 'D' end if end 为了避免过多的块IF嵌套,FORTRAN 还提供了 ELSE IF语句来处理“否则,如果…”的情况。
19
几点说明: 1. ELSE IF语句相当于把ELSE语句和其下一行的块IF 语句连结成一个语句。 2. ELSE IF语句不需END IF语句与之对应。 3.一个块IF可以有多个ELSE IF语句,除非有块IF嵌套 否则只能有一个ELSE语句。 4.当处理多分支选择时,用ELSE IF语句往往比较方便。 5. ELSE IF是在“条件为假”的分支中再继续进行分支 处理的。故在处理多分支的选择时,要把出现几率高的 条件写在前面,以提高效率。
25
3. 不同类型常变量比较时,遵循低级向高级转化规律。 X.GT.3 4.关系表达式的值不是一个数值,而是逻辑量“真”或“假”。 5.判断实数相等和不等,用.EQ.和.NE.时要特别注意。 (1.0/3.0+1.0/3.0+1.0/3.0).EQ. 1.0 (10.0*0.1).NE. 1.0 A.EQ.B 可改为 ABS(A-B).LT.1E-6 C.NE.D 可改为 ABS(C-D).GT.1E-6
20
read(*,*) grade if(grade.ge.80.) then write(*,*) 'A ' else if(grade.ge.70.) then write(*,*) 'B' else if(grade.ge.60.) then write(*,*) 'C' else write(*,*) 'D' end if end
二、关系表达式
关系表达式是最简单的一种逻辑表达式。
其一般形式为:
<算术量>
<关系运算符>
<算术量>
算术量:数值常数、数值型变量、数值函数、算术表达式。 关系运算符:关系比较符。 FORTRAN中有六种关系运算符
5
6
几点注意:
1. 关系运算符字母两侧各有一个句点,不要漏写。
2. 在一个关系表达式中可能包括算术运算符和关系运算符, 先进行算术运算,然后进行关系运算。(建议加括号) i+j.ne.m+n 相当于 (i+j).ne.(m+n)
read(*,*) grade if(grade.ge.80.) then write(*,*) 'A ' else if(grade.ge.70.) then write(*,*) 'B' else if(grade.ge.60.) then write(*,*) 'C' else write(*,*) 'D' end if end
2
例:计算职工工资。正常工资rate (yuan/h),一周超过 40 hours时,超过部分按1.5 rate (yuan/h) 。
3
c
Payroll with overtime program payroll read(*,*) rate, hours if(hours.gt.40.0) then regpay=rate*40.0 ovtpay=1.5*rate*(hours-40.0) else regpay=rate*hours ovtpay=0.0 end if pay=regpay+ovtpay write(*,*) 'rate=', rate, ' hours=', hours write(*,*) 'regular pay=', regpay, ' overtime pay=', ovtpay write(*,*) 'total pay=', pay end
21
read(*,*) x if(x.lt.-10.0) then y=0.0 else if(x.lt.0.0) then y=2.0*x+20.0 else if(x.lt.20.0) then y=20.0 else if(x.lt.40.0) then y=30.0-0.5*x else if(x.lt.50.0) then y=50.0-x else y=0.0 end if write(*,*) 'y=',y end
if(grade.ge.60.) then else print *, ’No.’, num print *, ’grade’, grade end if
4. 块IF的嵌套 一个块IF可以嵌套另一个块IF,但另一个块if必须 完整地出现在then块或else块的位置。
14
read(*,*) grade if(grade.ge.60.) then if(grade.ge.70.) then if(grade.ge.80.) then write(*,*) 'A' else write(*,*) 'B' end if else write(*,*) 'C' end if else write(*,*) 'D' end if end
read(*,*) grade if(grade.le.60.) then write(*,*) ‘D ' else if(grade.le.70.) then write(*,*) ‘C' else if(grade.le.80.) then write(*,*) ‘B' else write(*,*) ‘A' end if end
求函数值
22
六、逻辑IF语句
逻辑IF语句只有“条件为真”时才有操作,为“假” 时不进行任何操作,且条件为“真”时只能执行一条执行 语句,而后不论“真”或“假”,都接着执行逻辑IF语句 的下一条语句。逻辑IF语句又称行IF语句。 如果在块IF结构中else块空块,而then块只有一条语句, 则用逻辑IF语句比较方便。 if(x.lt.60.0) then write(*,*) grade end if end if(x.lt.60.0) write(*,*) grade
因为不论“真”或“假”,都接着执行逻辑IF语句 的下一条语句,故逻辑IF语句的条件要写全。
23
பைடு நூலகம்
read(*,*) grade if(grade.ge.80.) write(*,*) 'A' if(grade.ge.70..and.grade.lt.80.) write(*,*) 'B' if(grade.ge.60..and.grade.lt.70.) write(*,*) 'C' if(grade.lt.60.) write(*,*) 'D' end
10
例如,A=3.5, B=5.0, C=2.5, D=1.0
11
算术运算符的运算对象是数值量,运算结果为数值。 关系运算符的运算对象是数值量,运算结果为逻辑量。 逻辑运算符的运算对象是逻辑量,运算结果仍为逻辑量。
逻辑运算符和算术运算符可以连续用运算符连接运算量, 但关系运算符不可以。
逻辑运算符可以写成:(设L1,L2,L3,L4为逻辑变量) L1 .AND. L2 .AND. L3 .AND. L4 算术运算符可以写成:A+B+C+D 但关系运算符不能写成:A .LT. B .LT. C .LT. D
成绩分级 A : ≥80 B : ≥70且<80 C : ≥60且<70 D : <60
15
给a, b, c三个数排序,要求从小到大输出
16
read(*,*) a,b,c if(a.le.b) then else t=a a=b b=t end if if(b.le.c) then else t=b b=c c=t if(a.le.b) then else t=a a=b b=t end if end if write(*,*) a,b,c end
9
4. 逻辑表达式 <逻辑量> <逻辑运算符> <逻辑量>
FORTRAN77逻辑量包括:
逻辑常量 逻辑型变量 关系表达式
(a.lt.b).and.(a.gt.c) (x.lt.0.).or.(a.gt.100.) .not.(x.le.0.) (a.gt.b).eqv.(c.gt.d) (l1.lt.0.).neqv..true. 注意:.AND.和.EQV.的区别。
18
read(*,*) grade if(grade.ge.60.) then if(grade.ge.70.) then if(grade.ge.80.) then write(*,*) 'A' else write(*,*) 'B' end if else write(*,*) 'C' end if else write(*,*) 'D' end if end
第一章 算法 第二章 计算机和计算机程序 第三章 Fortran语言程序设计初步 第四章 逻辑运算和选择结构 第五章 循环结构的实现 第六章 Fortran的数据结构 第七章 数据的输入、输出 第八章 常用算法的程序设计举例
1
一、引言
在FORTRAN77中,用块IF结构来实现选择结构, 其形式为: IF(条件)THEN then 块 ELSE else 块 END IF
7
三、逻辑表达式
1. 逻辑常量 FORTRAN只有两个逻辑常量 .TRUE. .FALSE. 2. 逻辑型变量 Fortran 用LOGICAL语句说明逻辑变量。 logical a, b a=.true. b=(x+y).gt.z
8
表示“真”,即满足逻辑条件 表示“假”,即不满足逻辑条件
3. 逻辑运算符
12
四、用块IF实现选择结构
IF(逻辑表达式)THEN 块1 ELSE 块2 END IF 几点说明:
1. 一个块IF是有若干个语句组成的,其中三条语句均 不能单独是使用。
2. 一个块IF必须以块IF语句开始,以END IF语句结束。 一个块IF语句必须和一个END IF语句对应。
13
3. 一个块IF可以不包含ELSE语句和else块,也可以不 包含then块。 if(grade.lt.60.) then print *, ’No.’, num print *, ’grade’, grade end if
read(*,*) grade if(grade.ge.80.) write(*,*) 'A' if(grade.ge.70.) write(*,*) 'B' if(grade.ge.60.) write(*,*) 'C' write(*,*) 'D' end
24
C
单价850,100以上95折优惠,求货款。 price=850 read(*,*) n if(n.ge.100) price=price*0.95 amount=n*price write(*,*) 'n=',n,' amount=',amount end
17
五、ELSE IF 语句
read(*,*) grade if(grade.ge.60.) then if(grade.ge.70.) then if(grade.ge.80.) then write(*,*) 'A' else write(*,*) 'B' end if else write(*,*) 'C' end if else write(*,*) 'D' end if end 为了避免过多的块IF嵌套,FORTRAN 还提供了 ELSE IF语句来处理“否则,如果…”的情况。
19
几点说明: 1. ELSE IF语句相当于把ELSE语句和其下一行的块IF 语句连结成一个语句。 2. ELSE IF语句不需END IF语句与之对应。 3.一个块IF可以有多个ELSE IF语句,除非有块IF嵌套 否则只能有一个ELSE语句。 4.当处理多分支选择时,用ELSE IF语句往往比较方便。 5. ELSE IF是在“条件为假”的分支中再继续进行分支 处理的。故在处理多分支的选择时,要把出现几率高的 条件写在前面,以提高效率。
25
3. 不同类型常变量比较时,遵循低级向高级转化规律。 X.GT.3 4.关系表达式的值不是一个数值,而是逻辑量“真”或“假”。 5.判断实数相等和不等,用.EQ.和.NE.时要特别注意。 (1.0/3.0+1.0/3.0+1.0/3.0).EQ. 1.0 (10.0*0.1).NE. 1.0 A.EQ.B 可改为 ABS(A-B).LT.1E-6 C.NE.D 可改为 ABS(C-D).GT.1E-6
20
read(*,*) grade if(grade.ge.80.) then write(*,*) 'A ' else if(grade.ge.70.) then write(*,*) 'B' else if(grade.ge.60.) then write(*,*) 'C' else write(*,*) 'D' end if end