Fortran95程序設(shè)計-第七章_第1頁
Fortran95程序設(shè)計-第七章_第2頁
Fortran95程序設(shè)計-第七章_第3頁
Fortran95程序設(shè)計-第七章_第4頁
Fortran95程序設(shè)計-第七章_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、中山大學環(huán)境科學與工程學院中山大學環(huán)境科學與工程學院陸陸 希希九. 函數(shù)和子程序概述概述語句函數(shù)語句函數(shù)函數(shù)子程序(自定義函數(shù))(函數(shù)子程序(自定義函數(shù))(funcationfuncation)子例行程序(子例行程序(subroutinesubroutine)實參和虛參之間的數(shù)據(jù)傳送實參和虛參之間的數(shù)據(jù)傳送其它應用其它應用 概述概述使用使用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)可設(shè)計和編寫一可設(shè)計和編寫一些比較復雜的程序;使用函數(shù)和子例行程序能編寫編些比較復雜的程序;使用函數(shù)和子例行程序能編寫編寫結(jié)構(gòu)清晰、層次分明、短小簡潔的好程序,是編寫寫結(jié)構(gòu)清晰、層次分明、短小簡潔的好程

2、序,是編寫高質(zhì)量、高水平、高效率程序的有效手段。高質(zhì)量、高水平、高效率程序的有效手段。在設(shè)計和編寫程序時在設(shè)計和編寫程序時, ,程序中不同部位會多次出現(xiàn)相同程序中不同部位會多次出現(xiàn)相同或相似的運算或處理過程(程序代碼)或相似的運算或處理過程(程序代碼)例如:求五邊形例如:求五邊形ABCDEABCDE的面積問題的面積問題, ,如如圖所圖所示。示。 已知:五邊形已知:五邊形5 5條邊長為:條邊長為:a a、b b、c c、d d、e e, ,兩條對角線為:兩條對角線為:f f、g g。五邊形面積計算問題變?yōu)?。五邊形面積計算問題變?yōu)? 3個三角形面積計算問題個三角形面積計算問題,3,3個個三角形面積

3、三角形面積area1area1、area2area2、area3area3之和就是五邊形面積之和就是五邊形面積areaarea。 三角形面積三角形面積A A求解公式:三邊長為求解公式:三邊長為x,y,zx,y,z。)xp)(yp)(xp(pA2/ )zyx(p A AB BC CD DE Ea ab bc cd de ef fg garea1area1area2area2area3area3如情況如情況1 1:一般方法求解一般方法求解函數(shù)方法求解函數(shù)方法求解如如情況情況2 2:問題一問題一:某房地產(chǎn)公司買下一塊呈三角形形狀的地盤準備蓋住宅:某房地產(chǎn)公司買下一塊呈三角形形狀的地盤準備蓋住宅小區(qū)小

4、區(qū), ,地價為每平方米地價為每平方米10001000元元, ,求這塊地的總價。求這塊地的總價。 求解問題的核心是計算三角形面積。求解問題的核心是計算三角形面積。問題二問題二:某單位有一個呈三棱臺形狀的水箱:某單位有一個呈三棱臺形狀的水箱, ,平均每天消耗平均每天消耗2 2水箱水箱水水, ,水價為每立方米水價為每立方米8 8角錢角錢, ,計算每天需支付的水費。計算每天需支付的水費。 求解問題的核心是計算三角形面積。求解問題的核心是計算三角形面積。用一般方法求解:用一般方法求解:用函數(shù)方法求解兩問題:用函數(shù)方法求解兩問題:對于比較復雜的問題對于比較復雜的問題, ,設(shè)計和編寫程序需要采用科學的程設(shè)計

5、和編寫程序需要采用科學的程序設(shè)計方法。模塊化和結(jié)構(gòu)化程序設(shè)計方法是常用的程序設(shè)計方法。模塊化和結(jié)構(gòu)化程序設(shè)計方法是常用的程序設(shè)計方法序設(shè)計方法, ,使用這些方法可大大降低問題的復雜性使用這些方法可大大降低問題的復雜性, ,使使復雜問題的求解變得相對容易。使用函數(shù)和子程序可使復雜問題的求解變得相對容易。使用函數(shù)和子程序可使用模塊化和結(jié)構(gòu)化程序設(shè)計方法設(shè)計和編寫大型、復雜、用模塊化和結(jié)構(gòu)化程序設(shè)計方法設(shè)計和編寫大型、復雜、高質(zhì)量程序。高質(zhì)量程序。對復雜問題逐層進行任務分解對復雜問題逐層進行任務分解, ,得到問題分層結(jié)構(gòu)圖。根得到問題分層結(jié)構(gòu)圖。根據(jù)分層結(jié)構(gòu)圖據(jù)分層結(jié)構(gòu)圖, , 逐層設(shè)計和編寫程序。

6、最頂層問題用主逐層設(shè)計和編寫程序。最頂層問題用主程序?qū)崿F(xiàn)程序?qū)崿F(xiàn), ,其余層子問題用函數(shù)或子例行程序?qū)崿F(xiàn)其余層子問題用函數(shù)或子例行程序?qū)崿F(xiàn), ,最后最后將主程序和若干函數(shù)或子例行程序組裝成完整的可運行將主程序和若干函數(shù)或子例行程序組裝成完整的可運行程序。程序。設(shè)計和編寫主程序時設(shè)計和編寫主程序時, ,可假定下一層子問題已經(jīng)通過函數(shù)可假定下一層子問題已經(jīng)通過函數(shù)或子程序?qū)崿F(xiàn)或子程序?qū)崿F(xiàn), ,暫不考慮其具體實現(xiàn)內(nèi)容暫不考慮其具體實現(xiàn)內(nèi)容如如情情況況3 3:輸入一批測試數(shù)據(jù)輸入一批測試數(shù)據(jù)(30(30個個),),對其排序?qū)ζ渑判? ,輸出排序結(jié)果數(shù)據(jù)。輸出排序結(jié)果數(shù)據(jù)。 一一般般方方法法求求解:解:

7、結(jié)構(gòu)化程序設(shè)計方法及求解:結(jié)構(gòu)化程序設(shè)計方法及求解:問題:將測試數(shù)據(jù)排序并輸出問題:將測試數(shù)據(jù)排序并輸出子問題:排序子問題:排序子問題:輸入子問題:輸入子問題:輸出子問題:輸出自自頂頂向向下下自自底底向向上上任務分解及分層結(jié)構(gòu)圖任務分解及分層結(jié)構(gòu)圖 語句函數(shù)語句函數(shù) 在求解實際問題時在求解實際問題時, ,特別是在求解有關(guān)科學與工程數(shù)值特別是在求解有關(guān)科學與工程數(shù)值計算問題時計算問題時, ,常常會遇到計算一些數(shù)學表達式常常會遇到計算一些數(shù)學表達式, ,如:如: 這些數(shù)學表達式在程序中多次出現(xiàn)這些數(shù)學表達式在程序中多次出現(xiàn), ,需要重復書寫它們需要重復書寫它們, ,不但浪費了寶貴的時間和精力不但浪

8、費了寶貴的時間和精力, ,而且也容易出錯。任何數(shù)學而且也容易出錯。任何數(shù)學表達式實際上都可表示成一元、二元或多元函數(shù)關(guān)系表達式實際上都可表示成一元、二元或多元函數(shù)關(guān)系, ,即即F(xF(x1 1,x,x2 2, ,x,xn n) ), ,這些函數(shù)關(guān)系如果沒有對應的標準函數(shù)這些函數(shù)關(guān)系如果沒有對應的標準函數(shù), ,則則需要用戶設(shè)法定義新的函數(shù)來實現(xiàn)它們。需要用戶設(shè)法定義新的函數(shù)來實現(xiàn)它們。 FORTRAN 90FORTRAN 90提供了語句函數(shù)定義功能來定義一些簡單的提供了語句函數(shù)定義功能來定義一些簡單的函數(shù)函數(shù), ,用于實現(xiàn)有關(guān)的函數(shù)關(guān)系。用戶自定義語句函數(shù)其使用于實現(xiàn)有關(guān)的函數(shù)關(guān)系。用戶自定義

9、語句函數(shù)其使用方法與標準函數(shù)相同用方法與標準函數(shù)相同, ,可以作為操作數(shù)在表達式中調(diào)用??梢宰鳛椴僮鲾?shù)在表達式中調(diào)用。2y2x 2xx212x 1x22x )cp)(bp)(ap(p sinab21 cosab22b2a 例例951951已知角度已知角度A A3636 4343 2727 ,B,B1515 2424 ,C,C8 8 1616 5454 , ,計算計算 : S Scoscos2 2A-4sinBA-4sinBtgCtgC角度角度D Dn nx x1 1 x x2 2 x x3 3 的弧度轉(zhuǎn)換公式的弧度轉(zhuǎn)換公式: : )3600 x60 xx(180D321n 語句函數(shù)定義:語句函

10、數(shù)定義: 一般形式為:一般形式為:F(x1,x2,F(x1,x2,xn),xn) F F為函數(shù)名,為函數(shù)名,x x1 1,x,x2 2, ,x,xn n為虛擬參數(shù)為虛擬參數(shù)( (或稱形式參數(shù)或啞元或稱形式參數(shù)或啞元) )。 要求:要求:不能重名不能重名, ,只能為普通變量名。類型可用隱含規(guī)則定義只能為普通變量名。類型可用隱含規(guī)則定義, ,也可用類型聲明語句定義也可用類型聲明語句定義, ,但須放在該語句函數(shù)定義語句之前。但須放在該語句函數(shù)定義語句之前。 下面程序通過語句函數(shù)實現(xiàn)下面程序通過語句函數(shù)實現(xiàn) 例例951951問題。問題。 調(diào)用一般形式為:調(diào)用一般形式為: () 說明:說明:l 同語句函

11、數(shù)定義語句中的語句函數(shù)名相同。同語句函數(shù)定義語句中的語句函數(shù)名相同。l 為實在參數(shù)或?qū)崊閷嵲趨?shù)或?qū)崊? ,其個數(shù)、次序和類型應其個數(shù)、次序和類型應與定義語句中形式參數(shù)一致。實在參數(shù)之間用逗號分隔。與定義語句中形式參數(shù)一致。實在參數(shù)之間用逗號分隔。l實參可是常數(shù)、變量、數(shù)組元素、函數(shù)名、表達式。實參可是常數(shù)、變量、數(shù)組元素、函數(shù)名、表達式。 當調(diào)用語句函數(shù)時當調(diào)用語句函數(shù)時, ,其執(zhí)行過程如下:其執(zhí)行過程如下:l首先計算實參表達式的值首先計算實參表達式的值; ;l將實參值賦予對應的形參將實參值賦予對應的形參, ,即形實參結(jié)合即形實參結(jié)合l用被賦值的形參對語句函數(shù)定義語句中的表達式進行求值用被

12、賦值的形參對語句函數(shù)定義語句中的表達式進行求值運算運算; ;l將運算后的表達式值轉(zhuǎn)換為函數(shù)名類型將運算后的表達式值轉(zhuǎn)換為函數(shù)名類型, ,并將其按函數(shù)值并將其按函數(shù)值返回到調(diào)用位置。返回到調(diào)用位置。 使用語句函數(shù)的一些規(guī)定:使用語句函數(shù)的一些規(guī)定: l一個語句函數(shù)只能在一行內(nèi)定義。如果太長一個語句函數(shù)只能在一行內(nèi)定義。如果太長, ,可續(xù)行書寫??衫m(xù)行書寫。l語句函數(shù)只有一個函數(shù)返回值。語句函數(shù)只有一個函數(shù)返回值。l定義語句函數(shù)定義語句函數(shù), ,右端表達式中可調(diào)用已定義語句函數(shù)或標準函數(shù)右端表達式中可調(diào)用已定義語句函數(shù)或標準函數(shù), ,但不能調(diào)用該語句函數(shù)自己但不能調(diào)用該語句函數(shù)自己, ,即不能遞歸

13、調(diào)用。即不能遞歸調(diào)用。 H H(x1,x2)=x1x1,x2)=x1* *x1+x2x1+x2* *x2x2 F F(x1,x2)=SQRT(H(x1,x2)x1,x2)=SQRT(H(x1,x2)l語句函數(shù)的形式參數(shù)不允許為數(shù)組或下標變量。語句函數(shù)的形式參數(shù)不允許為數(shù)組或下標變量。 DIMENSION A(10),B(2,3)DIMENSION A(10),B(2,3) F1(x,y)=x+A(1)+y-B(1,2)F1(x,y)=x+A(1)+y-B(1,2) ! !表達式中可以引用數(shù)組元素表達式中可以引用數(shù)組元素 F(C)=C+100F(C)=C+100l語句函數(shù)的虛參應該是變量名,不能

14、是常量、表達式或數(shù)組元素語句函數(shù)的虛參應該是變量名,不能是常量、表達式或數(shù)組元素l語句函數(shù)可無語句函數(shù)可無虛虛參參, ,稱為無參函數(shù)稱為無參函數(shù), ,圓括號不能省略圓括號不能省略, ,即:即:F()F()。 l語句函數(shù)定義語句是非執(zhí)行語句,應該放在所有可執(zhí)行語句之前語句函數(shù)定義語句是非執(zhí)行語句,應該放在所有可執(zhí)行語句之前和有關(guān)的類型說明語句之后和有關(guān)的類型說明語句之后l語句函數(shù)只在其所在的程序單位中才有意義。語句函數(shù)只在其所在的程序單位中才有意義。 例例953953計算空間一點計算空間一點P(x,y,z)P(x,y,z)的方向弦的方向弦, ,其計算公式如下:其計算公式如下:其中其中:、為點為點

15、P P到原點直線與坐標軸到原點直線與坐標軸x x、y y、z z的夾角。的夾角。222zyxxcos 222zyxycos 222zyxzcos 例例954954已知已知=30=30 ,=38,=38 ,=58,=58 , ,編寫程序求:編寫程序求:)cos1sinsin1cos1sinsin1(cos1sinsin1y222 自定義函數(shù)自定義函數(shù) (funcation)函數(shù):內(nèi)部函數(shù)函數(shù):內(nèi)部函數(shù) 語句函數(shù):只能是由一個語句定義的函數(shù),即,必須用一個表達語句函數(shù):只能是由一個語句定義的函數(shù),即,必須用一個表達 式來表示出函數(shù)關(guān)系。式來表示出函數(shù)關(guān)系。 如:如: f(x)=xf(x)=x5 5

16、+x+x3 3+2x-7+2x-7 下列函數(shù)關(guān)系則無法用一個語句函數(shù)來表示:下列函數(shù)關(guān)系則無法用一個語句函數(shù)來表示: +1 (x0) y = 0 (x=0) -1 (x0)函數(shù)子程序,或稱外部函數(shù):函數(shù)子程序,或稱外部函數(shù):可以用一個函數(shù)子程序來定義之:可以用一個函數(shù)子程序來定義之:函數(shù)子程序的定義函數(shù)子程序的定義: 類型說明類型說明 FUNCTION函數(shù)函數(shù)名名(虛參列表)(虛參列表) . END FUNCTION函數(shù)函數(shù)名名其中其中函數(shù)名的取法函數(shù)名的取法與變量名相同。與變量名相同。函數(shù)名既是某個函數(shù)的名字又代表該函數(shù)的函數(shù)值,所以函數(shù)名既是某個函數(shù)的名字又代表該函數(shù)的函數(shù)值,所以必須有類

17、型說明必須有類型說明。也可以在也可以在FUNCTION語句后進行說明:語句后進行說明: FUNCTION 函數(shù)名函數(shù)名 (虛擬參數(shù),(虛擬參數(shù),) 類型說明類型說明 函數(shù)名函數(shù)名虛擬參數(shù)之間用逗號隔開,虛擬參數(shù)之間用逗號隔開,虛參可以是變量名、數(shù)組名、子程序名虛參可以是變量名、數(shù)組名、子程序名沒有虛參時,一對括號必不可少沒有虛參時,一對括號必不可少FUNCTIONEND 其中語句的排列和主程序相同:其中語句的排列和主程序相同: 說明語句在前,執(zhí)行語句在后說明語句在前,執(zhí)行語句在后說明語句說明語句包括對虛參變量和虛參數(shù)組的說明,也包括對函數(shù)中所用變量、包括對虛參變量和虛參數(shù)組的說明,也包括對函數(shù)

18、中所用變量、數(shù)組和符號常量的說明。數(shù)組和符號常量的說明。執(zhí)行語句執(zhí)行語句用來完成對函數(shù)值的運算,在程序的執(zhí)行流程返回調(diào)用單位之用來完成對函數(shù)值的運算,在程序的執(zhí)行流程返回調(diào)用單位之前,必須有求得到函數(shù)值賦給函數(shù)名。給函數(shù)賦值時注意:前,必須有求得到函數(shù)值賦給函數(shù)名。給函數(shù)賦值時注意: 函數(shù)名函數(shù)名 = 表達式表達式函數(shù)中當程序執(zhí)行的流程遇到函數(shù)中當程序執(zhí)行的流程遇到RETURN語句或語句或END語句時,返回調(diào)用單語句時,返回調(diào)用單位并由函數(shù)名把函數(shù)值帶回位并由函數(shù)名把函數(shù)值帶回。RETURN語句只允許出現(xiàn)在子程序中,其語句只允許出現(xiàn)在子程序中,其與與END的區(qū)別在于:子程序中可以有任意多個的區(qū)

19、別在于:子程序中可以有任意多個RETRUN語句,可以根據(jù)語句,可以根據(jù)需要把它放在合適的語句行,程序執(zhí)行的流程遇到它時就立即返回調(diào)用需要把它放在合適的語句行,程序執(zhí)行的流程遇到它時就立即返回調(diào)用單位;而子程序中的單位;而子程序中的END語句只能有一條,而且必須放在子程序的最后,語句只能有一條,而且必須放在子程序的最后,在編譯時作為標志通知編譯程序:在編譯時作為標志通知編譯程序:“本程序單位到此結(jié)束本程序單位到此結(jié)束”,在執(zhí)行時,在執(zhí)行時起起RETURN語句的作用。語句的作用。函數(shù)是一個獨立的編譯單位,所以函數(shù)體內(nèi)所用的變量、語句函數(shù)是一個獨立的編譯單位,所以函數(shù)體內(nèi)所用的變量、語句標號等的作用

20、范圍僅僅局限于本程序單位內(nèi),除了函數(shù)名和虛標號等的作用范圍僅僅局限于本程序單位內(nèi),除了函數(shù)名和虛參以外與其它程序單位沒有任何聯(lián)系。所以編寫函數(shù)子程序時參以外與其它程序單位沒有任何聯(lián)系。所以編寫函數(shù)子程序時可以不必顧及所用標號可以不必顧及所用標號/名字是否與其他程序單位相重。具有很名字是否與其他程序單位相重。具有很大的獨立性和靈活性。大的獨立性和靈活性。例:編寫一個求實型數(shù)絕對值得函數(shù),并由主程序來調(diào)用它。例:編寫一個求實型數(shù)絕對值得函數(shù),并由主程序來調(diào)用它。 函數(shù)子程序的調(diào)用函數(shù)子程序的調(diào)用與調(diào)用內(nèi)在函數(shù)形式一樣,在主調(diào)程序任何處,作為表達與調(diào)用內(nèi)在函數(shù)形式一樣,在主調(diào)程序任何處,作為表達式的

21、一項寫下:式的一項寫下:函數(shù)名函數(shù)名(實在參數(shù),實在參數(shù),) 或或 函數(shù)名()函數(shù)名() 無參數(shù)的情況無參數(shù)的情況可以在任何允許函數(shù)值出現(xiàn)的表達式中調(diào)用函數(shù),也只能在表達式中可以在任何允許函數(shù)值出現(xiàn)的表達式中調(diào)用函數(shù),也只能在表達式中對函數(shù)進行調(diào)用對函數(shù)進行調(diào)用在主程序或子程序中調(diào)用一個外部函數(shù)時,應在他們的在主程序或子程序中調(diào)用一個外部函數(shù)時,應在他們的說明部分對函說明部分對函數(shù)名的數(shù)據(jù)類型加以說明數(shù)名的數(shù)據(jù)類型加以說明。必須在必須在調(diào)用程序中調(diào)用程序中使外部函數(shù)名與使外部函數(shù)名與函數(shù)子程序定義中函數(shù)子程序定義中函數(shù)名的類型說函數(shù)名的類型說明完全一致。明完全一致。實參與形參按照位置一一對應,

22、個數(shù)必須相同,類型完全一致實參與形參按照位置一一對應,個數(shù)必須相同,類型完全一致練習1: 編寫求 的函數(shù)子程序,調(diào)用此函數(shù)求以下表達式的值:練習2:已知 由程序輸入X的值,求出sin h(X) 我們已經(jīng)知道ex可用以下級數(shù)近似表示:)9.21 ()8.21 ()6.21 ()54321 ()4321 () 321 (ynii12sinxxeehx0432!.! 4! 3! 21nnxnxxxxxe求解二元一次方程組求解二元一次方程組。 計算:計算:x=cx=cl lb b2 2c c2 2b b1 1 y=ay=al lc c2 2a a2 2c c1 1 = =a al lb b2 2a a2 2b b2 2 編寫內(nèi)部函數(shù)編寫內(nèi)部函數(shù)deldel求解:求解:x x,y y,參數(shù),參數(shù)I=1I=1,求解,求解x x,I=2I=2,求解,求解y y 已知:二元一次方程組。已知:二元一次方程組。 輸

溫馨提示

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

評論

0/150

提交評論