for90 第6章2_第1頁(yè)
for90 第6章2_第2頁(yè)
for90 第6章2_第3頁(yè)
for90 第6章2_第4頁(yè)
for90 第6章2_第5頁(yè)
已閱讀5頁(yè),還剩92頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1功能:用于通知編譯程序主調(diào)程序所調(diào)用的功能:用于通知編譯程序主調(diào)程序所調(diào)用的外部過(guò)程的名外部過(guò)程的名字字、虛元名字虛元名字及它們的及它們的類型類型等。等。位置:寫(xiě)在主調(diào)程序的類型說(shuō)明語(yǔ)句之前,位置:寫(xiě)在主調(diào)程序的類型說(shuō)明語(yǔ)句之前,implicitimplicit語(yǔ)句語(yǔ)句之后。最簡(jiǎn)接口塊結(jié)構(gòu)形式之后。最簡(jiǎn)接口塊結(jié)構(gòu)形式: interface interface ! !接口入口接口入口被調(diào)程序的被調(diào)程序的單位定義語(yǔ)句單位定義語(yǔ)句,說(shuō)明語(yǔ)句說(shuō)明語(yǔ)句,單位結(jié)束語(yǔ)句單位結(jié)束語(yǔ)句 end interface end interface ! !接口出口接口出口說(shuō)明說(shuō)明: :功能簡(jiǎn)單的程序,不必寫(xiě)接口塊功能

2、簡(jiǎn)單的程序,不必寫(xiě)接口塊。 如有接口,主調(diào)程序不必再說(shuō)明外部函數(shù)名的類型。如有接口,主調(diào)程序不必再說(shuō)明外部函數(shù)名的類型。6.2.3 接口接口塊(塊(interface block )2program test implicit none interface function func(x)result(f) real:x,f end function end interface real:x!有接口不能說(shuō)明!有接口不能說(shuō)明func print *,enter x: read *,x write(*,*) func(x)end program test 例如:利用外部函數(shù)完成例如:利用外部函數(shù)完

3、成x3的計(jì)算。的計(jì)算。function func(x)result(f)real: x,ff=x*3end function主程序主程序 函數(shù)子程序函數(shù)子程序 接口塊的內(nèi)容就是接口塊的內(nèi)容就是被調(diào)用過(guò)程的變?cè)徽{(diào)用過(guò)程的變?cè)昂瘮?shù)返回變量等及函數(shù)返回變量等說(shuō)明部分的拷貝說(shuō)明部分的拷貝31 1、實(shí)元是、實(shí)元是關(guān)鍵字變?cè)P(guān)鍵字變?cè)? 2、實(shí)元是缺省的、實(shí)元是缺省的可選變?cè)蛇x變?cè)? 3、一個(gè)外部函數(shù)使系統(tǒng)中的內(nèi)在、一個(gè)外部函數(shù)使系統(tǒng)中的內(nèi)在操作符擴(kuò)展了原有的功能操作符擴(kuò)展了原有的功能。 4 4、外部過(guò)程、外部過(guò)程擴(kuò)展了賦值號(hào)擴(kuò)展了賦值號(hào)的使用范圍。的使用范圍。5 5、用一個(gè)、用一個(gè)類屬名調(diào)用過(guò)程

4、類屬名調(diào)用過(guò)程。6 6、調(diào)用的外部過(guò)程是一個(gè)函數(shù),且、調(diào)用的外部過(guò)程是一個(gè)函數(shù),且函數(shù)結(jié)果函數(shù)結(jié)果是一個(gè)數(shù)組是一個(gè)數(shù)組;或或函數(shù)結(jié)果值函數(shù)結(jié)果值是一個(gè)字符型,且長(zhǎng)度不是常數(shù),也不是假是一個(gè)字符型,且長(zhǎng)度不是常數(shù),也不是假定長(zhǎng)度(定長(zhǎng)度(* *);或被調(diào)用過(guò)程中的;或被調(diào)用過(guò)程中的虛元虛元是一個(gè)是一個(gè)假定形狀數(shù)組假定形狀數(shù)組、一個(gè)一個(gè)指針變量指針變量、一個(gè)一個(gè)目標(biāo)變量目標(biāo)變量。但下例情形必須使用接口塊:但下例情形必須使用接口塊:46.4 虛實(shí)結(jié)合l一般原則:一般原則: 實(shí)元與虛元實(shí)元與虛元個(gè)數(shù)相等個(gè)數(shù)相等,類型一致類型一致,按位按位置結(jié)合置結(jié)合l靈活原則靈活原則 關(guān)鍵字變?cè)?、可選擇變?cè)⑻撛拿?/p>

5、關(guān)鍵字變?cè)?、可選擇變?cè)?、虛元改?1、計(jì)算實(shí)元值(作為輸出的可預(yù)先無(wú)值)、計(jì)算實(shí)元值(作為輸出的可預(yù)先無(wú)值)2、虛實(shí)按地址結(jié)合:虛元、虛實(shí)按地址結(jié)合:虛元按順序按順序借用實(shí)元存儲(chǔ)單元借用實(shí)元存儲(chǔ)單元3、運(yùn)行權(quán)至子程序的第一句,直至遇子程序的、運(yùn)行權(quán)至子程序的第一句,直至遇子程序的end語(yǔ)語(yǔ)句返回到主調(diào)程序:句返回到主調(diào)程序: 運(yùn)行權(quán)返回至調(diào)用點(diǎn)運(yùn)行權(quán)返回至調(diào)用點(diǎn) 函數(shù)值返回給調(diào)用表達(dá)式函數(shù)值返回給調(diào)用表達(dá)式 虛實(shí)脫離結(jié)合,但子程序運(yùn)行時(shí)造成的實(shí)元值的虛實(shí)脫離結(jié)合,但子程序運(yùn)行時(shí)造成的實(shí)元值的改變將保留。改變將保留。子程序閱讀技巧:逐語(yǔ)句運(yùn)行,畫(huà)出虛實(shí)結(jié)合表子程序閱讀技巧:逐語(yǔ)句運(yùn)行,畫(huà)出虛實(shí)結(jié)

6、合表復(fù)習(xí):調(diào)用的執(zhí)行過(guò)程:復(fù)習(xí):調(diào)用的執(zhí)行過(guò)程:program main implicit none integer:x,y,z,f y=f(x,x) print*,x,y,z z=f(y,x) print*,x,y,zendfunction f(x,y)result(f_result)implicit noneinteger:x,y,f_result,kk=1;x=3*k;y=2*kf_result=x+yend function注意:一個(gè)變量只有注意:一個(gè)變量只有一個(gè)存儲(chǔ)單元一個(gè)存儲(chǔ)單元按順序結(jié)合,不是按按順序結(jié)合,不是按名結(jié)合名結(jié)合1、虛元為變量,實(shí)元為同類型的變量、虛元為變量,實(shí)元為同

7、類型的變量 f(xf(x,x)x)實(shí)元實(shí)元x xx x存儲(chǔ)單元存儲(chǔ)單元虛元虛元x xy yf(yf(y,x)x)實(shí)元實(shí)元y yx x存儲(chǔ)單元存儲(chǔ)單元4 42 2虛元虛元x xy y輸出:輸出:2 4 0輸出:輸出:2 3 53 2y=f(x,x)=4z=f(y,x)=5323 2program mainreal:mn,x,sx=3.0print*,s(x,mn(x),x !按從左向右依次輸出按從左向右依次輸出end、虛元為變量,實(shí)元為常量、表達(dá)式:、虛元為變量,實(shí)元為常量、表達(dá)式: function s(a,c)result(s_result)real:a,c,s_result,ba=a+1;

8、b=a*as_result=b-cend function sfunction mn(x)result(mn_result)real:x,mn_resultmn_result=3.0*xend function mn7.0 4.0 9開(kāi)辟臨時(shí)單元存放常量或表達(dá)式的值開(kāi)辟臨時(shí)單元存放常量或表達(dá)式的值s(xs(x,9)9)實(shí)元實(shí)元x x9存儲(chǔ)單元存儲(chǔ)單元3 39 9虛元虛元a ac c4臨時(shí)單元臨時(shí)單元s_result=7program maininteger:x,ycall sub(x,x,y)call sub(x,y,y)endsubroutine sub(x,y,z)integer:x,y,

9、zi=1x=3*i;y=2*i;z=x+yprint*,x,y,zend subroutine子例行子程序例:子例行子程序例:call sub(xcall sub(x,x x,y)y)實(shí)元實(shí)元x xx xy y存儲(chǔ)單元存儲(chǔ)單元虛元虛元x xy yz zcall sub(xcall sub(x,y y,y)y)實(shí)元實(shí)元x xy yy y存儲(chǔ)單元存儲(chǔ)單元2 24 44 4虛元虛元x xy yz z3輸出輸出 2 2 4輸出輸出 3 5 523 242 552396.4.1 實(shí)元用關(guān)鍵字變?cè)獙?shí)元用關(guān)鍵字變?cè)?通常在調(diào)用過(guò)程中要記住虛元名及其位置,通常在調(diào)用過(guò)程中要記住虛元名及其位置,而使用關(guān)鍵字變?cè)?/p>

10、后,就不必記住虛元的次序而使用關(guān)鍵字變?cè)螅筒槐赜涀√撛拇涡蛄?,填?xiě)的實(shí)元次序可以是任意的。了,填寫(xiě)的實(shí)元次序可以是任意的。 關(guān)鍵字變?cè)钦{(diào)用過(guò)程的一種現(xiàn)代形式,關(guān)鍵字變?cè)钦{(diào)用過(guò)程的一種現(xiàn)代形式,它的一般形式為:它的一般形式為: 虛元名虛元名= =實(shí)元表達(dá)式實(shí)元表達(dá)式10program mainimplicit noneinterfacefunction f(x,y,z)result(f_result)integer:f_result,x,y,zendendinterfaceinteger:m,n,lread*,m,nk=f(x=m,z=l,y=n)print*,lend關(guān)鍵字變?cè)e例關(guān)

11、鍵字變?cè)e例function f(x,y,z) result(f_result)integer:f_result,x,y,zf_result=x+yz=x-yend實(shí)元是關(guān)鍵字變?cè)獙?shí)元是關(guān)鍵字變?cè)?必必須有接口塊須有接口塊實(shí)元是關(guān)鍵字變?cè)獙?shí)元是關(guān)鍵字變?cè)?1注意:注意:1、關(guān)鍵字變?cè)恍杩紤]、關(guān)鍵字變?cè)恍杩紤]虛元的次序虛元的次序,但必須知,但必須知道虛元的名字。道虛元的名字。2、主調(diào)程序中如采用關(guān)鍵字變?cè){(diào)用程序,就、主調(diào)程序中如采用關(guān)鍵字變?cè){(diào)用程序,就必須寫(xiě)出被調(diào)子程序的接口塊。必須寫(xiě)出被調(diào)子程序的接口塊。3、當(dāng)部分實(shí)元用關(guān)鍵字調(diào)用子程序時(shí),第一個(gè)、當(dāng)部分實(shí)元用關(guān)鍵字調(diào)用子程序時(shí),第一個(gè)

12、關(guān)鍵字變?cè)懊娴乃袑?shí)元都必須與相應(yīng)的虛關(guān)鍵字變?cè)懊娴乃袑?shí)元都必須與相應(yīng)的虛元一一對(duì)應(yīng),元一一對(duì)應(yīng),一旦使用一個(gè)關(guān)鍵字,其后面的一旦使用一個(gè)關(guān)鍵字,其后面的變?cè)脖仨毷褂藐P(guān)鍵字變?cè)?。變?cè)脖仨毷褂藐P(guān)鍵字變?cè)?2例如,對(duì)子例子程序語(yǔ)句:例如,對(duì)子例子程序語(yǔ)句:subroutine hf(a,b,m,n)如希望如希望a與與5結(jié)合,結(jié)合,b與與25結(jié)合,結(jié)合,m與與10結(jié)合,結(jié)合,n與與1結(jié)合,結(jié)合,則如下調(diào)用語(yǔ)句都是正確的:則如下調(diào)用語(yǔ)句都是正確的:call hf(5,25,10,1)call hf(b=25,a=5,m=10,n=1)call hf(5,25,m=10,n=1)但如下的調(diào)用

13、語(yǔ)句是錯(cuò)誤的:但如下的調(diào)用語(yǔ)句是錯(cuò)誤的:call hf(25, 5,n=1,m=10)call hf(5,25,m=10,1)錯(cuò)?錯(cuò)?136.4.2 可選擇變?cè)蛇x擇變?cè)?調(diào)用時(shí)可根據(jù)實(shí)際需要,只對(duì)虛元表中部分虛元作虛調(diào)用時(shí)可根據(jù)實(shí)際需要,只對(duì)虛元表中部分虛元作虛實(shí)結(jié)合(實(shí)結(jié)合(即虛元可無(wú)對(duì)應(yīng)的實(shí)元即虛元可無(wú)對(duì)應(yīng)的實(shí)元)。虛元必須在過(guò)程中被)。虛元必須在過(guò)程中被說(shuō)明成是可選擇的。即要求它具有說(shuō)明成是可選擇的。即要求它具有optional屬性。屬性。optional屬性:屬性:若一個(gè)虛元的類型說(shuō)明語(yǔ)句中有該屬若一個(gè)虛元的類型說(shuō)明語(yǔ)句中有該屬性,便是可選的,沒(méi)有該屬性的是必選變?cè)?。性,便是可選的,

14、沒(méi)有該屬性的是必選變?cè)?。present(x)函數(shù):)函數(shù):用來(lái)檢查虛元用來(lái)檢查虛元x是否在程序執(zhí)行是否在程序執(zhí)行時(shí)結(jié)合到對(duì)應(yīng)實(shí)元,有對(duì)應(yīng)實(shí)元?jiǎng)t返回為時(shí)結(jié)合到對(duì)應(yīng)實(shí)元,有對(duì)應(yīng)實(shí)元?jiǎng)t返回為“真真”。14program main interface subroutine s(y,x) integer :x integer,optional:y end endinterface integer:a,b a=2;b=3 call s(x=b) call s(x=b,y=a)endsubroutine s(y,x) integer:c,x integer,optional:y if(present(y)t

15、hen c=x+y else c=x endif print*,cend35可選變?cè)蛇x變?cè)?為什么采為什么采用關(guān)鍵字用關(guān)鍵字變?cè){(diào)用?變?cè){(diào)用?15例例6-8 編寫(xiě)一個(gè)函數(shù)子程序。根據(jù)需要,既編寫(xiě)一個(gè)函數(shù)子程序。根據(jù)需要,既能求出圓柱的底面積值,也能求出圓柱的能求出圓柱的底面積值,也能求出圓柱的體積值。體積值。此時(shí)可將高度此時(shí)可將高度h列為可選擇變?cè)?。列為可選擇變?cè)?蛇x變?cè)獞?yīng)用可選變?cè)獞?yīng)用16function ss(r,h) result(ss_result)implicit nonereal,intent(in):rreal,optional,intent(in):hreal:ss_

16、resultreal:temp_hif(present(h) thentemp_h=helsetemp_h=1.0endifss_result=3.141593*r*2*temp_hend function ss函數(shù)子程序函數(shù)子程序說(shuō)明說(shuō)明h是可選變?cè)强蛇x變?cè)獧z查虛元檢查虛元h是否在程是否在程序執(zhí)行時(shí)結(jié)合到對(duì)應(yīng)序執(zhí)行時(shí)結(jié)合到對(duì)應(yīng)實(shí)元實(shí)元17主調(diào)程序program ss_optionalimplicit none interfacefunction ss(r,h)result(ss_result)real,intent(in):rreal,optional,intent(in):hreal:s

17、s_resultend function ssend interfaceprint (1x,a,f10.3),底面積底面積=,ss(2.5)print (1x,a,f10.3),體積體積=,ss(2.5,9.6)end program ss_optional實(shí)元是缺省的可選變實(shí)元是缺省的可選變?cè)獣r(shí),主調(diào)程序必須元時(shí),主調(diào)程序必須有接口塊!有接口塊!186.4.3 通過(guò)接口塊更改虛元名稱通過(guò)接口塊更改虛元名稱 fortran90允許調(diào)用子程序時(shí)用關(guān)鍵字變?cè)淖兲撛试S調(diào)用子程序時(shí)用關(guān)鍵字變?cè)淖兲撛拿Q,但必須寫(xiě)出接口塊。并且要元的名稱,但必須寫(xiě)出接口塊。并且要保持新、舊虛元名保持新、舊虛元名的

18、對(duì)應(yīng)位置不變。的對(duì)應(yīng)位置不變。program main interface subroutine s(x,y,z) integer:x,y,z end endinterface integer:m,n,l read*,m,n call s(x=m,y=n,z=l) print*,lendsubroutine s(xx,yy,zz)integer:xx,yy,zzzz=xx+yyend19l虛元也可以是一個(gè)數(shù)組名。虛元也可以是一個(gè)數(shù)組名。l實(shí)元是形相同的數(shù)組或其成分。實(shí)元是形相同的數(shù)組或其成分。l當(dāng)函數(shù)返回結(jié)果為數(shù)組,或過(guò)程虛元為一當(dāng)函數(shù)返回結(jié)果為數(shù)組,或過(guò)程虛元為一個(gè)假定形狀數(shù)組時(shí),主調(diào)程序要

19、增加接口個(gè)假定形狀數(shù)組時(shí),主調(diào)程序要增加接口塊。塊。l虛數(shù)組的詳細(xì)使用方法將在第虛數(shù)組的詳細(xì)使用方法將在第7章介紹。章介紹。206.5 子程序的嵌套調(diào)用子程序的嵌套調(diào)用fortran語(yǔ)言允許子程序的嵌套調(diào)用(也稱多層調(diào)用),語(yǔ)言允許子程序的嵌套調(diào)用(也稱多層調(diào)用),即在調(diào)用一個(gè)子程序的過(guò)程中該被調(diào)子程序又調(diào)用了另一即在調(diào)用一個(gè)子程序的過(guò)程中該被調(diào)子程序又調(diào)用了另一個(gè)子程序。如圖個(gè)子程序。如圖6-1。21子程序嵌套調(diào)用子程序嵌套調(diào)用function f(y,x) result(f_result) real:x,y,f_resultf_result=y*x-yendprogram main rea

20、l:x,y,zread*,x,ycall s(x,y,z)print*,zendsubroutine s(a,b,c) real:a,b,c,fc=a+b+f(a,b)end226.5.2 虛過(guò)程虛過(guò)程虛過(guò)程:虛過(guò)程:虛元是一個(gè)過(guò)程名,對(duì)應(yīng)的實(shí)元可以是內(nèi)在函數(shù)虛元是一個(gè)過(guò)程名,對(duì)應(yīng)的實(shí)元可以是內(nèi)在函數(shù)或外部過(guò)程?;蛲獠窟^(guò)程。嵌套調(diào)用至少兩層以上才能用虛過(guò)程嵌套調(diào)用至少兩層以上才能用虛過(guò)程、如果實(shí)元為、如果實(shí)元為外部過(guò)程外部過(guò)程:主調(diào)程序中用:主調(diào)程序中用external屬性屬性或或接口塊接口塊說(shuō)明,以便讓編譯系統(tǒng)清楚該實(shí)元不是一般變量。說(shuō)明,以便讓編譯系統(tǒng)清楚該實(shí)元不是一般變量。、如果實(shí)元為、

21、如果實(shí)元為內(nèi)在函數(shù)內(nèi)在函數(shù): 主調(diào)程序中用主調(diào)程序中用 intrinsic屬屬性說(shuō)明。(屬性見(jiàn)課本性說(shuō)明。(屬性見(jiàn)課本p38)、虛實(shí)過(guò)程的結(jié)合規(guī)則是、虛實(shí)過(guò)程的結(jié)合規(guī)則是:等價(jià)等價(jià)虛過(guò)程的使用增加了程序的功能,使程序更靈活!虛過(guò)程的使用增加了程序的功能,使程序更靈活!23外部函數(shù)作為實(shí)過(guò)程外部函數(shù)作為實(shí)過(guò)程(例例6-10)設(shè)有一個(gè)過(guò)程設(shè)有一個(gè)過(guò)程proc,在調(diào)用它的時(shí)候,每,在調(diào)用它的時(shí)候,每次實(shí)現(xiàn)不同的功能。輸入次實(shí)現(xiàn)不同的功能。輸入a和和b兩個(gè)數(shù),第一兩個(gè)數(shù),第一次調(diào)用時(shí)求出次調(diào)用時(shí)求出a、b之和,第二次調(diào)用時(shí)求出之和,第二次調(diào)用時(shí)求出a、b之差。程序如下:之差。程序如下:program

22、actual_procedureimplicit noneinterfacefunction sum(x,y) result(sum_result)integer,intent(in):x,yinteger:sum_rsultend function sumfunction minu(x,y) result(minu_result)integer,intent(in):x,yinteger:minu_resultend function minuend interfaceinteger:a,bread*,a,bcall proc(a,b,sum)call proc(a,b,minu)end p

23、rogram actual_procedure使用接口塊說(shuō)明使用接口塊說(shuō)明sum和和minu是是外部函數(shù),不是外部函數(shù),不是一般變量。一般變量。integer,external:sum,minu等價(jià)等價(jià)!虛元!虛元fun是虛過(guò)程的子例行子程序是虛過(guò)程的子例行子程序subroutine proc(a,b,fun)implicit noneinterfacefunction fun(x,y) result(fun_result)integer,intent(in):x,yinteger:fun_resultend function funend interfaceinteger,intent(in

24、):a,bprint*,fun(a,b)end subroutine procinteger:fun等價(jià)等價(jià)!求兩數(shù)之和函數(shù)子程序,作實(shí)元!求兩數(shù)之和函數(shù)子程序,作實(shí)元function sum(x,y) result(sum_result)implicit noneinteger,intent(in):x,yinteger:sum_resultsum_result=x+yend function sum!求兩數(shù)之差函數(shù)子程序,作實(shí)元!求兩數(shù)之差函數(shù)子程序,作實(shí)元function minu(x,y) result(minu_result)implicit noneinteger,intent(i

25、n):x,yinteger:minu_resultminu_result=x-yend function minu27內(nèi)在函數(shù)作為實(shí)過(guò)程program mainimplicit nonereal,intrinsic:cos,sinreal:x,yx=60.0call f1(x,y,cos)print*,x,ycall f1(x,y,sin)print*,x,yend program mainsubroutine f1(x,y,fun)implicit nonereal:x,y,funy=fun(x/180*3.14)end subroutine f1說(shuō)明說(shuō)明cos和和sin是內(nèi)在函是內(nèi)在函數(shù),

26、不是一般變量。數(shù),不是一般變量。28虛過(guò)程的應(yīng)用:數(shù)值計(jì)算程序設(shè)計(jì)數(shù)值計(jì)算程序設(shè)計(jì)dxxdxxgba1011)(1、編寫(xiě)通用子程序求定積分、編寫(xiě)通用子程序求定積分用函數(shù)子程序用函數(shù)子程序t表示通用子程序表示通用子程序用函數(shù)子程序用函數(shù)子程序f表示具體的積分表示具體的積分函數(shù)函數(shù)用梯形法計(jì)算定積分用梯形法計(jì)算定積分29計(jì)算定積分計(jì)算定積分:函數(shù)的定義用外部函數(shù)過(guò)程函數(shù)的定義用外部函數(shù)過(guò)程(接口接口)!通用函數(shù)子程序!通用函數(shù)子程序function t(a,b,n,g) result (t1) real:a,b,g,h,t1,f1,f2 integer:i,n h=(b-a)/n t1=0;f1=

27、g(a) do i=1,n f2=g(a+i*h) t1=t1+(f1+f2)*h/2 f1=f2 enddoendprogram main real,external:f integer:n;real:s,t read*,n s=t(0.0,1.0,n,f) print*,send program!具體求積分的函數(shù)!具體求積分的函數(shù)function f(x) result(f_result) real:x,f_result f_result=1.0/(1.0+x)end function調(diào)用調(diào)用t函數(shù)子程序函數(shù)子程序 g為虛過(guò)程為虛過(guò)程f為實(shí)過(guò)程為實(shí)過(guò)程外部函外部函數(shù)子程數(shù)子程序序306.6

28、 模塊模塊功能:功能:提供共享常量、變量、類型定義和過(guò)程提供共享常量、變量、類型定義和過(guò)程;即公用的信息可放入模塊單位。即公用的信息可放入模塊單位。各程序單位共享信息的途徑:各程序單位共享信息的途徑:虛實(shí)結(jié)合虛實(shí)結(jié)合 模塊單位模塊單位模塊也是一種模塊也是一種獨(dú)立編寫(xiě)的程序單元獨(dú)立編寫(xiě)的程序單元316.6.1 模塊定義模塊定義模塊單位寫(xiě)法:一般形式模塊單位寫(xiě)法:一般形式 module 模塊名模塊名 類型說(shuō)明部分類型說(shuō)明部分 contains 內(nèi)部過(guò)程子程序內(nèi)部過(guò)程子程序1 內(nèi)部過(guò)程子程序內(nèi)部過(guò)程子程序n end module 模塊名模塊名模塊名模塊名通常加后綴通常加后綴“_moudle”(也可(

29、也可以不加該后綴),以增加易讀性。另模塊以不加該后綴),以增加易讀性。另模塊名為全局名:不能與本程序內(nèi)的任何程序名為全局名:不能與本程序內(nèi)的任何程序單元名、外部名同名,也不得與模塊內(nèi)的單元名、外部名同名,也不得與模塊內(nèi)的任何局部名同名。任何局部名同名。說(shuō)明包括:類型說(shuō)明語(yǔ)句、說(shuō)明包括:類型說(shuō)明語(yǔ)句、派生類型定義及接口塊等派生類型定義及接口塊等,不不能有可執(zhí)行語(yǔ)句能有可執(zhí)行語(yǔ)句。各過(guò)程是可選的。當(dāng)模塊內(nèi)有內(nèi)部各過(guò)程是可選的。當(dāng)模塊內(nèi)有內(nèi)部過(guò)程時(shí),必須把整個(gè)過(guò)程完整地寫(xiě)過(guò)程時(shí),必須把整個(gè)過(guò)程完整地寫(xiě)入,各內(nèi)部過(guò)程次序可以任意。入,各內(nèi)部過(guò)程次序可以任意。32說(shuō)明:說(shuō)明:1、一個(gè)程序中可以有多個(gè)模塊

30、程序單元,每個(gè)模塊都要、一個(gè)程序中可以有多個(gè)模塊程序單元,每個(gè)模塊都要獨(dú)立編寫(xiě);獨(dú)立編寫(xiě);2、模塊包含程序說(shuō)明語(yǔ)句及在模塊內(nèi)定義的過(guò)程,但、模塊包含程序說(shuō)明語(yǔ)句及在模塊內(nèi)定義的過(guò)程,但不不能直接運(yùn)行;能直接運(yùn)行;3、其他程序單元引用模塊時(shí),就是復(fù)制該模塊內(nèi)的全部、其他程序單元引用模塊時(shí),就是復(fù)制該模塊內(nèi)的全部語(yǔ)句,并且與模塊中的名字相同的變量共享存儲(chǔ)單元,語(yǔ)句,并且與模塊中的名字相同的變量共享存儲(chǔ)單元,所以所以引用模塊起兩個(gè)作用:共享與復(fù)制引用模塊起兩個(gè)作用:共享與復(fù)制。 4、假設(shè)有幾個(gè)子程序或函數(shù)中都用到了同一些變量,、假設(shè)有幾個(gè)子程序或函數(shù)中都用到了同一些變量,只需把它們放在一個(gè)模塊中,從

31、而實(shí)現(xiàn)共享數(shù)據(jù)。只需把它們放在一個(gè)模塊中,從而實(shí)現(xiàn)共享數(shù)據(jù)。5、模塊必須寫(xiě)在所有程序單位的前面,否則編譯出錯(cuò)。、模塊必須寫(xiě)在所有程序單位的前面,否則編譯出錯(cuò)。3334(1 1)模塊)模塊應(yīng)先定義應(yīng)先定義, ,(2 2)模塊不給其它單位調(diào)用)模塊不給其它單位調(diào)用, ,而用而用useuse語(yǔ)句語(yǔ)句引用引用(3 3)模塊中若沒(méi)有內(nèi)部過(guò)程,則無(wú)可執(zhí)行語(yǔ)句)模塊中若沒(méi)有內(nèi)部過(guò)程,則無(wú)可執(zhí)行語(yǔ)句模塊和子程序之間的區(qū)別:模塊和子程序之間的區(qū)別:35各單位用各單位用use語(yǔ)句共享模塊中的信息語(yǔ)句共享模塊中的信息use語(yǔ)句的一般形式為:語(yǔ)句的一般形式為: use 模塊名模塊名1,模塊名,模塊名2, use語(yǔ)句位

32、置:語(yǔ)句位置:?jiǎn)挝欢x語(yǔ)句之后,單位定義語(yǔ)句之后,implicit none語(yǔ)句語(yǔ)句之前之前 6.6.2模塊的引用模塊的引用36function aver3(a,b,c) result(aver_value)implcit nonereal :a,b,creal :aver_valueaver_value=(a+b+c)/3.0end function例例6-11 讀入讀入3個(gè)數(shù),調(diào)用函數(shù)個(gè)數(shù),調(diào)用函數(shù)aver3求平均值,調(diào)求平均值,調(diào)用函數(shù)用函數(shù)max3求最大值求最大值(方法方法1:通過(guò)虛實(shí)結(jié)合傳遞數(shù)據(jù):通過(guò)虛實(shí)結(jié)合傳遞數(shù)據(jù))function max3(a,b,c) result(max_v

33、alue)implcit nonereal :a,b,creal :max_valuemax_value=aif(bmax_value)max_value=bif(cmax_value)max_value=cend function37!主程序!主程序program aver_max_1implict nonereal:a,b,creal: aver3,max3read *,a,b,cprint *,aver3(a,b,c),max3(a,b,c)end program方法方法1:通過(guò)虛:通過(guò)虛實(shí)結(jié)合傳遞數(shù)實(shí)結(jié)合傳遞數(shù)據(jù)據(jù)例例6-11 讀入讀入3個(gè)數(shù),調(diào)用函數(shù)個(gè)數(shù),調(diào)用函數(shù)aver3求平均值,

34、調(diào)求平均值,調(diào)用函數(shù)用函數(shù)max3求最大值求最大值(方法方法1:通過(guò)虛實(shí)結(jié)合傳遞數(shù)據(jù):通過(guò)虛實(shí)結(jié)合傳遞數(shù)據(jù))38module exam_modulereal:a,b,cend module exam_module例例6-11 讀入讀入3個(gè)數(shù),調(diào)用函數(shù)個(gè)數(shù),調(diào)用函數(shù)aver3求平均值,調(diào)用求平均值,調(diào)用函數(shù)函數(shù)max3求最大值求最大值(方法方法2:利用模塊實(shí)現(xiàn)數(shù)據(jù)的共享:利用模塊實(shí)現(xiàn)數(shù)據(jù)的共享)function aver3() result(aver_value)use exam_moduleuse exam_modulereal :aver_valueaver_value=(a+b+c)/3.

35、0end functionfunction max3() result(max_value)use exam_moduleuse exam_modulereal :max_valuemax_value=aif(bmax_value)max_value=bif(cmax_value)max_value=cend function在函數(shù)過(guò)程中引用了在函數(shù)過(guò)程中引用了模塊,因此不必再把模塊,因此不必再把a(bǔ)、b、c作為變?cè)?,作為變?cè)?,使使aver3和和max3成成為無(wú)參的函數(shù)為無(wú)參的函數(shù)39!主程序!主程序program aver_max_2use exam_moduleuse exam_module

36、real: aver3,max3read *,a,b,cprint *,aver3(),max3()end program方法方法2:利用:利用模塊實(shí)現(xiàn)數(shù)據(jù)模塊實(shí)現(xiàn)數(shù)據(jù)的共享的共享在主程序中輸入在主程序中輸入a、b、c后,與函數(shù)后,與函數(shù)aver3和和max3中的中的a、b和和c具有具有了同樣的值。因此不必再了同樣的值。因此不必再把把a(bǔ)、b、c作為變?cè)?,使作為變?cè)筧ver3和和max3成為無(wú)參成為無(wú)參的函數(shù)的函數(shù)例例6-11 讀入讀入3個(gè)數(shù),調(diào)用函數(shù)個(gè)數(shù),調(diào)用函數(shù)aver3求平均值,調(diào)用求平均值,調(diào)用函數(shù)函數(shù)max3求最大值求最大值(方法方法2:利用模塊實(shí)現(xiàn)數(shù)據(jù)的共享:利用模塊實(shí)現(xiàn)數(shù)據(jù)的共

37、享)401 1、通過(guò)模塊共享可以取代程序單元間的虛實(shí)結(jié)合,、通過(guò)模塊共享可以取代程序單元間的虛實(shí)結(jié)合,使子程序減少或不用虛元。使子程序減少或不用虛元。2 2、允許共享模塊中的部分變量,其形式為:、允許共享模塊中的部分變量,其形式為: use 模塊名模塊名,only:變量名表變量名表 例:例: use exam ,only:a,b !只共享!只共享a,b 3 3、更名共享更名共享 ,模塊中實(shí)體名與程序單元變量名不,模塊中實(shí)體名與程序單元變量名不同,可對(duì)模塊中的實(shí)體改名。同,可對(duì)模塊中的實(shí)體改名。 例:例:use exam, x=a,y=b x,y為引用單位的局部名為引用單位的局部名 a,b為模塊

38、中的名為模塊中的名 即把即把a(bǔ),b換名為換名為x,y關(guān)于模塊概念的理解關(guān)于模塊概念的理解4 4、可以對(duì)模塊內(nèi)說(shuō)明的變量、派生類型及其成員的使用范圍進(jìn)、可以對(duì)模塊內(nèi)說(shuō)明的變量、派生類型及其成員的使用范圍進(jìn)行限制。行限制。 加加privateprivate(專用)屬性,模塊以外的程序單元不能使用。專用)屬性,模塊以外的程序單元不能使用。 加加publicpublic(公用)屬性(公用)屬性。例:例:type,private:data_typeinteger:m,nreal:x,yend type data_type或:或:type dataprivateinteger:a.end type表示模塊

39、中的派生類型、派生類型的內(nèi)部成員是表示模塊中的派生類型、派生類型的內(nèi)部成員是“專專用用”的,模塊以外的程序單元不能使用。的,模塊以外的程序單元不能使用。425 5、模塊的內(nèi)部過(guò)程也可供引用模塊的的各程序單、模塊的內(nèi)部過(guò)程也可供引用模塊的的各程序單元使用。元使用。例例6-116-11的方法的方法3 3:將函數(shù)放入模塊內(nèi):將函數(shù)放入模塊內(nèi)module exam_moduleimplicit nonereal:a,b,ccontainsfunction aver3() result(aver_value)implicit nonereal :aver_valueaver_value=(a+b+c)/

40、3.0end function aver3function max3() result(max_value)implicit nonereal:max_valuemax_value=aif(bmax_value)max_value=bif(cmax_value)max_value=cend function max3end module exam_module函數(shù)要完整書(shū)寫(xiě),函數(shù)要完整書(shū)寫(xiě),次序任意次序任意43主調(diào)程序:主調(diào)程序:不再需要對(duì)調(diào)用的函不再需要對(duì)調(diào)用的函數(shù)的類型進(jìn)行說(shuō)明。數(shù)的類型進(jìn)行說(shuō)明。即不需要:即不需要:real: aver3,max3program aver_max_3use

41、 exam_moduleimplicit noneread*,a,b,cprint*,aver3(),max3()end program aver_max_3447、通常用模塊來(lái)建立新的數(shù)據(jù)類型及規(guī)定、通常用模塊來(lái)建立新的數(shù)據(jù)類型及規(guī)定新類型的操作、賦值等新類型的操作、賦值等module type_a type rec_type integer:no real:a,b,c charater(len=20):name end typeend module當(dāng)某程序需要使用類型當(dāng)某程序需要使用類型rec_type時(shí),便可以用時(shí),便可以用 use type_a 引用它引用它用模塊定義用模塊定義派生類型

42、派生類型45程序閱讀:先讀模塊單位及各單位的程序閱讀:先讀模塊單位及各單位的use,畫(huà)共享表畫(huà)共享表(按名結(jié)合按名結(jié)合),再讀主程序再讀主程序.module a1complex:x,yend modulesubroutine comp(a,b)use a1complex:a,ba=x+yb=x-yend subroutineprogram program mainmainuseuse a1 a1x=(3.0,4.0)x=(3.0,4.0)y=(4.0,3.0)y=(4.0,3.0)callcall comp(x,y) comp(x,y)callcall comp(x,x) comp(x,x)c

43、allcall comp(y,x) comp(y,x)printprint* *,x,y,x,yendend輸出輸出:(-3.0,-4.0) (10.0,11.0)第一次返回:第一次返回:x=x=(7.07.0,7.07.0),),y=y=(3.03.0,4.04.0)第二次返回:第二次返回:x=x=(7.07.0,7.07.0),),y=y=(3.03.0,4.04.0)第三次返回:第三次返回:x=x=(-3.0-3.0,-4.0-4.0),),y=y=(10.010.0,11.011.0)46遞歸調(diào)用是指過(guò)程內(nèi)遞歸調(diào)用是指過(guò)程內(nèi)直接或間接地調(diào)用直接或間接地調(diào)用自己,能進(jìn)行遞自己,能進(jìn)行遞歸

44、調(diào)用的過(guò)程稱為遞歸過(guò)程??梢允菤w調(diào)用的過(guò)程稱為遞歸過(guò)程??梢允亲永凶映绦?,也子例行子程序,也可以是函數(shù)子程序??梢允呛瘮?shù)子程序。例:例:用遞歸方法求用遞歸方法求n!分析:分析:n!=1 n=0n(n-1)! n06.7 遞歸過(guò)程遞歸調(diào)用遞歸調(diào)用終止條件終止條件47(1)可將一個(gè)問(wèn)題轉(zhuǎn)化為具有同樣解法的規(guī)模)可將一個(gè)問(wèn)題轉(zhuǎn)化為具有同樣解法的規(guī)模較小的問(wèn)題;較小的問(wèn)題;(2)可以通過(guò)轉(zhuǎn)化使問(wèn)題得到解決;)可以通過(guò)轉(zhuǎn)化使問(wèn)題得到解決;(3)必須有一個(gè)結(jié)束遞歸過(guò)程條件必須有一個(gè)結(jié)束遞歸過(guò)程條件(又稱為又稱為終止終止條件或邊界條件條件或邊界條件),使遞歸過(guò)程是有限遞歸過(guò)程,使遞歸過(guò)程是有限遞歸過(guò)程,例

45、如上例中邊界條件是:例如上例中邊界條件是:n! = 1(n=0).一個(gè)問(wèn)題采用遞歸方法來(lái)解決時(shí)必須符合以一個(gè)問(wèn)題采用遞歸方法來(lái)解決時(shí)必須符合以下條件下條件:48遞歸過(guò)程需要在子程序的入口語(yǔ)句前加上關(guān)鍵字遞歸過(guò)程需要在子程序的入口語(yǔ)句前加上關(guān)鍵字recursive,這樣才可在過(guò)程體中實(shí)現(xiàn)遞歸調(diào)用。,這樣才可在過(guò)程體中實(shí)現(xiàn)遞歸調(diào)用。其他語(yǔ)句的寫(xiě)法沒(méi)有特殊要求。其他語(yǔ)句的寫(xiě)法沒(méi)有特殊要求。6.7.1遞歸函數(shù)例例6-12 用遞歸方法求用遞歸方法求n!n!=1 n=0n(n-1)! n049recursive function fac(n) result(fac_result)integer,inten

46、t(in):ninteger:fac_result if(n=1)then fac_result=1 else fac_result=n*fac(n-1) endifend functionn!的遞歸函數(shù)子程序遞歸結(jié)束條件遞歸結(jié)束條件遞歸調(diào)用:遞歸調(diào)用:重復(fù)執(zhí)行子程序重復(fù)執(zhí)行子程序recursive function fac(n) result(fac_result)recursive function fac(n) result(fac_result)integer,intent(in):ninteger,intent(in):ninteger:fac_resultinteger:fac_r

47、esult if(n=1)thenif(n=1)then fac_result=1fac_result=1 elseelse printprint* *,遞推時(shí)遞推時(shí)n=,nn=,nfac_result=nfac_result=n* *fac(n-1)fac(n-1) endifendifprintprint* *,回歸時(shí)回歸時(shí)n=,nn=,nend functionend functionfac(5)=5*fac(4)fac(4)=4*fac(3)fac(3)=3*fac(2)fac(2)=2*fac(1)fac(1)=1fac(2)=2fac(3)=6fac(4)=24fac(5)=120

48、遞推過(guò)程遞推過(guò)程回歸過(guò)程回歸過(guò)程遞推過(guò)程結(jié)束遞推過(guò)程結(jié)束例,例,fac(5)的執(zhí)行過(guò)程的執(zhí)行過(guò)程重點(diǎn):重點(diǎn): 每一次調(diào)用每一次調(diào)用均保留現(xiàn)場(chǎng)實(shí)元值,均保留現(xiàn)場(chǎng)實(shí)元值,以便返回時(shí)使用。以便返回時(shí)使用。51主調(diào)程序的寫(xiě)法與調(diào)用非遞歸函數(shù)的寫(xiě)主調(diào)程序的寫(xiě)法與調(diào)用非遞歸函數(shù)的寫(xiě)法基本相同。法基本相同。program recursive_funimplicit noneinterfacerecursive function fac(n)result(fac_result)integer,intent(in):ninteger:fac_resultendfunctionend interfaceinteg

49、er:nread *,nprint *,fac(n)end program或不寫(xiě)接口塊,或不寫(xiě)接口塊,用用integer:fac52例例6-13:有:有5個(gè)人坐在一起,問(wèn)第個(gè)人坐在一起,問(wèn)第5個(gè)人多少歲,他說(shuō)比第個(gè)人多少歲,他說(shuō)比第4個(gè)人大個(gè)人大2歲,問(wèn)第歲,問(wèn)第4個(gè)人的歲數(shù),他說(shuō)比第個(gè)人的歲數(shù),他說(shuō)比第3個(gè)人大個(gè)人大2歲,問(wèn)第歲,問(wèn)第3個(gè)人的歲數(shù),他說(shuō)比第個(gè)人的歲數(shù),他說(shuō)比第2個(gè)人大個(gè)人大2歲,問(wèn)第歲,問(wèn)第2個(gè)人,他說(shuō)比第個(gè)人,他說(shuō)比第1個(gè)人大個(gè)人大2歲,問(wèn)第一個(gè)人,他說(shuō)是歲,問(wèn)第一個(gè)人,他說(shuō)是10歲。請(qǐng)問(wèn)第歲。請(qǐng)問(wèn)第5個(gè)人的歲個(gè)人的歲數(shù)?數(shù)?分析:顯然這是一個(gè)遞歸問(wèn)題。即:分析:顯然這是一

50、個(gè)遞歸問(wèn)題。即:age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10亦即:亦即:age(n)=10 n=1age(n-1)+2 n1遞歸舉例遞歸舉例遞歸舉例遞歸舉例recursive function age(n) result(age_result)implicit noneinteger,intent(in):ninteger:age_resultif(n=1) thenage_result=10elseage_result=age(n-1)+2endifend function ageprogram r

51、ecursive_ageimplicit noneinteger:ageprint*,age(5)end program recursive_age54例例6-23:fibonacci數(shù)列,用遞歸函數(shù)求此數(shù)列,用遞歸函數(shù)求此數(shù)列的第數(shù)列的第n項(xiàng)。項(xiàng)。程序清單如下:程序清單如下:recursive recursive function function fibfib(n) result(fib_result)(n) result(fib_result) integer: fib_result,ninteger: fib_result,n if(n=1 .or. n=2) thenif(n=1 .

52、or. n=2) then fib_result=1 fib_result=1 else else fib_result=fib_result=fibfib(n-1)+(n-1)+fibfib(n-2)(n-2)endifendifend functionend function讀程序,寫(xiě)出運(yùn)行結(jié)果:讀程序,寫(xiě)出運(yùn)行結(jié)果:programprogram main mainimplicitimplicit none noneintegerinteger:n=5,sum1:n=5,sum1printprint* *, ,sum1(n)sum1(n)printprint* *,n,nendendrec

53、ursiverecursive functionfunction sum1(m)sum1(m) resultresult(sum_result)(sum_result)integerinteger:m,sum_result:m,sum_resultselectselect casecase(m)(m)casecase(1)(1)sum_result=1sum_result=1case defaultcase defaultsum_result=sum1(m-1)+msum_result=sum1(m-1)+mend selectend selectm=m+2 m=m+2 endend func

54、tionfunction15 7!最后一次返回時(shí)是!最后一次返回時(shí)是5+2(第一次(第一次5調(diào)用調(diào)用) 56遞歸的分類遞歸的分類recursive function func(x) result(f_result) integer: y, z,f_result z=func(y) end function直接遞歸:自直接遞歸:自己調(diào)用自己己調(diào)用自己57recursive function f1(x) result(f1_res)integer: y,z,f1_res z=f2(y) f1_res=(2*x)end function recursive function f2(t) result

55、(f2_res) integer: a,c,f2_res c=f1(a) f2_res=(3+c)end function間接遞歸間接遞歸:通過(guò)別人調(diào)通過(guò)別人調(diào)用自己用自己遞歸的分類遞歸的分類58間接遞歸例:6-15驗(yàn)證角谷猜想l任意一個(gè)自然數(shù),若為偶數(shù)則除以任意一個(gè)自然數(shù),若為偶數(shù)則除以2;若為奇數(shù)則乘以若為奇數(shù)則乘以3后加后加1。如此經(jīng)過(guò)有。如此經(jīng)過(guò)有限次運(yùn)算后最終能得到自然數(shù)限次運(yùn)算后最終能得到自然數(shù)1。recursive function decrease(a)result(de_res)implicit noneinteger,intent(in):ainteger:de_res,i

56、ncreasede_res=ado while(mod(de_res,2)=0)de_res=de_res/2print*,decrease:,de_resenddoif(de_res/=1)de_res=increase(de_res)end function decreaserecursive function increase(b)result(in_res)implicit noneinteger,intent(in):binteger:in_res,decreasein_res=3*b+1print*,increase:,in_resin_res=decrease(in_res)en

57、d function increase偶數(shù)除偶數(shù)除2奇數(shù)乘奇數(shù)乘3+160program indirectimplicit noneinteger:decreaseinteger:n,xread*,nx=decrease(n)print (1x,final=,i8,i4),n,xend program主調(diào)程序主調(diào)程序61有三根針有三根針a、b、c,a針上有針上有64個(gè)盤子,盤子大小不等。個(gè)盤子,盤子大小不等。大的在下,小的在上。要求把這大的在下,小的在上。要求把這64個(gè)盤子從個(gè)盤子從a針移到針移到c針,針,在移動(dòng)的過(guò)程中可借助在移動(dòng)的過(guò)程中可借助b針,每次只允許移動(dòng)一個(gè)盤,且針,每次只允許移動(dòng)

58、一個(gè)盤,且在任何時(shí)候,任何針上的圓盤都必須保持大盤在下,小盤在任何時(shí)候,任何針上的圓盤都必須保持大盤在下,小盤在上。求移動(dòng)的步驟。在上。求移動(dòng)的步驟。bca例6-14:hanoi塔問(wèn)題(自學(xué))。626.8 其它部分其它部分外部過(guò)程與內(nèi)部過(guò)程外部過(guò)程與內(nèi)部過(guò)程類屬過(guò)程類屬過(guò)程超載運(yùn)算符超載運(yùn)算符自定義運(yùn)算符自定義運(yùn)算符超載賦值號(hào)超載賦值號(hào)636.8.1 外部過(guò)程與內(nèi)部過(guò)程外部過(guò)程與內(nèi)部過(guò)程 外部過(guò)程:外部過(guò)程:未包含在主程序單元(或過(guò)程、模未包含在主程序單元(或過(guò)程、模塊)中的過(guò)程。外部過(guò)程獨(dú)立成為一個(gè)程序單元,塊)中的過(guò)程。外部過(guò)程獨(dú)立成為一個(gè)程序單元,與主程序單元分別編譯。與主程序單元分別編

59、譯。 內(nèi)部過(guò)程:內(nèi)部過(guò)程:寫(xiě)在主程序單元(或過(guò)程、模塊)寫(xiě)在主程序單元(或過(guò)程、模塊)之內(nèi),作為主程序(或某一過(guò)程、某一模塊)內(nèi)之內(nèi),作為主程序(或某一過(guò)程、某一模塊)內(nèi)包含的一個(gè)過(guò)程。包含的一個(gè)過(guò)程。641.內(nèi)部過(guò)程的位置內(nèi)部過(guò)程的位置subroutine name 子程序的說(shuō)明部分子程序的說(shuō)明部分 子程序的執(zhí)行部分子程序的執(zhí)行部分 contains 內(nèi)部程序內(nèi)部程序end subroutine name 或是或是function name(參數(shù)參數(shù)) 子程序的說(shuō)明部分子程序的說(shuō)明部分 子程序的執(zhí)行部分子程序的執(zhí)行部分 contains內(nèi)部程序內(nèi)部程序end function namepro

60、gram name 主程序的說(shuō)明部分主程序的說(shuō)明部分 主程序的執(zhí)行部分主程序的執(zhí)行部分 contains 內(nèi)部子例子程序內(nèi)部子例子程序 內(nèi)部函數(shù)子程序內(nèi)部函數(shù)子程序end program name模塊中也可以包模塊中也可以包含內(nèi)部過(guò)程含內(nèi)部過(guò)程65 1)內(nèi)部過(guò)程通常)內(nèi)部過(guò)程通常沒(méi)有說(shuō)明語(yǔ)句沒(méi)有說(shuō)明語(yǔ)句,使用的變量等實(shí)體的,使用的變量等實(shí)體的說(shuō)明應(yīng)統(tǒng)一放在包含它的程序單元的說(shuō)明部分。說(shuō)明應(yīng)統(tǒng)一放在包含它的程序單元的說(shuō)明部分。 2)內(nèi)部過(guò)程一般沒(méi)有虛元內(nèi)部過(guò)程一般沒(méi)有虛元。主調(diào)程序調(diào)用時(shí)也不需要。主調(diào)程序調(diào)用時(shí)也不需要虛實(shí)結(jié)合。變量可以直接使用。調(diào)用過(guò)程名也只要簡(jiǎn)單虛實(shí)結(jié)合。變量可以直接使用。調(diào)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論