• / 58
  • 下载费用:16 金币  

fortran第4章条件

关 键 词:
fortran第4章 fortran fortran第四章 fortran 第4章 章FORTRAN fortran第4章节
资源描述:
第四章 逻辑运算和选择结构 4.1 关系表达式 4.2 逻辑表达式 4.3 逻辑IF语句 4.4 分块条件语句 4.5 块IF构造 4.6 多重选择和CASE构造 下一页 上一页 停止放映 a)关系运算符 关系运算符就是关系比较符。Fortran中有六个关系运算 符: 关系运算符英语含义所代表的数学符号 .GT. .GE. .LT. .LE. .EQ. .NE. (F77) = 算术表达式也可以是一个算术量,即为一个数值常数、数 值型变量、数值函数。 例:A+B .AND. = .OR. = .EQV. 、.NEQV. 下一页 上一页 停止放映 逻辑表达式中包含算术运算符、关系运算符和逻 辑运算符,它们的运算优先次序如下表: 逻辑表达式中各运算符的运算顺序 注: a.关系符只能用于两个数值量的大小比较, 不能 .TRUEEQ.Y b.不能将逻辑运算符和关系符连用。 即用A.NOTEQ.B 表示A≠B. C.在关系表达式中一个算术表达式只能与一个关系符 相邻,不能在两侧都出现关系符. 例: 01) Y=1 注意本例中不可写成: IF(X0AND.K\=N) Y=K+X 例:打印学生考试成绩,大于等于80分的为“A”,大于等 于60分而小于80分的为“B”,小于60分的为“C”: 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区别。 下一页 上一页 停止放映 逻辑IF语句也常与GOTO语句合用,但如果过多使用,程序 结构将显得混乱,难于理解。应尽可能采用结构化的程序 设计方法。 ! F90的固定格式 -----统计学生考试合格人数 INTEGER :: n, s, k s = 0; k = 0 1 PRINT*,'键入分数 (负数时退出):' READ*, n; IF(n = 60) k = k + 1 GOTO 1 999 PRINT*, k,' 个学生合格。 总人数=', s END 逻辑IF语句名称,是沿用了Fortrn66的定义,因为在F66中有两 种IF语句:算术IF语句(F90/95中已废除)和逻辑IF语句。 4.5 块IF条件语句 块IF的一般形式可写成: IF(逻辑表达式) THEN← 块IF语句 块1← then块 ELSE 块2← else块 END IF 条件 语句块1语句块2 T F 功能: 当逻辑表达式的值为真时,即条件成立时执行语句 块1,反之执行语句块2. 例: 有一折线其关系为: Y= 2X+3 (X≤2) X+5 (X2) 见图,要求输入一个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 Y 7 3 2 -1.5 X 下一页 上一页 停止放映 注意: (1)一个块IF是一个完整的选择结构. 在IF块或ELSE块 中可以用转移语句将流程转到块IF之外,而不允许由IF块 外或ELSE块外转到IF块内或ELSE块内. 如下面的例子是错误的: IF (I.NE.J) THEN I=J 100 WRITE(*,*)I ENDIF GOTO 100 下一页 上一页 停止放映 (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语句 和ENDIF语句为止. 例:编制二次方程求根的程序. 分析: AX2+BX+C=0 的判别式为: D=B2-4AC A=0,B=0 则 C=0 A=0,B 0 则 X=-C/B A 0,D0 则 有两实根 下一页 上一页 停止放映 例:编制二次方程求根的程序. PROGRAM EQUATE￿￿ READ *,A,B,C￿￿ PRINT *,’COEFFICIENTS ARE’,A,B,C￿￿ IF (A·EQ·0.0) THEN￿￿ IF (B·EQ·0.0) THEN￿￿ PRINT *,’EQUATION HAS THE FORM’,C,’=0.0’￿￿ ELSE￿￿ PRINT *,’NOT QUADRATIC EQUATION ROOT IS’,-C/B￿￿ ENDIF￿￿ ELSE￿￿ PART1=-B/(2.0*A)￿￿ TEMP=B*B-4.0*A*C￿￿ PART2=SQRT(ABS(TEMP))/(2.0*A)￿￿ IF (TEMP·LT·0.0) THEN￿￿ PRINT *,’COMPLEX ROOTS’,PART1,’+I’,PART2,’ ′,PART1,’- I’,PART2￿￿ ELSEIF (TEMP·EQ·0.0) THEN￿￿ PRINT *,’BOTH REAL ROOTS ARE’,PART1￿￿ ELSE￿￿ PRINT *,’REAL ROOTS ARE’,PABT1+PART2,PART1-PART2￿￿ ENDIF￿￿ ENDIF￿￿ END 下一页 上一页 停止放映 当嵌套层次多时,可按以下方法确定每个层块IF: (1)从最内层的块IF语句开始,向下找离它最近的ENDIF语 句, 把它们用线括起来. 在这两个语句之间的全部语句( 包括块IF语句和ENDIF语句)就是同一层的块IF. (2)由内向外重复上述过程,直到遇到最外层的块IF语句 和ENDIF语句为止. ELSE IF语句 在单边或双边选择结构的任意分支中又嵌入另一 单边或双边选择结构,即构成多重选择结构. 格式:IF () THEN (IF块) ELSE IF () THEN (ELSE IF 块) …. ELSE (ELSE块) ENDIF IF ( ) THEN ELSE IF ( ) THEN ELSE ENDIF ENDIF 功能:构成多重选择. 说明: 1.IF…THEN语句必须与ENDIF语句配对, ELSE IF …THEN语句不要求ENDIF与之配对. 2. ELSE IF () THEN 是两条语句 ELSE IF () THEN 是一条语句 例:阶跃函数 1 (当X0) Y Y= 0 (当X=0) 1 X -1 (当X 分块选择结构中的空块 在分块条件语句中,THEN或ELSE后的语句块没有时, 即称之为空块. 例: 若I=1,将其变为2;若为2将其变为1,若为其它则不作 改变,试编程. READ *,I IF (I.EQ.1) THEN I=2 ELSE IF (I.EQ.2) THEN I=1 ELSE ENDIF PRINT *,I END 说明:空块前的ELSE也可省,但保留后更加清楚. 六块IF语句应用注意事项 1. 不允许从IF块、ELSE块外把控制转移到IF块、ELSEIF 块, ELSE块内. 2. ELSE语句、ELSEIF语句不应有语句标号,即使有也不 允许任何语句使用. 例: IF (.) THEN 10 : ELSEIF (.) THEN 20 : ENDIF GOTO 10 GOTO 20 3. 若在IF块、ELSE块ELSE IF块中出现GOTO语句或其它 转移语句,则会改变正常的执行顺序. 例: IF (X.GT.Y) THEN Z=X GOTO 10 Y=X ELSE Z=Y GOTO 10 X=Y ENDIF 10 PRINT *,Z 注: 这种形式不符合结构化的原则,应尽量避免使用. 下一页 上一页 停止放映 块IF构造 F90明确提出了块的概念。块是作为单元看待的一个可执 行构造的序列,它可用于IF构造、CASE构造和DO构造中 ,对这三种构造都可命名(即标签)。 块的规则为: 1)如果一个块中包含一个可执行构造,那么它必须完整 地被包含在该块中。 2)禁止从块的外部转入块的内部,可以在块的内部进行 控制转移,也可以从块内转移到块的外部。 3)块是可以嵌套的。 下一页 上一页 停止放映 IF构造的一般形式为: [构造名:] IF(e1) THEN 块1 [ELSE IF(e2) THEN [构造名] 块2] … [ELSE IF(en) THEN [构造名] 块n] [ELSE [构造名] 块n+1] END IF [构造名] 下一页 上一页 停止放映 多重选择和CASE构造 F90增加了CASE构造,其一般形式为: [构造名:] SELECT CASE(case表达式) CASE(case选择符) [构造名] 块 [CASE DEFAULT [构造名] 块] END SELECT [构造名] 其中: • case表达式是整型、字符型或逻辑型表达式,不能是 实型和复型表达式。 • SELECT CASE是入口语句,END SELECT是出口语句。 下一页 上一页 停止放映 • case选择符是case值范围表,它有以下四种形式: (值表) 表示等于该值,各值之间用逗号分开 (下界:) 表示大于或等于该值 (:上界) 表示小于或等于该值 (下界: 上界) 表示在这两个值之间(包括等于) 上面的四种表示方法可以混用, 如: CASE(2:5,9)等价于CASE(2,3,4,5,9)。 • CASE DEFAULT语句是可选的,当case表达式的值在case值范 围以外时,执行CASE DEFAULT语句后面的块。 下一页 上一页 停止放映 程序执行时,CASE构造的控制机制: (1)控制进入CASE构造后,先计算情况表达式的值; (2)如果第一个CASE语句选择符值与情况表达式值相等则执行语句 块1,转出口; (3)如第一个选择符值不为情况表达式的值,再查下一个CASE语句 的选择符值,满足执行语句块2,转出口,不满足再查下一个CASE 语句的选择符值,直至全部情况选择符值都检查完; (4)如果全部情况选择符值都不符情况表达式的值,且又有CASE DEFAULT语句,则执行该语句后的DEFAULT块,否则直接转出口。 下一页 上一页 停止放映 implicit none integer :: score,n0=0,n1=0,n2=0,n3=0,n4=0 do read *, score if(score100) then print *,'满分=',n0,' 优=',n1,' 良=',n2,' 及格=',n3,' 不及格=',n4 exit 例:统计学生考试成绩:100分为满分,85分以上为优, 70-84为良,60-69为及格,59分以下不及格。 下一页 上一页 停止放映 else select case(score) case(100) print *, '满分'; n0=n0+1 case(85:99) print *, '优 '; n1=n1+1 case(70:84) print *, '良 '; n2=n2+1 case(60:69) print *, '及格'; n3=n3+1 case default print *, '不及格'; n4=n4+1 end select end if end do END 下一页 上一页 停止放映 CASE构造的规则: 1)CASE DEFAULT语句最多只能有一句; 2)case值必须与表达式的类型相同 3)给定CASE构造中的case值范围不能有重叠; 4)CASE块可以是空的,也可以包含其它块,其嵌套形 式与块IF相同。 5)CASE语句是一条单独的语句。 例:错误语句 CASE(0:59) PRINT*,“不及格”(不能写在一行) 正确写法: CASE(0:59);PRINT*,“不及格“ 下一页 上一页 停止放映 例:块IF包含CASE块。 if_construct: if(a.gt.0) then case_construct_b: select case (b) case(:0) …… case(0:) …… end select case_construct_b else case_construct_c: select case (c) case(:0) …… case(0:) …… end select case_construct_c end if if_construct (有无错?) 下一页 上一页 停止放映 case表达式为字符型 例:设要编一程序,把学生按专业划分以便检索,专业分为天体物 理、应用物理、理论物理三种,把每个专业应修的课程依次编成语 句块1、块2、块3,构造名为DEPARTMENT_22_MAJOR,专业变量名为 MAJOR,则CASE构造为: DEPARTMENT_22_MAJOR: SELECT CASE(MAJOR) CASE(‘Astronomical Physics’) 语句块1 CASE(‘Applied Physics’) 语句块2 CASE(‘Theoretical Physics’) 语句块3 END SELECT DEPARTMENT_22_MAJOR 则当变量MAJOR取值为‘Applied Physics’时,执行语句块2(例 如它的功能是打印出学生专业课程成绩),如此等等。 下一页 上一页 停止放映 例:字符型选择。 character*1 cmdchar key_input: select case(cmdchar) case('0') print *, '文件数限于1-9' case('1':'9') call RetrieveNumFiles(cmdchar) case('A','a') call AddEntry case('D','d') call DeletEntry case('H','h') call Help case default print *, '键入错误,请键入H查看帮助' end select key_input END 下一页 上一页 停止放映 case表达式为逻辑型 当case表达式为逻辑表达式时,CASE语句中的情况选择符也要 取逻辑值:真或假。由于它不可能取多于两个的值,因此在逻辑型 的情况选择符内不允许写成一个值域范围(即始值:终值 形式)。 例:设有一个关系表达式X=3,当成立时打印‘YES’,否则打印 ‘NO’。CASE构造为: SELECT CASE(X=3) CASE(.TRUE.) PRINT *,‘YES’ CASE(.FALSE.) PRINT *,‘NO’ END SELECT 下一页 上一页 停止放映 作业: 1. P96 二、三、九、十 2.读入一个整型变量N的值,用CASE构造编程,若N=1、2 、3、5,则Y=X;N=4、8,则Y=X2;N=6、7,则Y= X3,其它情况则Y=0,打印Y值。 3.设变量color_light是字符型变量,表示灯光色彩,编一 CASE构造,当该变量值是红色(RED)则打印STOP字样。当 变量值是黄色(YELLOW),打印WAIT字样,当值是绿色 (GREEN)打印CROSS字样。
展开阅读全文
  麦档网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:fortran第4章条件
链接地址:https://www.maidoc.com/p-15676550.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2018-2020 maidoc.com版权所有  文库上传用户QQ群:3303921 

麦档网为“文档C2C模式”,即用户上传的文档所得金币直接给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的金币归上传人(含作者)所有。
备案号:蜀ICP备17040478号-3  
川公网安备:51019002001290号 


收起
展开