您好,欢迎访问三七文档
Fortran95程序设计彭国伦编著第5章流程控制与逻辑运算Fortran95程序设计第5章流程控制与逻辑运算5-0-1自顶向下设计当给定一个新问题,如上一章的作业,一个很自然的倾向就是坐在电脑前面开始编程,而不是“浪费”时间进行思考。对于很小的问题,这种飞跃式的编程方法通常都是可行的。现实世界中,问题一般都是大型的,如果尝试采用这种方法,程序员将陷入绝望的困境。在编写程序解决大型问题之前,彻底考虑一下问题以及将要采取的方法是非常值得的。221:51:42Fortran95程序设计第5章流程控制与逻辑运算5-0-1自顶向下设计自顶向下设计就是一个过程:从大型任务开始,将其分解为更小的、更容易理解的块(子任务),执行所需任务的一部分。如果需要,每个子任务还可以依次再细分为更小的子任务。对每一个块单独编码和测试,直到每一个子任务都能够独立的正确工作。将子任务集成为一个完整的任务。321:51:42Fortran95程序设计第5章流程控制与逻辑运算5-0-1自顶向下设计1.清楚的陈述要解决的问题2.定义程序所需的输入和程序产生的输出。3.设计要在程序中实现的算法。4.将算法转换为Fortran语句。5.测设完成的Fortran程序。421:51:42Fortran95程序设计第5章流程控制与逻辑运算5-0-1自顶向下设计开始表明问题定义所需的输入输出量设计算法将算法转换为Fortran语句测试完成的Fortran程序结束子任务单元测试连续构建子任务子任务加入主程序Alpha版本Beta版本正式版本521:51:42Fortran95程序设计第5章流程控制与逻辑运算5-0-2伪代码与流程图作为设计过程的一部分,有必要对欲实现的算法进行描述。为便于你和他人理解,应该以一种标准的形式对算法进行描述,并且这个描述还应该便于设计思路转换为Fortran代码。描述算法的形式称为结构(construction),利用这些结构描述的算法称为结构化算法(constructedalgorithm)。当算法在Fortran程序中实现时,结果程序称为结构化程序(structuredprogram)。621:51:42Fortran95程序设计第5章流程控制与逻辑运算5-0-2伪代码与流程图用来建立算法的结构可以用两种不同的方法描述:伪代码和流程图。伪代码是Fortran语句和自然语言掺杂在一起的混合体,构成类Fortran程序,对每个不同的想法或代码段都有单独的一行来表示。伪代码具有灵活性和易修改的特点。伪代码中经常使用代替=号,表示一个值存在于一个变量中,或者叫赋值。流程图是描述算法的图形化方法,修改比较麻烦。721:51:42Fortran95程序设计第5章流程控制与逻辑运算5-0-2伪代码与流程图8椭圆框表示算法的开始和结束矩形框表示计算,并将计算结果赋给一个变量表示输入或输出操作两种选择中的选择指向子程序的引用反复的或计数的循环回路21:51:42Fortran95程序设计第5章流程控制与逻辑运算5-1IF语句5-1-1IF基本用法最基本的使用方法是由一个程序模块所构成,当IF所赋值的逻辑判断式成立时,这模块中的程序代码才会执行。IF(逻辑判断式)THEN…….…….…….EndIF逻辑成立时才会执行这里面的程序代码21:51:42能够在程序执行当中自动选择转向、跳过某些程序模块来执行程序代码,这是IF关键字的功能。Fortran95程序设计第5章流程控制与逻辑运算[ex0501.f90]programex0501implicitnonereal(kind=4)::speedwrite(*,*)“speed:“!信息提示read(*,*)speed!读入车速if(speed100.0)then!speed100时才会执行下面这一行程序write(*,*)Slowdown.endifstopend21:51:42Fortran95程序设计第5章流程控制与逻辑运算程序的核心部分:if(speed100.0)then!speed100时才会执行下面这一行程序write(*,*)Slowdown.endifstop从IF到ENDIF之间的程序算是一个区块,IF中判断式成立时会执行这个区块中的程序IF中判断式不成立时,会跳跃到ENDIF后的地方继续执行IF括号中的判断式成立时,如果所需要执行的程序模块只有一行程序代码,可以把IF跟这行程序代码写在同一行。上面程序中if到endif之间的内容可以改写成下面这一行程序代码:If(speed100.0)write(*,*)“Slowdown”21:51:42Fortran95程序设计第5章流程控制与逻辑运算125-1IF语句IF命令还可以搭配ELSE,用来赋值当判断式不成立时,会去执行某一段程序代码。IF(逻辑判断式)THEN…….…….ELSE…….…….ENDIF逻辑成立时,执行这一段的程序代码逻辑不成立时则执行这一段的程序代码如果….那么就….,否则就…..。21:51:42Fortran95程序设计第5章流程控制与逻辑运算ex0502programex0502implicitnonereal(kind=4)::height!记录身高real(kind=4)::weight!记录体重write(*,*)height:read(*,*)height!读入身高write(*,*)weight:read(*,*)weight!读入体重if(weightheight-100)then!如果体重大于身高减去100,会执行下面的程序write(*,*)Toofat!else!如果体重不大于身高减去100,会执行下面的程序write(*,*)Undercontrol.endifstopendFortran95程序设计第5章流程控制与逻辑运算145-1-2逻辑运算IF命令需搭配逻辑表达式才能使用。逻辑运算符号:F90以上F77说明==.EQ.判断是否“相等”/=.NE.判断是否“不相等”.GT.判断是否“大于”=.GE.判断是否“大于或等于”.LT.判断是否“小于”=.LE.判断是否“小于或等于”21:51:42Fortran95程序设计第5章流程控制与逻辑运算21:51:42PROGRAMex0501IMPLICITNONEREALspeedWRITE(*,*)speed:READ(*,*)speedIF(speed.GT.100)then!FORTRAN77要用缩写.GT.代表大于write(*,*)Slowdown.ENDIFSTOPEND[ex0501.for][ex0501.f90]Fortran95程序设计第5章流程控制与逻辑运算165-1-2逻辑运算逻辑表达式除了可以单纯对两个数字比较大小之外,还可以对两个逻辑表达式间的关系来运算。如:If(a=80.and.A90)then“.and.”是并且的意思。表示相互关系的集合运算符:.AND.交集,如两边表达式都成立,整个表达式就成立。.OR.并集,两边表达式只要有一个成立,整个表达式就成立。.NOT.逻辑反向,如后面的表达式不成立,整个表达式就成立。.EQV.两边表达式的逻辑运算结果相同时,整个表达式就成立。.NEQV.两边表达式的逻辑运算结果不同时,整个表达式就成立。大于小于等式的运算符号优先级高于集合运算符号21:51:42Fortran95程序设计第5章流程控制与逻辑运算21:51:42programex0503implicitnoneintegerrain,windspeedwrite(*,*)Rain:read(*,*)rainwrite(*,*)Wind:read(*,*)windspeedif(rain=500.or.windspeed=10)thenwrite(*,*)停止上班上课elsewrite(*,*)照常上班上课endifstopend[ex0503.f90]Fortran95程序设计第5章流程控制与逻辑运算AB.NOT.AA.AND.BA.OR.B.T..T..F..T..T..T..F..F..F..T..F..T..T..F..T..F..F..T..F..F.ABA.EQV.BA.NEQV.B.T..T..T..F..T..F..F..T..F..T..F..T..F..F..T..F.21:51:42集合运算符的使用方法Fortran95程序设计第5章流程控制与逻辑运算21:51:42集合运算符的使用举例【.AND.】105.AND.610True21.AND.31True105.AND.610False12.AND.13False【.OR.】15.OR.25True21.OR.31True15.OR.25False【.NOT.】.NOT.35True.NOT.12FalseFortran95程序设计第5章流程控制与逻辑运算21:51:42【.EQV.】13.EQV.23True12.EQV.23True12.EQV.23False【.NEQV.】12.NEQV.23True12.NEQV.23False12.NEQV.23FalseFortran95程序设计第5章流程控制与逻辑运算21:51:42If((A=10).AND.(A=20))then…….!变量A=10并且A=20时,也就是变量A在10~20之!间时条件成立。If((key==‘Y’).OR.(key==‘y’))then……!如果变量key等于字符Y或y时,条件成立If(.NOT.(A==10))then……!变量A等于10时,条件不成立。逻辑运算可以通过利用AND/OR/NOT/EQV/NEQV/这几个运算符号连接出很长的表达式,也可以用括号()括起来以确定他们的运算先后顺序。Fortran95程序设计第5章流程控制与逻辑运算逻辑表达式中包含算术运算符、关系运算符和逻辑运算符,它们的运算优先次序如下表:21:51:42运算类别运算符优先级括号()1算术运算**2*/3+-4关系运算(.GT.)=(.GE.)(.LT.)=(.LE.)==(.EQ.)/=(.NE.)5逻辑运算.NOT.6.AND.7.OR.8.EQV..NEQV.9Fortran95程序设计第5章流程控制与逻辑运算235-1-2逻辑运算程序代码中可以使用逻辑表达式来设置逻辑变量的内容Logical_var=AB当A的数值大于B时,logical_var这个逻辑变量会被设定成“真”(.TRUE.),否则会被设定为“假”(.FALSE.)21:51:42使用IF时,可以先把逻辑运算的结果存放到逻辑变量中,再利用逻辑变量来做条件判断。Fortran95程序设计第5章流程控制与逻辑运算21:51:42programex0504implicitnoneintegerrain,windspeedlogicalr,wwrite(*,*)Rain:read(*,*)rainwrite(*,*)Wind:read(*,*)windspeedr=(rain=500)!如果rain=150,r=.true,不然r=.false.w=(windspeed=10)!如果windspeed=10,w=.true,不然w=.false.if(r.or.w)then!只要r或w有一个值是true就成立write(*,*)停止上班上课elsewrite(*,*)照常上班上课endifstopend[ex0504.f90]Fortran95程序设计第5章流程控制与逻辑运算255-1-3多重判断IF-ELSEIF多重判断可一次列出多个条件及多个程序模块IF(条件1)then…….…….elseif(条件2)then…….…….elseif(条件3)then…….…….elseif(条件4)then…….…….else…….Endif条件1成立时,执行这个模块程序条件2成立时
本文标题:流程控制与逻辑运算
链接地址:https://www.777doc.com/doc-653511 .html