《FORTRAN90第二章选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《FORTRAN90第二章选择结构程序设计.ppt(32页珍藏版)》请在三一办公上搜索。
1、2.1 关系表达式与逻辑表达式,2 选择结构程序设计,2.2 块IF结构与IF语句,2.3 CASE结构,2.4 选择结构程序设计举例,2.5 小结,2.1关系表达式与逻辑表达式,算法中经常要根据某种逻辑判断的结果来决定下一个步骤应该做什么。这就是带分支选择的算法。选择结构是结构化算法中一种基本结构。实现选择结构的前提是进行关系运算和逻辑判断。,2.1.1 关系表达式,算术量A与B之间存在六种关系:AB AB AB A=B AB A(.GT.)表示=(.GE.)表示/=(.NE.)表示=(.EQ.)表示=(.LE.)表示(.LT.)表示()中是早期版本的写法,不提倡使用。,格式:E1关系运算符
2、 E2 E1与E2为算术量或字符型的量,关系表达式的值是逻辑量:真或假,算术运算符的优先级别高于关系运算符:3+5.GT.SQRT(49.0)-3=8.GT.4,真,实数的运算与存储都有误差,对实数进行=或/=运算时要特别当心。一般用两者之差的绝对值作为判断的依据。用ABS(A-B)1E-6来代替A/=B对于整型数,可直接用=,/=来判断.,2.1.2 逻辑表达式,逻辑型变量:可以将关系表达式的结果赋值给一个变量,该变量的值只能是真或假,类型是逻辑型 LOGICAL A,B,L1 A=3+5.GT.SQRT(49.0)-3 逻辑赋值语句,FORTRAN用五种逻辑运算符表示布尔运算:.NOT.逻
3、辑非.AND.逻辑与.OR.逻辑或.EQV.逻辑等.NEQV.逻辑不等.NEQV.也可用.XOR.表示。布尔运算按照数学上的规定进行。要在理解的基础上掌握逻辑运算的“真值表”,判断几个条件是否同时满足,数学上可以用布尔运算,FORTRAN用逻辑表达式表示。,逻辑表达式的格式:E1逻辑运算符 E2 E1与E2为逻辑型的量,可以是:逻辑变量、逻辑常量、关系表达式、逻辑表达式、整型量,逻辑表达式运算次序:括号函数算术表达式关系表达式逻辑运算同一级别的运算,从左至右进行,逻辑运算符优先级别:.NOT.高于.AND.高于.OR.高于.EQV.和.NEQV.,逻辑表达式的值也是逻辑量:真或假,当逻辑运算符
4、作用于整型量时,执行整数的按位操作,结果是一个整数而不是逻辑型数据。3.XOR.5=6 3.and.5=5 3.or.5=7,五种逻辑运算符中,逻辑非、逻辑与、逻辑或是基本的。其它两种可以由它们组合得到,例如:.EQV.B 等价于(注意逻辑运算符两边小圆点)A.AND.B.OR.NOT.A.AND.NOT.B.NEQV.B 等价于,关系表达式不可连写:BC 不能写成 A.LT.B.LE.C 须用逻辑表达式,2.2块IF结构与IF语句,FORTRAN 90有三种方法实现选择结构:IF语句、块IF结构和CASE结构。,4.2.1逻辑IF语句,4.2.2 块IF结构,2.2.1 逻辑IF语句,逻辑I
5、F语句也称为行IF语句。格式:IF(E)可执行语句,例:IF(X0)PRINT*,XIF(X0.and.Y0)PRINT*,第一象限,逻辑IF语句本身仅仅是一条语句,当条件为真时,也只执行一条语句,而不可能执行多条语句,与下面要介绍的块IF有明显的区别。,IF(X=0)Y=X+5,也可写为,Y=XIF(X=0)Y=X+5,而IF(X=0)Y=X+5Y=X,是错误的.,2.2.2 块IF,2.2.2 块IF,IF(E)THEN 一条或多条执行语句ELSEIF(E)THEN 一条或多条执行语句ELSEIF(E)THEN 一条或多条执行语句ELSE 一条或多条执行语句 ENDIF,块if语句和end
6、 if 语句分别标志块IF的开始和结束。每个块IF都有且仅有一条块if语句、end if 语句,块IF中每个块都可以省略,表示那种情况下什么也不做。,每个块IF至多有一条ELSE语句和一个ELSE块。没有ELSE块的时候,ELSE语句可有可无。,一个块IF中可以没有也可以有一条或多条Else if语句,省略ELSEIF块时,Else if语句可有可无。,被省略的块也可以理解为空块。,块IF中最多只有一个块被执行,在省略ELSE语句的情况下,有可能什么也不做。,2.2.2.1 块IF的几种形式,因各个块都可省略,块IF常以较简单的形式出现,2.2.2.2 块IF编程例题,例:输入三条边的长度,计
7、算三角形面积。,简要程序Read(*,*)A,B,CIF(A.LE.0.OR.B.LE.0.OR.C.LE.0)THENSTOP 输入数据错误,边长必须为正数ENDIFIF(A+B.LE.C.OR.A+C.LE.B.OR.B+C.LE.A)THEN PRINT*,不能构成三角形!STOP 12345ELSE S=(A+B+C)*0.5 S=SQRT(S*(S-A)*(S-B)*(S-C)PRINT*,三角形边长:,A,B,C,面积:,SENDIFEND,例:计算分段函数的值,0 x-102x+20-10 x 020 0 x 2030-0.5x 20 x 4050-x 40 x 500 x 50
8、,简要程序:Read(*,*)XIF(X.LT.10)THEN Y=0ELSEIF(X.LT.0)THEN Y=X+X+20ELSEIF(X.LT.20)THEN Y=20ELSE IF(X.LT.40)THEN Y=30-0.5*XELSE IF(X.LT.50)THEN Y=50-XELSEY=0End ifEnd,2.2.2.3 块IF的嵌套,块IF中各块里的执行语句都可以出现又一个块IF结构,称为块IF的嵌套。块IF的嵌套理论上可以有无穷层。,块IF结构是由块IF语句和ENDIF语句括起来的一段程序。块IF嵌套中的IF与ENDIF必须成对出现,这是显而易见的。ENDIF 与IF总是就近
9、配对。,应该推敲算法,减少块IF嵌套的层数。因为块IF嵌套太深会导致程序结构复杂,可读性降低。,可选部分如果有,就必须与关键字用空格分开。,为提高块IF嵌套结构的程序可读性,可以给块IF结构取名,其一般用法为:named_if_block:if(e)then statements else named_if_block statements endif named_if_block,例:输入点P(x,y)的坐标,判别P点在第几象限。,简要程序Read(*,*)X,YIF(X.GT.0)THEN IF(Y.GT.0)THEN PRINT*,P点在第一象限 ELSE PRINT*,P点在第四象限
10、ENDIFELSE IF(Y.GT.0)THEN PRINT*,P点在第二象限 ELSE PRINT*,P点在第三象限 ENDIFENDIFEND,未考虑正好在坐标轴上的情形,例:将学生的成绩分为A(G90),B(80G90),C(70G80),D(60G70),E(G60)五等.程序为:,INTEGER GREAD*,GIF(G=90)THENPRINT*,AELSE IF(G=80)THENPRINT*,BELSE IF(G=70)THEN,PRINT*,CELSEIF(G=60)THENPRINT*,DELSEPRINT*,EEND IFEND,例:阅读程序,写出程序的运行结果,程序1L
11、OGICAL P,QREAD(*,(1X,2L4)P,QX=0;Y=0IF(P)X=1.0IF(Q)Y=1.0WRITE(*,*)X,YEND当从键盘输入FFTTFFTTFFTT,则X,Y的值为 _.,程序2READ*,XIF(X0)THENY=0.0ELSE IF(X15)THENY=1.0ELSE IF(X30)THENY=2.0ELSEY=3.0END IFWRITE(*,*)YEND当X=-12,12,22,32时,对应的Y值各为多少。,2.3 CASE结构,对多重分支选择结构,可以用CASE结构描述,比起块IF嵌套结构来,更加直观简洁。,2.3.1 CASE结构的形式,CASE结构一
12、般形式:Select case(case_exp)case(case_selector1)CASE块statements case(case_selector2)CASE块statements.case default DEFAULT块statementsEnd Select,Select case与End Select是CASE结构的入口和出口,必须成对出现CASE表达式case_exp可以是整型、逻辑型与字符型,但不可以用实型或复型表达式CASE选择器必须与CASE表达式类型一致CASE块可多可少,可以省略。CASE DEFAULT语句应不多于一条,并应放在所有CASE语句之后。CASE选
13、择器是整数时,可以有多种表示法:case(1),case(1,3,5),case(1:5,9,6)case(100:200)case(100:)case(:120),2.3.2 CASE结构的执行过程,计算CASE表达式的值依次比较CASE选择器的值与CASE表达式的值,如果找到相等的就执行相应的CASE块,否则就执行DEFAULT块。,2.3.3 CASE结构的命名,CASE结构命名方式与块IF结构相仿:Case 结构名:Select case(case_exp)case(case_selector1)Case 结构名 CASE块statements case(case_selector2)
14、Case 结构名 CASE块statements.case default Case 结构名 DEFAULT块statementsEnd Select Case 结构名,2.4 选择结构程序设计举例,例:输入一个整数,如果能被7整除则输出“YES”,否则输出“NO”。,Logical LInteger kRead*,kL=mod(k,7)=0If(L)then print*,YesElse print*,NOEndifeND,例:打印学生成绩等级IMPLICIT NONEREAL GSELECT CASE(INT(G)CASE(90:100)PRINT*,A CASE(80:89)PRINT*,BCASE(70:79)PRINT*,CCASE(60:69)PRINT*,D,CASE(:59)PRINT*,ECASE DEFAULTPRINT*,输入有错END SELECTEND,