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.)表示函数算术表达式关系表达式逻辑运算同一级别的运
2、算,从左至右进行,逻辑运算符优先级别: .NOT.高于.AND.高于.OR.高于.EQV.和 .NEQV.,逻辑表达式的值也是逻辑量:真或假,当逻辑运算符作用于整型量时,执行整数的按位操作,结果是一个整数而不是逻辑型数据。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 等价于 A.AND.NOT.B .OR. .NOT.A.AND.B,关系表达式不可连写:0) PRINT *
3、, 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 if 语句分别标志块IF的开始和结束。每个块IF都有且仅有一条块if语
4、句、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编程例题,例:输入三条边的长度,计算三角形面积。,简要程序Read(*,*) A,B,CIF(A.LE.0
5、.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,简要程序:Read(*,*) XIF(
6、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总是就近配
7、对 。,应该推敲算法,减少块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 *
8、, P点在第四象限 ENDIFELSE IF(Y.GT.0) THEN PRINT *, P点在第二象限 ELSE PRINT *, P点在第三象限 ENDIFENDIFEND,未考虑正好在坐标轴上的情形,例:将学生的成绩分为A(G90),B(80G90),C(70G80),D(60G70),E(G=90)THENPRINT*,AELSE IF(G=80)THENPRINT*,BELSE IF(G=70)THEN,PRINT*,CELSEIF(G=60)THENPRINT*,DELSEPRINT*,EEND IFEND,例:阅读程序,写出程序的运行结果,程序1LOGICAL P,QREAD(*
9、,(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结构一般形式:Select case(
10、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选择器是整数时,可以有多
11、种表示法: 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) Ca
12、se 结构名 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,