Fortran程序單元課件_第1頁(yè)
Fortran程序單元課件_第2頁(yè)
Fortran程序單元課件_第3頁(yè)
Fortran程序單元課件_第4頁(yè)
Fortran程序單元課件_第5頁(yè)
已閱讀5頁(yè),還剩33頁(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)介

Fortran程式單元一個(gè)Fortran程式中通常不是只由一個(gè)主程序組成,而是由幾個(gè)按某種方式劃分的不同程式單元來(lái)共同組成。儘管Fortran程式中允許只有主程序而沒(méi)有副程式,但絕不允許只有副程式而沒(méi)有主程序。在Fortran中,程式的執(zhí)行總是從主程序開始的。Fortran中的程式單元可以大體劃分為主程式、副程式兩種,其中副程式又可以進(jìn)一步劃分為函數(shù)副程式、子例行副程式和數(shù)據(jù)塊副程式。數(shù)據(jù)塊副程式通常用於實(shí)現(xiàn)變數(shù)的初始化賦值,函數(shù)副程式和子例行副程式在用途上基本是一致的,但是也有許多不同之處。本章將詳細(xì)介紹Fortran中的程式單元和它們的基本用法。10.1主程序顧名思義,主程序是一個(gè)實(shí)際程式中的主體,其他類型的程式單元都是以某種方式來(lái)輔助主程序的執(zhí)行。在Fortran語(yǔ)言中,一個(gè)程式的執(zhí)行始終是從主程序的第一條可執(zhí)行語(yǔ)句開始的,所以每個(gè)完整的Fortran程式都必須有且只允許有一個(gè)主程序。主程序定義的一般語(yǔ)法形式如下:[PROGRAM[程式名]][說(shuō)明部分][可執(zhí)行部分][CONTAINS

內(nèi)部過(guò)程]END[PROGRAM[程式名]]10.2語(yǔ)句函數(shù)語(yǔ)句函數(shù)通過(guò)一句代碼定義來(lái)實(shí)現(xiàn)某種特定的處理功能,它是Fortran77時(shí)代的遺留產(chǎn)物。嚴(yán)格來(lái)說(shuō),語(yǔ)句函數(shù)不屬於程式單元的範(fàn)疇。但是在實(shí)際應(yīng)用中,語(yǔ)句函數(shù)以其靈活的應(yīng)用、小巧的結(jié)構(gòu)在程式中發(fā)揮著重要的作用。在實(shí)際的編程過(guò)程中,程式員往往會(huì)遇到這種情況:一些簡(jiǎn)單的函數(shù)會(huì)在一個(gè)程式單元中的不同地方重複用到,而Fortran系統(tǒng)並不提供這種內(nèi)部函數(shù);如果採(cǎi)用函數(shù)副程式的形式來(lái)描述這些簡(jiǎn)單的函數(shù)又會(huì)覺(jué)得沒(méi)有這種必要。例如,要求解函數(shù)的值,將其編寫成函數(shù)副程式可以順利解決。但是,F(xiàn)ortran語(yǔ)言提供了一種更為簡(jiǎn)單的手段——語(yǔ)句函數(shù)。10.2.1語(yǔ)句函數(shù)的定義在Fortran中定義一個(gè)語(yǔ)句函數(shù)的形式如下:fun([d-arg[,d-arg]...])=expr1.Fun2.d-arg3.Expr4.語(yǔ)句函數(shù)示例5.需要注意的問(wèn)題:在使用語(yǔ)句函數(shù)進(jìn)行編程時(shí),下麵一些問(wèn)題是需要引起注意的:語(yǔ)句函數(shù)通常在函數(shù)比較簡(jiǎn)單,能夠用一條語(yǔ)句(包括換行)就能進(jìn)行定義時(shí)才使用;語(yǔ)句函數(shù)是一種非執(zhí)行語(yǔ)句,需要放置在所有可執(zhí)行語(yǔ)句之前和相關(guān)的類型說(shuō)明語(yǔ)句之後;語(yǔ)句函數(shù)的作用範(fàn)圍僅限於定義它的程式單元之內(nèi),不允許跨程式單元進(jìn)行語(yǔ)句函數(shù)的調(diào)用;語(yǔ)句函數(shù)不能作為副程式調(diào)用時(shí)的實(shí)參,也不允許在EXTERNAL語(yǔ)句中出現(xiàn);語(yǔ)句函數(shù)中出現(xiàn)的虛參必須是變數(shù)名,不能是常量、運(yùn)算式或是數(shù)組元素;語(yǔ)句函數(shù)通過(guò)運(yùn)算式得到的函數(shù)值的類型必須與函數(shù)名的類型一致。10.2.2語(yǔ)句函數(shù)的引用語(yǔ)句函數(shù)在完成定義後,就可以在程式單元中進(jìn)行引用了。實(shí)際上,在前一小節(jié)的例程中已經(jīng)演示了語(yǔ)句函數(shù)引用的一般方式。本小節(jié)將對(duì)語(yǔ)句函數(shù)的引用方式進(jìn)行具體的說(shuō)明。語(yǔ)句函數(shù)的引用方式與Fortran中內(nèi)部函數(shù)的引用方式完全一致,就是用程式中定義的實(shí)參替換掉語(yǔ)句函數(shù)定義中的虛參。實(shí)參必須是與虛參類型相同的常量、變數(shù)或運(yùn)算式。10.3函數(shù)副程式函數(shù)副程式和子例行副程式是副程式的兩種常用基本形式。它們的共同特徵就是作為數(shù)據(jù)處理過(guò)程的集合。但是這兩種子程式也不完全相同,函數(shù)副程式會(huì)返回一個(gè)函數(shù)值,且通常不會(huì)改變啞元的數(shù)值。因此,函數(shù)副程式更像是數(shù)學(xué)上的一個(gè)函數(shù)。而子例行副程式通常用於完成一項(xiàng)更為複雜的任務(wù),通過(guò)啞元或者其他手段返回幾個(gè)結(jié)果,啞元的數(shù)值通常會(huì)在程式的執(zhí)行過(guò)程中改變。10.3.1定義函數(shù)副程式下麵給出函數(shù)副程式的一般形式為:[prefix]FUNCTIONname([d-arg-list])[RESULT(r-name)]...END[FUNCTIONname]1.prefix說(shuō)明項(xiàng)prefix說(shuō)明項(xiàng)是一個(gè)可選參數(shù),可以使用如下兩種形式來(lái)書寫:type[keyword]或keyword[type]2.d-arg-listd-arg-list表示函數(shù)的啞元列表。如果函數(shù)副程式不包含啞元,則啞元列表可以省略,但是函數(shù)名後的括弧不能省略。3.RESULT關(guān)鍵字RESULT關(guān)鍵字用於聲明將函數(shù)的返回值保存在其後的變數(shù)名中,稱為函數(shù)結(jié)果名。10.3.2調(diào)用函數(shù)副程式函數(shù)副程式的調(diào)用與內(nèi)在函數(shù)的調(diào)用形式一樣。在主調(diào)程式的任意位置,可以通過(guò)下麵的語(yǔ)句形式將函數(shù)副程式的計(jì)算結(jié)果賦值給變數(shù):V=函數(shù)名(實(shí)元表)其中,V表示用於接收函數(shù)計(jì)算結(jié)果的變數(shù);實(shí)元表是程式中實(shí)際傳入函數(shù)副程式的變數(shù)列表,除非有特殊說(shuō)明,變數(shù)列表中的實(shí)元個(gè)數(shù)以及類型必須與函數(shù)副程式定義時(shí)的虛參在個(gè)數(shù)和類型上一致。如果函數(shù)不包含啞元,則調(diào)用形式是在運(yùn)算式中直接寫上函數(shù)名再跟空括弧即可:V=函數(shù)名()10.3.3函數(shù)副程式示例——進(jìn)制轉(zhuǎn)換下麵來(lái)看一段函數(shù)副程式的實(shí)例,代碼將一個(gè)4位元組的整數(shù)用16進(jìn)制的形式表示出來(lái)。首先給出的是程式的函數(shù)副程式單元HEX。FUNCTIONHEX(n)IMPLICITNONE

CHARACTER(LEN=8)::HEXCHARACTER(LEN=1)::H(0:15)=(/'0','1','2','3','4','5','6','7',&'8','9','A','B','C','D','E','F'/)INTEGER::n,j,nn

HEX=''

DOj=8,1,-1

nn=n/16

HEX(j:j)=H(n-16*nn)

IF(nn==0)EXITn=nnENDDO

ENDFUNCTION10.3.4函數(shù)副程式示例——分形在數(shù)學(xué)上有一個(gè)特殊的分支——分形(fractal),所謂分形是Mandelbrot將自然界的一些特殊複雜圖形(如海岸線、樹葉外形、雪花結(jié)晶類型等)進(jìn)行數(shù)學(xué)理想化後提出的一種概念,其核心思想是圖形的任意細(xì)小部分都與圖形的整體具有自相似性,這種圖形的維數(shù)不是整數(shù),而是分?jǐn)?shù)維。分形的一個(gè)典型例子就是Koch曲線,它具有雪花的外形,可以通過(guò)對(duì)一段直線反復(fù)進(jìn)行某一簡(jiǎn)單的操作而得到。把這個(gè)過(guò)程用數(shù)學(xué)語(yǔ)言來(lái)描述,就是在複空間內(nèi)定義的一種簡(jiǎn)單迭代過(guò)程,它是一個(gè)圖形的縮小映射,從而產(chǎn)生自相似曲線。10.4子例行副程式同函數(shù)副程式相比,子例行副程式通常用於完成更為複雜的任務(wù)。子例行副程式接受外界傳入的參數(shù)並對(duì)其進(jìn)行處理,子例行程式名不會(huì)用來(lái)返回處理結(jié)果。形象一點(diǎn)來(lái)說(shuō),函數(shù)副程式像檢驗(yàn)機(jī),它不改變參數(shù)的值但會(huì)告訴外界一個(gè)檢測(cè)結(jié)果;而子例行副程式更像一個(gè)加工機(jī)器,外界來(lái)的參數(shù)經(jīng)過(guò)它的加工會(huì)以新的形象出現(xiàn)。本節(jié)主要介紹子例行副程式的相關(guān)知識(shí)。10.4.1定義子例行副程式子例行副程式同函數(shù)副程式非常相似,但是子例行副程式不會(huì)有返回值。這種形式的副程式是以SUBROURTINE語(yǔ)句開始,END語(yǔ)句結(jié)束的過(guò)程。其一般語(yǔ)法形式如下:[首碼]SUBROUTINE副程式名[([啞元列表])]……END[SUBROUTINE[副程式名]]1.啞元列表2.首碼3.副程式名4.END語(yǔ)句10.4.2子例行副程式示例下麵直接來(lái)看一段例子,這段代碼依次讀入三個(gè)實(shí)數(shù),並按它們的大小重新開始排序。程式的執(zhí)行結(jié)果如下:請(qǐng)輸入三個(gè)實(shí)數(shù):1.3452.718282.71827三個(gè)實(shí)數(shù)的先後次序如下:2.7182802.7182701.345000調(diào)用子例行副程式時(shí)的實(shí)元必須是與啞元類型相同的變數(shù)、數(shù)組、數(shù)組元素和常數(shù)。當(dāng)用CALL語(yǔ)句進(jìn)行調(diào)用時(shí),啞元和實(shí)元才按啞元列表中的順序一一對(duì)應(yīng),取得同一數(shù)值。10.5副程式的多入口點(diǎn)和多折返點(diǎn)儘管副程式中不允許直接定義其他的副程式,但是在Fortran77時(shí)代,可以通過(guò)特殊的方式在同一個(gè)子程式中定義多個(gè)不同的過(guò)程入口。通過(guò)調(diào)用不同的過(guò)程定義來(lái)實(shí)現(xiàn)調(diào)用同一個(gè)子程式中的不同執(zhí)行段。除了提供多入口點(diǎn)外,F(xiàn)ortran77時(shí)代也提供特殊的多折返點(diǎn)來(lái)實(shí)現(xiàn)特定條件的副程式調(diào)用返回方式。10.5.1ENTRY語(yǔ)句與多入口點(diǎn)Fortran語(yǔ)言中的副程式中可以通過(guò)ENTRY語(yǔ)句來(lái)提供多個(gè)入口點(diǎn)。程式的執(zhí)行效果如下:請(qǐng)任意輸入一個(gè)實(shí)數(shù):-30.0這是一個(gè)負(fù)數(shù)它的立方根為:-3.107233在上面的代碼中,副程式SIGN內(nèi)部通過(guò)ENTRY語(yǔ)句為一段執(zhí)行代碼定義為一個(gè)入口點(diǎn)Negative(A)。在主調(diào)程式中,可以根據(jù)情況選擇副程式SIGN中的不同執(zhí)行段:直接調(diào)用SIGN將會(huì)執(zhí)行入口點(diǎn)Negative(A)前的執(zhí)行代碼,並在ENTRY語(yǔ)句前的RETURN語(yǔ)句返回主調(diào)過(guò)程;如果調(diào)用Negative將執(zhí)行入口點(diǎn)Negative(A)後的執(zhí)行代碼,並在下一個(gè)RETURN語(yǔ)句返回主調(diào)過(guò)程。10.5.2副程式的多折返點(diǎn)一般來(lái)說(shuō),當(dāng)副程式執(zhí)行完成之後,通常會(huì)直接返回主調(diào)程式的調(diào)用處繼續(xù)進(jìn)行執(zhí)行。關(guān)於這一點(diǎn),F(xiàn)ortran語(yǔ)言中也提供了一種特殊的返回方式來(lái)改變副程式的折返點(diǎn),將副程式的返回點(diǎn)指定到主調(diào)程式的其他位置。程式的執(zhí)行結(jié)果如下:請(qǐng)輸入一個(gè)正整數(shù)[負(fù)數(shù)-退出]:0計(jì)算結(jié)果S=0.0000000E+00[=0]請(qǐng)輸入一個(gè)正整數(shù)[負(fù)數(shù)-退出]:2計(jì)算結(jié)果S=0.9092974[>0]請(qǐng)輸入一個(gè)正整數(shù)[負(fù)數(shù)-退出]:5計(jì)算結(jié)果S=-0.9589243[<0]請(qǐng)輸入一個(gè)正整數(shù)[負(fù)數(shù)-退出]:0需要注意,能夠?qū)崿F(xiàn)多折返點(diǎn)的副程式僅限於子例行副程式,不包括函數(shù)副程式,函數(shù)副程式通過(guò)RETURN語(yǔ)句只能返回到主調(diào)程式中的調(diào)用點(diǎn)處。10.6Fortran90/95中的特殊副程式類型在Fortran90/95標(biāo)準(zhǔn)中,除了繼續(xù)對(duì)前述的一般副程式類型提供支持外,還新增了三種特殊的副程式類型。這三種子程式類型就是前述章節(jié)中曾經(jīng)提到過(guò)的RECURSIVE、PURE和ELEMENTAL三種屬性。RECURSIVE屬性允許過(guò)程進(jìn)行自身調(diào)用,也就是常說(shuō)的遞歸調(diào)用;PURE和ELEMENTAL屬性都用於數(shù)組的並行處理。10.6.1RECURSIVE屬性在Fortran90/95標(biāo)準(zhǔn)之前,F(xiàn)ortran中的副程式是不允許進(jìn)行自身調(diào)用的。在新標(biāo)準(zhǔn)中,F(xiàn)ortran副程式開始允許進(jìn)行自身調(diào)用,也就是經(jīng)常在編程中聽到的“遞歸”。能夠進(jìn)行遞歸調(diào)用的一個(gè)前提條件就是遞歸過(guò)程在被調(diào)用時(shí),其中的局部變數(shù)會(huì)使用不同的記憶體地址,以便在完成遞歸後能夠依次統(tǒng)計(jì)不同記憶體地址上的結(jié)果。1.遞歸函數(shù)副程式2.遞歸子例行副程式10.6.2PURE屬性在函數(shù)副程式或是子例行副程式的定義語(yǔ)句前添加PURE語(yǔ)句,將使副程式具有PURE屬性。一般來(lái)說(shuō),並不需要使用這種屬性,它通常適用於並行計(jì)算並在使用上有較多的限制。具有PURE屬性的副程式,其參數(shù)必須是只讀的,即INTENT(IN)。具有PURE屬性的副程式,其參數(shù)都必須有賦值屬性。具有PURE屬性的副程式,其中的變數(shù)不允許具有SAVE屬性。具有PURE屬性的副程式,其包含的內(nèi)部過(guò)程也必須具有PURE屬性。具有PURE屬性的副程式,不能夠使用STOP以及輸入輸出相關(guān)語(yǔ)句,如READ、WRITE等。具有PURE屬性的副程式,只能夠讀取而不能改變?nèi)肿償?shù)的值。10.6.3ELEMENTAL屬性ELEMENTAL屬性與PURE屬性非常相似,只不過(guò)它是一個(gè)針對(duì)數(shù)組的應(yīng)用。在具有ELEMENTAL屬性的過(guò)程中,不允許出現(xiàn)數(shù)組參數(shù)。該屬性主要用於配合Fortran90/95中對(duì)於數(shù)組的整體操作。程式的執(zhí)行結(jié)果如下:

1.0000003.0000005.0000007.0000009.0000000.5403023-1.7147170.63428801.994638-2.73339110.7數(shù)據(jù)塊程式單元由於COMMON語(yǔ)句中的變數(shù)不能夠在副程式或主程序中通過(guò)DATA語(yǔ)句來(lái)直接設(shè)置初始值,需要在一個(gè)統(tǒng)一的程式單元中進(jìn)行數(shù)據(jù)的初始化工作。這種統(tǒng)一的程式單元就是數(shù)據(jù)塊程式單元。數(shù)據(jù)塊副程式單元是一種為有名公用塊中的變數(shù)定義初始值的程式單元。它只允許包含變數(shù)聲明和變數(shù)初始值,不可以包含可執(zhí)行語(yǔ)句。數(shù)據(jù)塊程式單元是一種落後的程式設(shè)計(jì)手段,在新的Fortran90/95標(biāo)準(zhǔn)中已經(jīng)有新的模組程式單元可以完全提供數(shù)據(jù)塊的所有功能。但是一些早期的大型Fortran程式往往會(huì)使用這種程式單元來(lái)進(jìn)行變數(shù)的初始化工作,因此有必要對(duì)這種過(guò)時(shí)的語(yǔ)法進(jìn)行簡(jiǎn)單的介紹。10.7.1定義數(shù)據(jù)塊副程式數(shù)據(jù)塊副程式的一般形式如下:BLOCKDATA[塊數(shù)據(jù)名][說(shuō)明部分]END[BLOCKDATA[塊數(shù)據(jù)名]]數(shù)據(jù)塊副程式中的變數(shù)一般通過(guò)DATA語(yǔ)句來(lái)進(jìn)行初始化。公共塊中命名的變數(shù)只能在數(shù)據(jù)塊副程式單元或某個(gè)過(guò)程中初始化一次。更好的編程方法是使用模組程式單元而不是數(shù)據(jù)塊單元來(lái)進(jìn)行全局變數(shù)的聲明和變數(shù)的初始化工作。10.7.2使用數(shù)據(jù)塊副程式數(shù)據(jù)塊副程式在整個(gè)程式結(jié)構(gòu)中是一個(gè)獨(dú)立的單元,不能出現(xiàn)在其他的程式單元之中。同時(shí),數(shù)據(jù)塊副程式也不需要進(jìn)行顯示的引用,編譯程序會(huì)在編譯階段根據(jù)數(shù)據(jù)塊副程式的定義為其中的變數(shù)做好賦初值的工作。10.7.3數(shù)據(jù)塊副程式示例下麵來(lái)看一段數(shù)據(jù)塊程式單元的代碼實(shí)例。這段代碼沒(méi)有什麼實(shí)際的用途,主要用於說(shuō)明數(shù)據(jù)塊在實(shí)際編程中如何應(yīng)用。程式的運(yùn)行結(jié)果非常簡(jiǎn)單,如下所示:ThisisademoofBLOCKDATA1.000000-34.000000.78000003.1415931.000000000000002.000000000000002.000000000000002.000000000000001.00000000000000-1-2-2

-2-110.8副程式的參數(shù)函數(shù)副程式和子例行副程式在有些時(shí)候都會(huì)涉及到大量外部傳遞的參數(shù)。這些參數(shù)在傳遞過(guò)程中的行為如何?有些什麼特性?在過(guò)程中如何發(fā)揮作用?這就是本節(jié)將要介紹的基本內(nèi)容。10.8.1參數(shù)傳遞規(guī)則副程式中的啞元在與實(shí)元進(jìn)行啞實(shí)結(jié)合時(shí)的一條基本規(guī)則就是對(duì)應(yīng)位置上的數(shù)據(jù)要類型正確。參數(shù)類型如果不一致,則很可能發(fā)生不可預(yù)料的結(jié)果。由於Fortran語(yǔ)言在進(jìn)行參數(shù)傳遞時(shí)採(cǎi)用的是傳地址的方式,即傳遞變數(shù)所占的第一個(gè)地址。進(jìn)行參數(shù)傳遞的啞元和實(shí)元會(huì)用自身的數(shù)據(jù)類型規(guī)則來(lái)解讀同一片存儲(chǔ)單元,一旦數(shù)據(jù)類型不一致就很容易發(fā)生解讀錯(cuò)誤的問(wèn)題。1.參數(shù)傳遞錯(cuò)誤示例2.類型不匹配解決方法10.8.2副程式的介面在前一節(jié)的最後一個(gè)例程中,介紹了一種新的程式單元——介面。通過(guò)ITERFACE語(yǔ)句可以向調(diào)用程式單元說(shuō)明過(guò)程的某些資訊。1.顯示介面2.隱式介面3.介面塊4.過(guò)程介面塊10.8.3介面塊使用情況在實(shí)際編程中,介面塊並不是每個(gè)主調(diào)程式都具有的。如果僅使用Fortran77語(yǔ)言編寫副程式,則無(wú)需在主調(diào)程式單元中編寫介面塊;但是如果使用Fortran90/95中提供的一些現(xiàn)代化手段來(lái)編寫程式,通常需要在主調(diào)程式單元中寫入調(diào)用程式的介面塊,否則在編譯過(guò)程中很容易出錯(cuò)。此外,F(xiàn)ortran90/95中不提倡使用COMMON語(yǔ)句進(jìn)行程式單元間的數(shù)據(jù)傳遞和共用,該語(yǔ)句的功能已經(jīng)由模組中的介面塊代替。確切一點(diǎn),如果遇到下列情況時(shí),在主調(diào)程式中必須聲明被調(diào)過(guò)程的介面塊。(1)如果外部過(guò)程具有以下特徵:過(guò)程的啞元有可選擇屬性。過(guò)程的啞元是假定形數(shù)組、指針變數(shù)、目標(biāo)變數(shù)。過(guò)程的結(jié)果是數(shù)組或指針。對(duì)於字元型函數(shù)過(guò)程的結(jié)果,其長(zhǎng)度不是常數(shù),也非假定長(zhǎng)度。(2)如果調(diào)用過(guò)程時(shí)出現(xiàn)下列情況:使用了變?cè)P(guān)鍵字(如範(fàn)例TEST1009)。使用類屬名來(lái)進(jìn)行調(diào)用。使用超載賦值號(hào)(對(duì)於副程式)。使用超載操作符(對(duì)於函數(shù))。在要求純過(guò)程的上下文中。(3)如果過(guò)程首碼關(guān)鍵字是ELEMENTAL。10.8.4INTENT屬性應(yīng)用在Fortran語(yǔ)言中,虛實(shí)結(jié)合是在不同程式單元之間進(jìn)行數(shù)值傳遞的主要手段。例如,主程序中實(shí)元A與副程式中的啞元X結(jié)合,就是將實(shí)元A在內(nèi)存中的地址傳遞給啞元X,也就是將主程序中A的值傳遞給副程式中的X,該值可供副程式運(yùn)算;反之,如果副程式中的變數(shù)Y在副程式執(zhí)行完後有值M,則Y與實(shí)元R結(jié)合後會(huì)使主調(diào)程式單元中的實(shí)元變數(shù)R的值也變成M。在Fortran77時(shí)代,在編寫程式時(shí)無(wú)法確切地說(shuō)明過(guò)程中啞元的目的。過(guò)程中的啞元到底是用來(lái)將數(shù)據(jù)傳入到過(guò)程中的,還是用來(lái)將數(shù)據(jù)傳出到主調(diào)程式單元中,或者是兩種功能都兼而有之。這個(gè)概念是含糊的。在進(jìn)行調(diào)用時(shí)只能由程式員自行記住過(guò)程中各個(gè)啞元的性質(zhì)。進(jìn)入到Fortran90/95時(shí)代,為了避免當(dāng)過(guò)程內(nèi)部變數(shù)的值發(fā)生變化後返回到主調(diào)程式單元時(shí)可能造成的混淆情況,在過(guò)程的變數(shù)類型定義中,可以為啞元指定INTENT屬性(字面資訊就是意圖屬性)。啞元按照其在參數(shù)傳遞過(guò)程中的作用可以分為輸入輸出兩用、僅用於輸入和僅用於輸出。10.8.5關(guān)鍵字變?cè)P(guān)鍵字變?cè)鋵?shí)已經(jīng)在前面提到過(guò)了,這裏單獨(dú)進(jìn)行更詳細(xì)一點(diǎn)的講解。一般來(lái)說(shuō),啞實(shí)結(jié)合必須遵循三個(gè)一致的原則,否則會(huì)出現(xiàn)錯(cuò)誤。所謂三個(gè)一致,是指:?jiǎn)≡c實(shí)元的位置一致;啞元與實(shí)元的個(gè)數(shù)一致;啞元與實(shí)元的類型一致。上述要求需要程式員記住每個(gè)啞元的名稱及位置,在書寫或閱讀過(guò)程中的實(shí)元表時(shí)要對(duì)其中每個(gè)運(yùn)算式追溯到它原來(lái)的啞元是什麼,非常不方便。針對(duì)這一問(wèn)題,F(xiàn)ortran90/95中通過(guò)三種方法來(lái)放寬這三個(gè)一致的原則:用關(guān)鍵字變?cè)艑捨恢靡恢拢挥每蛇x擇變?cè)艑拏€(gè)數(shù)一致;用類屬過(guò)程放寬類型一致。10.8.6可選擇變?cè)cOPTIONAL屬性在調(diào)用的三個(gè)一致原則中,實(shí)元與啞元個(gè)數(shù)一致是另一個(gè)比較嚴(yán)格的要求。但在某些過(guò)程中,雖然啞元列表中列出了好幾個(gè)啞元,但在實(shí)際調(diào)用時(shí)不一定每次都需要全部用到。對(duì)於這種情況,F(xiàn)ortran90/95標(biāo)準(zhǔn)中允許只對(duì)啞元表中的部分啞元進(jìn)行啞實(shí)結(jié)合,另一部分啞元?jiǎng)t按需要進(jìn)行有選擇的結(jié)合,這部分啞元又被稱為可選擇變?cè)?。例如Fortran語(yǔ)言中的內(nèi)在數(shù)組函數(shù)SUM,它的完整函數(shù)及啞元表如下:SUM(ARRAY,DIM,MASK)10.8.7啞元改名廣泛的通用性是過(guò)程的一大優(yōu)點(diǎn)。一旦針對(duì)某個(gè)通用處理操作的過(guò)程被編好,求解具體問(wèn)題的主程序就可以對(duì)它進(jìn)行調(diào)用。但是在應(yīng)用於不同的目的時(shí),具體問(wèn)題的物理名稱可能是不同的。為了加強(qiáng)程式的可讀性與可維護(hù)性,在不同的場(chǎng)合使用某一個(gè)過(guò)程時(shí),需要將啞元名稱改為與該領(lǐng)域械奈錮礱埔恢隆TFortran90/95中,允許改變過(guò)程中變?cè)拿Q。變?cè)Q的改變是在介面塊中進(jìn)行的,所以在主調(diào)程式中需要寫出相應(yīng)的介面塊。例如上面求多邊形邊長(zhǎng)的副程式,如果調(diào)用時(shí)想要將表示邊長(zhǎng)的啞元名A、B、C和D改為物理意義明確的名稱Upper、Down、Left和Right,只需在主調(diào)程式中編寫相應(yīng)的介面塊,在介面塊的啞元表中使用新的啞元名稱就可以了。10.8.8INTRINSIC屬性與EXTERNAL語(yǔ)句或?qū)傩哉f(shuō)明的實(shí)元是外部過(guò)程相對(duì)應(yīng),INTRINSIC語(yǔ)句或?qū)傩杂脕?lái)說(shuō)明實(shí)元實(shí)際上是內(nèi)在過(guò)程。說(shuō)明一個(gè)對(duì)象名具有INTRINSIC屬性可以有兩種方法,一種就是在類型說(shuō)明語(yǔ)句中加入INTRINSIC屬性,具體的形式如下:類型說(shuō)明語(yǔ)句,INTRINSIC::內(nèi)在函數(shù)名[,內(nèi)在函數(shù)名]…另一種方法是直接使用INTRINSIC語(yǔ)句進(jìn)行說(shuō)明,具體的形式如下:INTRINSIC::內(nèi)在過(guò)程名[,

溫馨提示

  • 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)論