一級(jí)基礎(chǔ)科目(一)輔導(dǎo)---函數(shù)與子程序
七、函數(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教材或用戶手冊(cè)。
(二)語句函數(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
?08年考試規(guī)范、標(biāo)準(zhǔn): 2008年一級(jí)注冊(cè)結(jié)構(gòu)工程師考試成績查詢匯總
其中函數(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.數(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)
FORTRAN77規(guī)定,不管實(shí)參是數(shù)組名還是數(shù)組元素,用作實(shí)參的數(shù)組,其維數(shù)、各維下標(biāo)的上下限及數(shù)組中元素個(gè)數(shù)可以和與之結(jié)合的形參數(shù)組不同,但要求從與形參數(shù)組的第一個(gè)元素結(jié)合的實(shí)參數(shù)組元素算起,以后的實(shí)參數(shù)組元素的個(gè)數(shù)不能少于形參數(shù)組元素的個(gè)數(shù)。
多維數(shù)組或數(shù)組元素虛實(shí)結(jié)合時(shí),要特別注意FORTRAN中數(shù)組按列存放的規(guī)定,不要摘錯(cuò)存儲(chǔ)地址的對(duì)應(yīng)關(guān)系。例如:
PROGRAMMAIN
DIMENSIONA(3,2)
…
CALL SB(A)
END
SUBROUTINE SB(B)
DIMENSION B(2,3)
… ,
END
這種情況下,數(shù)組元素地址的對(duì)應(yīng)關(guān)系是:
實(shí)參數(shù)組 形參數(shù)組
A(1,1)――B(1,1)
A(2,1)――B(2,1)
A(3,1)――B(1,2)
A(1,2)――B(2,2)
A(2,2)――B(1,3)
A(3,2)――B(2,3)
3.可調(diào)數(shù)組
在主程序中定義數(shù)組元素時(shí),?定義說明符中各維下標(biāo)的上下限必須為整常數(shù),不能是變量或算術(shù)表達(dá)式。但在子程序中定義數(shù)組時(shí),允許用變量來定義各維下標(biāo)的上下限。子程序中用變量來定義各維下標(biāo)上下限的數(shù)組稱為可調(diào)數(shù)組。但使用可調(diào)數(shù)組必須遵循以下幾個(gè)原則。
(1)可調(diào)數(shù)組名必須是形參數(shù)組名。
(2)說明可調(diào)數(shù)組各維下標(biāo)上下限的表達(dá)式中只能出現(xiàn)整型變量,且這種變量必須是 形參或出現(xiàn)在COMMON語句中。但在某些FORTRAN 77子集中,定義可調(diào)數(shù)組各維下標(biāo)上下限時(shí)只能是整型變量,而不能是任何算術(shù)表達(dá)式。
(3)可調(diào)數(shù)組的大小不得超過對(duì)應(yīng)實(shí)參數(shù)組的大小。
4.字符型變量的虛實(shí)結(jié)合
(1)當(dāng)子程序中的形參為字符型變量時(shí),對(duì)應(yīng)的實(shí)參必須是字符型變量、字符常數(shù)、
字符型數(shù)組元素或字符表達(dá)式。字符型實(shí)參必須用CHARACTER語句加以說明。
(2)如果字符型形參的長度小于對(duì)應(yīng)的實(shí)參長度,則從實(shí)參中最左邊的字符開始與形
參結(jié)合,而實(shí)參中右邊多余的字符被截去。例如:
CHARACTERA* 5
A=’ABCDE’
CALL SB(A)
END
SUBROUTINESB(X)
CHARACTER X*3
WRITE(*,*)X
END
程序執(zhí)行后的輸出結(jié)果為:ABC。
(3)在FORTRAN77中,對(duì)字符型形參的長度還可以用“*”號(hào)來說明,此時(shí),形參字符變量自動(dòng)與對(duì)應(yīng)的實(shí)參取相同的長度。例如在上面的子程序SB中,如果將CHARACTER X*3改變?yōu)镃HARACTER X*(*),則執(zhí)行后,輸出的結(jié)果為:ABCDE。
(4)當(dāng)子程序中形參為字符型數(shù)組時(shí),如果形參字符型數(shù)組元素的長度與對(duì)應(yīng)實(shí)參字符型數(shù)組元素長度一致,則其虛實(shí)結(jié)合的情況與一般的數(shù)組虛實(shí)結(jié)合的情況相同。如果形參與實(shí)參的字符型數(shù)組元素長度不同,則按字符依次對(duì)應(yīng)。例如,有主程序與子程序如下:
CHARACTFER A(5)* 3
DATA A/’ABC’,’DEF’,’GHI’,’JKL’,’MNO’/
CALL SB(A)
END
SUBROUTINE SB(D)
CHARACTERD(4)*2
…
END
則形參數(shù)組D中元素的值為:
D(1):’AB’
D(2):’CD’
D(3):’EF’
D(4):’GH’
(5)過程名的虛實(shí)結(jié)合
FORTRAN允許子程序中的形參為過程名,此時(shí),調(diào)用程序中的實(shí)參必須是過程名。
如果實(shí)參是外部過程名(如函數(shù)子程序名、子程序名),則該外部過程名在調(diào)用程序中必須用EXTERNAL語句說明。
如果實(shí)參是內(nèi)部過程名(如內(nèi)部函數(shù)名),則該內(nèi)部過程名在調(diào)用中必須用INTRINSIC語句說明。
(二)公用區(qū)語句
1.公用區(qū)語句的一般形式 -
COMMON[/公共區(qū)名1/]變量表1,[/公共區(qū)名2/變量表2]…
沒有公用區(qū)名的就稱為無名公用區(qū),其他都是有名公用區(qū);一個(gè)完整的程序只能設(shè)置一個(gè)無名公用區(qū),但可以有多個(gè)有名公用區(qū);變量表中,可以是變量名、數(shù)組名、數(shù)組說明符,互相之間用逗號(hào)隔開。例如:
COMMON a,b(3),c(2)
定義了b是3個(gè)元素的一維數(shù)組,c是2個(gè)元素的一維數(shù)組。這條語句與下面兩句語句是等價(jià)的:
DIMENSION b(3),c(2)
COMMON a,b,c
2.利用公用區(qū)進(jìn)行數(shù)據(jù)傳遞時(shí),在無名公用區(qū)或同名的有名公用區(qū)中,位置排列相同的變量、數(shù)組,實(shí)際上使用同一存儲(chǔ)地址,亦即共享同一數(shù)據(jù)。例如:
PROGRAMMAIN
COMMON a,I(2)/COM l/d,c
…
CALL SB
…
END
SUBROUTINE SB
COMMON aa,JK(2)/COM l/f,g
END
其中,主程序中的變量a的數(shù)據(jù)與子程序的變量aa共享,數(shù)組1的數(shù)據(jù)與JK共享,而d,c的數(shù)據(jù)分別與f,g共享。由此可以知道,各個(gè)程序單位中COMMON語句中的變量類型必須按位置一一對(duì)應(yīng)一致才能正確傳遞數(shù)據(jù)。
最新資訊
- 2024年度二級(jí)注冊(cè)結(jié)構(gòu)工程師專業(yè)考試資料:規(guī)范、標(biāo)準(zhǔn)、規(guī)程2024-08-13
- 2024年度一級(jí)注冊(cè)結(jié)構(gòu)工程師專業(yè)考試資料:規(guī)范、標(biāo)準(zhǔn)、規(guī)程2024-08-13
- 環(huán)球網(wǎng)校雙11預(yù)售開啟!定金百倍膨脹,直播再返現(xiàn)金2023-10-25
- 環(huán)球網(wǎng)校結(jié)構(gòu)工程師雙11活動(dòng)來啦,限時(shí)優(yōu)惠!2023-10-25
- 注冊(cè)結(jié)構(gòu)工程師考試大綱下載2023-05-16
- 2023年一級(jí)注冊(cè)結(jié)構(gòu)工程師考試大綱內(nèi)容2023-04-14
- 2023年結(jié)構(gòu)工程師教材內(nèi)容變動(dòng)對(duì)比2023-04-10
- 2023年注冊(cè)結(jié)構(gòu)工程師專業(yè)基礎(chǔ)教材變動(dòng)對(duì)比2023-04-03
- 2023年新版注冊(cè)結(jié)構(gòu)工程師基礎(chǔ)教材2023-03-29
- 2023一級(jí)結(jié)構(gòu)工程師基礎(chǔ)考試真題2023-01-29