FORTRAN语言第3章(共8章)_第1页
FORTRAN语言第3章(共8章)_第2页
FORTRAN语言第3章(共8章)_第3页
FORTRAN语言第3章(共8章)_第4页
FORTRAN语言第3章(共8章)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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语句还可能使用一些ELSEIF语句、ELSE语句,这就可能构成一个复杂的IF-ELSEIF-THEN-ELSE结构。当嵌套层次过多时,往往一时难以找到同一层的块IF中的各语句,一般可按以下方法确定:(1)从最内层的块IF语句开始,向下找到离它最近的ENDIF语句,将它们用线括起来,这就是同一层次的块IF。(2)由内向外重复这一个过程,直到遇见最外层块IF语句和ENDIF语句为止。(3)在书写嵌套分支结构时采取缩进方式进行程序书写,程序的嵌套层次就容易确定。例、给定一个年份,判断是否为闰年。分析:闰年的判断条件是能被4整除,但不能被100整除或能被100整除且能被400整除。Y不能被4整除TF打印Y不是闰年Y不能被100整除T打印Y是闰年FY能被400整除打印Y是闰年TF打印Y不是闰年例、给定一个年份,判断是否为闰年。分析:闰年的判断条件是能被4整除,但不能被100整除或能被100整除且能被400整除。If(MOD(y,4)==0)Then

If(MOD(y,100)==0)Then

If(MOD(y,400)==0)Thena=“TRUE”!既能被100又能被400整除的数

Elsea=“FALSE“!能被100整除但不能被400整除的数EndIf

Elsea=“TRUE“!能被4整除但不能被100整除的数EndIfElsea=“FALSE“!不能被4,100和400整除的数EndIf使用块IF嵌套应注意以下几点:

1、不允许从块IF语句外控制转移到块IF语句的语句体内的任意位置。

2、允许通过控制转移语句(如GOTO语句)从块IF语句内控制转移到块IF语句外。

3、在嵌套的块IF语句中,内层的块IF不能和外层的块IF相互交叉。

第二节块IF选择结构IF结构除了可以实现二义判断之外,还可以实现多重判断。此时,IF结构中需参加新的元素----ELSEIF语句。方法1:转化为单分支,逻辑IF语句并列方法2:逐次二分,转化为块IF结构嵌套例:将百分制转换成等级制,根据成绩x输出A:x>=90B:80=<x<90C:70=<x<80D:60=<x<70E:x<60第二节块IF选择结构方法1:WRITE(*,*)"请输入成绩:“READ(*,*)XIf(X>=90)WRITE(*,*)

"优秀!"If(X>=80.AND.X<90)WRITE(*,*)

"良好!"If(X

>=70

.AND.X<80)WRITE(*,*)

"中等!"If(X>=60

.AND.X<70)WRITE(*,*)"及格!"If(X<60)WRITE(*,*)“不及格!"上述代码段中有5个IF语句。一个学生的得分只能是上述5种情况当中的一种,但程序仍然要做5次判断,所以算法效率较低。下面用ELSEIF块重写上述代码段。第二节块IF选择结构方法2:

执行左侧代码段时,一旦发现某个逻辑条件为“真”,就不会再去判断其他的逻辑条件。最不利情况下(如50分),系统才要判断4次。此算法效率明显高于前一种。WRITE(*,*)"请输入成绩:“READ(*,*)aIf(a>=90)Then

WRITE(*,*)

"优秀!"ElseIf(a>=80)Then

WRITE(*,*)

"良好!"ElseIf(a>=70)Then

WRITE(*,*)

"中等!"ElseIf(a>=60)Then

WRITE(*,*)"及格!"Else

WRITE(*,*)“不及格!"EndIfEndIfEndIfEndIfWRITE(*,*)"请输入成绩:“READ(*,*)XIf(X>=90)Then

WRITE(*,*)

"优秀!"ElseIf(X>=80)Then

WRITE(*,*)

"良好!"ElseIf(X>=70)Then

WRITE(*,*)

"中等!"ElseIf(X>=60)Then

WRITE(*,*)"及格!"Else

WRITE(*,*)“不及格!"EndIf下面给出ELSEIF块更一般的构造形式:三、ELSEIF的语句有了ELSEIF语句后,IF结构中可以同时存在多个判断条件和多个执行模块,但是只有其中一个条件能够成立,并且只有一个执行模块能够执行。使用IF语句和ELSEIF语句来实现多重判断的根本形式如下:IF〔e1〕THENblock1ELSEIF〔e2〕thenblock2ELSEIF〔e3〕thenblock3--------ELSEblockENDIFe1e1e1block1block1block1TTTFFF第二节块IF选择结构多分支块IF结构的执行过程为:首先判断条件1是否成立,假设条件成立(为“真”),那么执行块1,再执行ENDIF后面的语句;假设条件1不成立(为“假”),那么判断条件2是否成立,假设条件2成立(为“真”),那么执行块2,再执行ENDIF后面的语句……如果所有的条件都不成立,那么执行ELSE块(ELSE语句和块n+1是可选项),再执行ENDIF后面的语句。

第二节块IF选择结构多重判断的IF结构中,判断条件的成立具有唯一性。即一旦有判断条件成立,就去执行相应的模块,如果其后仍有判断条件是成立的,也不会再去执行。这一点同后面的SELECTCASE完全不同。也就是说IF结构中的选择条件是允许重叠的,但SELECTCASE语句不允许选择条件有重叠。第二节块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.ELSEIF是在“条件为假”的分支中再继续进行分支处理的。故在处理多分支的选择时,要把出现几率高的条件写在前面,以提高效率。第二节块IF选择结构WRITE(*,*)"请输入成绩:“READ(*,*)aIf(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(*,*)"重修!"EndIfEndIfEndIfEndIfEndIf例输入成绩,显示等级。WRITE(*,*)"请输入成绩:“READ(*,*)aIf(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(*,*)"重修!"EndIf

值得一提,ELSEIF结构要求合理排列逻辑条件,使得一次只能有一个逻辑条件为“真”。第二节块IF选择结构 read(*,*)x if(x.lt.-10.0)then

y=0.0 elseif(x.lt.0.0)then

y=2.0*x+20.0 elseif(x.lt.20.0)then

y=20.0 elseif(x.lt.40.0)then

y=30.0-0.5*x elseif(x.lt.50.0)then

y=50.0-x else

y=0.0 endif write(*,*)'y=',y end求函数值例:计算y=f(x)+g(x)f(x)=x2-161+ex+1,f(x)<0g(x)=+25,f(x)=00,f(x)>0分析:1.通过表达式计算f 注:f与f(x)的区别2.计算g3.f+g第二节块IF选择结构第三节CASE结构(F90/95新增)SELECTCASE语句是Fortran90/95标准中新增加的语句。该语句用于容纳CASE块,为程序员提供了一种从多个备用可执行分支选项中选取一个来执行的手段。尽管多重判断的IF结构也可以实现这一功能,但是在某些多条件选择的应用场合使用IF结构会使代码显得比较繁琐、层次关系比较复杂。使用CASE结构就可以防止这一问题,编写出来的代码也显得更加直观、简洁。第三节CASE结构(F90/95新增)CASE结构的作用和IF构造非常类似,它也用于编写分叉选择算法,即根据判断条件的成立与否来区分操作不同的可执行模块。不同之处在于:CASE结构只能把某个判断条件的可能结果区分成假设干个孤立的离散值或片断〔这意味着CASE结构中的判断条件不允许出现重叠〕,按不同的值或片断进行不同的操作。如果遇到判断条件比较复杂或者存在多种判断条件互相交叉的情况时,CASE结构在处理这些判断条件时显得不是很方便,在这种情况下只能考虑使用IF结构来进行处理。第三节CASE结构(F90/95新增)使用范围:多分支结构SELECTCASE〔情况表达式〕CASE〔情况选择器1〕block1〔块1〕CASE〔情况选择器2〕block〔块2〕--------CASE〔情况选择器n〕blockn[CASEdefault默认块]ENDSelectNN=1N=2N=3N=4其他语句语句语句语句语句第三节CASE结构Selectcase后括号里的“情况表达式”用来表示待选择的内容,如成绩、工资、年龄等。它一般为变量名,可以是整型变量、逻辑变量、字符型变量或相应的表达式Case后面括号里的“选择表达式列表”提供了选择表达式可能的取值范围:它只能是一个或多个整型、字符型、逻辑型常量,不能为变量,(逗号)分隔符表示分隔单个值的列表。例:case〔3,5,7〕值不能重复:(冒号)分隔符表示值的范围例:case〔5:10〕;case〔‘i’:‘n’〕类型与Setectcase中一致,下界、上界可省略。Casedefault:其后的默认块语句,可有可无。如果参加它,那么代表前面所有选择表达式的值皆非的情况下执行该块。第三节CASE结构情况表达式:整型变量、逻辑变量、字符型变量或相应的表达式选择表达式列表提供了选择表达式可能的取值范围:它只能是一个或多个整型、字符型、逻辑型常量,不能为变量,(逗号)分隔符表示分隔单个值的列表。例:case〔3,5,7〕值不能重复:(冒号)分隔符表示值的范围例:case〔5:10〕;case〔‘i’:‘n’〕类型与Setectcase中一致,下界、上界可省略。Casedefault:只能有一个第三节CASE结构执行过程在case列表中顺序查找与之匹配的值1.计算情况表达式的值2.顺序匹配各情况选择器,执行相应的语句块

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论