fortran95新課件fortran95第二章_第1頁(yè)
fortran95新課件fortran95第二章_第2頁(yè)
fortran95新課件fortran95第二章_第3頁(yè)
fortran95新課件fortran95第二章_第4頁(yè)
fortran95新課件fortran95第二章_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第2章 分支程序設(shè)計(jì)本章介紹分支程序的概念和設(shè)計(jì)方法。通過(guò)本章的學(xué)習(xí),應(yīng)了解結(jié)構(gòu)化程序的基本概念掌握Fortran95語(yǔ)言提供的分支程序設(shè)計(jì)所使用的語(yǔ)句和分支程序的編寫方法。2018/9/3012.1 基本程序結(jié)構(gòu)2.1.1 結(jié)構(gòu)化程序設(shè)計(jì)概述荷蘭學(xué)者Dijkctra提出用“結(jié)構(gòu)化程序設(shè)計(jì)方法 來(lái)解決編寫具有良好結(jié)構(gòu)的程序問(wèn)題。它規(guī)定了一套較完整的實(shí)施手段,使程序具有合理的結(jié)構(gòu), 以便保證和驗(yàn)證程序的正確性,它規(guī)定了程序設(shè)計(jì)者不能隨心所欲地編寫程序,而要按照一定的結(jié)構(gòu)構(gòu)形式來(lái)設(shè)計(jì)和編寫程序,以保證程序的易讀、易理解和易修改,進(jìn)而提高程序設(shè)計(jì)和維護(hù)工作的效率。2018/9/302“結(jié)構(gòu)化程序設(shè)計(jì)

2、方法”也叫SD(Structed Design)方法,是按結(jié)構(gòu)化的思想和原則組織數(shù)據(jù)和編寫程序的一種方法。它的基本指導(dǎo)思想是簡(jiǎn)化編程復(fù)雜性,追求的目標(biāo)是使程序結(jié)構(gòu)清晰,易讀性強(qiáng). 其特點(diǎn)主要體現(xiàn)在以下方面:1. 規(guī)定三種基本結(jié)構(gòu)(即順序結(jié)構(gòu)、分支(選擇)結(jié)構(gòu)、循環(huán)結(jié)構(gòu))是組成程序的唯一結(jié)構(gòu)形式。2. 將程序模塊化,即一個(gè)大程序或軟件系統(tǒng)由若干個(gè)相對(duì)獨(dú)立的模塊組成.這些模塊之間的聯(lián)系應(yīng)盡可能少;而模塊內(nèi)部的聯(lián)系則盡可能緊密。并且各個(gè)模塊均為單入口和單出口,絕對(duì)不應(yīng)有模塊之間的無(wú)條件轉(zhuǎn)移(GOTO)語(yǔ)句。3采用自頂向下的設(shè)計(jì)過(guò)程,反復(fù)運(yùn)用分解與抽象的方法,即對(duì)一個(gè)大而復(fù)雜的問(wèn)題逐步分解為幾個(gè)相對(duì)簡(jiǎn)

3、單而獨(dú)立的子問(wèn)題,對(duì)各子問(wèn)題再進(jìn)行分解,直到每個(gè)子問(wèn)題可用一個(gè)子程序來(lái)實(shí)現(xiàn)。這種方法也叫逐步求精。2018/9/3032.1.2 順序結(jié)構(gòu)這是一種最簡(jiǎn)單、最基本的結(jié)構(gòu)。它的特點(diǎn)是:結(jié)構(gòu)內(nèi)的各個(gè)功能模塊是按照它們出現(xiàn)的順序依次執(zhí)行的,且只有一個(gè) 入口和一個(gè)出口,如圖2-1所示。其中的每個(gè)功能塊可以是一條或多條非轉(zhuǎn)移類的可執(zhí)行語(yǔ)句,即一個(gè)順序結(jié)構(gòu)可由一條或多條順序執(zhí)行的語(yǔ)句組成。圖2-1順序結(jié)構(gòu)2018/9/304nba2.1.3 分支(選擇)結(jié)構(gòu)在這種結(jié)構(gòu)中,要對(duì)給定的條件進(jìn)行判斷,根據(jù)判斷結(jié)果選擇不同的執(zhí)行路徑, 以完成不同的功能。分支結(jié)構(gòu)又有兩向分支和多向分支的形式,如圖2-2為兩向分支結(jié)構(gòu)

4、,圖2-3為多向分支結(jié)構(gòu)。它們與順序結(jié)構(gòu)的共同點(diǎn)是,也只有一個(gè)入口和一個(gè)出口。實(shí)現(xiàn)這種分結(jié)構(gòu)要使用相應(yīng)的條件選擇語(yǔ)句,其中a塊和b塊及多向分支結(jié)構(gòu)中的各語(yǔ)句塊根據(jù)實(shí)際應(yīng)用可以是空塊,即在條件滿足或不滿足時(shí)結(jié)束這一結(jié)構(gòu),直接執(zhí)行該結(jié)構(gòu)的后繼語(yǔ)句。這種語(yǔ)句塊中又可以是另一個(gè)分支結(jié)構(gòu),這就形成了分支結(jié)構(gòu)的嵌套。2018/9/305入 口入 口K= ?= 1.T.F.條件出 口出 口圖2-2 兩向分支的選擇結(jié)構(gòu)圖2-3多向分支的選擇結(jié)構(gòu)2018/9/306a塊b塊語(yǔ)句塊1= 2語(yǔ)句塊 2= n語(yǔ)句塊 32.1.4 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)也稱重復(fù)處理結(jié)構(gòu),即該結(jié)構(gòu)中的語(yǔ)句被重復(fù)執(zhí)行, 直到滿足或不滿足某一給定

5、的條件為止。這種結(jié)構(gòu)也僅有一個(gè)入口和一個(gè)出口, 這種結(jié)構(gòu)在應(yīng)用時(shí)有兩種形式在圖2-4所示的循環(huán)結(jié)構(gòu)中,當(dāng)條件滿足時(shí)執(zhí)行a塊,直到條件不滿足時(shí)執(zhí)行該結(jié)構(gòu)的后繼語(yǔ)句,這種結(jié)構(gòu)稱為“當(dāng)型”循環(huán)結(jié)構(gòu)。 在圖2-5所示的循環(huán)結(jié)構(gòu)中,先執(zhí)行a塊,直到條件滿足時(shí)執(zhí)行該結(jié)構(gòu)的后繼語(yǔ)句。結(jié)構(gòu)。這種結(jié)構(gòu)稱為“直到型”循環(huán)2018/9/30在程序設(shè)計(jì)時(shí)使用循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。7圖2-5直到型循環(huán)結(jié)構(gòu)圖2-4當(dāng)型循環(huán)結(jié)構(gòu)2018/9/308不滿足條件滿足a塊滿足條件不滿足a塊2.2 IF分支結(jié)構(gòu)2.2.1 邏輯表達(dá)式在FORTRAN程序中,邏輯表達(dá)式通常被用作描述判斷條件。其中關(guān)系表達(dá)式又是邏輯表達(dá)式的簡(jiǎn)單形式。一

6、、關(guān)系表達(dá)式關(guān)系表達(dá)式用于比較兩個(gè)算術(shù)表式或字符表達(dá)式,若其結(jié)果為.TRUE.(真),表示關(guān)系成立,若為.FALSE.(假),表示關(guān)系不成立。關(guān)系表達(dá)式的一般形式為:2018/9/309其中的表達(dá)式1和表達(dá)式2可以都是算術(shù)表達(dá)式或都是字符表達(dá)式。關(guān)系運(yùn)算符共有以下六種:= = 或 .EQ.等于不等于大于大于或等于小于小于或等于/=或 .NE.或 .GT.= 或 .GE.或 .LT.10 或 a .GT.10n+1 2*a+3*b或 n+1 .LT. 2*a+3*babs(a-b) =“that” 或 “this” .GE. “that”2018/9/30101. 使用字母形式的關(guān)系運(yùn)算符時(shí),運(yùn)

7、算符兩端的圓點(diǎn)不能省略.2. 關(guān)系表達(dá)式中運(yùn)算符的運(yùn)算順序是,先進(jìn)行算術(shù)運(yùn)算或字符運(yùn)算,然后進(jìn)行關(guān)系運(yùn)算。如關(guān)系表達(dá)式a+b.GT.x+y先完成a+b 和x+y的運(yùn)算,再進(jìn)行比較運(yùn)算。3. 在進(jìn)行算術(shù)表達(dá)式值的比較時(shí), 允許關(guān)系運(yùn)算符端的類型可以不一致,并自動(dòng)轉(zhuǎn)換成同一類型后再進(jìn)行比較。轉(zhuǎn)換規(guī)則與算術(shù)表達(dá)式中的類型轉(zhuǎn)換規(guī)則相同。4. 復(fù)數(shù)類型只能進(jìn)行相等或不等的比較運(yùn)算。5. 由于實(shí)型數(shù)在計(jì)算機(jī)內(nèi)是近似表示的, 所以理論上相等的兩個(gè)實(shí)數(shù),由于誤差原因, 在機(jī)內(nèi)未必完全相等。 解決的方法是讓兩者之差的絕對(duì)值小于某個(gè)很小的數(shù)時(shí)就認(rèn)為其值相等。如x.EQ.y可改寫成ABS(x-y).LT.1e-6。

8、6對(duì)字符型量的比較,較。實(shí)際上是對(duì)它們的ASCII碼值進(jìn)行比2018/9/3011二、邏輯表達(dá)式1邏輯表達(dá)式的一般形式及運(yùn)算規(guī)則邏輯表達(dá)式由邏輯元素和邏輯運(yùn)算符組成。其一般形式為:其中邏輯元素可以是邏輯常量、邏輯變量、邏輯數(shù)組元素、邏輯函數(shù)、關(guān)系表達(dá)式或另一個(gè)邏輯表達(dá)式。2018/9/3012FORTRAN語(yǔ)言中的邏輯運(yùn)算符共有以下幾種:.AND.素邏輯“與”,其運(yùn)算規(guī)則是,僅當(dāng).AND.兩邊的邏輯元的值均為“真”時(shí),運(yùn)算的結(jié)果才為“真”,否則為“假”。.OR.素的邏輯“或”,其運(yùn)算規(guī)則是,只要.OR.兩邊的邏輯元值有一個(gè)為“真”,則運(yùn)算結(jié)果為“真”, 僅當(dāng).OR.兩邊的元素值均為“假”時(shí),運(yùn)

9、算結(jié)果才為“假”。.NOT.能寫邏輯“非”,這是一個(gè)一元運(yùn)算符,且邏輯元素只在.NOT.右側(cè),其運(yùn)算規(guī)則是邏輯元素的值為“真”,結(jié)果為“假”,反之結(jié)果為“真”。.XOR.輯元邏輯“異或”,其運(yùn)算規(guī)則是,如果 .XOR.兩邊的邏素值不相同時(shí),結(jié)果為“真”,否則結(jié)果為“假”。.EQV.邏輯相等,其運(yùn)算規(guī)則是,如果.EQV.兩邊的邏輯元素2018/9/3013值都為“真”或都為“假”時(shí),結(jié)果為“真”,否則結(jié)果為(1.EQ.2 ).EQV .FALSE.下面是一些邏輯表達(dá)式的例子: x .GE. 0.0 .AND. x .LE. 5 x .GT. 1.0 .OR. x. .LE. -9.0(a+b).

10、EQ. d .AND. c .NE. e同時(shí)成立表示0x5表示x1或x-9 表示a+b=d和ce(L1 .EQ. L2) .EQV.false.表示 L1=L2 是否不成立注意,在書寫邏輯運(yùn)算符時(shí),兩端的圓點(diǎn)是不能省略掉的。2邏輯表達(dá)式中的運(yùn)算順序在較為復(fù)雜的邏輯表達(dá)式中,可能含有算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和邏輯運(yùn)算符,表2-2中給出了它們的運(yùn)算優(yōu)先級(jí),同級(jí)運(yùn)符按從左到右的順序進(jìn)行。可用園括號(hào)改變表達(dá)式的運(yùn)算順序。2018/9/30142.2.2IFELSEENDIF結(jié)構(gòu)IFELSEENDIF結(jié)構(gòu)是FORTRAN程序中常用的選擇結(jié)構(gòu),它主要由塊IF語(yǔ)句、ELSE語(yǔ)句和ENDIF語(yǔ)句共同構(gòu)成, 這三

11、個(gè)語(yǔ)句都不能單獨(dú)使用。其一般形式為:IF(邏輯表達(dá)式)THENIF塊ELSEELSE塊ENDIF該結(jié)構(gòu)的執(zhí)行過(guò)程是:先計(jì)算邏輯表達(dá)式的值并加以判斷, 若此值為真,則執(zhí)行IF塊中的語(yǔ)句,然后執(zhí)行ENDIF語(yǔ)句結(jié)束該結(jié)構(gòu),繼續(xù)執(zhí)行其后繼語(yǔ)句;若此值為假,則跳過(guò)IF塊中的語(yǔ)句,直接執(zhí)行ELSE塊中的語(yǔ)句,然后執(zhí)行ENDIF語(yǔ)句結(jié)束該結(jié)構(gòu),并繼續(xù)執(zhí)行其后繼語(yǔ)句。2018/9/3015例2.1編寫程序計(jì)算函數(shù)-1x-1.0 .and. x1.0) then y=1.0/sgrt (1.0-x*x)elsey=1.0endifwrite (x*x) ”x=,” x, “y=”, y end的值。2018/

12、9/3016例2.2編寫一個(gè)程序,輸入兩個(gè)整數(shù)A、B, 將其中較大者放入變量A中,較小者放在B中,然后輸出A、B。程序如下:program ex202 implicit none integer a ,b , mwrite (*, *) “ 輸入A、B的值:”read (*, *) a, b if (ab) then m=aa=b b=m endifwrite (*, *) “a=”, a, “b=”, b end程序的判定結(jié)構(gòu)中沒(méi)使用ELSE塊,ELSE語(yǔ)句也省略了。當(dāng)條件a100) then grade=?elseif (score=90) then grade=Aelseif (scor

13、e=80) then grade=Belseif (socre=70) then grade=Celseif (score=60) then grade=Delseif (socre=0) then grade=Eelsegrade=? endifwrite (x*x) “成績(jī)等級(jí)為:”gradeend這個(gè)程序定義了兩個(gè)變量,一個(gè)是整型變量score,表示學(xué)生分?jǐn)?shù),另一個(gè)字符型變量grade,表示成績(jī)等級(jí)。當(dāng)程序執(zhí)行到塊IF語(yǔ)句時(shí),如果score100成立,說(shuō)明輸入的分?jǐn)?shù)有錯(cuò),則執(zhí)行第一個(gè)語(yǔ)句塊,將“?”號(hào)賦予變量grade后再到ENDIF,進(jìn)而執(zhí)行write語(yǔ)句輸出字符“?”表示成績(jī)輸入有錯(cuò)

14、 2018/9/30192.3SELECT CASE結(jié)構(gòu)利用SELECT CASE結(jié)構(gòu)也可以實(shí)現(xiàn)多重判定,即多分支選擇結(jié)構(gòu)。該結(jié)構(gòu)的一般形式如下:select case (變量)case(數(shù)值1) 語(yǔ)句塊1case(數(shù)值2) 語(yǔ)句塊2case(數(shù)值n) 語(yǔ)句塊ncase default語(yǔ)句塊n+1 end select其中的“變量”只能是整型、字符型和邏輯型,數(shù)值i只能是常量,不能使用變量,而且必須和select case中的變量有相同的類型。它可以是單個(gè)的常數(shù),或是用逗號(hào)分開(kāi)的多個(gè)常數(shù),也可以是用冒號(hào)分開(kāi)的兩個(gè)常數(shù),表示一個(gè)值域,即取包括 這兩個(gè)常數(shù)在內(nèi)的所有這兩個(gè)數(shù)之間的數(shù)值。例如(1:1

15、0) 表示取1到10之間的整數(shù),包括1和10;(“A”:“D”)表示取A、B、C、D四個(gè)字符。如果省略其中第一個(gè)數(shù),表示取所有小于或等于第二個(gè)數(shù)的值,如(:5)表示所有小于等于5省略第二個(gè)數(shù),表示取所有大于等于第一個(gè)數(shù)的值,如(5:)表20 示的數(shù)2值018;/9/3若0例2-4編寫一個(gè)程序,根據(jù)輸入的運(yùn)算符進(jìn)行相應(yīng)的算術(shù)運(yùn)算。程序如下:program ex204 implicit none real a, b, anscharacter operator read (*,*) a, bread (*, ”(A1)”) operator select case (operator) case

16、(+)ans=a+b case (-)ans=a-b case (*)ans=a*b case (/)ans=a/b case defaultwrite (*,*) “無(wú)定義的運(yùn)算符:”, operator stopend selectwrite (*,*) a, operator, b, =, ans end運(yùn)行這個(gè)程序時(shí),需輸入兩個(gè)實(shí)型數(shù),并再輸入一個(gè)算術(shù)運(yùn)算符。程序根據(jù)這個(gè)運(yùn)算符決定執(zhí)行哪一個(gè)賦值語(yǔ)句,完成相應(yīng)計(jì)算,并輸出結(jié)果;如果輸入了錯(cuò)誤的非算術(shù)運(yùn)算符,程序?qū)⑤敵鎏崾拘畔?,同時(shí)也輸出這個(gè)錯(cuò)誤的運(yùn)算 符,然后將停止程序的執(zhí)行。程序中的第二個(gè)read語(yǔ)句用的是有格式輸入,將在第四章中介紹

17、。2018/9/3021例2.5編寫程序,輸入一個(gè)月份,然后根據(jù)該月份輸出該月份對(duì)應(yīng)的天數(shù)。若要輸入2月份,則要再輸入.TRUE.或.FLASE.以區(qū)分是閏年或本年。程序如下:program ex205 implicit none logical leapinteger month, days read (*,*) month select case (month) case (4,6,9,11)days=30case (1,3,5,7,8,10,12)days=31 case (2)read (*,*) leap2018/9/30select case (leap)case (.true.)

18、 days=29case (.false.) days=28end selectcase defaultwrite (*,*) month, month input error! stopend selectwrite (*,*) month ,days end22在使用select case 語(yǔ)句時(shí)注意以下問(wèn)題:每個(gè)case后的常量必須是互不相同的,否則會(huì)出現(xiàn)不確定情況而使程序無(wú)法執(zhí)行;每個(gè)case語(yǔ)句出現(xiàn)的順序不影響程序的執(zhí)行;不允許使用轉(zhuǎn)移語(yǔ)句從select case結(jié)構(gòu)外轉(zhuǎn)移到某個(gè)case語(yǔ)句塊內(nèi),也不能從一個(gè)case語(yǔ)句塊轉(zhuǎn)移到另一個(gè)語(yǔ)句塊內(nèi),但是case語(yǔ)句塊內(nèi)可用轉(zhuǎn)移語(yǔ)句轉(zhuǎn)移到s

19、elect case語(yǔ)句之外。select case語(yǔ)句必須和endselect語(yǔ)句成對(duì)使用2.4分支結(jié)構(gòu)的嵌套所謂分支結(jié)構(gòu)的嵌套,是在各種分支結(jié)構(gòu)的語(yǔ)句塊中,如IF塊、ELSE塊或ELSE IF的語(yǔ)句塊中又完整地含有另一個(gè)分支結(jié)構(gòu)。2018/9/3023例2.6編寫一個(gè)根據(jù)利潤(rùn)計(jì)算應(yīng)征稅額的程序。假設(shè):利潤(rùn)P在100元以下的稅率為3%,100元P500元的稅率為4%,500元P1000元的稅率5%,1000元P2000元的稅率為6%,2000元P5000元的稅率為7%,P5000元 的稅率為8%,利潤(rùn)為零或虧本的不征稅。程序如下:program ex206 implicit nonereal

20、 (kind=4)p, r, tax read (*,*) pif (p=0.0) then r=0.0elseif (p100.0) then r=0.03elseif (p500.0) then r=0.04elseif (p1000.0) then r=0.05elseif (p2000.0) thenr=0.06elseif (pbig) big=y if (zbig) big=z print *, bigend該程序用于求三個(gè)實(shí)數(shù)x,y,z中的最大數(shù),其中使用了兩個(gè)邏輯if語(yǔ)句,請(qǐng)讀者自己分析一下它們的執(zhí)行過(guò)程。2018/9/30262.5.2 GOTO語(yǔ)句該語(yǔ)句又稱為無(wú)條件轉(zhuǎn)移語(yǔ)句,其一般形式為:GOTOS其中S是該GOTO所在程序段內(nèi)的一個(gè)可執(zhí)行語(yǔ)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論