资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
IF结构除了能够单独使用外,结构中的任意一个语句块里都可以再次嵌入另一个结构。 被嵌入的结构可以是另一个IF结构,也可以是另一些形态、功能不同的结构,如CASE结构、DO结构等。前提是必须将整个结构完整地嵌入到IF结构的某一个语句块中,不允许被嵌入结构的一部分在一个语句块中,另一部分在别的语句块或是不在被嵌入的IF结构中,即被嵌入的任何结构不允许跨越两个独立的语句块。,二、块IF的嵌套,第二节 块IF选择结构,IF语句嵌套的形式可以表示如下: 构造名1:IF(逻辑表达式1) THEN 构造名2:IF(逻辑表达式2) THEN 构造名3:IF(逻辑表达式3) THEN ENDIF构造名3 ENDIF构造名2 ELSE ENDIF构造名1,第二节 块IF选择结构,一个嵌套分支结构可使用若干个块IF语句,相应就有若干个ENDIF语句,每个块IF语句还可能使用一些ELSE IF语句、ELSE语句,这就可能构成一个复杂的IF-ELSEIF-THEN-ELSE结构。当嵌套层次过多时,往往一时难以找到同一层的块IF中的各语句,一般可按以下方法确定:,(1)从最内层的块IF语句开始,向下找到离它最近的ENDIF语句,将它们用线括起来,这就是同一层次的块IF。 (2)由内向外重复这一个过程,直到遇见最外层块IF语句和ENDIF语句为止。 (3)在书写嵌套分支结构时采取缩进方式进行程序书写,程序的嵌套层次就容易确定。,例、 给定一个年份,判断是否为闰年。,分析:闰年的判断条件是能被4整除,但不能被100整除或能被100整除且能被400整除。,T,F,T,打印Y 是闰年,F,打印Y 是闰年,T,F,打印Y不是闰年,例、 给定一个年份,判断是否为闰年。,分析:闰年的判断条件是能被4整除,但不能被100整除或能被100整除且能被400整除。,If ( MOD(y, 4) = 0) Then If ( MOD(y ,100) = 0) Then If( MOD(y,400) = 0) Then a = “TRUE ” !既能被100又能被400整除的数 Else a = “FALSE “ !能被100整除但不能被400整除的数 End If Else a = “TRUE“ !能被4整除但不能被100整除的数 End If Else a = “FALSE“ !不能被4,100和400整除的数 End If,使用块IF嵌套应注意以下几点: 1、不允许从块IF语句外控制转移到块IF语句的语句体内的任意位置。 2、允许通过控制转移语句(如GOTO语句)从块IF语句内控制转移到块IF语句外。 3、在嵌套的块IF语句中,内层的块IF不能和外层的块IF相互交叉。,第二节 块IF选择结构,IF结构除了可以实现二义判断之外,还可以实现多重判断。此时,IF结构中需加入新的元素-ELSEIF语句。 方法1:转化为单分支,逻辑IF语句并列 方法2:逐次二分,转化为块IF结构嵌套 例:将百分制转换成等级制,根据成绩x输出 A: x=90 B: 80=x90 C: 70=x80 D: 60=x70 E: x60,第二节 块IF选择结构,方法1:,WRITE(*,*)“请输入成绩:“ READ(*,*) X If (X = 90) WRITE(*,*) “优秀!“ If (X = 80 . AND. X= 70 .AND. X= 60 .AND. X70) WRITE(*,*) “及格!“ If (X 60) WRITE(*,*) “不及格!“,上述代码段中有5个IF语句。一个学生的得分只能是上述5种情况当中的一种,但程序仍然要做5次判断,所以算法效率较低。下面用ELSEIF块重写上述代码段。,第二节 块IF选择结构,方法2:,执行左侧代码段时,一旦发现某个逻辑条件为“真”,就不会再去判断其他的逻辑条件。最不利情况下(如50分),系统才要判断4次。此算法效率明显高于前一种。,WRITE(*,*)“请输入成绩:“ READ(*,*) a If (a = 90) Then WRITE(*,*) “优秀!“ Else If (a = 80 )Then WRITE(*,*) “良好!“ Else If( a = 70) Then WRITE(*,*) “中等!“ Else If (a = 60) Then WRITE(*,*) “及格!“ Else WRITE(*,*) “不及格!“ End If End If End If End If,WRITE(*,*)“请输入成绩:“ READ(*,*) X If (X = 90) Then WRITE(*,*) “优秀!“ ElseIf (X = 80 )Then WRITE(*,*) “良好!“ ElseIf( X= 70) Then WRITE(*,*) “中等!“ ElseIf (X = 60) Then WRITE(*,*) “及格!“ Else WRITE(*,*) “不及格!“ End If,下面给出ELSEIF块更一般的构造形式:,三、ELSEIF的语句,有了ELSE IF语句后,IF结构中可以同时存在多个判断条件和多个执行模块,但是只有其中一个条件能够成立,并且只有一个执行模块能够执行。使用IF语句和ELSE IF语句来实现多重判断的基本形式如下: IF(e1)THEN block1 ELSEIF(e2)then block2 ELSEIF(e3)then block3 - ELSE block ENDIF,第二节 块IF选择结构,多分支块IF结构的执行过程为: 首先判断条件1是否成立,若条件成立(为“真”),则执行块1,再执行ENDIF后面的语句;若条件1不成立(为“假”),则判断条件2是否成立,若条件2成立(为“真”),则执行块2,再执行END IF后面的语句如果所有的条件都不成立,则执行ELSE块(ELSE语句和块n+1是可选项),再执行END IF后面的语句。,第二节 块IF选择结构,多重判断的IF结构中,判断条件的成立具有唯一性。即一旦有判断条件成立,就去执行相应的模块,如果其后仍有判断条件是成立的,也不会再去执行。这一点同后面的SELECT CASE完全不同。也就是说IF结构中的选择条件是允许重叠的,但SELECT CASE语句不允许选择条件有重叠。,第二节 块IF选择结构,1.ELSEIF语句其作用相当于将ELSE语句与其后的ELSE块中的块IF语句连接在一起。 2.同块IF语句不同, ELSEIF语句与ENDIF语句间不存在一一对应关系。 3.在这种IF结构中,允许使用多个ELSEIF语句。在最后一个ELSEIF语句之后,可以有与之对应的ELSE语句,也可以没有。当有ELSE语句在最后时,表示如果前面所有的条件都不成立,执行其后的ELSE块;如果没有ELSE块,则表示如果前面所有的条件都不成立时,流程转到ENDIF语句。,第二节 块IF选择结构,4.在同一个块IF结构中,只允许有一个ELSE语句和ELSE块。 5. ELSE IF是在“条件为假”的分支中再继续进行分支处理的。故在处理多分支的选择时,要把出现几率高的条件写在前面,以提高效率。,第二节 块IF选择结构,WRITE(*,*)“请输入成绩:“ READ(*,*) a If (a = 90) Then WRITE(*,*) “优秀!“ Else If (a = 80 )Then WRITE(*,*) “良好!“ Else If( a = 70) Then WRITE(*,*) “中等!“ Else If (a = 60) Then WRITE(*,*) “及格!“ Else If (a = 40) Then WRITE(*,*) “补考!“ Else WRITE(*,*) “重修!“ End If End If End If End If End If,例 输入成绩,显示等级。,WRITE(*,*)“请输入成绩:“ READ(*,*) a If (a = 90) Then WRITE(*,*) “优秀!“ ElseIf (a = 80 )Then WRITE(*,*) “良好!“ ElseIf( a = 70) Then WRITE(*,*) “中等!“ ElseIf (a = 60) Then WRITE(*,*) “及格!“ ElseIf (a = 40) Then WRITE(*,*) “补考!“ Else WRITE(*,*) “重修!“ End If,值得一提,ELSEIF结构要求合理排列逻辑条件,使得一次只能有一个逻辑条件为“真”。,第二节 块IF选择结构,read(*,*) x if(x.lt.-10.0) then y=0.0 else if(x.lt.0.0) then y=2.0*x+20.0 else if(x.lt.20.0) then y=20.0 else if(x.lt.40.0) then y=30.0-0.5*x else if(x.lt.50.0) then y=50.0-x else y=0.0 end if write(*,*) y=,y end,求函数值,例:计算y=f(x)+g(x) f(x)=x2-16 1+ ex+1, f(x)0 分析:1.通过表达式计算f 注:f 与f(x)的区别 2.计算g 3.f +g,第二节 块IF选择结构,第三节 CASE结构(F90/95新增),SELECT CASE语句是Fortran 90/95标准中新增加的语句。该语句用于容纳CASE块,为程序员提供了一种从多个备用可执行分支选项中选取一个来执行的手段。尽管多重判断的IF结构也可以实现这一功能,但是在某些多条件选择的应用场合使用IF结构会使代码显得比较繁琐、层次关系比较复杂。使用CASE结构就可以避免这一问题,编写出来的代码也显得更加直观、简洁。,第三节 CASE结构(F90/95新增),CASE结构的作用和IF构造非常类似,它也用于编写分叉选择算法,即根据判断条件的成立与否来区分操作不同的可执行模块。不同之处在于:CASE结构只能把某个判断条件的可能结果区分成若干个孤立的离散值或片断(这意味着CASE结构中的判断条件不允许出现重叠),按不同的值或片断进行不同的操作。如果遇到判断条件比较复杂或者存在多种判断条件互相交叉的情况时,CASE结构在处理这些判断条件时显得不是很方便,在这种情况下只能考虑使用IF结构来进行处理。,第三节 CASE结构(F90/95新增),使用范围:多分支结构 SELECT CASE(情况表达式) CASE(情况选择器1) block1(块1) CASE(情况选择器2) block(块2) - CASE(情况选择器n) block n CASE default 默认块 END Select,第三节 CASE结构,Select case后括号里的“情况表达式”用来表示待选择的内容,如成绩、工资、年龄等。它一般为变量名,可以是整型变量、逻辑变量、字符型变量或相应的表达式 Case后面括号里的“选择表达式列表”提供了选择表达式可能的取值范围:它只能是一个或多个整型、字符型、逻辑型常量,不能为变量 ,(逗号)分隔符表示分隔单个值的列表。 例: case(3,5,7)值不能重复 :(冒号)分隔符表示值的范围 例: case(5:10); case(i:n) 类型与Setect case中一致,下界、上界可省略。 Case default:其后的默认块语句,可有可无。如果加入它,则代表前面所有选择表达式的值皆非的情况下执行该块。,第三节 CASE结构,情况表达式: 整型变量、逻辑变量、字符型变量或相应的表达式 选择表达式列表提供了选择表达式可能的取值范围:它只能是一个或多个整型、字符型、逻辑型常量,不能为变量
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号