注冊巖土工程師基礎(chǔ)知識點(diǎn):函數(shù)子程序

字號:

如果引入的函數(shù)只限于在某一程序單位中使用,且此函數(shù)能用一個(gè)表達(dá)式來計(jì)算,則可以把它定義為語句函數(shù)。由于只用了一個(gè)語句,故這一類函數(shù)的計(jì)算均很簡單。但是,有許多問題,僅僅用語句函數(shù)是不能解決的,如∫∫f(x,y)dxdy,須用一系列語句來完成,因此,常將這一類問題編寫成一個(gè)程序塊,在程序中被主程序或其他子程序所調(diào)用,是一個(gè)獨(dú)立的程序模塊。為區(qū)別于語句函數(shù)或系統(tǒng)配置的標(biāo)準(zhǔn)函數(shù),我們稱它為外部函數(shù)。
    1.函數(shù)子程序語句的一般格式
    [類型說明]FUNCTION函數(shù)名([虛擬參數(shù)[,虛擬參數(shù)]…])
    類型說明可以是REAL、INTEGER、LOGICAL、CHARACTER、DOUBLE PRECI-SION、COMPLEX中的任意一個(gè),僅僅用來說明函數(shù)的類型,可以省略。
    函數(shù)名的取法與普通變量名的取法相同,因?yàn)楹瘮?shù)名是用來代表函數(shù)值的,故它必然具有類型,如果在關(guān)鍵字FUNCTION之前沒有類型說明,則由隱含規(guī)則確定函數(shù)名的類型。
    函數(shù)名后括號中的虛擬參數(shù)(又稱啞元)只能是簡單變量名、數(shù)組名、啞過程名。如編寫計(jì)算M!的函數(shù)子程序:
    INTEGER FUNCTION FC(M)
    FC=1.0
    DO 10 N=2,M
    10 FC=FC*N
    RETURN
    END
    此子程序在后面的例題中可發(fā)揮很大的作用。在上例函數(shù)子程序中,定義了整型函數(shù)FC,F(xiàn)C只有一個(gè)啞元M,在計(jì)算運(yùn)行中,M被多次賦值,得到相應(yīng)的FC值。
    2.構(gòu)造函數(shù)子程序的一般規(guī)則
    (1)函數(shù)子程序必須以FUNCTION語句作為它的第一條語句。
    (2)函數(shù)子程序的最后一行必須是END語句,在編譯時(shí),該語句被作為本程序塊的結(jié)束標(biāo)志。
    (3)在函數(shù)子程序中,一般至少有一個(gè)RETURN語句,當(dāng)程序執(zhí)行過程中遇到RE.TURN語句,將控制轉(zhuǎn)移到調(diào)用程序處。
    (4)函數(shù)名必須在程序中被定值一次,也可以多次定值。
    (5)在函數(shù)子程序中可以調(diào)用其他函數(shù)子程序,但不能直接或間接調(diào)用自己。
    (6)RETURN語句是一個(gè)可執(zhí)行語句,當(dāng)執(zhí)行到該語句時(shí),結(jié)束過程的引用,將控制返回到當(dāng)前引用的程序單位。
    3.函數(shù)子程序的調(diào)用
    在引用函數(shù)子程序的地方,只要寫出函數(shù)的名字,并在其后面的括號中與啞元對應(yīng)的位置上,寫上相應(yīng)的實(shí)元即可。
    實(shí)元可以是常數(shù)、常數(shù)符號名、簡單變量名、數(shù)組元素名、數(shù)組名及表達(dá)式等。值得注意的是,實(shí)元與啞元的個(gè)數(shù)要相同,它們之間的類型和位置必須一一對應(yīng),與名字本身無關(guān)。如計(jì)算
    
    求上式時(shí),需計(jì)算三次階乘數(shù),故可以調(diào)用上例中的函數(shù)子程序FC,主程序如下:
    INTEGER FC
    READ(*,*)M,N
    10 MNC=FC(M)/(FC(M—N)*FC(N))
    WRITE(*,*)’M=’,M,’N=’,N,’MNC=’,MNC