一級基礎科目(一)輔導---函數與子程序


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