fortran第4章(条件).ppt

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

T
条件
F
语句块1
语句块2
例: 有一折线其关系为: Y= 2X+3 (X≤2) X+5 (X>2) 见图,要求输入一个X值,打印一个相应的Y值.
READ *,X IF (X.LE.2.0) THEN Y=2*X+3 ELSE Y=X+5 ENDIF PRINT *,’X=‘,X,’Y=‘,Y END
3.5.LE.10.0.AND.20.0.LT.15.1
• 逻辑或.OR.
其值为假
例:3.5.LE.10.0.OR.20.0.LT.15.1
3.5.GE.10.0.OR.20.0.LT.15.1
其值为真
其值为假

逻辑同.EQV.(逻辑等值) 例:3.5.LE.10.0.EQV.20.0.LT.15.0 3.5.LE.10.0.EQV.20.0.GE.15.0 其值为假 其值为真
具体操作是: 将e1 RELOP e2 写成 ((e1)-(e2)) RELOP 0 即对两个算术表达式求差,然后与零进行比较,其中 零的类型与表达式((e1)-(e2))的类型相同. 如: 可写作: X*X.LT.2*J X*X-2*J.LT.0.0
4.当算术表达式是非整型时尽量不用关系运算符.EQ.
b b2 4 ac x 1 2 a
b b2 4 ac x 2 2 a
READ *,GRADE
IF(GRADE.GE.8O) PRlNT *,”A” IF(GRADE.GE.6O .AND. GRADE.LT.80) PRlNT *,”B” IF(GRADE.LT.6O) PRlNT *,”C” 逻辑IF语句当条件为“真”时只能执行一个执行语句而不能 执行若干个语句。与块IF相比,逻辑IF语句是在一行中完成 的一个选择操作,因此它又称“行IF语句”以与块IF区别。
• 逻辑异.NEQV.(逻辑不等值) 例:3.5.GE.10.0.NEQV.20.0.LT.15.0 3.5.GE.10.0.NEQV.20.0.GE.15.0 运算顺序优先次序为: .NOT. => .AND. => .OR. => .EQV. 、.NEQV. 其值为真 其值为假
逻辑表达式中各运算符的运算顺序 逻辑表如下表:
逻辑IF语句也常与GOTO语句合用,但如果过多使用,程序 结构将显得混乱,难于理解。应尽可能采用结构化的程序 设计方法。
! F90的固定格式 -----统计学生考试合格人数 INTEGER :: n, s, k s = 0; k = 0 1 PRINT*,'键入分数 (负数时退出):' READ*, n; s = s + 1 IF(n >= 60) k = k + 1 GOTO 1 999 PRINT*, k,' 个学生合格。 总人数=', s END IF(n < 0) GOTO 999
应写成 x.GT.0.0.AND.X.LT.5.0
d. 两个逻辑运算符相邻要注意. 如:.NOT..AND.
例1:若A=1.5,B=2.0,C=1.2,X=3.0,Y=5.0,L1为真,有 逻辑表达式
A.GT.3.6*B.AND.X.EQ.Y.OR.L1.AND..NOT.(3.6-C)*2.GE.D/2.5
逻辑IF语句名称,是沿用了Fortrn66的定义,因为在F66中有两 种IF语句:算术IF语句(F90/95中已废除)和逻辑IF语句。
4.5 块IF条件语句
块IF的一般形式可写成: IF(逻辑表达式) THEN 块1 ELSE 块2 END IF
← 块IF语句 ← then块 ← else块
功能: 当逻辑表达式的值为真时,即条件成立时执行语句 块1,反之执行语句块2.
第四章
4.1 4.2 4.3 4.4 4.5 4.6
逻辑运算和选择结构
关系表达式 逻辑表达式 逻辑IF语句 分块条件语句 块IF构造 多重选择和CASE构造
4.1
关系表达式
a)关系运算符 关系运算符就是关系比较符。Fortran中有六个关系运算 符:
关系运算符 英语含义 所代表的数学符号
.GT. .GE. .LT. .LE. .EQ. .NE. (F77)
4.3 逻辑表达式
a) 逻辑量 Fortran的逻辑常量:
.TRUE. (表示“真”,即满足逻辑条件);
.FALSE. (表示“假”,即不满足逻辑条件)。 例:当X=3时,“X<5”的值为.TRUE.(真),
而“X<=0”的值为.FALSE.(假)。
逻辑型变量用来存放逻辑常量。它的值也只能是 .TRUE. 或.FALSE.之一。可以将一逻辑常量赋予一个逻辑变量。
例:编制二次方程求根的程序.
分析: AX2+BX+C=0 A=0,B=0 A=0,B A 0,D<0 A 0,D=0 A 0,D>0 0 则 则 则 有二复根 则 有两相等的根 则 有两实根 的判别式为: D=B2-4AC C=0 X=-C/B X1+iX2 和 X1-iX2 -B/2A
À± à À ¨º À Å Ë Ê ã õ Ô Ë Ë ã û · ÀÀ· À ¨£ £ © ** *£ ¬ / +,Ø Ï ¹ µ Ë Ô Ë ã û · .GT.,.GE. .EQ.,.NEQ. .LT.,.LE. ß ¼  ­ Ô Ë ã Ë · û .NOT. .AND. .OR. .EQV.,NEQV. ÀÀ À 1 2 3 4 5 5 5 6 7 8 9
逻辑与 逻辑或 逻辑非 逻辑等价 逻辑不等 价
A.AND.B A.OR.B .NOT.A A.EQV.B A.NEQV.B
A,B为真时,则A.AND.B为真 A,B之一为真,则A.OR.B为真 A为真,则.NOT.A为假 A和B值为同一逻辑常量时,A.EQV.B为真 A和B的值为不同的逻辑常量,则A.NEQV.B 为真
如果条件不成立,则整个IF语句不作任何操作,只 是起下滑作用,使控制转移到IF语句的下一个语句。
IF 语句最大的用处是退出迭代。计算机程序中经常作连加、 连乘或反复执行某段程序,并规定只有当某个参数大于或 小于某值时才停止循环,这时就可以使用 IF 语句。 IF 语句 用于两分叉选择的例子
如:求数学中的阶梯函数 (
注意: 不要将 .AND. 与 .EQV. 混淆: A.AND.B 是当 A 和 B 均为真时才 为真;A.EQV.B是当A和B均为真或均为假时为真。
c) 逻辑表达式的运算
• 逻辑非.NOT. 例: 3.5.GT.2 其值为 .TRUE. .NOT.(3.5.GT.2)其值为.FALSE.
• 逻辑与 .AND. 例:3.5.LE.10.0.AND.20.0.GT.15.1 其值为真
注意:关系运算符的两个字母(如GT,LE…)的二侧各有一个点, 不要漏写。
b) 关系表达式
关系表达式是最简单的一种逻辑表达式。其一般形式为:
<算术表达式> <关系运算符> <算术表达式> <字符表达式> <关系运算符> <字符表达式> 算术表达式也可以是一个算术量,即为一个数值常数、数 值型变量、数值函数。 例:A+B <= 0. → A+B .LE. 0. A*B \= C/D → A*B .NE. C/D 注意:
例: A*B.GE.C+D (设:A=2.0,B=3.5,C=2.3,D=6.2) 先计算A*B和C+D的值,然后判断7.0.GE.8.5结果不成 立其值为.FALSE.
3.当两个算术关系表达式的数据类型不相同时,求值 过程为: 将两个算术表达式化为同一类型然后比较. 转换规律是将低级类型向高级类型转换。因此, 执行关系表达式的过程为:算出算术表达式的值;将两 个算术表达式值转换成同一类型;将两个表达式的值进 行比较。
> >= < <= == \= (F95)
Greater Than Greater than or Equal to Less Than Less than or Equal to EQual to Not Equal to
> ≥ < ≤ = ≠
(大于) (大于或等于) (小于) (小于或等于) (等于) (不等于)
如: 将A定义为逻辑型变量,用赋值语句对其赋值:
LOGICAL A A=.TRUE.
逻辑赋值语句的一般形式为:
逻辑变量=逻辑表达式。
b) 逻辑运算符 Fortran 有 5 个逻辑运算符,每个操作符两边都有一点, 不可省略:
逻辑运算 符 含义 逻辑运算 例 例子含义
.AND. .OR. .NOT. .EQV. .NEQV.
13.1 FALSE FALSE FALSE FALSE TRUE FALSE
FALSE
4.4 逻辑IF语句
一般形式为:IF(逻辑表达式) 执行语句
IF语句不是一种选择结构,只是一条语句,它在算法较 简单的场合下,可以灵活地完成二分叉选择算法。
执行过程:
如果条件成立(即逻辑表达式值是‘真’),则执 行其后紧跟的执行语句,而后执行下一条语句;
1)关系表达式中关系操作符只准出现一次。
2)数学中不等式写法与FORTRAN中关系表达式的写法有同有 异,不可随意使用数学中的习惯用法, 例如语句写法 3<X<7 就是不正确的关系表达式
关系运算的特点:
1.关系表达式的值是一个逻辑常数. 即.TRUE.或.FALSE. 2.关系表达式求值的过程是:先分别计算两个表达 式的值,然后将他们进行比较.
②7.2 ③F ③F
①2.4 ②4.8 ④F
②3.0 ③T
⑤F ⑥F
⑤F
例2: 已知 A=.FALSE. , B=.FALSE. , X=11.5, Y=1.6 , Z=41.5
11.5 1.6 41.5 F
C=.FALSE. ,
F
F
X.LT.Y.OR.X+Y.GT.Z.AND..NOT.(A.EQV.B.OR.C)
x 0 , i f x 0 ; 1 , o t h e r w i s e )可写成:
Y=0
IF(X>1) Y=1
注意本例中不可写成: IF(X<=0) Y=0 Y=1
例:IF(X>0..AND.K\=N) Y=K+X
例:打印学生考试成绩,大于等于80分的为“A”,大于等 于60分而小于80分的为“B”,小于60分的为“C”:
注: a.关系符只能用于两个数值量的大小比较, 不能 .TRUE..EQ.Y b.不能将逻辑运算符和关系符连用。 即用A.NOT..EQ.B 表示A≠B. C.在关系表达式中一个算术表达式只能与一个关系符
相邻,不能在两侧都出现关系符.
例: 0<X<5
0.0.GT.X.LT.5.0或0.0.LT.X.LT.5.0
Y
7
3
-1.5 X 2
注意:
(1)一个块IF是一个完整的选择结构. 在IF块或ELSE块 中可以用转移语句将流程转到块IF之外,而不允许由IF块 外或ELSE块外转到IF块内或ELSE块内.
如下面的例子是错误的: IF (I.NE.J) THEN I=J 100 WRITE(*,*)I ENDIF GOTO 100
和.NE.因为实型数在计算机中不能保证完全精确. 例 X,Y的实型值为5.0,在计算机中可能为 5.000001或4.999999 对数学式X=Y的关系运算可用:ABS(X-Y).LT.1.E-30; 对X≠Y可用:ABS(X-Y).GT.1.E-30。 5.除了算术量可进行比较外,字符关系表达式可对两个 字符量进行比较。
(2)可以在同一IF块或ELSE块内用转移语句从一点转移到 另一点. (3)块IF语句、ELSE语句和ENDIF语句必须联合而不能单独 使用。一个块IF语句必须对应一个ENDIF语句(或一个 ELSE语句和ENDIF语句。
块IF语句嵌套 对于稍微复杂的问题,往往在某种条件判定后,仍需进 一步判定,然后决定接下去该做什么,这种多层判定称为 嵌套的判定语句.简单嵌套结构如下: IF (e1) THEN IF (e2) THEN 外 内 : ENDIF : ENDIF 在嵌套程序中找出对应的块IF,ELSE,ENDIF语句的方法: 1. 从最内层的块IF语句开始,找离它最近的ENDIF语 句,将其用线括起来,在两语句之间的ELSE语句必属 于这一层的块IF. 2. 由内向外重复上述过程直到遇到最外层的块IF语句
相关文档
最新文档