一級基礎科目(一)輔導---函數(shù)與子程序
七、函數(shù)與子程序(過程)
(一)內部函數(shù)
內部函數(shù)是預先編制的一些常用函數(shù)或算法的過程,由FORTRAN語言提供,可以直接調用。內部函數(shù)調用時的一般形式是:
內部函數(shù)名(實元表)
實元表中元素的數(shù)據(jù)類型、個數(shù)是預先規(guī)定的。
常用內部函數(shù)及其功能可查閱FORTRAN教材或用戶手冊。
(二)語句函數(shù)
1.語句函數(shù)的定義
定義語句函數(shù)的語句稱為語句函數(shù)語句。其一般形式為:
函數(shù)名(形參表)=表達式。
其中,函數(shù)名的命名規(guī)則與一般變量名相同,所以它也可以用類型說明語句等來說明。形參又稱啞元,是一些變量名,一般應出現(xiàn)在表達式中。
語句函數(shù)在程序單位中的位置,應在所有可執(zhí)行語句之前。
2.語句函數(shù)的調用
調用語句函數(shù)的結果是得到一個函數(shù)值,因此,調用語句函數(shù)時代之以實際變量(又 稱實元)。
(三)函數(shù)子程序
一個函數(shù)子程序是一個獨立的FORTRAN程序單位。它的第一個語句必須是FUNCTION語句,最后一個語句必須是END語句。即函數(shù)子程序的一般結構為:
[類型說明]FUNCTION函數(shù)名(形參表)
語句塊
[RETURN]
END
也可以寫為:FUNCTION函數(shù)名(形參表)
[類型說明 函數(shù)名]
語句塊
[RETURN]
END
?08年考試規(guī)范、標準: 2008年一級注冊結構工程師考試成績查詢匯總
其中函數(shù)名的命名規(guī)則與變量相同,而函數(shù)名的類型決定了函數(shù)值的類型。在函數(shù)子程序中,形參可以是變量名、數(shù)組名、外部過程名,而形參的命名與類型說明也與變量相同,形參數(shù)組也必須在函數(shù)子程序中予以定義.
函數(shù)子程序的函數(shù)值由函數(shù)名帶回到調用該函數(shù)子程序的程序,因此,在函數(shù)子程序中必須對函數(shù)名賦值。在函數(shù)子程序中,函數(shù)名應該像普通變量那樣來使用。
在函數(shù)子程序中,所有的名字、語句標號都可以和其他程序單位中的相同而彼此沒有任何關系。
在函數(shù)子程序中,END語句的功能有兩個:一是表示該程序單位的結束,二是具有返回語句RETURN的功能。函數(shù)子程序中必須有并且只有一個END語句,而且只能是子程序的最后一個語句。當在子程序的其他位置須要返回時,可以使用RETURN
語句。
(四)子程序
1.子程序的結構
一個子程序是一個獨立的FORTRAN程序單位。子程序的第一個語句必須是SUBROUTINE語句,最后一個語句必須是END語句。
即子程序的一般結構為:
SUBROUTINE子程序名(形參表)
語句塊
[RETURN]
END
SUBROUTINE語句中的形參表可以省略。這時子程序名后的括弧不要保留。對子程序的其他有關規(guī)定與函數(shù)子程序相同。
2.子程序的調用
子程序調用通過CALL語句實現(xiàn)。其形式為:
CALL子程序名(實參)
其他有關對子程序的調用規(guī)定與函數(shù)子程序相同。
八、程序單位間的數(shù)據(jù)傳遞
(一)虛實結合
虛實結合又稱啞實結合,是各程序單位(主程序和各種過程如函數(shù)子程序)之間傳遞數(shù)據(jù)的一種重要途徑。
1.變量的虛實結合
當子程序等過程的形參為變量時,則在調用時所對應的實參可以是類型相同的常數(shù)、變量、數(shù)組元素或表達式;子程序調用后,其運行的結果通過這些實參返回到調用者。在FORTRAN 77中,當形參變量所對應的實參是變量或數(shù)組元素時,則它們之間的結合方式是地址結合;而當形參變量所對應的實參是常數(shù)或表達式時,其結合方法對于不同的
FORTRAN系統(tǒng)有可能是不同的。
2.數(shù)組的虛實結合
當子程序中的形參為數(shù)組名時,則在調用時所對應的實參必須是數(shù)組名或數(shù)組元素。如果實參是數(shù)組名,則實參數(shù)組與形參數(shù)組按地址結合,實參數(shù)組與形參數(shù)組都從第一個元素開始按列逐個對應。例如,有主程序與子程序如下:
PROGRAMMAIN
INTEGERA(0:5)
…
CALLSB(A)
END
SUBROUTINESB(B)
INTEGERB(-1:2)
…
END
則在主程序中使用CALL語句調用子程序SB時,實參數(shù)組與形參數(shù)組的結合情況如下:
實參數(shù)組 形參數(shù)組 ,
A(0)――B(-1)
A(1)――B(0)
A(2)――B(1)
A(3)――B(2)
A(4)
A(5)
也即調用SB時,A數(shù)組的頭4個元素與B數(shù)組的元素對應,這些對應元素實際上為同一存儲地址。如果實參是數(shù)組元素,則從該元素開始依次與形參數(shù)組的第一個元素起按列逐個對應,它們也是按地址結合。例如,有主程序與子程序如下:
PROGRAMMAIN
DIMENTION A(8)
… ,
CALLSB(A(5))
END
SUBROUTINE SB(B)
DIMENSION B(3)
… ,
END
則在調用語句執(zhí)行時,實參數(shù)組A與形參數(shù)組B的結合情況如下:
實參數(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ù)可以和與之結合的形參數(shù)組不同,但要求從與形參數(shù)組的第一個元素結合的實參數(shù)組元素算起,以后的實參數(shù)組元素的個數(shù)不能少于形參數(shù)組元素的個數(shù)。
多維數(shù)組或數(shù)組元素虛實結合時,要特別注意FORTRAN中數(shù)組按列存放的規(guī)定,不要摘錯存儲地址的對應關系。例如:
PROGRAMMAIN
DIMENSIONA(3,2)
…
CALL SB(A)
END
SUBROUTINE SB(B)
DIMENSION B(2,3)
… ,
END
這種情況下,數(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.可調數(shù)組
在主程序中定義數(shù)組元素時,?定義說明符中各維下標的上下限必須為整常數(shù),不能是變量或算術表達式。但在子程序中定義數(shù)組時,允許用變量來定義各維下標的上下限。子程序中用變量來定義各維下標上下限的數(shù)組稱為可調數(shù)組。但使用可調數(shù)組必須遵循以下幾個原則。
(1)可調數(shù)組名必須是形參數(shù)組名。
(2)說明可調數(shù)組各維下標上下限的表達式中只能出現(xiàn)整型變量,且這種變量必須是 形參或出現(xiàn)在COMMON語句中。但在某些FORTRAN 77子集中,定義可調數(shù)組各維下標上下限時只能是整型變量,而不能是任何算術表達式。
(3)可調數(shù)組的大小不得超過對應實參數(shù)組的大小。
4.字符型變量的虛實結合
(1)當子程序中的形參為字符型變量時,對應的實參必須是字符型變量、字符常數(shù)、
字符型數(shù)組元素或字符表達式。字符型實參必須用CHARACTER語句加以說明。
(2)如果字符型形參的長度小于對應的實參長度,則從實參中最左邊的字符開始與形
參結合,而實參中右邊多余的字符被截去。例如:
CHARACTERA* 5
A=’ABCDE’
CALL SB(A)
END
SUBROUTINESB(X)
CHARACTER X*3
WRITE(*,*)X
END
程序執(zhí)行后的輸出結果為:ABC。
(3)在FORTRAN77中,對字符型形參的長度還可以用“*”號來說明,此時,形參字符變量自動與對應的實參取相同的長度。例如在上面的子程序SB中,如果將CHARACTER X*3改變?yōu)镃HARACTER X*(*),則執(zhí)行后,輸出的結果為:ABCDE。
(4)當子程序中形參為字符型數(shù)組時,如果形參字符型數(shù)組元素的長度與對應實參字符型數(shù)組元素長度一致,則其虛實結合的情況與一般的數(shù)組虛實結合的情況相同。如果形參與實參的字符型數(shù)組元素長度不同,則按字符依次對應。例如,有主程序與子程序如下:
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)過程名的虛實結合
FORTRAN允許子程序中的形參為過程名,此時,調用程序中的實參必須是過程名。
如果實參是外部過程名(如函數(shù)子程序名、子程序名),則該外部過程名在調用程序中必須用EXTERNAL語句說明。
如果實參是內部過程名(如內部函數(shù)名),則該內部過程名在調用中必須用INTRINSIC語句說明。
(二)公用區(qū)語句
1.公用區(qū)語句的一般形式 -
COMMON[/公共區(qū)名1/]變量表1,[/公共區(qū)名2/變量表2]…
沒有公用區(qū)名的就稱為無名公用區(qū),其他都是有名公用區(qū);一個完整的程序只能設置一個無名公用區(qū),但可以有多個有名公用區(qū);變量表中,可以是變量名、數(shù)組名、數(shù)組說明符,互相之間用逗號隔開。例如:
COMMON a,b(3),c(2)
定義了b是3個元素的一維數(shù)組,c是2個元素的一維數(shù)組。這條語句與下面兩句語句是等價的:
DIMENSION b(3),c(2)
COMMON a,b,c
2.利用公用區(qū)進行數(shù)據(jù)傳遞時,在無名公用區(qū)或同名的有名公用區(qū)中,位置排列相同的變量、數(shù)組,實際上使用同一存儲地址,亦即共享同一數(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共享。由此可以知道,各個程序單位中COMMON語句中的變量類型必須按位置一一對應一致才能正確傳遞數(shù)據(jù)。
最新資訊
- 2024年度二級注冊結構工程師專業(yè)考試資料:規(guī)范、標準、規(guī)程2024-08-13
- 2024年度一級注冊結構工程師專業(yè)考試資料:規(guī)范、標準、規(guī)程2024-08-13
- 環(huán)球網(wǎng)校雙11預售開啟!定金百倍膨脹,直播再返現(xiàn)金2023-10-25
- 環(huán)球網(wǎng)校結構工程師雙11活動來啦,限時優(yōu)惠!2023-10-25
- 注冊結構工程師考試大綱下載2023-05-16
- 2023年一級注冊結構工程師考試大綱內容2023-04-14
- 2023年結構工程師教材內容變動對比2023-04-10
- 2023年注冊結構工程師專業(yè)基礎教材變動對比2023-04-03
- 2023年新版注冊結構工程師基礎教材2023-03-29
- 2023一級結構工程師基礎考試真題2023-01-29