




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章逻辑运算和选择结构,4.1关系表达式4.2逻辑表达式4.3逻辑IF语句4.4分块条件语句4.5块IF构造4.6多重选择和CASE构造,a)关系运算符关系运算符就是关系比较符。Fortran中有六个关系运算符:,4.1关系表达式,注意:关系运算符的两个字母(如GT,LE)的二侧各有一个点,不要漏写。,b)关系表达式关系表达式是最简单的一种逻辑表达式。其一般形式为:算术表达式也可以是一个算术量,即为一个数值常数、数值型变量、数值函数。例:A+B=0.A+B.LE.0.A*B=C/DA*B.NE.C/D注意:1)关系表达式中关系操作符只准出现一次。2)数学中不等式写法与FORTRAN中关系表达式的写法有同有异,不可随意使用数学中的习惯用法,例如语句写法3X7就是不正确的关系表达式,2关系表达式求值的过程是:先分别计算两个表达式的值,然后将他们进行比较,1关系表达式的值是一个逻辑常数即TRUE或FALSE,例:A*B.GE.C+D(设:A=2.0,B=3.5,C=2.3,D=6.2)先计算A*B和C+D的值,然后判断7.0.GE.8.5结果不成立其值为.FALSE.,关系运算的特点:,3.当两个算术关系表达式的数据类型不相同时,求值过程为:将两个算术表达式化为同一类型然后比较.转换规律是将低级类型向高级类型转换。因此,执行关系表达式的过程为:算出算术表达式的值;将两个算术表达式值转换成同一类型;将两个表达式的值进行比较。,具体操作是:将e1RELOPe2写成(e1)-(e2)RELOP0即对两个算术表达式求差,然后与零进行比较,其中零的类型与表达式(e1)-(e2)的类型相同.,如:X*X.LT.2*J可写作:X*X-2*J.LT.0.0,4.当算术表达式是非整型时尽量不用关系运算符.EQ.和.NE.因为实型数在计算机中不能保证完全精确.,例X,Y的实型值为5.0,在计算机中可能为5.000001或4.999999,5.除了算术量可进行比较外,字符关系表达式可对两个字符量进行比较。,对数学式X=Y的关系运算可用:ABS(X-Y).LT.1.E-30;对XY可用:ABS(X-Y).GT.1.E-30。,4.3逻辑表达式,a)逻辑量Fortran的逻辑常量:.TRUE.(表示“真”,即满足逻辑条件);.FALSE.(表示“假”,即不满足逻辑条件)。例:当X=3时,“X.OR.=.EQV.、.NEQV.,逻辑表达式中包含算术运算符、关系运算符和逻辑运算符,它们的运算优先次序如下表:,逻辑表达式中各运算符的运算顺序,注:a.关系符只能用于两个数值量的大小比较,不能.TRUE.EQ.Yb.不能将逻辑运算符和关系符连用。即用A.NOT.EQ.B表示AB.C.在关系表达式中一个算术表达式只能与一个关系符相邻,不能在两侧都出现关系符.,例:02)见图,要求输入一个X值,打印一个相应的Y值.,READ*,XIF(X.LE.2.0)THENY=2*X+3ELSEY=X+5ENDIFPRINT*,X=,X,Y=,YEND,注意:,(1)一个块IF是一个完整的选择结构.在IF块或ELSE块中可以用转移语句将流程转到块IF之外,而不允许由IF块外或ELSE块外转到IF块内或ELSE块内.,如下面的例子是错误的:IF(I.NE.J)THENI=J100WRITE(*,*)IENDIFGOTO100,(2)可以在同一IF块或ELSE块内用转移语句从一点转移到另一点.,(3)块IF语句、ELSE语句和ENDIF语句必须联合而不能单独使用。一个块IF语句必须对应一个ENDIF语句(或一个ELSE语句和ENDIF语句。,块IF语句嵌套,对于稍微复杂的问题,往往在某种条件判定后,仍需进一步判定,然后决定接下去该做什么,这种多层判定称为嵌套的判定语句.简单嵌套结构如下:IF(e1)THENIF(e2)THEN外内:ENDIF:ENDIF在嵌套程序中找出对应的块IF,ELSE,ENDIF语句的方法:1.从最内层的块IF语句开始,找离它最近的ENDIF语句,将其用线括起来,在两语句之间的ELSE语句必属于这一层的块IF.2.由内向外重复上述过程直到遇到最外层的块IF语句和ENDIF语句为止.,例:编制二次方程求根的程序.分析:AX2+BX+C=0的判别式为:D=B2-4ACA=0,B=0则C=0A=0,B0则X=-C/BA0,D0则有两实根,例:编制二次方程求根的程序.PROGRAMEQUATEREAD*,A,B,CPRINT*,COEFFICIENTSARE,A,B,CIF(AEQ0.0)THENIF(BEQ0.0)THENPRINT*,EQUATIONHASTHEFORM,C,0.0ELSEPRINT*,NOTQUADRATICEQUATIONROOTIS,-CBENDIFELSEPART1-B/(2.0*A)TEMPB*B-4.0*A*CPART2SQRT(ABS(TEMP)/(2.0*A)IF(TEMPLT0.0)THENPRINT*,COMPLEXROOTS,PART1,+I,PART2,PART1,-I,PART2ELSEIF(TEMPEQ0.0)THENPRINT*,BOTHREALROOTSARE,PART1ELSEPRINT*,REALROOTSARE,PABT1+PART2,PART1-PART2ENDIFENDIFEND,当嵌套层次多时,可按以下方法确定每个层块IF:,(1)从最内层的块IF语句开始,向下找离它最近的ENDIF语句,把它们用线括起来.在这两个语句之间的全部语句(包括块IF语句和ENDIF语句)就是同一层的块IF.,(2)由内向外重复上述过程,直到遇到最外层的块IF语句和ENDIF语句为止.,ELSEIF语句,在单边或双边选择结构的任意分支中又嵌入另一单边或双边选择结构,即构成多重选择结构.,格式:IF()THEN(IF块)ELSEIF()THEN(ELSEIF块).ELSE(ELSE块)ENDIF,功能:构成多重选择.,说明:1.IFTHEN语句必须与ENDIF语句配对,ELSEIFTHEN语句不要求ENDIF与之配对.,2.ELSEIF()THEN是两条语句,ELSEIF()THEN是一条语句,例:阶跃函数1(当X0)YY=0(当X=0)1X-1(当X0)-1,嵌套:READ*,XIF(X.GT.0.0)THENY=1.0ELSEIF(X.EQ.0.0)THENY=0.0ELSEY=-1ENDIFENDIFPRINT*,X=,X,Y=,YEND,多重:READ*,XIF(X.GT.0.0)THENY=1.0ELSEIF(X.EQ.0.0)THENY=0.0ELSEY=-1ENDIFPRINT*,X=,X,Y=,YEND,例如,征收税款,税率与收入有关.若规定收入1000元以下收3%,10002000收4%,20003000收5%,3000以上收6%.,IF(AMOUNT.LT.1000.)THENRATE=0.03ELSEIF(AMOUNT.LT.2000)THENRATE=0.04ELSEIF(AMOUNT.LT.3000)THENRATE=0.05ELSERATE=0.06ENDIFENDIFENDIFTAX=AMOUNT*RATE,程序可写成:,IF(AMOUNT.LT.1000.)THENRATE=0.03ELSEIF(AMOUNT.LT.2000)THENRATE=0.04ELSEIF(AMOUNT.LT.3000)THENRATE=0.05ELSERATE=0.06ENDIFTAX=AMOUNT*RATE,也可以用ELSEIF语句写成:,(5)ELSEIF语句实际上也引入了块IF的嵌套.见下图:,(4)它的执行规律是:如果逻辑表达式的值为真,则执行其后的ELSEIF块.如果为假,则转到紧跟在ELSEIF块后面的ELSE语句或ELSEIF语句或ENDIF语句.,(1)LESEIF也是一个执行语句,它的作用是将ELSE语句和块IF语句结合起来,表示:“否则,如果满足条件,则执行下面是ELSEIF块.”,说明:,(3)ELSEIF语句的一般形式为:ELSEIF(逻辑表达式)THEN,(2)ELSEIF块的范围从ELSEIF语句的下一个语句开始到离它最近的ELSE语句或ELSEIF语句或ENDIF语句为止.,它的一般形式:,多分支的N-S图,(6)ELSEIF虽然起ELSE和IF的双重作用,但它与块IF语句有一点不同,它不要求相应的ENDIF语句,(7)在包含ELSEIF语句的块IF语句中,如果块IF语句中的逻辑表达式为假,则流程转到ELSEIF语句继续执行.ELSEIF块的后面可以有ELSE语句和ELSE块,也可以没有,而是另一个ELSEIF语句或ENDIF语句.,(8)在多分支处理中,应把机率较高的条件放在前面.,说明(续),例:有一函数X(t)随时间t变化的曲线。当输入时间t,求函数值,a,0,无定义(t0),X(t)=,输入A,X0,T1,T2,T3,输入T,打印T和X的值,TT3,x=0,T2TT3,x=A*(T3-T)/(,T3-T2),T1TT2,X=A,0T块IF语句应用注意事项,1.不允许从IF块、ELSE块外把控制转移到IF块、ELSEIF块,ELSE块内.,2.ELSE语句、ELSEIF语句不应有语句标号,即使有也不允许任何语句使用.,例:IF(.)THEN10:ELSEIF(.)THEN20:ENDIFGOTO10GOTO20,3.若在IF块、ELSE块ELSEIF块中出现GOTO语句或其它转移语句,则会改变正常的执行顺序.,例:IF(X.GT.Y)THENZ=XGOTO10Y=XELSEZ=YGOTO10X=YENDIF10PRINT*,Z,注:这种形式不符合结构化的原则,应尽量避免使用.,块IF构造F90明确提出了块的概念。块是作为单元看待的一个可执行构造的序列,它可用于IF构造、CASE构造和DO构造中,对这三种构造都可命名(即标签)。块的规则为:1)如果一个块中包含一个可执行构造,那么它必须完整地被包含在该块中。2)禁止从块的外部转入块的内部,可以在块的内部进行控制转移,也可以从块内转移到块的外部。3)块是可以嵌套的。,IF构造的一般形式为:构造名:IF(e1)THEN块1ELSEIF(e2)THEN构造名块2ELSEIF(en)THEN构造名块nELSE构造名块n+1ENDIF构造名,多重选择和CASE构造F90增加了CASE构造,其一般形式为:构造名:SELECTCASE(case表达式)CASE(case选择符)构造名块CASEDEFAULT构造名块ENDSELECT构造名,其中:case表达式是整型、字符型或逻辑型表达式,不能是实型和复型表达式。SELECTCASE是入口语句,ENDSELECT是出口语句。,case选择符是case值范围表,它有以下四种形式:(值表)表示等于该值,各值之间用逗号分开(下界:)表示大于或等于该值(:上界)表示小于或等于该值(下界:上界)表示在这两个值之间(包括等于),上面的四种表示方法可以混用,如:CASE(2:5,9)等价于CASE(2,3,4,5,9)。CASEDEFAULT语句是可选的,当case表达式的值在case值范围以外时,执行CASEDEFAULT语句后面的块。,程序执行时,CASE构造的控制机制:(1)控制进入CASE构造后,先计算情况表达式的值;(2)如果第一个CASE语句选择符值与情况表达式值相等则执行语句块1,转出口;(3)如第一个选择符值不为情况表达式的值,再查下一个CASE语句的选择符值,满足执行语句块2,转出口,不满足再查下一个CASE语句的选择符值,直至全部情况选择符值都检查完;(4)如果全部情况选择符值都不符情况表达式的值,且又有CASEDEFAULT语句,则执行该语句后的DEFAULT块,否则直接转出口。,implicitnoneinteger:score,n0=0,n1=0,n2=0,n3=0,n4=0doread*,scoreif(score100)thenprint*,满分=,n0,优=,n1,良=,n2,及格=,n3,不及格=,n4exit,例:统计学生考试成绩:100分为满分,85分以上为优,7084为良,6069为及格,59分以下不及格。,elseselectcase(score)case(100)print*,满分;n0=n0+1case(85:99)print*,优;n1=n1+1case(70:84)print*,良;n2=n2+1case(60:69)print*,及格;n3=n3+1casedefaultprint*,不及格;n4=n4+1endselectendifenddoEND,CASE构造的规则:1)CASEDEFAULT语句最多只能有一句;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)thencase_construct_b:selectcase(b)case(:0)case(0:)endselectcase_construct_belsecase_construct_c:selectcase(c)case(:0)case(0:)endselectcase_construct_cendifif_construct,(有无错?),case表达式为字符型例:设要编一程序,把学生按专业划分以便检索,专业分为天体物理、应用物理、理论物理三种,把每个专业应修的课程依次编成语句块1、块2、块3,构造名为DEPARTMENT_22_MAJOR,专业变量名为MAJOR,则CASE构造为:,DEPARTMENT_22_MAJOR:SELECTCASE(MAJOR)CASE(AstronomicalPhysics)语句块1CASE(AppliedPhysics)语句块2CASE(TheoreticalPhysics)语句块3ENDSELECTDEPARTMENT_22_MAJOR则当变量MAJOR取值为AppliedPhysics时,执行语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国家具五金电商项目创业计划书
- 中国三维扫描软件项目创业计划书
- 中国B2C跨境电商项目创业计划书
- 中国近视康复治疗仪项目创业计划书
- 中国光纤标签项目创业计划书
- 中国固网宽带项目创业计划书
- 中国能源信息安全项目创业计划书
- 中国高粱项目创业计划书
- 中国5G小基站项目创业计划书
- 中药制剂的质量控制体系构建-洞察阐释
- 上海市社区工作者管理办法
- GA/T 1133-2014基于视频图像的车辆行驶速度技术鉴定
- 保密宣传商业秘密保密企业培训PPT教学讲座
- Unit1kids-box1教学讲解课件
- T∕CSTM 00839-2022 材料基因工程术语
- 通用桥式起重机施工过程记录表
- 电梯安装施工进度及保证措施
- NLP神经语言学培训课件(PPT 164页)
- 脑卒中康复PPT医学课件
- PCB 企业生产工艺及风险点
- Grace评分表、TIMI评分、CRUSAD评分、wells评分等
评论
0/150
提交评论