收藏 分销(赏)

fortran第4章(条件).ppt

上传人:xrp****65 文档编号:14014668 上传时间:2026-05-27 格式:PPT 页数:58 大小:466KB 下载积分:10 金币
下载 相关 举报
fortran第4章(条件).ppt_第1页
第1页 / 共58页
fortran第4章(条件).ppt_第2页
第2页 / 共58页


点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,*,页,下一页,上一页,停止放映,第四章,逻辑运算和选择结构,4.1,关系表达式,4.2,逻辑表达式,4.3,逻辑,IF,语句,4.4,分块条件语句,4.5,块,IF,构造,4.6,多重选择和,CASE,构造,a),关系运算符,关系运算符就是关系比较符。,Fortran,中有六个关系运算符,:,关系运算符,英语含义,所代表的数学符号,.GT.,.GE.,.LT.,.LE.,.EQ.,.NE.,(F77,),=,=,=,=,(F95),Greater Than,Greater than or Equal to,Less Than,Less than or Equal to,EQual,to,Not Equal to,(,大于,),(,大于或等于,),(,小于,),(,小于或等于,),(,等于,),(,不等于,),4.1,关系表达式,注意:,关系运算符的两个字母,(,如,GT,,,LE,),的二侧各有一个点,不要漏写。,b),关系表达式,关系表达式是最简单的一种,逻辑表达式,。其一般形式为:,算术表达式也可以是一个算术量,即为一个数值常数、数值型变量、数值函数。,例:,A+B=0.,A+B.LE.0.,A*B=,C/D A*B.NE.C/D,注意,:,1),关系表达式中关系操作符只准出现一次。,2),数学中不等式写法与,FORTRAN,中关系表达式的写法有同有异,不可随意使用数学中的习惯用法,,例如语句写法,3,X,7,就是不正确的关系表达式,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.,当两个算术关系表达式的数据类型不相同时,求值,过程为,:,将两个算术表达式化为同一类型然后比较,.,转换规律是将低级类型向高级类型转换。因此,执行关系表达式的过程为:算出算术表达式的值;将两个算术表达式值转换成同一类型;将两个表达式的值进行比较。,具体操作是,:,将,e1 RELOP e2,写成,(e1)-(e2)RELOP 0,即对两个算术表达式求差,然后与零进行比较,其中零的类型与表达式,(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,时,,“,X5,”,的值为,.TRUE.(,真,),,,而,“,X.AND.=.OR.=.EQV.,、,.NEQV.,逻辑表达式中包含算术运算符、关系运算符和逻,辑运算符,它们的运算优先次序如下表:,逻辑表达式中各运算符的运算顺序,注,:,a.,关系符只能用于两个数值量的大小比较,,不能,.TRUE.EQ.Y,b.,不能将逻辑运算符和关系符连用。,即用,A.NOT.EQ.B,表示,A,B.,C.,在关系表达式中一个算术表达式只能与一个关系符,相邻,不能在两侧都出现关系符,.,例,:0X1)Y=1,注意本例中不可写成:,IF(X0.AND.K=N)Y=K+X,例:打印学生考试成绩,大于等于,80,分的为,“,A,”,,,大于等于,60,分而小于,80,分的为,“,B,”,,,小于,60,分的为,“,C,”,:,READ*,GRADE,IF(GRADE.GE.8O),PRlNT,*,,,”,A,”,IF(GRADE.GE.6O.AND.GRADE.LT.80),PRlNT,*,,,”,B,”,IF(GRADE.LT.6O),PRlNT,*,,,”,C,”,逻辑,IF,语句,当条件为,“,真,”,时只能执行一个执行语句而不能执行若干个语句,。与块,IF,相比,逻辑,IF,语句是在一行中完成的一个选择操作,因此它又称,“,行,IF,语句,”,以与块,IF,区别。,逻辑,IF,语句也常与,GOTO,语句合用,但如果过多使用,程序结构将显得混乱,难于理解。应尽可能采用结构化的程序设计方法。,!,F90,的固定格式 统计学生考试合格人数,INTEGER:n,s,k,s=0;k=0,1 PRINT*,键入分数(负数时退出):,READ*,n;IF(n=60)k=k+1,GOTO 1,999 PRINT*,k,个学生合格。总人数,s,END,逻辑,IF,语句名称,是沿用了,Fortrn66,的定义,因为在,F66,中有两种,IF,语句:算术,IF,语句,(F90/95,中已废除,),和逻辑,IF,语句。,4.5,块,IF,条件语句,块,IF,的一般形式可写成:,IF(,逻辑表达式,)THEN,块,IF,语句,块,1,then,块,ELSE,块,2,else,块,END IF,条件,语句块,1,语句块,2,T,F,功能,:,当逻辑表达式的值为真时,即条件成立时执行语句,块,1,反之执行语句块,2.,例,:,有一折线其关系为,:,Y=,2X+3 (X,2),X+5 (X2),见图,要求输入一个,X,值,打印一个相应,的,Y,值,.,READ*,X,IF(X.LE.2.0)THEN,Y=2*X+3,ELSE,Y=X+5,ENDIF,PRINT*,X=,X,Y=,Y,END,Y,7,3,2,-1.5,X,注意,:,(1),一个块,IF,是一个完整的选择结构,.,在,IF,块或,ELSE,块中可以用转移语句将流程转到块,IF,之外,而不允许由,IF,块外或,ELSE,块外转到,IF,块内或,ELSE,块内,.,如下面的例子是,错误,的,:,IF(I.NE.J)THEN,I=J,100 WRITE(*,*)I,ENDIF,GOTO 100,(2),可以在同一,IF,块或,ELSE,块内用转移语句从一点转移到另一点,.,(3),块,IF,语句、,ELSE,语句和,ENDIF,语句必须联合而不能单独使用。一个块,IF,语句必须对应一个,ENDIF,语句(或一个,ELSE,语句和,ENDIF,语句。,块,IF,语句嵌套,对于稍微复杂的问题,往往在某种条件判定后,仍需进一步判定,然后决定接下去该做什么,这种多层判定称为嵌套的判定语句,.,简单嵌套结构如下,:,IF(e1)THEN,IF(e2)THEN,外 内,:,ENDIF,:,ENDIF,在嵌套程序中找出对应的块,IF,ELSE,ENDIF,语句的方法,:,1.,从最内层的块,IF,语句开始,找离它最近的,ENDIF,语,句,将其用线括起来,在两语句之间的,ELSE,语句必属,于这一层的,块,IF.,2.,由内向外重复上述过程直到遇到最外层的块,IF,语句,和,ENDIF,语句为止,.,例,:,编制二次方程求根的程序,.,分析,:,AX,2,+BX+C=0,的判别式为,:D=B,2,-4AC,A=0,B=0,则,C=0,A=0,B 0,则,X=-C/,B,A 0,D0,则 有两实根,例,:,编制二次方程求根的程序,.,PROGRAM EQUATE,READ*,A,B,C,PRINT*,COEFFICIENTS ARE,A,B,C,IF(A,EQ,0.0)THEN,IF(B,EQ,0.0)THEN,PRINT*,EQUATION HAS THE FORM,C,0.0,ELSE,PRINT*,NOT QUADRATIC EQUATION ROOT IS,-C,B,ENDIF,ELSE,PART1,-B/(2.0*A),TEMP,B*B-4.0*A*C,PART2,SQRT(ABS(TEMP)/(2.0*A),IF(TEMP,LT,0.0)THEN,PRINT*,COMPLEX ROOTS,PART1,+I,PART2,PART1,-I,PART2,ELSEIF(TEMP,EQ,0.0)THEN,PRINT*,BOTH REAL ROOTS ARE,PART1,ELSE,PRINT*,REAL ROOTS ARE,PABT1+PART2,PART1-PART2,ENDIF,ENDIF,END,当嵌套层次多时,可按以下方法确定每个层块,IF,:,(1),从最内层的块,IF,语句开始,向下找离它最近的,ENDIF,语句,把它们用线括起来,.,在这两个语句之间的全部语句,(,包括块,IF,语句和,ENDIF,语句,),就是同一层的块,IF.,(2),由内向外重复上述过程,直到遇到最外层的块,IF,语句和,ENDIF,语句为止,.,ELSE IF,语句,在单边或双边选择结构的任意分支中又嵌入另一单边或双边选择结构,即构成多重选择结构,.,格式,:,IF()THEN,(IF,块,),ELSE IF()THEN,(ELSE IF,块,),.,ELSE,(ELSE,块,),ENDIF,IF()THEN,ELSE,IF()THEN,ELSE,ENDIF,ENDIF,功能,:,构成多重选择,.,说明,:,1.IFTHEN,语句必须与,ENDIF,语句配对,ELSE IF THEN,语句不要求,ENDIF,与之配对,.,2.ELSE,IF()THEN,是两条语句,ELSE IF()THEN,是一条语句,例,:,阶跃函数,1 (,当,X0)Y,Y=0 (,当,X=0)1 X,-1 (,当,X0),-1,嵌套:,READ*,X,IF(X.GT.0.0)THEN,Y=1.0,ELSE,IF(X.EQ.0.0)THEN,Y=0.0,ELSE,Y=-1,ENDIF,ENDIF,PRINT*,X=,X,Y=,Y,END,多重:,READ*,X,IF(X.GT.0.0)THEN,Y=1.0,ELSEIF(X.EQ.0.0)THEN,Y=0.0,ELSE,Y=-1,ENDIF,PRINT*,X=,X,Y=,Y,END,例如,征收税款,税率与收入有关,.,若规定收入,1000,元以下收,3%,10002000,收,4%,20003000,收,5%,3000,以上收,6%.,IF,(AMOUNT.LT.1000.)THEN,RATE=0.03,ELSE,IF,(AMOUNT.LT.2000)THEN,RATE=0.04,ELSE,IF,(AMOUNT.LT.3000)THEN,RATE=0.05,ELSE,RATE=0.06,END IF,ENDIF,ENDIF,TAX=AMOUNT*RATE,程序可写成,:,IF(AMOUNT.LT.1000.)THEN,RATE=0.03,ELSE IF(AMOUNT.LT.2000)THEN,RATE=0.04,ELSE IF(AMOUNT.LT.3000)THEN,RATE=0.05,ELSE,RATE=0.06,END IF,TAX=AMOUNT*RATE,也可以用,ELSE IF,语句写成,:,(5)ELSE IF,语句实际上也引入了块,IF,的嵌套,.,见下图,:,(4),它的执行规律是,:,如果逻辑表达式的值为真,则执行其后的,ELSE IF,块,.,如果为假,则转到紧跟在,ELSE IF,块后面的,ELSE,语句或,ELSE IF,语句或,END IF,语句,.,(1)LESE IF,也是一个执行语句,它 的作用是将,ELSE,语句和块,IF,语句结合起来,表示,:“,否则,如果满足条件,则执行下面是,ELSE IF,块,.”,说明,:,(3)ELSE IF,语句的一般形式为,:,ELSE IF(,逻辑表达式,)THEN,(2)ELSE IF,块的范围从,ELSE IF,语句的下一个语句开始到离它最近的,ELSE,语句或,ELSE IF,语句或,END IF,语句为止,.,它的一般形式,:,多分支的,N-S,图,(6)ELSE IF,虽然起,ELSE,和,IF,的双重作用,但它与块,IF,语句有一点不同,它不要求相应的,END IF,语句,(7),在包含,ELSE IF,语句的块,IF,语句中,如果块,IF,语句中的逻辑表达式为假,则流程转到,ELSE IF,语句继续执行,.,ELSE IF,块的后面可以有,ELSE,语句和,ELSE,块,也可以没有,而是另一个,ELSE IF,语句或,END IF,语句,.,(8),在多分支处理中,应把机率较高的条件放在前面,.,说明,(,续,),例:有一函数,X(t),随时间,t,变化的曲线。当输入时间,t,求函数值,a,0,无定义 (,t0),X(t)=,输入,A,X0,T1,T2,T3,输入,T,打印,T,和,X,的值,T,T3,x=0,T2TT3,x=A*(T3-T)/(,T3-T2),T1TT2,X=A,0TT1,X=X0+(A-X0)*,T/T1,T,分块选择结构中的空块,在分块条件语句中,THEN,或,ELSE,后的语句块没有时,即称之为空块,.,例,:,若,I=1,将其变为,2;,若为,2,将其变为,1,若为其它则不作,改变,试编程,.,READ*,I,IF(I.EQ.1)THEN,I=2,ELSE IF(I.EQ.2)THEN,I=1,ELSE,ENDIF,PRINT*,I,END,说明,:,空块前的,ELSE,也可省,但保留后更加清楚,.,六,块,IF,语句应用注意事项,1.,不允许从,IF,块,、,ELSE,块外把控制转移到,IF,块,、,ELSEIF,块,ELSE,块内,.,2.ELSE,语句,、,ELSEIF,语句不应有语句标号,即使有也不允许任何语句使用,.,例,:IF(.)THEN,10 :,ELSEIF (.)THEN,20 :,ENDIF,GOTO 10,GOTO 20,3.,若在,IF,块,、,ELSE,块,ELSE IF,块中出现,GOTO,语句或其它,转移语句,则会改变正常的执行顺序,.,例,:IF(X.GT.Y)THEN,Z=X,GOTO 10,Y=X,ELSE,Z=Y,GOTO 10,X=Y,ENDIF,10 PRINT*,Z,注,:,这种形式不符合结构化的原则,应尽量避免使用,.,块,IF,构造,F90,明确提出了块的概念。块是作为单元看待的一个可执行构造的序列,它可用于,IF,构造、,CASE,构造和,DO,构造中,对这三种构造都可命名,(,即标签,),。,块的规则为:,1),如果一个块中包含一个可执行构造,那么它必须,完整,地被包含在该块中。,2),禁止从块的外部转入块的内部,可以在块的内部进行控制转移,也可以从块内转移到块的外部。,3),块是可以嵌套的。,IF,构造的一般形式为:,构造名,:IF(e,1,)THEN,块,1,ELSE IF(e,2,)THEN,构造名,块,2,ELSE IF(e,n,)THEN,构造名,块,n,ELSE,构造名,块,n+1,END IF,构造名,多重选择和,CASE,构造,F90,增加了,CASE,构造,其一般形式为:,构造名,:SELECT CASE(case,表达式,),CASE(case,选择符,),构造名,块,CASE DEFAULT,构造名,块,END SELECT,构造名,其中,:,case,表达式是,整型、字符型或逻辑型,表达式,不能是实型和复型表达式。,SELECT CASE,是入口语句,,END SELECT,是出口语句。,case,选择符是,case,值范围表,它有以下四种形式:,(,值表,),表示等于该值,各值之间用逗号分开,(,下界,:),表示大于或等于该值,(:,上界,),表示小于或等于该值,(,下界,:,上界,),表示在这两个值之间,(,包括等于,),上面的四种表示方法可以,混用,,,如,:CASE(2:5,9),等价于,CASE(2,3,4,5,9),。,CASE DEFAULT,语句是可选的,当,case,表达式的值在,case,值范围以外时,执行,CASE DEFAULT,语句后面的块。,程序执行时,,CASE,构造的控制机制:,(1),控制进入,CASE,构造后,先计算情况表达式的值;,(2),如果第一个,CASE,语句选择符值与情况表达式值相等则执行语句块,1,,转出口;,(3),如第一个选择符值不为情况表达式的值,再查下一个,CASE,语句的选择符值,满足执行语句块,2,,转出口,不满足再查下一个,CASE,语句的选择符值,直至全部情况选择符值都检查完;,(4),如果全部情况选择符值都不符情况表达式的值,且又有,CASE DEFAULT,语句,则执行该语句后的,DEFAULT,块,否则直接转出口。,implicit none,integer:score,n0=0,n1=0,n2=0,n3=0,n4=0,do,read*,score,if,(score100)then,print*,满分,=,n0,优,=,n1,良,=,n2,及格,=,n3,不及格,=,n4,exit,例:统计学生考试成绩:,100,分为满分,,85,分以上为优,,70,84,为良,,60,69,为及格,,59,分以下不及格。,else,select case(score),case(100),print*,满分,;n0=n0+1,case(85:99),print*,优,;n1=n1+1,case(70:84),print*,良,;n2=n2+1,case(60:69),print*,及格,;n3=n3+1,case default,print*,不及格,;n4=n4+1,end select,end if,end do,END,CASE,构造的规则,:,1)CASE DEFAULT,语句最多只能有一句;,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)then,case_construct_b:,select case(,b,),case(:0),case(0:),end select,case_construct_b,else,case_construct_c:,select case(,c,),case(:0),case(0:),end select,case_construct_c,end if,if_construct,(,有无错?,),case,表达式为字符型,例:设要编一程序,把学生按专业划分以便检索,专业分为天体物理、应用物理、理论物理三种,把每个专业应修的课程依次编成语句块,1,、块,2,、块,3,,构造名为,DEPARTMENT_22_MAJOR,,,专业变量名为,MAJOR,,则,CASE,构造为:,DEPARTMENT_22_MAJOR:SELECT CASE(MAJOR),CASE(,Astronomical,Physics,),语句块,1,CASE(,Applied,Physics,),语句块,2,CASE(,Theoretical,Physics,),语句块,3,END SELECT DEPARTMENT_22_MAJOR,则当变量,MAJOR,取值为,Applied Physics,时,执行语句块,2,(例如它的功能是打印出学生专业课程成绩),如此等等。,例:字符型选择。,character*1,cmdchar,key_input:select,case(cmdchar,),case(0),print*,文件数限于,1-9,case(1:9),call,RetrieveNumFiles(cmdchar,),case(A,a),call,AddEntry,case(D,d),call,DeletEntry,case(H,h),call Help,case default,print*,键入错误,请键入,H,查看帮助,end select key_input,END,case,表达式为,逻辑型,当,case,表达式为逻辑表达式时,,CASE,语句中的情况选择符也要取逻辑值:真或假。由于它不可能取多于两个的值,因此在逻辑型的情况,选择符内不允许写成一个值域范围(即始值,:,终值形式)。,例:设有一个关系表达式,X=3,,当成立时打印,YES,,否则打印,NO,。,CASE,构造为:,SELECT CASE(,X=3,),CASE(,.TRUE.,),PRINT*,YES,CASE(,.FALSE.,),PRINT*,NO,END SELECT,作业:,1.P,96,二、三、,九、十,2.,读入一个整型变量,N,的值,用,CASE,构造编程,若,N,1,、,2,、,3,、,5,,则,Y,X,;,N,4,、,8,,则,Y,X2,;,N,6,、,7,,则,Y,X3,,其它情况则,Y=0,,打印,Y,值。,3.,设变量,color_light,是字符型变量,表示灯光色彩,编一,CASE,构造,当该变量值是红色,(RED),则打印,STOP,字样。当变量值是黄色,(YELLOW),,打印,WAIT,字样,当值是绿色,(GREEN),打印,CROSS,字样。,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服