版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、下一頁上一頁停止放映整理整理ppt第第1 1頁頁第十一章第十一章: : 過程和模塊過程和模塊 11.1 概述概述FORTRANFORTRAN程序應由一個主程序單元和若干個過程程序單元組成。程序應由一個主程序單元和若干個過程程序單元組成。編程前應先作結構化分析,把問題分解為若干個子功能,每個子編程前應先作結構化分析,把問題分解為若干個子功能,每個子功能編成一個獨立的程序單元,稱為過程程序單元。再編一個主功能編成一個獨立的程序單元,稱為過程程序單元。再編一個主程序單元,控制整個解題過程。在主程序單元中用簡練的形式調程序單元,控制整個解題過程。在主程序單元中用簡練的形式調用每個過程,每次調用就是執(zhí)行
2、該過程單元,完成該子功能,從用每個過程,每次調用就是執(zhí)行該過程單元,完成該子功能,從而最終完成解題任務。而最終完成解題任務。F90F90中,共有四種程序單元:中,共有四種程序單元: 主程序主程序 過程或輔程序過程或輔程序 塊數據單元塊數據單元 模塊模塊 ( (F90) 通過使用模塊,可以方便地共享數據和過程。通過使用模塊,可以方便地共享數據和過程。 各種程序單元中,除主程序外,各程序單元可以被其他各種程序單元中,除主程序外,各程序單元可以被其他程序單元甚至自身調用。程序單元甚至自身調用。 一個程序單元不需要包含可執(zhí)行語句。一個程序單元不需要包含可執(zhí)行語句。下一頁上一頁停止放映整理整理ppt第第
3、2 2頁頁程序單元程序單元定義定義主程序主程序主程序是程序開始執(zhí)行的標志,其第一條語句不能是主程序是程序開始執(zhí)行的標志,其第一條語句不能是SUBROUTINESUBROUTINE,FUNCTIONFUNCTION,MODULEMODULE和和BLOCK DATABLOCK DATA。主程序可以用。主程序可以用PROGRAMPROGRAM語句作為第語句作為第一條語句,但不是必需的一條語句,但不是必需的過程過程子程序或函數子程序或函數塊數據單元塊數據單元在命名的公共塊中提供變量初始值的程序單元在命名的公共塊中提供變量初始值的程序單元模塊模塊包含數據對象定義、類型定義、函數或子程序接口和其它程序可訪
4、包含數據對象定義、類型定義、函數或子程序接口和其它程序可訪問的函數或子程序問的函數或子程序程序單元之間的關系:程序單元之間的關系: 聯合:這種機制允許不同的程序單元共享變量,從而聯合:這種機制允許不同的程序單元共享變量,從而不用重新定義變量就可以以不同的名字處理同一數據。不用重新定義變量就可以以不同的名字處理同一數據。 范圍:它描述的是一個名稱范圍:它描述的是一個名稱( (或者是全局的或者是局部的或者是全局的或者是局部的) )作用的范圍。作用的范圍。下一頁上一頁停止放映整理整理ppt第第3 3頁頁11.2 主程序主程序程序的執(zhí)行始終是開始于主程序的第一條可執(zhí)行語句,所程序的執(zhí)行始終是開始于主程
5、序的第一條可執(zhí)行語句,所以每個完整的以每個完整的FortranFortran程序必須有且僅有一個主程序。程序必須有且僅有一個主程序。其形式為:其形式為:PROGRAM PROGRAM 程序名程序名 說明部分說明部分 可執(zhí)行部分可執(zhí)行部分 CONTAINSCONTAINS內部過程內部過程 END PROGRAMEND PROGRAM程序名程序名可以看到,主程序單元中允許包含內部過程。主程序名和外可以看到,主程序單元中允許包含內部過程。主程序名和外部過程名和公共塊名都被認為是部過程名和公共塊名都被認為是全局名稱全局名稱。全局名稱在一個全局名稱在一個程序中必須是唯一的。程序中必須是唯一的。 下一頁上
6、一頁停止放映整理整理ppt第第4 4頁頁例:例:PROGRAM MAINPROGRAM MAIN REAL X(10),A(10,10),B(10) REAL X(10),A(10,10),B(10) ! !說明部分說明部分 CALL GAUSS(A,B,X) CALL GAUSS(A,B,X) ! !執(zhí)行部分,調用內部過程執(zhí)行部分,調用內部過程GAUSSGAUSS CONTAINSCONTAINS SUBROUTINE GAUSS(R,S,T) SUBROUTINE GAUSS(R,S,T) ! !內部過程的開始內部過程的開始 END SUBROUTINE GAUSS END SUBROUT
7、INE GAUSS ! !內部過程的結束內部過程的結束 EHD PROGRAM MAINEHD PROGRAM MAIN下一頁上一頁停止放映整理整理ppt第第5 5頁頁下圖顯示的是一個下圖顯示的是一個F90F90程序的標準結構。每個框都可程序的標準結構。每個框都可以是一個獨立的源文件:以是一個獨立的源文件:Program A1Use module ACall BContains內部子程序或內部函數End Program A1Module AContains模塊子程序或函數Subroutine B(外部子程序)下一頁上一頁停止放映整理整理ppt第第6 6頁頁 Fortran Fortran可以定
8、義一個過程就是指它是一個函數或是一個子程序??梢远x一個過程就是指它是一個函數或是一個子程序。 過程的引用就是調用一個過程。過程的引用就是調用一個過程。 建立過程的目的就是建立可多次重復執(zhí)行的程序段,以便多次建立過程的目的就是建立可多次重復執(zhí)行的程序段,以便多次調用它們。通常過程是帶有參數的,在調用它們。通常過程是帶有參數的,在FortranFortran中把參數稱為變元中把參數稱為變元(實元或啞元),過程定義中的變元是啞元,過程引用中的變元是(實元或啞元),過程定義中的變元是啞元,過程引用中的變元是實元。在調用過程時,要用實元代替啞元,這就是啞實結合。實元。在調用過程時,要用實元代替啞元,這
9、就是啞實結合。 11.3過程過程下一頁上一頁停止放映整理整理ppt第第7 7頁頁 類型:類型: 外部過程:外部過程:它是在某個外部程序單元中定義的獨立過程,或它是在某個外部程序單元中定義的獨立過程,或是用非是用非FortranFortran語言編寫的過程。語言編寫的過程。 內部過程:內部過程:在程序單元內部定義而且只能被該程序單元調用。在程序單元內部定義而且只能被該程序單元調用。 內在過程:內在過程:由編譯系統(tǒng)內部定義,不用任何附加聲明或說明就由編譯系統(tǒng)內部定義,不用任何附加聲明或說明就可以可直接引用。可以可直接引用。模塊過程:模塊過程:它在模塊中定義,可以被所有使用該模塊的程序調它在模塊中定
10、義,可以被所有使用該模塊的程序調用。包含過程的模塊稱為宿主。用。包含過程的模塊稱為宿主。啞過程啞過程 :如果一個啞元被指明為過程或作為過程名出現在過如果一個啞元被指明為過程或作為過程名出現在過程引用中,那么該啞元代表的過程為一個啞過程。程引用中,那么該啞元代表的過程為一個啞過程。語句函數:語句函數:它是由單個語句定義的函數,其形式為:它是由單個語句定義的函數,其形式為: 函數名函數名(啞元名表啞元名表)標量表達式標量表達式 F90F90不推薦使用,因為它不符合過程的一般規(guī)則。不推薦使用,因為它不符合過程的一般規(guī)則。 下一頁上一頁停止放映整理整理ppt第第8 8頁頁 特性特性 將過程分為將過程分
11、為函數函數和和子程序子程序的分類特性和它的啞元的特性,的分類特性和它的啞元的特性,對于函數還包括有結果的特性。對于函數還包括有結果的特性。 一個啞元可以是一個一個啞元可以是一個虛擬數據對象、啞過程或作為選擇返虛擬數據對象、啞過程或作為選擇返回指示符的星號回指示符的星號。當一個啞元不是星號時,它可有。當一個啞元不是星號時,它可有OPTIONALOPTIONAL屬屬性,表示對該過程引用時不需要有實元與該啞元結合。性,表示對該過程引用時不需要有實元與該啞元結合。 一個一個啞元啞元數據對象的主要特性包括它的類型、種別值、形數據對象的主要特性包括它的類型、種別值、形狀、輸入輸出意向狀、輸入輸出意向(IN
12、TENT)(INTENT)、是否可選、是否可選(OPTIONAL)(OPTIONAL)、是否一個、是否一個指針指針(POINTER)(POINTER)或目標或目標(TARGET)(TARGET)。 啞過程的特性啞過程的特性包括其接口是否顯式給出、作為過程的特性包括其接口是否顯式給出、作為過程的特性( (如果其接口顯式給出如果其接口顯式給出) )以及它是否可選。以及它是否可選。 函數結果函數結果的主要特性包括它的類型、類別值、秩以及是否的主要特性包括它的類型、類別值、秩以及是否指針等。指針等。 下一頁上一頁停止放映整理整理ppt第第9 9頁頁 1外部過程外部過程 如果過程是一個獨立于主程序單元的
13、程序單元,它就是外如果過程是一個獨立于主程序單元的程序單元,它就是外部過程。部過程。 外部過程也可以通過非外部過程也可以通過非FortranFortran語言語言( (通常是匯編語言通常是匯編語言) )來定義。來定義。 外部過程可以單獨以源文件存儲和編譯,也可以包括在主程序外部過程可以單獨以源文件存儲和編譯,也可以包括在主程序源代碼的源代碼的ENDEND語句后。語句后。 外部過程本身也可以包含有內部函數或內部子程序。外部過程本身也可以包含有內部函數或內部子程序。外部過程的形式有兩種:外部過程的形式有兩種:外部函數外部函數 :FUNCTIONFUNCTION語句語句 說明部分說明部分 可執(zhí)行部分
14、可執(zhí)行部分 CONTAINSCONTAINS內部過程內部過程 END FUNTIONEND FUNTION函數名函數名 外部子程序:外部子程序:SUBROUTINESUBROUTINE語句語句 說明部分說明部分 可執(zhí)行部分可執(zhí)行部分 CONTAINSCONTAINS內部過程內部過程 END SUBROUTINEEND SUBROUTINE子程序名子程序名 下一頁上一頁停止放映整理整理ppt第第1010頁頁 外部子程序外部子程序:SUBROUTINESUBROUTINE一般形式為:一般形式為: 前綴前綴SUBROUTINE SUBROUTINE 子程序子程序名名(啞元列表啞元列表) . . EN
15、D SUBROUTINE END SUBROUTINE子程序名子程序名前綴前綴是是F90F90中新增的,它可以是:中新增的,它可以是: 類型說明類型說明 關鍵詞關鍵詞 或或關鍵詞關鍵詞 類型說明類型說明 。 關鍵詞關鍵詞是:是:RECURSIVE RECURSIVE (F90)(F90) RECURSIVERECURSIVE表示過程時可以直接或間接地調用自身,即遞表示過程時可以直接或間接地調用自身,即遞歸調用,其過程是遞歸過程。歸調用,其過程是遞歸過程。 子程序名只是用來作標識,不代表任何值。子程序名只是用來作標識,不代表任何值。下一頁上一頁停止放映整理整理ppt第第1111頁頁啞元可以是變量
16、名、數組名、過程名、指針名等均啞元可以是變量名、數組名、過程名、指針名等均可作為啞元??勺鳛閱≡?。 啞元表中的啞元個數,理論上不受限制,但從軟件啞元表中的啞元個數,理論上不受限制,但從軟件工程觀點看,不宜過多,一般不應超過六、七個。如工程觀點看,不宜過多,一般不應超過六、七個。如果太多,意味著該子程序的算法較復雜,應該把該過果太多,意味著該子程序的算法較復雜,應該把該過程再分解為幾個子功能分別編寫成幾個子程序程再分解為幾個子功能分別編寫成幾個子程序 啞元列表啞元列表是子程序與調用單元之間進行數據傳送的主是子程序與調用單元之間進行數據傳送的主要渠道,當有一個以上啞元時,它們之間用逗號隔開,要渠道
17、,當有一個以上啞元時,它們之間用逗號隔開,如果沒有啞元,則一對括號可以省略。如果沒有啞元,則一對括號可以省略。 從從SUBROUTINESUBROUTINE語句后面一直到語句后面一直到ENDEND語句則是子程序語句則是子程序體。它的說明部分應包括對啞元和子程序中所用變量、體。它的說明部分應包括對啞元和子程序中所用變量、數組等的說明,它的執(zhí)行語句部分完成運算和操作功數組等的說明,它的執(zhí)行語句部分完成運算和操作功能。其中的能。其中的ENDEND語句或語句或RETURNRETURN語句使執(zhí)行流程返回到調語句使執(zhí)行流程返回到調用單元。用單元。下一頁上一頁停止放映整理整理ppt第第1212頁頁調用子程序
18、形式為:調用子程序形式為: CALLCALL子程序名子程序名(實元列表實元列表) 調用子程序時的實元是和啞元相同類型的變量、數組元調用子程序時的實元是和啞元相同類型的變量、數組元素、數組和常數。當用素、數組和常數。當用CALLCALL語句予以調用時,啞元和實元語句予以調用時,啞元和實元才按列表順序一一對應,取得同一數值。才按列表順序一一對應,取得同一數值。注意:注意:但使用常數時要避免下例中的常數替換式,否則但使用常數時要避免下例中的常數替換式,否則將導致不可預料的錯誤,應盡可能用變量作實元。將導致不可預料的錯誤,應盡可能用變量作實元。s=1.s=1.CALL bai(1.)CALL bai(
19、1.)PRINTPRINT* *,s,sEND END 例:例:SUBROUTINE bai(x)SUBROUTINE bai(x) REAL : x REAL : x x x=2.=2.* *x x END END下一頁上一頁停止放映整理整理ppt第第1313頁頁 外部函數外部函數 :FUNCTIONFUNCTION的一般形式為:的一般形式為: f77f77 類型說明類型說明FUNCTION FUNCTION 函數名函數名(啞元列表啞元列表) . . END END f90f90 前綴前綴 FUNCTION FUNCTION 函數名函數名(啞元列表啞元列表)RESULT()RESULT(結果
20、名結果名) . . END FUNCTION END FUNCTION函數函數名名 下一頁上一頁停止放映整理整理ppt第第1414頁頁 如果沒有啞元,則啞元表是一個空括號。如果沒有啞元,則啞元表是一個空括號。 RESULTRESULT是關鍵字,要照寫,后面括號內的變量名就是函是關鍵字,要照寫,后面括號內的變量名就是函數計算的結果值。數計算的結果值。 函數結果變量名有值,必須在說明語句中說明類型,在函數結果變量名有值,必須在說明語句中說明類型,在程序執(zhí)行部分中至少賦值一次。在引用時,它的值就是程序執(zhí)行部分中至少賦值一次。在引用時,它的值就是函數值。函數值。 函數結果名不可列入啞元表。如果沒有結果
21、名,則函數函數結果名不可列入啞元表。如果沒有結果名,則函數名就是結果名。名就是結果名。 F90F90中之所以增添了結果名功能,就是為了區(qū)別函數字中之所以增添了結果名功能,就是為了區(qū)別函數字面上的名稱面上的名稱( (函數名函數名) )和實際運算結果變量的名稱。和實際運算結果變量的名稱。下一頁上一頁停止放映整理整理ppt第第1515頁頁函數調用一般形式:函數調用一般形式: 函數名函數名( (實元表實元表) ) 函數名函數名()() 系統(tǒng)在該位置上返回以該實元為自變量的函數結果值,系統(tǒng)在該位置上返回以該實元為自變量的函數結果值,參加表達式的運算。參加表達式的運算。例如,下面都是合法的例如,下面都是合
22、法的FUNCTIONFUNCTION語句:語句:FUNCTION FUN1FUNCTION FUN1FUNCTION FUN2()FUNCTION FUN2()INTEGER FUNCTION FUN3(A,B)INTEGER FUNCTION FUN3(A,B)RECURSIVE FUNCTION FUN4(X,Y,Z)RECURSIVE FUNCTION FUN4(X,Y,Z)REAL RECURSIVE FUNCTION FUN5(M,N) RESULT(R_FUN5)REAL RECURSIVE FUNCTION FUN5(M,N) RESULT(R_FUN5)下一頁上一頁停止放映整理
23、整理ppt第第1616頁頁 FUNCTION FUNCTION hexhex(n)(n) CHARACTER(LEN=8) : hex CHARACTER(LEN=8) : hex CHARACTER(LEN=1) : h(0:15) = CHARACTER(LEN=1) : h(0:15) = (/ 0, 1, 2, 3, 4, & (/ 0, 1, 2, 3, 4, & 5, 6,7, 8, 9, A, B, C, D, E, F /)5, 6,7, 8, 9, A, B, C, D, E, F /) INTEGER, INTENT(IN) : n INTEGER, INT
24、ENT(IN) : n INTEGER : nin, j, nn INTEGER : nin, j, nn hex = hex = nin = n ! n nin = n ! n僅用于輸入,不能再被賦值。僅用于輸入,不能再被賦值。 DO j = 8, 1, -1DO j = 8, 1, -1nn = nin/16nn = nin/16hexhex(j:j) = h(nin-16(j:j) = h(nin-16* *nn)nn)IF(nn = 0) EXITIF(nn = 0) EXITnin = nnnin = nn END DO END DO END FUNCTION END FUNCTIO
25、N例:將一個例:將一個4 4字節(jié)的整數用字節(jié)的整數用1616進制表示出來。進制表示出來。 下一頁上一頁停止放映整理整理ppt第第1717頁頁PROGRAM mainPROGRAM mainCHARACTER(LEN=8) : CHARACTER(LEN=8) : hex hex ! !函數名的類型在引用側也須加以聲明函數名的類型在引用側也須加以聲明INTEGER : iINTEGER : iPRINT PRINT * *, , Input a positive Integer or negative one to stop:Input a positive Integer or negativ
26、e one to stop:DODO READ READ * *, i; IF( i0 ) EXIT , i; IF( i0)SUM(A,DIM=2,MASK=A0)。 下一頁上一頁停止放映整理整理ppt第第5252頁頁編寫有可選擇變元的過程時,編寫有可選擇變元的過程時,可選擇變元必須說明具有可選擇變元必須說明具有OPTIONALOPTIONAL屬性,并要使用屬性,并要使用PRESETPRESET內在函數內在函數。 一個啞元是否為可選啞元,看它是否有一個啞元是否為可選啞元,看它是否有OPTIONALOPTIONAL屬性,屬性,有有OPTIONALOPTIONAL屬性的啞元是可選變元,沒有屬性的
27、啞元是可選變元,沒有OPTIONALOPTIONAL屬性的屬性的啞元是必選的。啞元是必選的。 內在函數內在函數PRESETPRESET用來反映它的自變量是否在程序執(zhí)用來反映它的自變量是否在程序執(zhí)行部分中出現。行部分中出現。 PRESET(A)PRESET(A)的值是一個邏輯值,當的值是一個邏輯值,當A A出現(被使用到)出現(被使用到)時,函數值為真,否則為假。利用時,函數值為真,否則為假。利用PRESETPRESET函數的真假值,函數的真假值,可以通過可以通過IFIF構造作出變元是否出現時的不同算法。構造作出變元是否出現時的不同算法。 下一頁上一頁停止放映整理整理ppt第第5353頁頁例如,
28、要求編一子程序,既能求四邊形周長例如,要求編一子程序,既能求四邊形周長(A+B+C+D)(A+B+C+D)的的值,也能求三角形周長值,也能求三角形周長(A+B+C)(A+B+C)的值。此時的值。此時D D就是可選擇變就是可選擇變元,并規(guī)定當元,并規(guī)定當D D不出現時,置不出現時,置D D值為零。值為零。子程序如下:子程序如下:SUBROUTINE SUM(S,A,B,C,D)SUBROUTINE SUM(S,A,B,C,D)IMPLICIT NONEIMPLICIT NONEREAL,INTENT(IN) : A,B,CREAL,INTENT(IN) : A,B,CREAL,INTENT(IN
29、),OPTIONAL : DREAL,INTENT(IN),OPTIONAL : DREAL,INTENT(OUT) : SREAL,INTENT(OUT) : SREAL : TEMPREAL : TEMPIF(IF(PRESET(D)PRESET(D) THEN) THENTEMP=DTEMP=DELSEELSETEMP=0.TEMP=0.END IFEND IFS=A+B+C+S=A+B+C+TEMPTEMPEND SUBROUTINE SUM END SUBROUTINE SUM 下一頁上一頁停止放映整理整理ppt第第5454頁頁 類屬過程類屬過程 類屬過程是過程的一種,它允許用不同類
30、型的實元與類屬過程是過程的一種,它允許用不同類型的實元與同一個啞元結合,也即放寬了啞實元結合時類型必須一致同一個啞元結合,也即放寬了啞實元結合時類型必須一致的條件。的條件。 編寫類屬過程的方法是先編寫若干個功能相同的過程,編寫類屬過程的方法是先編寫若干個功能相同的過程,它們分別以整型、實型、復型等作啞元類型。而后在主調它們分別以整型、實型、復型等作啞元類型。而后在主調程序中編寫接口,為接口取一個統(tǒng)一的名,接口內分別列程序中編寫接口,為接口取一個統(tǒng)一的名,接口內分別列出啞元類型不同的過程說明部分語句。這個出啞元類型不同的過程說明部分語句。這個統(tǒng)一的接口名統(tǒng)一的接口名就是類屬過程名就是類屬過程名,
31、可以在后面執(zhí)行部分中用不同類型的實,可以在后面執(zhí)行部分中用不同類型的實元作啞實結合。元作啞實結合。下一頁上一頁停止放映整理整理ppt第第5555頁頁例如,要編寫求兩數之和的類屬函數時,分別編寫啞元例如,要編寫求兩數之和的類屬函數時,分別編寫啞元是實型和整型的函數:是實型和整型的函數:FUNCTION SUM_REAL(A,B) RESULT(SUM_REAL_RESULT)FUNCTION SUM_REAL(A,B) RESULT(SUM_REAL_RESULT)REAL : A,BREAL : A,B,SUM_REAL_RESULT,SUM_REAL_RESULTSUM_REAL_RESUL
32、T=A+BSUM_REAL_RESULT=A+BEND FUNCTION SUM_REALEND FUNCTION SUM_REALFUNCTION SUM_INTEGER(A,B) RESULT(SUM_INTEGER_RESULT)FUNCTION SUM_INTEGER(A,B) RESULT(SUM_INTEGER_RESULT)INTEGER :INTEGER : A,BA,B,SUM_INTEGER_RESULT,SUM_INTEGER_RESULTSUM_INTEGER_RESULT=A+BSUM_INTEGER_RESULT=A+BEND FUNCTION SUM_INTEGE
33、REND FUNCTION SUM_INTEGER下一頁上一頁停止放映整理整理ppt第第5656頁頁PROGRAM SUMMATIONPROGRAM SUMMATIONIMPLICIT NONEIMPLICIT NONEINTERFACEINTERFACE MY_SUM MY_SUMFUNCTION SUM_REAL(A,B) RESULT(SUM_REAL_RESULT)FUNCTION SUM_REAL(A,B) RESULT(SUM_REAL_RESULT)REAL : A,B,SUM_REAL_RESULTREAL : A,B,SUM_REAL_RESULTEND FUNCTION S
34、UM_REALEND FUNCTION SUM_REALFUNCTION SUM_INTEGER(A,B) RESULT(SUM_INTEGER_RESULT)FUNCTION SUM_INTEGER(A,B) RESULT(SUM_INTEGER_RESULT)INTEGER : A,B,SUM_INTEGER_RESULTINTEGER : A,B,SUM_INTEGER_RESULTEND FUNCTION SUM_INTEGEREND FUNCTION SUM_INTEGEREND INTERFACEEND INTERFACEREAL : X,YREAL : X,YINTEGER :
35、I,JINTEGER : I,JREAD READ * *, X,Y,I,J, X,Y,I,JPRINT PRINT * *, , MY_SUM(X,Y),MY_SUM(I,J)MY_SUM(X,Y),MY_SUM(I,J)END PROGRAM SUMMATION END PROGRAM SUMMATION 現在把這兩個函數過程綜合成一個類屬函數,類屬函數名取現在把這兩個函數過程綜合成一個類屬函數,類屬函數名取為為MY_SUMMY_SUM,在主調程序應寫明如下接口:,在主調程序應寫明如下接口:下一頁上一頁停止放映整理整理ppt第第5757頁頁 啞元改名啞元改名過程的優(yōu)點是具有廣泛通用性,一旦
36、編好,解各種問題的過程的優(yōu)點是具有廣泛通用性,一旦編好,解各種問題的主程序都可調用它。但是在為不同目的而使用時,具體問主程序都可調用它。但是在為不同目的而使用時,具體問題的物理名稱不同。為了加強可讀性與可維護性,在不同題的物理名稱不同。為了加強可讀性與可維護性,在不同領域使用過程時,需把啞元名稱改為與該領域中的物理名領域使用過程時,需把啞元名稱改為與該領域中的物理名稱一致,而稱一致,而F90F90允許改變變元名稱。名稱的改變是在接口允許改變變元名稱。名稱的改變是在接口塊中進行的,所以主調程序中要寫出接口塊。塊中進行的,所以主調程序中要寫出接口塊。 例如,對于上面求周長的子程序,如調用時欲把啞元
37、名例如,對于上面求周長的子程序,如調用時欲把啞元名A,B,C,DA,B,C,D改為物理意義明確的名稱改為物理意義明確的名稱UPPER,DOWN,LEFT,RIGHTUPPER,DOWN,LEFT,RIGHT,只需在主調程序中寫入接口塊,在接口塊的啞元表中用新的只需在主調程序中寫入接口塊,在接口塊的啞元表中用新的啞元名即可:啞元名即可:下一頁上一頁停止放映整理整理ppt第第5858頁頁PROGRAM SUMMATIONPROGRAM SUMMATIONINTERFACEINTERFACESUBROUTINE SUM(S,UPPER,DOWN,LEFT,RIGHT)SUBROUTINE SUM(S
38、,UPPER,DOWN,LEFT,RIGHT)IMPLICIT NONEIMPLICIT NONEREAL,INTENT(IN) : UPPER,DOWN,LEFTREAL,INTENT(IN) : UPPER,DOWN,LEFTREAL,INTENT(IN),OPTIONAL : RIGHTREAL,INTENT(IN),OPTIONAL : RIGHTREAL,INTENT(OUT) : SREAL,INTENT(OUT) : SREAL : TEMPREAL : TEMPEND SUBROUTINE SUMEND SUBROUTINE SUMEND INTERFACEEND INTERF
39、ACEREAD READ * *, UPPER,DOWN,LEFT,RIGHT, UPPER,DOWN,LEFT,RIGHTCALL SUBROUTINE SUM(S,UPPER,DOWN,LEFT,RIGHT)CALL SUBROUTINE SUM(S,UPPER,DOWN,LEFT,RIGHT) END PROGRAM SUMMATION END PROGRAM SUMMATION 下一頁上一頁停止放映整理整理ppt第第5959頁頁 2內部過程內部過程內部過程內部過程是包含于外部過程、模塊或主程序單元之中的程是包含于外部過程、模塊或主程序單元之中的程序單元序單元。在宿主程序單元中,以。在宿
40、主程序單元中,以CONTAINSCONTAINS(包含)語句把(包含)語句把內部過程與其他部分分開。內部過程也具有兩種形式:內部過程與其他部分分開。內部過程也具有兩種形式:內部函數內部函數 :FUNCTIONFUNCTION語句語句 說明部分說明部分 可執(zhí)行部分可執(zhí)行部分 END FUNTIONEND FUNTION函數名函數名 注意注意: :內部過程中不能再包含內部過程,即內部過程中不能再包含內部過程,即F90F90不是過程嵌套不是過程嵌套式語言。式語言。 內部子程序內部子程序:SUBROUTINESUBROUTINE語句語句 說明部分說明部分 可執(zhí)行部分可執(zhí)行部分 END SUBROUTI
41、NEEND SUBROUTINE子程序名子程序名 下一頁上一頁停止放映整理整理ppt第第6060頁頁在在F77F77中,中,個源文件可以包含一個主程序和幾個分別個源文件可以包含一個主程序和幾個分別獨立的函數或子程序(相當于獨立的函數或子程序(相當于F90F90中的外部過程)。中的外部過程)。在在F90F90中,可以中,可以將若干個過程用將若干個過程用CONTAINSCONTAINS結構包含在主結構包含在主程序里,它們與宿主程序單元共享變量名程序里,它們與宿主程序單元共享變量名。而且,外部。而且,外部過程等其它程序單元都可以有自己的內部過程。過程等其它程序單元都可以有自己的內部過程。 例:例:p
42、rogram internalprogram internal real a,b,c real a,b,c call find call find print print * *,c,c containscontains subroutine find subroutine find read read * *, a,b, a,b c=sqrt(a c=sqrt(a* * *2+b2+b* * *2)2) end subroutine find end subroutine find end end下一頁上一頁停止放映整理整理ppt第第6161頁頁使用內部過程的規(guī)則:使用內部過程的規(guī)則:在宿主
43、中不要定義子程序名和函數名的類型,也不能指在宿主中不要定義子程序名和函數名的類型,也不能指定它們是有定它們是有EXTERNALEXTERNAL屬性。屬性。宿主中的變量名和數組名等在內部過程中有效,有相同宿主中的變量名和數組名等在內部過程中有效,有相同的數值。但同一名若在內部過程中又進行了類型聲明,則的數值。但同一名若在內部過程中又進行了類型聲明,則此名被視為其過程中的獨立變量,無相同的數值。此名被視為其過程中的獨立變量,無相同的數值。內部過程中也可引用另一內部過程。內部過程中也可引用另一內部過程。下一頁上一頁停止放映整理整理ppt第第6262頁頁內部過程的重要特征:內部過程的重要特征:沒有說明
44、語句。它們的變量與主程序同名變量的值是沒有說明語句。它們的變量與主程序同名變量的值是相通的。主程序內可以直接引用內部過程變量的值,或相通的。主程序內可以直接引用內部過程變量的值,或賦之以值,也即主程序內定義的變量是全局的,作用于賦之以值,也即主程序內定義的變量是全局的,作用于以以PROGRAMPROGRAM語句到語句到END PROGRAMEND PROGRAM語句之間的所有場合。語句之間的所有場合。一般沒有啞元。調用內部過程時只要簡單地寫一個過一般沒有啞元。調用內部過程時只要簡單地寫一個過程名。這是內部過程與外部過程的很大區(qū)別。程名。這是內部過程與外部過程的很大區(qū)別。在特殊情況下,內部過程也
45、可保留由自己單獨說明的在特殊情況下,內部過程也可保留由自己單獨說明的少量啞元。如果變量是在內部子程序中單獨說明的,它少量啞元。如果變量是在內部子程序中單獨說明的,它只是局部變量,作用域只能是局部的,對其主程序的其只是局部變量,作用域只能是局部的,對其主程序的其它部分不起作用。主程序調用時仍需通過啞實結合來傳它部分不起作用。主程序調用時仍需通過啞實結合來傳送數據。送數據。下一頁上一頁停止放映整理整理ppt第第6363頁頁 3內在過程內在過程內在過程是內在過程是FortranFortran含于編譯器程序庫中的過程,它不需含于編譯器程序庫中的過程,它不需任何其它聲明或說明即可使用。任何其它聲明或說明
46、即可使用。F90F90中定義了中定義了113113個內在過個內在過程,它們?yōu)榭茖W計算提供了極大方便,其具體使用方法請程,它們?yōu)榭茖W計算提供了極大方便,其具體使用方法請查看查看Visual FortranVisual Fortran的聯機幫助。內在過程共分為四類:的聯機幫助。內在過程共分為四類:1 1、查詢函數、查詢函數:它們的返回值是:它們的返回值是根據變元的性質根據變元的性質而非變元而非變元的取值。的取值。2 2、基本過程、基本過程:由變元指明的基本過程由變元指明的基本過程,但可以用標量或,但可以用標量或數組實元進行調用。有許多函數是這種基本函數,并有一數組實元進行調用。有許多函數是這種基本
47、函數,并有一種基本內在子程序。如果變元是標量,則結果也是標量。種基本內在子程序。如果變元是標量,則結果也是標量。如果變元是數組,則對數組的每個元素施加過程,其結果如果變元是數組,則對數組的每個元素施加過程,其結果是與變元形狀相同的數組。是與變元形狀相同的數組。 例如,例如,a a是數組的話,則是數組的話,則b=sin(a)b=sin(a)也是數組。也是數組。 下一頁上一頁停止放映整理整理ppt第第6464頁頁3 3、變換函數、變換函數:其變元是數組,但過程不施加于每個元素,而:其變元是數組,但過程不施加于每個元素,而是把變元變換成另一數組。是把變元變換成另一數組。4 4、非基本過程、非基本過程
48、:只能以標量實元進行調用,內在子程序都是:只能以標量實元進行調用,內在子程序都是非基本過程。非基本過程。如果要用內在過程名作為其它過程的實元,需要用如果要用內在過程名作為其它過程的實元,需要用INTRINSICINTRINSIC語句語句加以聲明。加以聲明。下一頁上一頁停止放映整理整理ppt第第6565頁頁 11.4 共享方式共享方式 共享就是讓編譯系統(tǒng)把兩個變量名分配在同一個內存單共享就是讓編譯系統(tǒng)把兩個變量名分配在同一個內存單元中。已知訪問一個變量名,實際上就是訪問它所分配的元中。已知訪問一個變量名,實際上就是訪問它所分配的內存單元中存貯的值。既然內存單元中存貯的值。既然A A程序單元中的變
49、量程序單元中的變量X X與與B B程序單程序單元中的變量元中的變量Y Y分配在同一存貯單元中,訪問分配在同一存貯單元中,訪問X X或訪問或訪問Y Y都是訪都是訪問同一個內存單元,取得的數也是相同的。問同一個內存單元,取得的數也是相同的。 如果兩個變量共享存貯單元,當如果兩個變量共享存貯單元,當A A程序單元中程序單元中X=2X=2時,時,B B程程序單元中序單元中Y Y也是也是2 2。如果。如果A A程序單元中執(zhí)行語句程序單元中執(zhí)行語句X=X+1X=X+1,則,則B B程程序單元中序單元中Y Y的值也變?yōu)榈闹狄沧優(yōu)? 3,反之也然。當然,前提是,反之也然。當然,前提是X X和和Y Y的的類型必
50、須一致。如果類型不一致,其結果將很難預料。類型必須一致。如果類型不一致,其結果將很難預料。共享方式有以下幾種:共享方式有以下幾種: COMMONCOMMON語句語句 EQUIVALENCEEQUIVALENCE語句語句 模塊模塊 INCLUDEINCLUDE語句可進行語句段復制。語句可進行語句段復制。 (F77)(F77)(F90)(F90)下一頁上一頁停止放映整理整理ppt第第6666頁頁 一、一、 COMMON語句語句 F77F77中不同程序單元間數據的共享通常是用中不同程序單元間數據的共享通常是用COMMONCOMMON和和EQUIVALENCEEQUIVALENCE語句,使用這些語句共
51、享數據的效率不高,編程語句,使用這些語句共享數據的效率不高,編程時容易出錯。但時容易出錯。但F90F90仍保留了這兩個語句以兼容以前的標準。仍保留了這兩個語句以兼容以前的標準。 COMMONCOMMON語句用于語句用于在不同程序單元之間進行實體的數據批量在不同程序單元之間進行實體的數據批量傳遞,傳遞,它比啞實結合的方法進行數據傳遞的速度要快。其方法它比啞實結合的方法進行數據傳遞的速度要快。其方法是開辟一個公共塊,公共塊可以是無名的是開辟一個公共塊,公共塊可以是無名的( (只能有一個只能有一個) ),也可,也可以是有名稱的,其一般形式為:以是有名稱的,其一般形式為:COMMON /COMMON
52、/公共塊名公共塊名1/1/變量名表變量名表1,/1,/公共塊名公共塊名2/2/變量名表變量名表2.2.公共塊名可以和變量名相同,變量實體名不得是啞元、可分配公共塊名可以和變量名相同,變量實體名不得是啞元、可分配數組、自動對象、函數名或函數結果名或數組、自動對象、函數名或函數結果名或ENTRYENTRY名,并且不得有名,并且不得有PARAMETERPARAMETER屬性。屬性。不同程序單元中相同公用名下的變量名可以是不同的。相同公不同程序單元中相同公用名下的變量名可以是不同的。相同公用名中的變量在不同程序單元中,用名中的變量在不同程序單元中,按位置一一對應共享同一存儲按位置一一對應共享同一存儲單
53、元中的數值。單元中的數值。由于由于COMMONCOMMON語句是說明語句,它的位置必須在可執(zhí)行語句之前,語句是說明語句,它的位置必須在可執(zhí)行語句之前,通常是緊跟在程序單元的起始句之后,一個程序單元可以有多條通常是緊跟在程序單元的起始句之后,一個程序單元可以有多條COMMONCOMMON語句。語句。下一頁上一頁停止放映整理整理ppt第第6767頁頁例如:下面的例如:下面的COMMONCOMMON語句段語句段COMMON/happy/we,you,theyCOMMON/happy/we,you,theyCOMMON/ /our,your,theirCOMMON/ /our,your,theirCO
54、MMON/happy/i,he,sheCOMMON/happy/i,he,sheCOMMON/angry/dog,cat,mouseCOMMON/angry/dog,cat,mouseCOMMON my,his,herCOMMON my,his,her等價于語句段,等價于語句段,COMMON/happy/we,you,they,i,he,sheCOMMON/happy/we,you,they,i,he,sheCOMMON/angry/dog,cat,mouseCOMMON/angry/dog,cat,mouseCOMMON/ /our,your,their,my,his,herCOMMON/
55、/our,your,their,my,his,her其中,有兩條有名公共塊語句,而其中,有兩條有名公共塊語句,而/是無名的。是無名的。 下一頁上一頁停止放映整理整理ppt第第6868頁頁由于各個程序單元中的變量名是獨立的,它們并不會因由于各個程序單元中的變量名是獨立的,它們并不會因為名字相同而建立起數值的聯系。為名字相同而建立起數值的聯系。例如,主程序中名為例如,主程序中名為X X的變量和子程序中的的變量和子程序中的X X變量雖然同變量雖然同名,但它們各有自己的存儲單元,互不相關。名,但它們各有自己的存儲單元,互不相關。但如果我們在主程序和子程序的說明部分各自都增加一但如果我們在主程序和子程序
56、的說明部分各自都增加一條無名共用區(qū)語句:條無名共用區(qū)語句:COMMON XCOMMON X,則,則FORTRANFORTRAN編譯程序在編譯程序在存儲區(qū)中開辟了一個公用數據區(qū),主程序和子程序中的存儲區(qū)中開辟了一個公用數據區(qū),主程序和子程序中的COMMONCOMMON語句中的第一個變量共同占用公共塊的第一個存語句中的第一個變量共同占用公共塊的第一個存儲單元,達到數據共享。儲單元,達到數據共享。下一頁上一頁停止放映整理整理ppt第第6969頁頁例如:主程序中的語句例如:主程序中的語句COMMON X,Y,Z(3),ICOMMON X,Y,Z(3),I和子程序中的語句和子程序中的語句COMMON A
57、,B,C(3),JCOMMON A,B,C(3),J使得無名公共塊中變量使得無名公共塊中變量X X和和A A,Y Y和和B B,數組,數組Z Z和和C C,I I和和J J分分別被分配在相同的存儲單元中。占同一個存儲單元的那別被分配在相同的存儲單元中。占同一個存儲單元的那些變量在不同的程序單位中,它們的名字不需要相同。些變量在不同的程序單位中,它們的名字不需要相同。COMMONCOMMON語句還可用來聲明數組,例如:語句還可用來聲明數組,例如:COMMON /food/restruant(100),McDonald(10)COMMON /food/restruant(100),McDonald
58、(10)這條語句已經按這條語句已經按I-NI-N規(guī)則聲明了實型數組和整型數組,規(guī)則聲明了實型數組和整型數組,無需用無需用DIMENSIONDIMENSION語句或屬性對數組名重新說明。如果語句或屬性對數組名重新說明。如果要重新定義類型的話,則數組大小不得在要重新定義類型的話,則數組大小不得在COMMONCOMMON語句和語句和類型說明語句中重復出現。類型說明語句中重復出現。 下一頁上一頁停止放映整理整理ppt第第7070頁頁SUBROUTINE unit1SUBROUTINE unit1REAL(8)x(5)REAL(8)x(5)INTEGER JINTEGER JCHARACTER strC
59、HARACTER str* *1212TYPE(member) club(50)TYPE(member) club(50)COMMON/blocka/x,j,str,clubCOMMON/blocka/x,j,str,club . .SUBROUTINE unit2SUBROUTINE unit2REAL(8) z(5)REAL(8) z(5)INTEGER mINTEGER mCHARACTER chrCHARACTER chr* *1212TYPE(member) myclub(50)TYPE(member) myclub(50)COMMON/blocka/z,m,chr,myclub C
60、OMMON/blocka/z,m,chr,myclub 下一頁上一頁停止放映整理整理ppt第第7171頁頁 二、二、 EQUIVALENCE語句語句 EQUIVALENCEEQUIVALENCE語句是說明語句,它必須出現在程序單元的語句是說明語句,它必須出現在程序單元的執(zhí)行語句之前。執(zhí)行語句之前。變量表中,可以是變量名、數組名或數組元素等,但至少應該變量表中,可以是變量名、數組名或數組元素等,但至少應該有兩個變量名,之間用逗號分開。有兩個變量名,之間用逗號分開。作用:作用: 使使同一個程序單元中的兩個或更多的變量共用同一同一個程序單元中的兩個或更多的變量共用同一個存儲單元個存儲單元,以節(jié)省內存。這里特別需要強
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版建筑信息模型施工應用咨詢協議3篇
- 2025江蘇建筑安全員《A證》考試題庫
- 二零二五年度辦公室改造施工與室內藝術裝飾合同3篇
- 2025版知識產權運營與技術保密管理合同3篇
- 2024年食堂檔口租賃合同范本(含菜品研發(fā))2篇
- 二零二五年度創(chuàng)意辦公空間租賃及裝修設計合同3篇
- 二零二五年度個人房屋裝修貸款第三方擔保服務協議3篇
- 2025年度汽車修理廠車身修復勞務合同2篇
- 二零二五年度公司股份重組與債務重組合同3篇
- 二零二五年度城市軌道交通安裝工程總承包合同2篇
- 機電設備安裝作業(yè)指導書
- 申克轉子秤安裝圖片指引ppt課件
- 山東昌樂二中“271高效課堂”教學模式
- 金朝的水利與社會經濟
- 工程竣工保修期滿移交書
- 急診科烏頭堿中毒課件
- 2013天津中考滿分作文
- 高等數學同濟大學第7版 課后習題答案解析完整版
- 單模光纜檢驗報告
- 公共政策分析簡答題
- 加熱爐溫度控制系統(tǒng)_畢業(yè)論文
評論
0/150
提交評論