fortran选择结构及基本语句_第1页
fortran选择结构及基本语句_第2页
fortran选择结构及基本语句_第3页
fortran选择结构及基本语句_第4页
fortran选择结构及基本语句_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

第四讲选择结构及基本语句1长安大学地学信息技术研究所4.1概述顺序结构程序特点:程序自上而下按语句顺序逐句执行。是三大结构之一。选择结构程序特点:根据条件判定结果决定语句执行顺序。是三大结构之一。FORTRAN90提供IF和SELECT语句来实现选择结构。示例:输入学生成绩,判定合格与否,输出判定结果。

PROGRAMexam4_1CHARACTER*6gradeWRITE(*,“(‘输入学生成绩:’\)”)READ(*,*)s

IF(s>=60)THENgrade=‘合格’

ELSEgrade=‘不合格’

ENDIFWRITE(*,*)‘该学生成绩’,grade,‘。’

ENDprograms≥60假真输出grade结束开始输入成绩s“合格”grade“不合格”grade2长安大学地学信息技术研究所4.2逻辑IF语句逻辑IF语句语法:

<逻辑IF语句>→IF(<逻辑表达式e>)<语句S>

其中:e为逻辑表达式或关系表达式。

S为赋值语句、输入输出语句、STOP、EXIT等可执行语句。逻辑IF语句功能:先求e值,为真(.TRUE.),执行语句S。示例:

READ(*,*)i,jIF(i<j)WRITE(*,*)IWRITE(*,*)‘逻辑IF语句执行结束。’

END

输入:125,200

输出:125

逻辑IF语句执行结束。输入:200,125输出:逻辑IF语句结束。3长安大学地学信息技术研究所逻辑IF语句中的可执行语句S只允许是一条语句。语句S可为赋值语句、I/O语句、STOP、EXIT、CYCLE、GOTO语句。语句S不可为END、IF、DO、ELSEIF、ENDIF语句,及非执行语句。逻辑表达式e两边必须有圆括号。合法逻辑IF语句:IF(A.GT.Max)Max=AIF(A>B)READ(*,*)AIF(X.EQ.10.0)WRITE(*,*)XIF(ABS(A-B)<1E-7)STOPIF(A>B)EXITIF(SUM.LT.100.0)G0TO10非法逻辑IF语句:IF(B.LT.100.0)IF(B.GE.80)A=B

IF(X.GT.100.0)ENDIF(A>B)T=AA=BB=TIF(A>B.AND.A>C)DATAA/8/IF(A>B.AND.A>C)IFA.GT.MaxMax=A

4长安大学地学信息技术研究所[例4.1]已知三个整数A,B,C,输入其值并打印三个数中最大值。

解:根据题意设计算法并画程序流程图,如图4-2所示。程序:

INTEGERA,B,C,maxWRITE(*,“(‘请输入三个整数:’\)”)READ(*,*)A,B,Cmax=AIF(B>max)max=BIF(C>max)max=CWRITE(*,100)max100FORMAT(1X,'max=',I5)END输入:请输入三个实数:12,100,22↙输出:max=100

结束max=AB>max真假max=BC>max假真max=C输出max输入:A,B,C5长安大学地学信息技术研究所4.3块IF语句基本块IF语句语法:

<基本块IF语句>→IF(<逻辑表达式e>)THEN[<THEN语句体>][ELSE[<ELSE语句体>]]ENDIF<基本块IF语句>→IF(<逻辑表达式e>)THEN[<THEN语句体>]ENDIF<THEN语句体>→{<可执行语句>}

<ELSE语句体>→{<可执行语句>}

基本块IF语句功能:先求e值,为真,执行<THEN语句体>,

为假,执行<ELSE语句体>。<THEN语句体>和<ELSE语句体>为一程序段(语句序列)。6长安大学地学信息技术研究所选择结构有三种类型:双边结构、单边结构1、单边结构2。真假THEN语句体eELSE语句体双边选择结构ENDIFENDIF真假eTHEN语句体单边选择结构1ENDIF真假eELSE语句体单边选择结构2IF(e)THEN

<THEN语句体>ELSE<ELSE语句体>ENDIFIF(e)THEN<THEN语句体>ENDIFIF(e)THENELSE<ELSE语句体>ENDIFIF(.NOT.e)THEN<ELSE语句体>ENDIF7长安大学地学信息技术研究所[例4.2]输入一个整数,判断它是奇数还是偶数,并打印输出。解:根据题意设计算法并画程序流程图,如图4-4所示。程序:

10FORMAT(1X,I5,'ISAEVENNUMBER.')20FORMAT(1X,I5,'ISAODDNUMBER.')WRITE(*,*)'PLEASEINPUTAINTEGERNUMBER:‘READ(*,*)NIF(MOD(N,2)=

=0)THENWRITE(*,10)NELSEWRITE(*,20)NENDIF

END输入:77↙

输出:77ISAODDNUMBER.假打印奇数输入N结束MOD(N,2)=

=0打印偶数真8长安大学地学信息技术研究所多支块IF语句语法:

<多支块IF语句>→IF(<逻辑表达式e1>)THEN[<语句体1>]ELSEIF(<逻辑表达式e2>)THEN[<语句体2>]ELSEIF(<逻辑表达式e3>)THEN[<语句体3>]……ELSEIF(<逻辑表达式en>)THEN[<语句体n>][ELSE[<语句体n+1>]]ENDIF功能:求ei值,为真,执行<语句体i>,均为假,执行<语句体n+1>。9长安大学地学信息技术研究所给定一学生成绩S,评判该学生等级,并输出评判结果。评判标准:优:90≤S≤100;良:80≤S<90;中:70≤S<80及格:60≤S<70;不及格:S<60解:根据题意设计算法并画程序流程图,如下图所示。有三个等价程序可求解这一问题。输出“优”输出“良”输出“中”输出“及”输出“不及”S<60真假S<70真假S<80真假S<90真假10长安大学地学信息技术研究所

!程序一WRITE(*,“(‘输入学生成绩:’\)”)READ(*,*)SIF(S<60)WRITE(*,*)‘该学生成绩为:不及格。’IF(S>=60.AND.S<70)WRITE(*,*)‘该学生成绩为:及格。’IF(S>=70.AND.S<80)WRITE(*,*)‘该学生成绩为:中。’IF(S>=80.AND.S<90)WRITE(*,*)‘该学生成绩为:良。’IF(S>=90)WRITE(*,*)‘该学生成绩为:优。’END11长安大学地学信息技术研究所

!程序二WRITE(*,“(‘输入学生成绩:’\)”)READ(*,*)SIF(S<60)THENWRITE(*,*)‘该学生成绩为:不及格。’ELSEIF(S<70)THENWRITE(*,*)‘该学生成绩为:及格。’ELSEIF(S<80)THENWRITE(*,*)‘该学生成绩为:中。’ELSEIF(S<90)THENWRITE(*,*)‘该学生成绩为:良。’ELSEwrite(*,*)‘该学生成绩为:优。’ENDIFENDIFENDIFENDIFEND12长安大学地学信息技术研究所READ(*,*)S!程序三IF(S<60)THENwrite(*,*)‘该学生成绩为:不及格。’ELSEIF(S<70)THENwrite(*,*)‘该学生成绩为:及格。’ELSEIF(S<80)THENwrite(*,*)‘该学生成绩为:中。’ELSEIF(S<90)THENwrite(*,*)‘该学生成绩为:良。’ELSEwrite(*,*)‘该学生成绩为:优。’ENDIFEND13长安大学地学信息技术研究所嵌套块IF:指块IF语句中又包含块IF语句,可有多层嵌套。对于嵌套块IF,内外层块IF语句体不能相互交叉。块IF语句可命名,在嵌套块IF中,可对内外层块IF语句进行命名。

示例:求解方程ax2+bx+c=0,需要检查是否a=0,防止除0溢出。

Disc=b*b—4*a*c

Outer:IF(a/=0)THEN

Inner:IF(Disc<0)THENWRITE(*,*)'Complexroots‘ELSEInnerX1=(-b+SQRT(Disc))/(2*a)X2=(-b-SQRT(Disc))/(2*a)ENDIFInner

ENDIFOuter

14长安大学地学信息技术研究所MS-FORTRAN90引入类似PASCAL和C语言中块CASE结构的新功能。CASE结构功能:计算表达式值,从多个分支中选择一分支执行。

<SELECT语句>→SELECTCASE(<表达式e>)CASE(<控制集合1>)<语句体1>CASE(<控制集合2>)<语句体2>……CASE(<控制集合n>)<语句体n>[CASEDEFAULT<语句体n+1>]ENDSELECT<控制集合>→<元素>[:<元素>]{,<元素>[:<元素>]}

集合表示示例:1,5,7-91,3,5,7,9125,250,375,500‘pen’,’pencil’,’desk’‘A’,’B’,’C’,’D’.TRUE.15长安大学地学信息技术研究所给定学生成绩S,评定优、良、中、及格、不及格等级,并输出。

INTEGER(1)SREAD(*,*)SSELECTCASE(INT(S))CASE(90:100)WRITE(*,*)‘该学生成绩为:优。’

CASE(80:89)WRITE(*,*)‘该学生成绩为:良。’

CASE(70:79)WRITE(*,*)‘该学生成绩为:中。’

CASE(60:69)WRITE(*,*)‘该学生成绩为:及格。’

CASE(0:59)WRITE(*,*)‘该学生成绩为:不及格。’

ENDSELECTCASEDEFAULT

ENDWRITE(*,*)‘输入成绩数据错!!!'

16长安大学地学信息技术研究所4.4选择结构程序设计举例[例4.4]任意输入一个整数N(N≥2),确定N是否为素数,输出判定结果。解:对于整数N,若为偶数,则一定不是素数;若为奇数,从K=3至√N+1,逐个测试MOD(N,K)是否为零,若有一次为零,则N不是素数,否则N为素数。LOGICAL::FLAG=.TRUE.READ(*,*)NSELECTCASE(N)CASE(2)WRITE(*,*)'2是素数。'CASE(3:)IF(MOD(N,2)=

=0)THENWRITE(*,200)NSTOPENDIFM=INT(SQRT(FLOAT(N))+1)DOK=3,M,2IF(MOD(N,K)=

=0)FLAG=.FALSE.ENDDO

IF(FLAG)THENWRITE(*,100)NELSEWRITE(*,200)NENDIFCASEDEFAULTWRITE(*,*)‘数据输入不正确。’ENDSELECT100FORMAT(1X,I4,‘是素数。’)200FORMAT(1X,I4,‘不是素数。’)END17长安大学地学信息技术研究所[例4.5]求解方程Ax2+Bx+C=0。A,B,C由键盘输入,计算且输出方程解。

(1)A=0,B≠0;(方程只有一个解)(2)A=0,B=0,C=0;(方程有无穷个解)(3)A=0,B=0,C≠0;(方程无解)(4)A≠0,B2-4AC>0;(方程有二个不同的实数解)(5)A≠0,B2-4AC=0;(方程有二个相同的实数解)(6)A≠0,B2-4AC<0;(方程有二个不同的复数解)解:依题意设计算法,并画流程图(盒图或PAD图)。

程序:输入:1.0,1.0,-2.0↙

输出:X1=1.000000X2=-2.000000

18长安大学地学信息技术研究所真假C/=0假真输出:无穷解输出:无解输出:有1解XR=-B/2AD0=SQRT(D)XI=SQRT(-D)/2AX1=(-B+D0)/2AX2=(-B-D0)/2AD=B2-4AC输出:XR,XI输出:X1,X2输入A,B,C开始A=0假真B/=0假真结束D<019长安大学地学信息技术研究所WRITE(*,*)'PLEASEINPUTA,B,C‘READ(*,*)A,B,CD=B*B-4*A*CIF(A==0)THENIF(B/=0)THENWRITE(*,*)'只有一个解:',C/BELSEIF(C/=0)THEN

温馨提示

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

评论

0/150

提交评论