一級(jí)基礎(chǔ)科目(一)輔導(dǎo)---函數(shù)與子程序

字號(hào):

七、函數(shù)與子程序(過程)
     (一)內(nèi)部函數(shù)
     內(nèi)部函數(shù)是預(yù)先編制的一些常用函數(shù)或算法的過程,由FORTRAN語言提供,可以直接調(diào)用。內(nèi)部函數(shù)調(diào)用時(shí)的一般形式是:
     內(nèi)部函數(shù)名(實(shí)元表)
     實(shí)元表中元素的數(shù)據(jù)類型、個(gè)數(shù)是預(yù)先規(guī)定的。
     常用內(nèi)部函數(shù)及其功能可查閱FORTRAN教材或用戶手冊。
     (二)語句函數(shù)
     1.語句函數(shù)的定義
     定義語句函數(shù)的語句稱為語句函數(shù)語句。其一般形式為:
     函數(shù)名(形參表)=表達(dá)式。
     其中,函數(shù)名的命名規(guī)則與一般變量名相同,所以它也可以用類型說明語句等來說明。形參又稱啞元,是一些變量名,一般應(yīng)出現(xiàn)在表達(dá)式中。
     語句函數(shù)在程序單位中的位置,應(yīng)在所有可執(zhí)行語句之前。
     2.語句函數(shù)的調(diào)用
     調(diào)用語句函數(shù)的結(jié)果是得到一個(gè)函數(shù)值,因此,調(diào)用語句函數(shù)時(shí)代之以實(shí)際變量(又 稱實(shí)元)。
     (三)函數(shù)子程序
     一個(gè)函數(shù)子程序是一個(gè)獨(dú)立的FORTRAN程序單位。它的第一個(gè)語句必須是FUNCTION語句,最后一個(gè)語句必須是END語句。即函數(shù)子程序的一般結(jié)構(gòu)為:
     [類型說明]FUNCTION函數(shù)名(形參表)
     語句塊
     [RETURN]
     END
     也可以寫為:FUNCTION函數(shù)名(形參表)
     [類型說明 函數(shù)名]
     語句塊
     [RETURN]
     END
     其中函數(shù)名的命名規(guī)則與變量相同,而函數(shù)名的類型決定了函數(shù)值的類型。在函數(shù)子程序中,形參可以是變量名、數(shù)組名、外部過程名,而形參的命名與類型說明也與變量相同,形參數(shù)組也必須在函數(shù)子程序中予以定義.
     函數(shù)子程序的函數(shù)值由函數(shù)名帶回到調(diào)用該函數(shù)子程序的程序,因此,在函數(shù)子程序中必須對(duì)函數(shù)名賦值。在函數(shù)子程序中,函數(shù)名應(yīng)該像普通變量那樣來使用。
     在函數(shù)子程序中,所有的名字、語句標(biāo)號(hào)都可以和其他程序單位中的相同而彼此沒有任何關(guān)系。
     在函數(shù)子程序中,END語句的功能有兩個(gè):一是表示該程序單位的結(jié)束,二是具有返回語句RETURN的功能。函數(shù)子程序中必須有并且只有一個(gè)END語句,而且只能是子程序的最后一個(gè)語句。當(dāng)在子程序的其他位置須要返回時(shí),可以使用RETURN
    語句。
     (四)子程序
     1.子程序的結(jié)構(gòu)
     一個(gè)子程序是一個(gè)獨(dú)立的FORTRAN程序單位。子程序的第一個(gè)語句必須是SUBROUTINE語句,最后一個(gè)語句必須是END語句。
     即子程序的一般結(jié)構(gòu)為:
     SUBROUTINE子程序名(形參表)
     語句塊
     [RETURN]
     END
     SUBROUTINE語句中的形參表可以省略。這時(shí)子程序名后的括弧不要保留。對(duì)子程序的其他有關(guān)規(guī)定與函數(shù)子程序相同。
     2.子程序的調(diào)用
     子程序調(diào)用通過CALL語句實(shí)現(xiàn)。其形式為:
     CALL子程序名(實(shí)參)
     其他有關(guān)對(duì)子程序的調(diào)用規(guī)定與函數(shù)子程序相同。
     八、程序單位間的數(shù)據(jù)傳遞
     (一)虛實(shí)結(jié)合
     虛實(shí)結(jié)合又稱啞實(shí)結(jié)合,是各程序單位(主程序和各種過程如函數(shù)子程序)之間傳遞數(shù)據(jù)的一種重要途徑。
     1.變量的虛實(shí)結(jié)合
     當(dāng)子程序等過程的形參為變量時(shí),則在調(diào)用時(shí)所對(duì)應(yīng)的實(shí)參可以是類型相同的常數(shù)、變量、數(shù)組元素或表達(dá)式;子程序調(diào)用后,其運(yùn)行的結(jié)果通過這些實(shí)參返回到調(diào)用者。在FORTRAN 77中,當(dāng)形參變量所對(duì)應(yīng)的實(shí)參是變量或數(shù)組元素時(shí),則它們之間的結(jié)合方式是地址結(jié)合;而當(dāng)形參變量所對(duì)應(yīng)的實(shí)參是常數(shù)或表達(dá)式時(shí),其結(jié)合方法對(duì)于不同的
     FORTRAN系統(tǒng)有可能是不同的。
     2.?dāng)?shù)組的虛實(shí)結(jié)合
     當(dāng)子程序中的形參為數(shù)組名時(shí),則在調(diào)用時(shí)所對(duì)應(yīng)的實(shí)參必須是數(shù)組名或數(shù)組元素。如果實(shí)參是數(shù)組名,則實(shí)參數(shù)組與形參數(shù)組按地址結(jié)合,實(shí)參數(shù)組與形參數(shù)組都從第一個(gè)元素開始按列逐個(gè)對(duì)應(yīng)。例如,有主程序與子程序如下:
     PROGRAMMAIN
     INTEGERA(0:5)
    …
     CALLSB(A)
     END
     SUBROUTINESB(B)
     INTEGERB(-1:2)
    …
     END
     則在主程序中使用CALL語句調(diào)用子程序SB時(shí),實(shí)參數(shù)組與形參數(shù)組的結(jié)合情況如下:
     實(shí)參數(shù)組 形參數(shù)組 ,
     A(0)——B(-1)
     A(1)——B(0)
     A(2)——B(1)
     A(3)——B(2)
     A(4)
     A(5)
    也即調(diào)用SB時(shí),A數(shù)組的頭4個(gè)元素與B數(shù)組的元素對(duì)應(yīng),這些對(duì)應(yīng)元素實(shí)際上為同一存儲(chǔ)地址。如果實(shí)參是數(shù)組元素,則從該元素開始依次與形參數(shù)組的第一個(gè)元素起按列逐個(gè)對(duì)應(yīng),它們也是按地址結(jié)合。例如,有主程序與子程序如下:
     PROGRAMMAIN
     DIMENTION A(8)
     … ,
     CALLSB(A(5))
     END
     SUBROUTINE SB(B)
     DIMENSION B(3)
    … ,
     END
     則在調(diào)用語句執(zhí)行時(shí),實(shí)參數(shù)組A與形參數(shù)組B的結(jié)合情況如下:
     實(shí)參數(shù)組 形參數(shù)組
     A(1)
     A(2)
     A(3)
     A(4)
     A(5)——B(1)
     A(6)——B(2)
     A(7)——B(3)
     A(8)