《fortran逻辑运算和选择结构ppt课件》由会员分享,可在线阅读,更多相关《fortran逻辑运算和选择结构ppt课件(25页珍藏版)》请在金锄头文库上搜索。
1、1第八章 常用算法的程序设计举例第一章 算法第二章 计算机和计算机程序第四章 逻辑运算和选择构造第五章 循环构造的实现第六章 Fortran的数据构造第七章 数据的输入、输出第三章 Fortran言语程序设计初步2一、引言一、引言 在在FORTRAN77FORTRAN77中,用中,用块IFIF构造来构造来实现选择构造,构造,其方式其方式为: IF 条件条件 THEN then 块块 ELSE else 块块 END IF3 例:例:计算算职工工工工资。正常工。正常工资rate (yuan/h),一周超越,一周超越40 hours时,超越部分按,超越部分按1.5 rate (yuan/h) 。4
2、cPayroll with overtimeprogram payrollread(*,*) rate, hoursif(hours.gt.40.0) then regpay=rate*40.0 ovtpay=1.5*rate*(hours-40.0)else regpay=rate*hours ovtpay=0.0end ifpay=regpay+ovtpaywrite(*,*) rate=, rate, hours=, hourswrite(*,*) regular pay=, regpay, overtime pay=, ovtpaywrite(*,*) total pay=, paye
3、nd 5二、关系表达式二、关系表达式关系表达式是最关系表达式是最简单的一种的一种逻辑表达式。表达式。其普通方式其普通方式为: 算算术量:数量:数值常数、数常数、数值型型变量、数量、数值函数、算函数、算术表达式。表达式。关系运算符:关系比关系运算符:关系比较符。符。FORTRAN中有六种关系运算符中有六种关系运算符67 几点留意:几点留意:1. 关系运算符字母两关系运算符字母两侧各有一个句点,不要漏写。各有一个句点,不要漏写。2. 在一个关系表达式中能在一个关系表达式中能够包括算包括算术运算符和关系运算符,运算符和关系运算符,先先进展算展算术运算,然后运算,然后进展关系运算。建展关系运算。建议加
4、括号加括号i+j.ne.m+n 相当于相当于 (i+j).ne.(m+n)3. 不同不同类型常型常变量比量比较时,遵照低,遵照低级向高向高级转化化规律。律。X.GT.34.关系表达式的关系表达式的值不是一个数不是一个数值,而是,而是逻辑量量“真或真或“假。假。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 8三、三、逻辑表达式表达式1.
5、 逻辑常量常量FORTRAN只需两个只需两个逻辑逻辑常量常量.TRUE. 表示表示“真,即真,即满满足足逻辑逻辑条件条件.FALSE. 表示表示“假,即不假,即不满满足足逻辑逻辑条件条件2. 逻辑型型变量量Fortran 用用LOGICAL语语句句阐阐明明逻辑变逻辑变量。量。logical a, ba=.true.b=(x+y).gt.z93. 逻辑运算符运算符104. 逻辑表达式表达式 FORTRAN77逻辑逻辑量包括:量包括:逻辑常量常量逻辑型型变量量关系表达式关系表达式(a.lt.b).and.(a.gt.c)(x.lt.0.).or.(a.gt.100.).not.(x.le.0.)(
6、a.gt.b).eqv.(c.gt.d)(l1.lt.0.).neqv.true.留意:留意:.AND.和和.EQV.的区的区别。11例如,例如,A=3.5, B=5.0, C=2.5, D=1.012算算术运算符的运算运算符的运算对象是数象是数值量,运算量,运算结果果为数数值。关系运算符的运算关系运算符的运算对象是数象是数值量,运算量,运算结果果为逻辑量。量。逻辑运算符的运算运算符的运算对象是象是逻辑量,运算量,运算结果仍果仍为逻辑量。量。逻辑运算符和算运算符和算术运算符可以延运算符可以延续用运算符用运算符衔接运算量,接运算量,但关系运算符不可以。但关系运算符不可以。逻辑运算符可以写成:运算
7、符可以写成:设L1,L2,L3,L4为逻辑变量量L1 .AND. L2 .AND. L3 .AND. L4算算术运算符可以写成:运算符可以写成:A+B+C+D但关系运算符不能写成:但关系运算符不能写成:A .LT. B .LT. C .LT. D13四、用四、用块IFIF实现选择构造构造 IF 逻辑逻辑表达式表达式 THEN 块块1 ELSE 块块2 END IF几点几点阐明:明:1. 一个一个块IF是有假是有假设干个干个语句句组成的,其中三条成的,其中三条语句句均不能均不能单独是运用。独是运用。2. 一个一个块IF必需以必需以块IF语句开句开场,以,以END IF语句句终了。了。一个一个块I
8、F语句必需和一个句必需和一个END IF语句句对应。143. 一个一个块IF可以不包含可以不包含ELSE语句和句和else块,也可以不包,也可以不包含含then块。if(grade.lt.60.) then print *, No., num print *, grade, gradeend if4. 块IF的嵌套的嵌套一个一个块IF可以嵌套另一个可以嵌套另一个块IF,但另一个,但另一个块if必需完必需完好地出如今好地出如今then块或或else块的位置。的位置。if(grade.ge.60.) thenelse print *, No., num print *, grade, gradee
9、nd if15read(*,*) gradeif(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 ifelse write(*,*) Dend ifend成果分级成果分级A : 80B : 70且且80C : 60且且70D : 6016给a, b, c三个数排序,要求从小到大三个数排序,要求从小到大输出出17read(*,*) a,b,cif(a.le.b) thenelse t=a a=b b=
10、tend ifif(b.le.c) thenelse t=b b=c c=t if(a.le.b) then else t=a a=b b=t end ifend ifwrite(*,*) a,b,cend18五、五、ELSE IF ELSE IF 语句句read(*,*) gradeif(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 ifelse write(*,*) Dend ifend 为了
11、防止了防止过多的多的块IF嵌套,嵌套,FORTRAN 还提供了提供了ELSE IF语句来句来处置置“否那么,假否那么,假设的情况。的情况。19read(*,*) gradeif(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 ifelse write(*,*) Dend ifendread(*,*) gradeif(grade.ge.80.) then write(*,*) A else if(gr
12、ade.ge.70.) then write(*,*) Belse if(grade.ge.60.) then write(*,*) Celse write(*,*) Dend ifend20几点几点阐明:明:2. ELSE IF语句不需句不需END IF语句与之句与之对应。3.一个一个块IF可以有多个可以有多个ELSE IF语句,除非有句,除非有块IF嵌套嵌套否那么只能有一个否那么只能有一个ELSE语句。句。1. ELSE IF语句相当于把句相当于把ELSE语句和其下一行的句和其下一行的块IF语句句连结成一个成一个语句。句。4.当当处置多分支置多分支选择时,用,用ELSE IF语句往往比句往
13、往比较方便。方便。5. ELSE IF是在是在“条件条件为假的分支中再假的分支中再继续进展分支展分支处置的。故在置的。故在处置多分支的置多分支的选择时,要把出,要把出现几率高的条几率高的条件写在前面,以提高效率。件写在前面,以提高效率。21read(*,*) gradeif(grade.ge.80.) then write(*,*) A else if(grade.ge.70.) then write(*,*) Belse if(grade.ge.60.) then write(*,*) Celse write(*,*) Dend ifendread(*,*) gradeif(grade.le
14、.60.) then write(*,*) D else if(grade.le.70.) then write(*,*) Celse if(grade.le.80.) then write(*,*) Belse write(*,*) Aend ifend22read(*,*) xif(x.lt.-10.0) then y=0.0else if(x.lt.0.0) then y=2.0*x+20.0else if(x.lt.20.0) then y=20.0else if(x.lt.40.0) then y=30.0-0.5*xelse if(x.lt.50.0) then y=50.0-xe
15、lse y=0.0end ifwrite(*,*) y=,yend求函数求函数值23六、六、逻辑IFIF语句句 逻辑IF语句只需句只需“条件条件为真真时才有操作,才有操作,为“假假时不不进展任何操作,且条件展任何操作,且条件为“真真时只能只能执行一条行一条执行行语句,而后不句,而后不论“真或真或“假,都接着假,都接着执行行逻辑IF语句的下句的下一条一条语句。句。逻辑IF语句又称行句又称行IF语句。句。 假假设在在块IF构造中构造中else块空空块,而,而then块只需一条只需一条语句,句,那么用那么用逻辑IF语句比句比较方便。方便。if(x.lt.60.0) then write(*,*) g
16、radeend ifendif(x.lt.60.0) write(*,*) grade 由于不由于不论“真或真或“假,都接着假,都接着执行行逻辑IF语句的句的下一条下一条语句句,故故逻辑IF语句的条件要写全。句的条件要写全。24read(*,*) gradeif(grade.ge.80.) write(*,*) Aif(grade.ge.70.and.grade.lt.80.) write(*,*) Bif(grade.ge.60.and.grade.lt.70.) write(*,*) Cif(grade.lt.60.) write(*,*) Dendread(*,*) gradeif(grade.ge.80.) write(*,*) Aif(grade.ge.70.) write(*,*) Bif(grade.ge.60.) write(*,*) Cwrite(*,*) Dend25C单单价价850,100以上以上95折折优优惠,求惠,求货货款。款。price=850read(*,*) nif(n.ge.100) price=price*0.95amount=n*pricewrite(*,*) n=,n, amount=,amountend