當(dāng)前位置: 首頁 > 結(jié)構(gòu)工程師 > 結(jié)構(gòu)工程師備考資料 > 一級(jí)基礎(chǔ)科目(一)輔導(dǎo)---函數(shù)與子程序

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

更新時(shí)間:2009-10-19 15:27:29 來源:|0 瀏覽0收藏0

結(jié)構(gòu)工程師報(bào)名、考試、查分時(shí)間 免費(fèi)短信提醒

地區(qū)

獲取驗(yàn)證 立即預(yù)約

請(qǐng)?zhí)顚憟D片驗(yàn)證碼后獲取短信驗(yàn)證碼

看不清楚,換張圖片

免費(fèi)獲取短信驗(yàn)證碼

  七、函數(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

更多信息請(qǐng)?jiān)L問結(jié)構(gòu)工程師頻道    結(jié)構(gòu)工程師論壇

?2009年結(jié)構(gòu)工程師考試時(shí)間:9月19、20日
?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ù)。

分享到: 編輯:環(huán)球網(wǎng)校

資料下載 精選課程 老師直播 真題練習(xí)

結(jié)構(gòu)工程師資格查詢

結(jié)構(gòu)工程師歷年真題下載 更多

結(jié)構(gòu)工程師每日一練 打卡日歷

0
累計(jì)打卡
0
打卡人數(shù)
去打卡

預(yù)計(jì)用時(shí)3分鐘

結(jié)構(gòu)工程師各地入口
環(huán)球網(wǎng)校移動(dòng)課堂APP 直播、聽課。職達(dá)未來!

安卓版

下載

iPhone版

下載

返回頂部