《Fortran95第10章--基本计算(二)选择控制结构.docx》由会员分享,可在线阅读,更多相关《Fortran95第10章--基本计算(二)选择控制结构.docx(8页珍藏版)》请在优知文库上搜索。
1、在匕章我们探讨了WHERE结构与FORA1.1.结构,它们好像同样具行限制结构的功能.但实侦上它们都是属于赋值语句。WHERE结构UJ以包含多个块,但是除了块内的某些数组元案被过池网过谑掉,从而不参加计券之外,每个块内的每个语句都必需被执行.FoRAI.1.结构只包含一个块,FORA1.1.对这个块的执行限制,不是反电地运行这个块,而是其中的好个语句都必需对指标侑集合里的全部元素执行一次,然后才转入下一个语句。在FoRA1.1.结构里也可以引入过游网,以解除掉不符合条件的计算,10.3IF结构和IF语句一个IF结惋至多选择结构里的一个语句与结构的块来得到执行.而一个IF语句至多限制一个用句的执
2、行.在下章后面会简略探讨到的算术IF语句与这里的IF语句没有关系,蹩术IF语句是一种分支语句,并且是过时的。10.3.1 IF结构IF结构可以包含多个块与多个逻卷衣达式,还可能包含E1.SE语句与E1.SElF语句,逻辑表达式总是放置在相应的块之前,因此IF结构的执行总是从逻辑表达式起先的.一旦逻辑衣达式取典但,则相应的块获得执行,整个IF结构内至多只有一个块能够被选择执行,而假如没有E1.SE语句的话,可能没有块海感执行的条件,一旦被选择执行的块运行完毕,或者不存在满意执行条件的块,则整个IF结构的运行被终止.1IF结构的形式IF结构的句法形式(RSo2)为:ifsxnsl11*nomc;1
3、IF(Svalar-IogicaI-Cxprcssion)THENblockIE1.SEIFscalar-logical-expression)THENif-nsrucnameblock.EI5Eif-cnnst11ct-nimc)blockENDIFlifYOnStfUnameIF结构的一般规则如下: 至多只有个结构里的块被执行.或者没有块被执行. E1.SEIF语句不能眼前在E1.SE语句后面, 不能出现分支到E1.SEIF语句或E1.SE语句的情形, 从IF结构里的随道块都可以分支到ENDIF语句,即协时可以退出IF结构。 结构片称必需成时出现在IF-THEN语句和ENDIF语句当中.E
4、1.SEIFiS句和E1.SE语句里的结构名称是可选的,嵌如有的话.必需和IF-THEN.句里的结构名称一样.在同一个作用域单位内,同一个结构名称不能用于不同的命名结构.2.IF结构的运行结构里的逻辑友达式依据序列位置执行,直到某个表达式为宾伯,然后紧跟该表达式后面的块得到执行,该块运行完毕之后,整个IF结构即退出运行.在第一个真值表达式后面假如还存在真值表达式,则它的不影响对执行块的选择.假如在该IF结构内(而不是它的予结构内)找不到真(农达式则E1.SE语句后面的块被执行:假如没有E1.SE语句,则退出IF结构。下面的图10-1给出了IF结构的运行示意图.【例02图11IF结构的运行而示遨
5、图IF11111NX=Y*25E1.SElHl8.3JTHENX=0.0Y=IE1.SEX=I(X)Y=0.0ENDIF上例的执行依次就是: 首先执行I先,假如为真,则执行X=Y*25:假如为假,则执行紧跟后面的E1.SEIF THEN语句。 入E1.SEIF-THEN语句后,首先执行18.3,假如为其,则执行X=0.0,Y=100: 假如为假,则执行紧跟后面的E1.SE暗句. i入ElSE语句后,执行X=IO0,Y=0.0. 然后执行ENDIF语句,退出该IF结构,10.3.2IF语句一个IF语句用在只须要限制一个语句的场合。1IF语句的形式IF语句的句法形式(RSo7)为:1FScalar
6、-IogicabcxprcssionXc(ion-siaicncn(【例10-3)IF(X=O)Y=X+12.IF语句的运行首先执行逻辑友达式,后如为真值.则执行IF语句里的作用语句(actiontacmcnt):假如为假,则退出该语句,执行程序里跟在IF语句后面的其他语句.点作用语句(aclion-sialemcnl)不柜是一个IF话句,也不做是一个END语句。软如迂辑表达式包含一个函钛引用.那么逻辑表达式的运行可;产生修改作用语句的副作用,这是允许的.作用语句能够变更变量,段驰入检出系统条件,或限制语句的状态,作用语句的例子包括仪值.WRITE.GoTO语句等:说明性语句,FORMAT语句
7、,和ENTRY语句导不属于作用语句.而结构也不!看成是作用语句.10.4CASE结构和IF结构类似的是,CASE结构也Ur以包含多个块,而最终能够获得执行的必多只能是一个.和IF结构不同的是,CASE结构的选择是基于结构开头的SE1.ECTCASE语句里的标最表达式的取值,这个取伯被称为状况指标,它可以是离散型的各种标最值,例如整型,字符型逻辑型,而在IF结构里,用来进行判别而供应选择条件的是逻辑型取值,即只有.TURE和.FA1.SR两个(ft.得到状况指标之后,搜寻全部的CASE语句我的状况选择符的假,假如有与状况指标I兀配的.则执行相应的CASE语句里的块,否则执行具有欣认选择符的CAS
8、E,假如不存在具有坡认选择符的CASE.则退出.运用CASE结构可以很自然地发达须要分状况考虑的问时,同时每种状况的定义必需是已知的。【例10*4】设分段函数:Sin(X)x0CoS(X)=0)CSE(.TRUE.)Y=SIN(XCASE(.FA1.SE.)Y=COSFndseij-CT【例10-51一年中卜二个月的天故也可以用CASE结构表示如下:MONTHDAY:SEIJ-CTCSIMONTH)CSE(2)DAYS=28CASEnstc(ttncblock.ICASEDEFAU1.Tsc-conM11cl-nameblockENDSE1.ECTcasc-conMncvAue:CaXoVaJ
9、uC即假如是区间的话,该区间可以是半边开的。其中的状况值(CaSeTaIUC)是一个标盘初始化表达式,与状况表达式的类型等就性一样“所iF;初始化我达式即在编年时可以取伯的衣达式,本质上即常ht友达式.它们的取值都只能是整型,字符型和逻辑型。可以看到在CASE结构里,包含了三种语句: SE1.ECTCASE谱句: CASE语句: ENDSE1.ECT语句,而在.CASE语旬当中,跟(:关犍词CASE后向的(CaSC-ValUC-range-list)或DEFAU1.T就是状况选择符.CASE结构的一般规则如下: 如CASE结构具出名称的话,那么结构名称必需成对出现在SE1.EcTCASE语句和
10、ENDSE1.ECT增句当中. 状况选择符后面假如出现结构名称的话,必需与SE1.ECTCSE语句当中的结构名称一样。 具有状况选择符DEFAU1.T的CASE谙句是可选的.假如它出现在鳍构当中的话.上述CASE结构的句法形式并没有要求它放置在结构的最终. 在个CASE结构里,状况衣达式与全部的状况值都必需典F同一个类里,假如属于字符型,它们可以具有不同的长度.但是种别参数必;S-样. 状况值范用里面出现目号时,发示一个区间,而区间的构成陷含着相应的关系去达式。 状况值不能是浅软型, 假如是字符型的话,则依据字符型的关系运算燃则确定相应的取值范围.【例odCASE里面的状况值能附为依据与处理器
11、相关的就认字符类型的关系运灯,在ABOUT与Z之间的全部字符中.站构当中的表达式的取值完成后,必需俵证最多只能有一个状况选择符的值与技况指标值区业,也即不允许在不同的状况之间状况值出现左复的此形。状况值DEFAU1.T与任何跟全部结构内的其他状况他都不差也的状况指标值匹配。【例IO-7】CA1.CU_AREA:S臼上CTCASE(OBJEeT)CASE(REbANG1.E)CA1.CU_AREAAREA=1.ENGTHZIDTHCASECA1.CU.AREAAREA=SlDpSIDECASRCIRCIJ=)CA1.CU-AREAAREA=P1*RADIUS*2ENDSE1.ECTCA1.Cil
12、AREA10.4.2CASE结构的运行首先计算SE1.ECTCASE语句当中的作为标量入达式的状况指标,它的伯最多与结构里的一个状况值匹配,与之匹配的状况值后面紧跟的块得到执行,然后退出结构,程序进入紧跟该结构的ENDSE1.ECT语句后面的可执行谙旬或结构.线如没有与状况指标值匹配的状况位,而结构里包含了CASEDEFAU1.T谱句,依据DEFAU1.T的定义,状况值这时必定与之匹配,因此执行该语句后面的块,然后退出该结构。快如结性当中不存在CASEDEFAU1.T语句,又没有与状况指标值四配的状况值,那么退出该结构,不执行结构里的任何块.所iF;状况指标值与结构里的一个状况值匹配,包含如下
13、情形:假如状况值为单独的一个值,则运用等价与非等价关系运算,看是否与指标值等价;假如状况优足个区间.则依据下表I(M的定义:10-1不同状况值的匹配状况值范囹匹配的定义CUKC-ViikieI:case-va1uc2C3M*3!uel.1.E.ca%eindex.1.h.caea!ue2cs!ic-value:CaAvaIUC.1.Ecase-index:case-valueCaSCwahiC.GECaSC-index将建不同CASE语句的状况值范围不能有空企。结构的执行过多只允许K中的一个块被执忏。只能从结构内部分支对该站构的ENDSE1.ECT语句.不允许分支到CASB语句,位可以分支到SE1.ECTCASEt句.下面的图10-2给出了CASE结构的运行流的示意图:m102CASE结构的运行流示图:IW10-8INDEX=2SE1.ECTCASE(INDEXCASEd)AN1.2)CASR2)AK23CAStDEFAU1.!ANO,O)ENDSE1.ECT【例109】下面的例子描述了一个交通规则:CO1.OR=GREEN-SE1.EcTCASHeo1.ORJCR$E(RED-STOPCASE(mYE1.1.OWh)CA1.1.SToPF_