《fortran选择结构及基本语句.ppt》由会员分享,可在线阅读,更多相关《fortran选择结构及基本语句.ppt(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 24.1 4.1 概述概述l顺序结构程序特点:程序自上而下按语句顺序逐句执行。是三大结构之一。顺序结构程序特点:程序自上而下按语句顺序逐句执行。是三大结构之一。l选择结构程序特点:根据条件判定结果决定语句执行顺序。是三大结构之一。选择结构程序特点:根据条件判定结果决定语句执行顺序。是三大结构之一。lFORTRAN90FORTRAN90提供提供IFIF和和SELECTSELECT语句来实现选择结构。语句来实现选择结构。l示例示例: :输入学生成绩,判定合格与否,输出判定结果。输入学生成绩,判定合格与否,输出判
2、定结果。 PROGRAM exam4_1PROGRAM exam4_1 CHARACTER CHARACTER* *6 grade6 grade WRITE( WRITE(* *,“(,“(输入学生成绩:输入学生成绩:)”)”) READ ( READ (* *, ,* *)s)s IF IF (s=60) (s=60) THENTHEN grade= grade=合格合格 ELSEELSE grade= grade=不合格不合格 END IFEND IF WRITE( WRITE(* *, ,* *)该学生成绩该学生成绩,grade,grade,。 END programEND progra
3、ms 6s 60 0假假真真输出输出gradegrade结结 束束开开 始始输入成绩输入成绩s s“合格合格”gradegrade“不合格不合格”gradegrade长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 34.2 4.2 逻辑逻辑IFIF语句语句l逻辑逻辑IFIF语句语法:语句语法: IF(IF()S 其中:其中:e e为逻辑表达式或关系表达式。为逻辑表达式或关系表达式。 S S为赋值语句、输入输出语句、为赋值语句、输入输出语句、STOPSTOP、EXITEXIT等可执行语句。等可执行语句。l逻辑逻辑IFIF语句功能:先求语句功能:先求e e值
4、值, ,为真为真(.TRUE.),(.TRUE.),执行语句执行语句S S。 l示例:示例: READ (READ (* *, ,* *)i,j)i,j IF(ij) WRITE( IF(iB) READ (IF (AB) READ (* *, ,* *) A) AIF (X.EQ.10.0) WRITE(IF (X.EQ.10.0) WRITE(* *, ,* *) X) XIF (ABS(A-B)1E-7) STOPIF (ABS(A-B)B) EXITIF (AB) EXITIF (SUM .LT. 100.0) G0TO 10IF (SUM .LT. 100.0) G0TO 10非法逻
5、辑非法逻辑IFIF语句:语句:IF (B.LT.100.0) IF (B.GE.80) A=BIF (B.LT.100.0) IF (B.GE.80) A=B IF (X.GT.100.0) ENDIF (X.GT.100.0) ENDIF (AB) T=A A=B B=TIF (AB) T=A A=B B=TIF (AB .AND. AC) DATA A/8/IF (AB .AND. AC) DATA A/8/IF (AB .AND. AC)IF (AB .AND. AC)IF A.GT.Max Max=AIF A.GT.Max Max=A 长安大学地学信息技术研究所长安大学地学信息技术研究
6、所09/10学年第一学期学年第一学期 5 例例4.14.1已知三个整数已知三个整数A,B,C,A,B,C,输入其值并打印三个数中最大值。输入其值并打印三个数中最大值。 解:根据题意设计算法并画程序流程图解:根据题意设计算法并画程序流程图, ,如图如图4-24-2所示。所示。 程序:程序: INTEGER A,B,C,maxINTEGER A,B,C,max WRITE( WRITE(* *,“(,“(请输入三个整数请输入三个整数:)”):)”) READ( READ(* *, ,* *) A,B,C) A,B,C max=A max=A IF(Bmax) max=B IF(Bmax) max=
7、B IF(Cmax) max=C IF(Cmax) max=C WRITE( WRITE(* *,100) max,100) max 100 FORMAT(1X,max=,I5) 100 FORMAT(1X,max=,I5) END END输入:输入:请输入三个实数请输入三个实数:12,100,22:12,100,22输出:输出:max= 100max= 100 结束结束max=Amax=ABmaxBmax真真假假max=Bmax=BCmaxCmax假假真真max=Cmax=C输出输出maxmax输入:输入: A,B,CA,B,C长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学
8、年第一学期学年第一学期 64.3 4.3 块块IFIF语句语句l基本块基本块IFIF语句语法语句语法: IF(IF()THENe)THEN THEN ELSE ELSE ELSE END IF END IF IF(IF()THENe)THEN THEN END IF END IF THEN ELSE l基本块基本块IFIF语句功能:先求语句功能:先求e e值值, ,为真为真, ,执行执行THEN , , 为假为假, ,执行执行ELSE 。 lTHEN 和和ELSE 为一程序段为一程序段( (语句序列语句序列) )。长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第
9、一学期 7l选择结构有三种类型:选择结构有三种类型:双边结构双边结构、单边结构单边结构1 1、单边结构单边结构2 2。真真假假THENTHEN语句体语句体e eELSEELSE语句体语句体双边选择结构双边选择结构ENDIFENDIFENDIFENDIF真真假假e eTHENTHEN语句体语句体单边选择结构单边选择结构1 1ENDIENDIF F真真假假e eELSEELSE语句体语句体单边选择结构单边选择结构2 2IF (e) THENIF (e) THEN THEN ELSEELSE ELSE ENDIFENDIFIF (e) THENIF (e) THEN THEN ENDIFENDIFI
10、F (e) THENIF (e) THENELSEELSE ELSE ENDIFENDIFIF (.NOT. e) THENIF (.NOT. e) THEN ELSE ENDIFENDIF长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 8 例例4.24.2输入一个整数输入一个整数, ,判断它是奇数还是偶数判断它是奇数还是偶数, ,并打印输出。并打印输出。解:根据题意设计算法并画程序流程图解:根据题意设计算法并画程序流程图, ,如图如图4-44-4所示。所示。 程序:程序: 10 FORMAT(1X,I5, IS A EVEN NUMBER.)10 FO
11、RMAT(1X,I5, IS A EVEN NUMBER.) 20 FORMAT(1X,I5, IS A ODD NUMBER.) 20 FORMAT(1X,I5, IS A ODD NUMBER.) WRITE( WRITE(* *, ,* *) PLEASE INPUT A INTEGER NUMBER:) PLEASE INPUT A INTEGER NUMBER: READ( READ(* *, ,* *) N) N IF(MOD(N,2)= IF(MOD(N,2)= =0)THEN =0)THEN WRITE( WRITE(* *,10) N ,10) N ELSE ELSE WRI
12、TE( WRITE(* *,20) N,20) N END IF END IF END END 输入:输入:7777 输出:输出:77 IS A ODD NUMBER. 77 IS A ODD NUMBER. 假假打印奇数打印奇数输入输入N N结束结束MOD(N,2)=MOD(N,2)= =0=0打印偶数打印偶数真真长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 9l多支块多支块IFIF语句语法语句语法: IF(IF()THENe1)THEN 1 ELSE IF( ELSE IF()THENe2)THEN 2 ELSE IF( ELSE IF()THEN
13、e3)THEN 3 ELSE IF( ELSE IF()THENen)THEN n ELSE ELSE n+1 END IF END IF l功能:求功能:求eiei值值, ,为真为真, ,执行执行 i, ,均为假均为假, ,执行执行 n+1。 长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 10给定一学生成绩给定一学生成绩S,S,评判该学生等级评判该学生等级, ,并输出评判结果。并输出评判结果。评判标准:评判标准: 优:优:90S100;90S100;良:良:80S90;80S90;中:中:70S8070S80 及格:及格:60S70;60S70;不及
14、格:不及格:S60S60解:根据题意设计算法并画程序流程图解:根据题意设计算法并画程序流程图, ,如下图所示。如下图所示。 有三个等价程序可求解这一问题。有三个等价程序可求解这一问题。输出输出“优优”输出输出“良良”输出输出“中中”输出输出“及及”输出输出“不及不及”S60S60真真假假S70S70真真假假S80S80真真假假S90S90真真假假长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 11 ! !程序一程序一 WRITE(WRITE(* *,“(,“(输入学生成绩:输入学生成绩:)”)”) READ ( READ (* *, ,* *)S)S I
15、F (S60) WRITE( IF (S=60 .AND. S=60 .AND. S=70 .AND. S=70 .AND. S=80 .AND. S=80 .AND. S=90) WRITE(IF (S=90) WRITE(* *, ,* *)该学生成绩为:优。该学生成绩为:优。 ENDEND长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 12 ! !程序二程序二 WRITE(WRITE(* *,“(,“(输入学生成绩:输入学生成绩:)”)”) READ ( READ (* *, ,* *)S)S IF (S60) THEN IF (S60) THEN
16、 WRITE( WRITE(* *, ,* *)该学生成绩为:不及格。该学生成绩为:不及格。 ELSEELSE IF (S70) THEN IF (S70) THEN WRITE( WRITE(* *, ,* *)该学生成绩为:及格。该学生成绩为:及格。 ELSEELSE IF (S80) THEN IF (S80) THEN WRITE( WRITE(* *, ,* *)该学生成绩为:中。该学生成绩为:中。 ELSE ELSE IF (S90) THEN IF (S90) THEN WRITE( WRITE(* *, ,* *)该学生成绩为:该学生成绩为:良。良。 ELSEELSE writ
17、e( write(* *, ,* *)该学生成绩为:该学生成绩为:优。优。 END IFEND IF END IF END IF END IF END IFEND IFEND IFENDEND长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 13 READ READ (* *, ,* *)S )S ! !程序三程序三 IF (S60) THENIF (S60) THEN write( write(* *, ,* *)该学生成绩为:不及格。该学生成绩为:不及格。 ELSE IF (S70) THEN ELSE IF (S70) THEN write( wri
18、te(* *, ,* *) ) 该学生成绩为:及格。该学生成绩为:及格。 ELSE IF (S80) THEN ELSE IF (S80) THEN write( write(* *, ,* *) ) 该学生成绩为:中。该学生成绩为:中。 ELSE IF (S90) THENELSE IF (S90) THEN write( write(* *, ,* *) ) 该学生成绩为:良。该学生成绩为:良。 ELSE ELSE write( write(* *, ,* *) ) 该学生成绩为:优。该学生成绩为:优。 ENDIFENDIF END END长安大学地学信息技术研究所长安大学地学信息技术研究
19、所09/10学年第一学期学年第一学期 14l嵌套块嵌套块IFIF:指块:指块IFIF语句中又包含块语句中又包含块IFIF语句,可有多层嵌套。语句,可有多层嵌套。l对于嵌套块对于嵌套块IFIF,内外层块,内外层块IFIF语句体不能相互交叉。语句体不能相互交叉。l块块IFIF语句可命名语句可命名, ,在嵌套块在嵌套块IFIF中中, ,可对内外层块可对内外层块IFIF语句进行命名。语句进行命名。 l示例:求解方程示例:求解方程axax2 2+bx+c=0,+bx+c=0,需要检查是否需要检查是否a=0,a=0,防止除防止除0 0溢出。溢出。 Disc=bDisc=b* *b4b4* *a a* *c
20、 c Outer:Outer: IF (a/=0) THEN IF (a/=0) THEN Inner:Inner: IF (Disc0) THEN IF (Disc0) THEN WRITE( WRITE(* *, ,* *)Complex roots)Complex roots ELSE Inner ELSE Inner X1=(-b+SQRT(Disc)/(2 X1=(-b+SQRT(Disc)/(2* *a)a) X2=(-b-SQRT(Disc)/(2 X2=(-b-SQRT(Disc)/(2* *a)a) END IF END IF InnerInner END IF END IF
21、 OuterOuter 长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 15lMS-FORTRAN 90MS-FORTRAN 90引入类似引入类似PASCALPASCAL和和C C语言中块语言中块CASECASE结构的新功能。结构的新功能。lCASECASE结构功能:计算结构功能:计算表达式表达式值值, ,从多个分支中选择一分支执行。从多个分支中选择一分支执行。 SELECTSELECT CASE(SELECT CASE()e) CASE ( CASE () 1) 1 CASE ( CASE ()2) 2 CASE ( CASE ()n) n CASE
22、DEFAULT CASE DEFAULT n+1 END SELECT END SELECT :,: 集合表示示例:集合表示示例:l1 1,5 5,7-97-9l1 1,3 3,5 5,7 7,9 9l125125,250250,375375,500500lpen,pencil,pen,pencil,deskdesklA,B,C,A,B,C,DDl.TRUE.TRUE.长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 16l给定学生成绩给定学生成绩S S,评定优、良、中、及格、不及格等级,并输出。,评定优、良、中、及格、不及格等级,并输出。 INTEGER
23、(1) SINTEGER(1) S READ ( READ (* *, ,* *)S)S SELECT CASE(INT(S) SELECT CASE(INT(S) CASE(90:100) CASE(90:100) WRITE( WRITE(* *, ,* *)该学生成绩为:优。该学生成绩为:优。 CASE(80:89)CASE(80:89) WRITE( WRITE(* *, ,* *)该学生成绩为:良。该学生成绩为:良。 CASE(70:79)CASE(70:79) WRITE( WRITE(* *, ,* *)该学生成绩为:中。该学生成绩为:中。 CASE(60:69)CASE(60:
24、69) WRITE( WRITE(* *, ,* *)该学生成绩为:及格。该学生成绩为:及格。 CASE(0:59)CASE(0:59) WRITE( WRITE(* *, ,* *)该学生成绩为:不及格。该学生成绩为:不及格。 END SELECT END SELECT CASE DEFAULTCASE DEFAULT END END WRITE(WRITE(* *, ,* *) )输入成绩数据错!输入成绩数据错! 长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 174.4 4.4 选择结构程序设计举例选择结构程序设计举例 例例4.44.4任意输入一个
25、整数任意输入一个整数N(N2),N(N2),确定确定N N是否为素数,输出判定结果。是否为素数,输出判定结果。解:解:对于整数对于整数N,N,若为偶数若为偶数, ,则一定不是素数则一定不是素数; ;若为奇数若为奇数, ,从从K=3K=3至至N+1,N+1,逐个测试逐个测试MOD(N,K)MOD(N,K)是否为零是否为零, ,若有一次为零若有一次为零, ,则则N N不是素数不是素数, ,否则否则N N为素数。为素数。 LOGICAL : FLAG=.TRUE.LOGICAL : FLAG=.TRUE. READ( READ(* *, ,* *)N)N SELECT CASE (N) SELECT
26、 CASE (N) CASE (2) CASE (2) WRITE( WRITE(* *, ,* *) 2) 2是素数。是素数。 CASE (3:) CASE (3:) IF (MOD(N,2)= IF (MOD(N,2)= =0) THEN =0) THEN WRITE( WRITE(* *,200) N,200) N STOP STOP ENDIF ENDIF M=INT(SQRT(FLOAT(N)+1) M=INT(SQRT(FLOAT(N)+1) DO K=3,M,2 DO K=3,M,2 IF (MOD(N,K)= IF (MOD(N,K)= =0) FLAG=.FALSE.=0)
27、FLAG=.FALSE. ENDDO ENDDO IF (FLAG) THENIF (FLAG) THEN WRITE( WRITE(* *,100) N,100) N ELSE ELSE WRITE( WRITE(* *,200) N,200) N ENDIF ENDIFCASE DEFAULTCASE DEFAULT WRITE( WRITE(* *, ,* *) ) 数据输入不正确。数据输入不正确。END SELECTEND SELECT100 FORMAT(1X,I4,100 FORMAT(1X,I4,是素数。是素数。) )200 FORMAT(1X,I4,200 FORMAT(1X,
28、I4,不是素数。不是素数。) )ENDEND长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 18 例例4.54.5求解方程求解方程AxAx2 2+Bx+C=0+Bx+C=0。A,B,CA,B,C由键盘输入由键盘输入, ,计算且输出方程解。计算且输出方程解。 (1)A=0,B0;(1)A=0,B0;(方程只有一个解方程只有一个解) ) (2)A=0,B=0,C=0;( (2)A=0,B=0,C=0;(方程有无穷个解方程有无穷个解) ) (3)A=0,B=0,C0;( (3)A=0,B=0,C0;(方程无解方程无解) ) (4)A0,B (4)A0,B2 2
29、-4AC-4AC 0;(0;(方程有二个不同的实数解方程有二个不同的实数解) ) (5)A0,B (5)A0,B2 2-4AC=0;(-4AC=0;(方程有二个相同的实数解方程有二个相同的实数解) ) (6)A0,B (6)A0,B2 2-4AC-4AC0;(0;(方程有二个不同的复数解方程有二个不同的复数解) )解:解:依题意设计算法依题意设计算法, ,并画流程图(盒图或并画流程图(盒图或PADPAD图)。图)。 程序程序: 输入:输入:1.0,1.0,-2.01.0,1.0,-2.0 输出:输出:X1= 1.000000 X2= -2.000000X1= 1.000000 X2= -2.0
30、00000 长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 19真真假假C/=0C/=0假假真真输出输出: :无穷解无穷解输出输出: :无解无解输出输出: :有有1 1解解XR=-B/2AXR=-B/2AD0=SQRT(D)D0=SQRT(D)XI=SQRT(-D)/2AXI=SQRT(-D)/2AX1=(-B+D0)/2AX1=(-B+D0)/2AX2=(-B-D0)/2AX2=(-B-D0)/2AD=BD=B2 2-4AC-4AC输出输出:XR,XI:XR,XI输出输出:X1,X2:X1,X2输入输入A,B,CA,B,C开开 始始A=0A=0假假真真
31、B/=0B/=0假假真真结束结束D0D0长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 20WRITE(WRITE(* *, ,* *) ) PLEASE INPUT A,B,CPLEASE INPUT A,B,CREAD(READ(* *, ,* *) A,B,C) A,B,CD=BD=B* *B-4B-4* *A A* *C CIF(A= =0)THENIF(A= =0)THEN IF (B/=0) THEN IF (B/=0) THEN WRITE( WRITE(* *, ,* *) ) 只有一个解:只有一个解:,C/B,C/B ELSE IF(C
32、/=0)THEN ELSE IF(C/=0)THEN WRITE( WRITE(* *, ,* *) ) 方程方程无解。无解。 ELSE ELSE WRITE( WRITE(* *, ,* *) ) 方程有方程有无穷解。无穷解。 END IFEND IFELSE IF(D0)THEN ELSE IF(D0)THEN XR=-B/(2 XR=-B/(2* *A);XI=SQRT(-D)/(2A);XI=SQRT(-D)/(2* *A)A) WRITE( WRITE(* *,20) XR,XI;WRITE(,20) XR,XI;WRITE(* *,30) XR,XI,30) XR,XI ELSE
33、ELSE D0=SQRT(D) D0=SQRT(D) X1=(-B+D0)/(2 X1=(-B+D0)/(2* *A)A) X2=(-B-D0)/(2 X2=(-B-D0)/(2* *A)A) WRITE( WRITE(* *,10) X1,X2,10) X1,X2 END IF END IF 10 FORMAT(1X,X1=,F10.6, X2=,F10.6)10 FORMAT(1X,X1=,F10.6, X2=,F10.6)2020 FORMAT(1X,X1=,F10.6, +,F10.6, i) FORMAT(1X,X1=,F10.6, +,F10.6, i) 30 FORMAT(1X,
34、X2=,F10.6, -,F10.6, i)30 FORMAT(1X,X2=,F10.6, -,F10.6, i) END END 输入:输入:1.0,1.0,-2.01.0,1.0,-2.0 输出:输出:X1= 1.000000 X2= -2.000000X1= 1.000000 X2= -2.000000 长安大学地学信息技术研究所长安大学地学信息技术研究所09/10学年第一学期学年第一学期 214.5 4.5 习题四习题四1 1某商店对购货额为某商店对购货额为10001000元以上元以上( (含含10001000元元, ,下同下同),),八折优待八折优待;500;500元元 以上以上10
35、001000元以下元以下, ,九折优待九折优待;200;200元以上元以上500500元以下元以下, ,九五折优待九五折优待; ; 100 100元以上元以上200200元以下元以下, ,九七折优待九七折优待;100;100元以下元以下, ,不优待。请编写不优待。请编写 程序程序, ,输入购货额输入购货额, ,计算优惠货款计算优惠货款, ,并打印输出该货款。并打印输出该货款。 2 2计算税收。企业产值小于计算税收。企业产值小于10001000万万, ,税率为税率为3%;3%;企业产值大于等于企业产值大于等于10001000万小于万小于20002000万万, ,税率为税率为5%;5%;企业产值大于等于企业产值大于等于20002000万小于万小于50005000万万, ,税率税率为为7%;7%;企业产值大于等于企业产值大于等于50005000万小于万小于1 1亿亿, ,税率为税率为10%;10%;企业产值大于等企业产值大于等于于1 1亿小于亿小于5 5亿亿, ,税率为税率为14%;14%;企业产值大于等于企业产值大于等于5 5亿亿, ,税率为税率为20%20%。请编。请编写程序写程序, ,输入某企业产值输入某企业产值, ,计算出其当年的应交税值计算出其当年的应交税值, ,并打印输出。并打印输出。