




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第六章 Fortran 過程程序設計6.1 FORTRAN過程概述l一個FORTRAN程序由若干個程序單元組成。程序單元可以是主程序單元、外部程序單元、模塊程序單元或數(shù)據(jù)塊程序單元。其中,只能包含一個主程序單元。內(nèi)部過程是在程序單元內(nèi)部定義而且只能被該程序單元調(diào)用的過程。內(nèi)部過程也稱為標準過程。dxx10116.2 外部函數(shù)子程序l由fortran語言提供的內(nèi)在過程,雖然在任何程序單元中都可以隨意調(diào)用,但是僅僅限于內(nèi)在過程遠遠不能滿足許多應用的需要。因此,任何一種程序設計語言都提供某種方法,使用戶能夠根據(jù)實際問題的要求,自行編寫相應的函數(shù)或子程序來擴充程序的處理能力。l如果被計算的任務既不是內(nèi)
2、在函數(shù),也不能用一個表達式表示,或者雖然能用一個表達式表示,但有多個程序塊都要使用它,在這些情況下,可以用一個外部函數(shù)子程序定義它。END語句將實現(xiàn)RETURN語句的功能。6.3 外部子例行子程序) 0(02acbxax征外,還可以給多個過程定義一個“通用名”,或者給多個函數(shù)定義一個“新運算符”,以便實現(xiàn)面向?qū)ο蟪绦蛟O計的“多態(tài)性”特征。51sindxxx201cosdxxx5 . 24 . 0sinxdx!找出一維數(shù)組最大/小值及其它們各自所在列號的函數(shù)子程序function xmax(x,n,jmax,xmin,jmin) implicit none integer,dimension(*
3、):x ! 假定大小的數(shù)組x integer:xmax,n,jmax,xmin,jmin,i xmax=x(1);jmax=1;xmin=x(1);jmin=1 do i=2,n+1 if(xmaxx(i)then xmin=x(i);jmin=i end if end do returnend function!主程序program ex621 implicit none integer y(3,5),xmax,yy(0:4), & ymax,jmax,ymin,jmin,i write(*,*)按行輸入數(shù)組y(3,5)的各元素值: read(*,*)(y(i,:),i=1,3) write
4、(*,*)行號 最大值 最大值所在列號最小& 值 最小值所在列號 do i=1,3 ymax=xmax(y(i,:), 5, jmax, ymin, & jmin) write( *,“(i4,i5,i10, i12, i10)”)I,& ymax,jmax,ymin,jmin end doend program程序執(zhí)行示例:按行輸入數(shù)組Y(3,5)的各元素值:3 5 4 2 88 1 5 7 63 7 9 2 1行號 最大值 最大值所在列號 最小值 最小值所在列號 1 8 5 2 4 2 8 1 1 2 3 9 3 1 5 例6.21中,啞元數(shù)組X是一個一維假定大小的數(shù)組。它與相應的實元數(shù)組
5、-二維數(shù)組Y的第I列,即Y(I,:), Y的第二維的下界和X的下界均為1。因此,X(1)即為Y(I,1),X(2)即為Y(I,2),如此依次類推。l在函數(shù)子程序中處理X的時候,如果啞元數(shù)組X的下界與相應的實元數(shù)組下界不相等時,應注意X的上界為:實元數(shù)組的上界-實元數(shù)組的下界+啞元數(shù)組X的下界。為了避免引用錯誤,最好使啞元數(shù)組與相應的實元數(shù)組的下界保持一致。nnnnaxaxaxay1110nnaxaxaxaxay)(12104)假定形狀的數(shù)組l假定形狀的數(shù)組是各維可以指定下界而不指定上界、必須出現(xiàn)維界分隔符“:”的啞元數(shù)組。維界分隔符“:”的個數(shù)表示數(shù)組的維數(shù)。如果未指定下界,則其值為1。l當啞
6、元數(shù)組是假定形狀的數(shù)組時,必須用過程接塊對被調(diào)用過程給予說明。function maxmin ( a ,loc) implicit none integer, dimension(:,:), intent(in) :a integer, dimension(size(a,1),2) : maxmi integer, dimension(size(a,1),2) : loc maxmin(:,1) = maxval (a, dim=2) loc(:,1) = maxloc (a, dim=2) maxmin(:,2) = minval (a, dim=2) loc(:,2) = minloc (
7、a, dim=2)end function maxminprogram ex625 implicit none interface function maxmin ( a ,loc) integer, dimension(:,:), intent(in) : a integer, dimension(size(a,1),2) : maxmin integer, dimension(size(a,1),2) : loc end function maxmin end interface integer, parameter : rows= 3, cols= 5 integer, dimensio
8、n(rows,cols) : a integer, dimension(rows,2) : b integer,dimension(rows,2) :c integer : i,j print *, array a(3,5): read *,(a(i,:),i=1,3) b = maxmin(a,c) print *, array a call mprint (a,rows,cols) print *,row max maxloc min minloc print (5i6), (i,b(i,1),c(i,1),b(i,2),c(i,2),i=1,3) end program subrouti
9、ne mprint(x,m,n) integer:m,n, i,j real, dimension(m,n), intent(in) : x do i=1,m do j=1,n write(*,(i6),advance=no)x(i,j) end do write(*,*) end doend subroutine mprint程序中,函數(shù)子程序MaxMin中的啞元A是二維假定形狀的數(shù)組。當執(zhí)行語句B = MaxMin(A,C)時,其大小與實元二維數(shù)組A(3,5)的大小一致。6.5.3 自動數(shù)組 自動數(shù)組只能出現(xiàn)在外部過程中。 自動數(shù)組不是啞元,但是,在其維界中可以有整型啞元。由于自動數(shù)組的大
10、小是在過程入口處計算的,所以,其維界中啞元值在過程執(zhí)行期間的改變不影響自動數(shù)組的大小。 自動數(shù)組不能具有SAVE屬性,不能出現(xiàn)在SAVE語句或DATA語句中,也不能在說明時初始化。如:subroutine suba(a,b,n,s) implicit none integer n real,dimension(5,n): w !自動數(shù)組w real a(:) !假定形狀啞元數(shù)組 real b(n,n) !可調(diào)啞元數(shù)組 real:s(n,*) !假定大小啞元數(shù)組 end subroutine subal6.6 遞歸過程與遞歸調(diào)用1)!1(101!nnnnnn或 print *,輸入一個正整數(shù)或0
11、: read *,m if(m=0)exit print *,輸入了一個負整數(shù): end do print (i4,的階乘=,i10),m,fact(m) !對遞歸函數(shù)子程序fact的調(diào)用end program說明:當M=4時,遞歸函數(shù)FACT(M)的執(zhí)行過程見教材圖6.2所示。在使用遞歸過程時要特別注意兩點。一是在定義遞歸過程時一定要有結束遞歸的條件,否則會出現(xiàn)無限遞歸從而導致系統(tǒng)崩潰。如上例中的語句:表示當N=0或N=1時,遞歸結束,N=1即為結束遞歸的條件。二是在使用遞歸時既要看到遞歸程序具有簡單、清晰、便于程序的閱讀和維護的優(yōu)點,也要看到遞歸程序具有執(zhí)行效率低、系統(tǒng)資源開銷大的缺點。在
12、具體使用時要綜合權衡。6.6.2 遞歸子例行子程序 RECURSIVE SUBROUTINE sub(啞元表) CALL sub(實元表) END例6.27 利用遞歸計算n次二項式的展開系數(shù)。已知二項式的展開式為:該式中共有n+1個系數(shù),其系數(shù)呈楊輝三角形形式: 1 n=0 1 1 n=1 1 2 1 n=2 1 3 3 1 n=3 1 4 6 4 1 n=4 1 5 10 10 5 1 n=5nkkknknnbacba0)(recursive subroutine coef(c,n)integer : c(1:n+1),n,iif(n=0) thenc(1)=1 elseif(n=1) th
13、enc(1)=1c(2)=1else call coef(c,n-1) c(n+1)=1 do i=n,2,-1 c(i)=c(i)+c(i-1) end do c(1)=1 end if end1) PURE過程 使用PURE過程時有很多限制 (自學) 2) ELEMENTAL過程 使用ELEMENTAL過程時有與PURE過程相同的限制,而且,由于該過程還可以對數(shù) 組進行設置,所以它不允許數(shù)組做啞元。同時,必須用過程接口塊對被調(diào)用的 ELEMENTAL過程給予說明。(自學)6.8變量作用域與不同程序單位間的數(shù)據(jù)共享作用域是指一標識符具有唯一含義的區(qū)域。FORTRAN語言的變量作用域有三種:語
14、句變量、局部變量和全局變量的作用域。l語句變量作用域 如果變量的作用范圍僅限于一個語句內(nèi)部,那么,它具有語句變量作用域。一個語句函數(shù)的啞元和一個DATA語句中出現(xiàn)的隱DO循環(huán)變量, 它們只具有語句變量作用域。也就是說, 它們可以和局部變量或全局變量重名而不會相互混肴。l局部變量作用域 如果變量的作用范圍僅限于它們所在的程序單位內(nèi),那么, 它具有局部變量作用域。FORTRAN語言是一種塊狀結構語言,即各程序單位間是相互獨立的。因此,前面介紹的任何一個不是語句變量的變量、任何一個數(shù)組、啞元、語句函數(shù)、內(nèi)部函數(shù)、內(nèi)在函數(shù)、一個過程接口體的啞元等都屬于局部變量。 正因為如此,各程序單位間需要通過調(diào)用而
15、相互聯(lián)系,需要通過調(diào) 用期間的啞實結合而相互傳遞數(shù)據(jù)。這種機制為協(xié)作開發(fā)大型程序帶來 很大方便。 局部變量名不能與任何全局變量重名。同一程序單位內(nèi)的局部變量名也不能重名。l全局變量作用域 如果變量的作用范圍是整個程序,那么,它具有全局變量作用域。前面介紹的任何一個外部函數(shù)子程序是全局變量作用域的例子。 全局變量能夠使變量、數(shù)組在整個程序范圍內(nèi)都可以引用。 在FORTRAN 77及更老版本中,“全局變量”只能通過公用語句創(chuàng)建“公用區(qū)”實現(xiàn)。在FORTRAN 90及更新版本中,“全局變量”還可以通過一種稱為“模塊”的程序單位來實現(xiàn)。 本節(jié)僅介紹通過公用語句創(chuàng)建“公用區(qū)”實現(xiàn)“全局變量”的方法。的作用相同。 common x, a, b, r(10), t, ya/com1/s(4,5), p, q, z, y(20), bk等效。6.8.3數(shù)據(jù)塊程序單位該程序的一個執(zhí)行示例: 輸入一個字符串:abcDE xyz123+-*/ ABCDE XYZ123+-*/ recursive function tribonacci (n) result (t_result) implicit none integer, intent(in) : n integer : t_result if ( n = 3 ) then t_result = 1 else t_result = tribo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電信網(wǎng)絡安全管理與應急預案
- 2025年度事業(yè)單位臨時工勞動派遣服務合同
- 2025年中國心臟起搏器行業(yè)市場調(diào)查研究及投資前景預測報告
- 2025年度農(nóng)家樂經(jīng)營權及設施轉(zhuǎn)讓合同范本
- 體育賽事代理居間合同
- 2025年度天然氣汽車加氣站供用氣合同詳細版
- 二零二五年度股東合同解除及員工安置服務合同
- 2024年兒童體育培訓行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y戰(zhàn)略研究報告
- 保健食品冷鏈配送合同
- 二零二五年度商業(yè)地產(chǎn)商用租房租賃及區(qū)域經(jīng)濟發(fā)展戰(zhàn)略合同
- 清淤工程施工記錄表
- TCITSA 24-2022 基于ETC的高速公路自由流收費技術規(guī)范
- 2022年涉農(nóng)領域涉嫌非法集資風險專項排查工作總結
- 起重裝卸機械操作工國家職業(yè)技能標準(2018年版)
- 叉車裝卸區(qū)域安全風險告知牌
- 五年級下冊美術課件-第2課 新街古韻丨贛美版
- 秦荻輝科技英語寫作教程練習答案(共42頁)
- GB∕T 41168-2021 食品包裝用塑料與鋁箔蒸煮復合膜、袋
- 部編版語文一年級下冊繪本閱讀課-優(yōu)質(zhì)課件.pptx
- 新人教版九年級全一冊物理知識點填空題匯編
- 人教版五年級數(shù)學下冊每個單元教材分析(共九個單元)
評論
0/150
提交評論