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