第三章--流程控制与逻辑运算_第1页
第三章--流程控制与逻辑运算_第2页
第三章--流程控制与逻辑运算_第3页
第三章--流程控制与逻辑运算_第4页
第三章--流程控制与逻辑运算_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

第三章 流程控制与逻辑运算3.1 if语句前面所介绍的程序,它们的执行流程,都是经过直线,一行接着一行来执行,这样的东西是很难做出一个具备复杂功能的程序。功能较强的程序,都免不了会出现一些“流程判断”的命令。也就是能够在程序执行当中自动选择转向、跳过某些程序块来执行程序代码,这也正是if这个关键字的功能。3.1.1 if的基本用法If的使用方法很直观,最基本的使用方法是由一个程序模块所构成。当if中所赋值的逻辑判断式成立时,这个程序模块中的程序代码才会执行。 if(逻辑判断式)then 逻辑成立时,才会执行这里的程序代码 end if下面用if来写一个警告车速过快的程序。假设现在正在高速公路上,如果车速超过100公里,就输出警告标志。1. program ex03012. implicit none3. real:speed4. write(*,*)speed: ! 信息提示5. read(*,*) speed !读入车速6. if (speed100.0) then7. ! speed100 时才会执行下面这一行程序8. write(*,*)Slow down.9. end if10. stop11. end 程序执行后会要求输入现在车速,如果车速太快会输出“Slow down.”,没有超速的话就不会出现任何警告。If命令还可以搭配上else,用来赋值当判断不成立时,会去执行某一段程序代码。 if(逻辑判断式)then 逻辑成立时,执行这一段代码 else 逻辑不成立时,则执行这一段代码 end if看下面例子: 计算并输出下列分段函数值,其中从键盘输入。PROGRAM EX0302IMPLICIT NONEREAL:X,YREAD(*,*) X IF (X=50.0) THEN Y=0.0ELSE IF (X=40.0) THEN Y=50-XELSE IF (X=20.0) THEN Y=30.0-0.5*XELSE IF (X=0.0) THEN Y=20ELSE IF (X=-10.0) THEN Y=2.0*X+20ELSE Y=0.0END IFWRITE (*,*) Y=,YEND在上述程序中,由于第一个ELSE IF语句中的条件“X=40.0”是在块IF语句中的“X=50.0”为假的前提下进行处理的,因此,实际上意味着条件为“X=40.0.AND.X=20.0”,实际上意味着条件为“X=20.0.AND.X=85.0) THEN WRITE(*,*) Very good!ELSEIF (GRADE=70.0) THENWRITE(*,*) Good!ELSEIF (GRADE=60.0) THENWRITE(*,*) Pass!ELSEWRITE(*,*) No pass!END IFEND IFEND IFEND3.1.4 逻辑运算if命令需要搭配逻辑表达式才能使用。一个逻辑表达式,可以不只是单纯的两个数字之间互相比较大小,它还可以是由两个,甚至多个小逻辑表达式组合成的。Fortran90的逻辑运算符号共有以下几种:=判断是否“相等”/=判断是否“不相等”判断是否“大于”=判断是否“大于或等于”判断是否“小于”=80.AND.A=80并且A90的话,就”。下面就是所有使用在相互关系之间的集合运算符号:.AND.交集,如果两边的表达式都成立,整个表达式就成立.OR.并集,两边的表达式只要有一个成立,整个表达式就成立.NOT.逻辑反向,如果后面的表达式不成立,整个表达式就成立.EQV.两边表达式的逻辑运算结果相同时,整个表达式就成立.NEQV.两边表达式的逻辑运算结果不同时,整个表达式就成立3.2 循环语句循环可以用来自动重复执行某一段程序代码,善用循环可以让让程序代码变得很精简。循环有两种执行格式,第一种格式会固定重复程序代码n次。另一种格式则是不固定重复几次,一直执行到出现跳出循环的命令为止。3.2.1 DO循环语句先来看一段实例程序,例如:我们想对一个好朋友连说10次happy birthday,用前面学过的方法要连续用10个write命令来显示10行happy birthday。使用循环语句就不用这么麻烦。Program ex0305implicit noneinteger:counterinteger,parameter:lines=10!counter0循环体语句V=V+e3CONT=CONT+1由上图中可以看出,DO循环的执行过程如下:首先分别计算表达式e1,e2,e3的值,并将它们转换成与循环控制变量V的类型一致;然后将初值e1赋给循环控制变量V,并计算需要循环的次数CONT=INT(e2-e1+ e3)/ e3);最后根据循环次数执行循环体中的各语句,并且每执行完一次循环体,就将循环控制变量V增值一次,循环次数减少一次。下面再举一个例子来说明DO循环结构。例如:用DO循环语句的功能是计算并输出(阶乘)值,其中从键盘输入。 PROGRAM EX0306 IMPLICIT NONE INTEGER:N,K REAL:SREAD(*,*)N S=1.0 DO K=1,N S=S*K END DO WRITE(*,*)N,!=,SEND在DO语句中,由于步长为1,因此其步长就省略了。3.2.2 DO WHILE循环循环并不一定要由循环控制变量的增、减来决定是否该结束循环,它可改由一个逻辑运算来决定,这就是do while的功能。的do while语句的详细语法为:do while(逻辑运算)-逻辑运算成立时,会一直重复执行循环end do例如:用do while 语句计算2+4+6+8+10Program ex0307 implicit none integer,parameter:limit=10 !循环控制变量的上限 integer:counter ! 循环控制变量 integer:ans=0 !拿来累加使用 counter=2 !设置循环控制变量的初值 do while(counter=limit) ans=ans+counter counter=counter+2 !循环控制变量累加 end dowrite (*,*)ansstopend执行后结果会显示303.2.3 循环的流程控制(1)cycle命令 Cycle命令可以略过循环程序模块中,在cycle命令后面的所有程序代码,直接跳回循环的开头来进行下一次循环,来看下面的例子。例如:假设某百货公司共有9层楼,但电梯在4层不停,试写一个程序来仿真百货公司中电梯从一楼爬升到9楼时的等号显示情况。 program ex0308 implicit none integer: dest=9 integer: floor do floor=1,dest if(floor=4) cycle write(*,*) floor end dostop end执行结果如下: 1 2 3 5(没有出现4,直接跳到5) 6 7 8 9在程序中,如果需要略过目前的循环程序模块,直接进行下一个循环时,就可以使用cycle命令。(2)exit命令 Exit的功能是可以直接“跳出”一个正在运行的循环,不论是do循环还是do while循环都可以使用。看下面的例子。例如:某女士把她的体重视为秘密,下面这个程序可以让大家来猜她的体重。 1. program ex0309 2. implicit none 3. real, parameter: weight=45.0 !答案 4. real, parameter: error=0.0001 !误差 5. real: guess !猜测值 6. 7. do while(.true.) 8. write(*,*) weight 9. read(*,*) guess 10. if (abs(guess-weight)error) exit 11. end do 12. 13. write(*,*)You are right! 14. stop 15. end 程序执行后会不断要求用户猜一个数字,一直到猜到答案才会停止。程序中的第7行第一次出现这个用法: 7. do while(.true

温馨提示

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

评论

0/150

提交评论