資源描述:
《FORTRAN程序單元》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第10章Fortran程序單元一個(gè)Fortran程序中通常不是只由一個(gè)主程序組成,而是由幾個(gè)按某種方式劃分的不同程序單元來(lái)共同組成。盡管Fortran程序中允許只有主程序而沒(méi)有子程序,但絕不允許只有子程序而沒(méi)有主程序。在Fortran中,程序的執(zhí)行總是從主程序開(kāi)始的。Fortran中的程序單元可以大體劃分為主程序、子程序兩種,其中子程序又可以進(jìn)一步劃分為函數(shù)子程序、子例行子程序和數(shù)據(jù)塊子程序。數(shù)據(jù)塊子程序通常用于實(shí)現(xiàn)變量的初始化賦值,函數(shù)子程序和子例行子程序在用途上基本是一致的,但是也有許多不同之處。本章將詳細(xì)介紹Fortran中的程序單元和它們的基本用法。10.1主程序顧名思義,主
2、程序是一個(gè)實(shí)際程序中的主體,其他類(lèi)型的程序單元都是以某種方式來(lái)輔助主程序的執(zhí)行。在Fortran語(yǔ)言中,一個(gè)程序的執(zhí)行始終是從主程序的第一條可執(zhí)行語(yǔ)句開(kāi)始的,所以每個(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ù)不屬于程序單元的范疇。但是在實(shí)際應(yīng)用中,語(yǔ)句函數(shù)以其靈活的應(yīng)用、小巧的結(jié)構(gòu)在程序中發(fā)揮著重要的作用。在
3、實(shí)際的編程過(guò)程中,程序員往往會(huì)遇到這種情況:一些簡(jiǎn)單的函數(shù)會(huì)在一個(gè)程序單元中的不同地方重復(fù)用到,而Fortran系統(tǒng)并不提供這種內(nèi)部函數(shù);如果采用函數(shù)子程序的形式來(lái)描述這些簡(jiǎn)單的函數(shù)又會(huì)覺(jué)得沒(méi)有這種必要。例如,要求解函數(shù)的值,將其編寫(xiě)成函數(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ù)通常
4、在函數(shù)比較簡(jiǎn)單,能夠用一條語(yǔ)句(包括換行)就能進(jìn)行定義時(shí)才使用;語(yǔ)句函數(shù)是一種非執(zhí)行語(yǔ)句,需要放置在所有可執(zhí)行語(yǔ)句之前和相關(guān)的類(lèi)型說(shuō)明語(yǔ)句之后;語(yǔ)句函數(shù)的作用范圍僅限于定義它的程序單元之內(nèi),不允許跨程序單元進(jìn)行語(yǔ)句函數(shù)的調(diào)用;語(yǔ)句函數(shù)不能作為子程序調(diào)用時(shí)的實(shí)參,也不允許在EXTERNAL語(yǔ)句中出現(xiàn);語(yǔ)句函數(shù)中出現(xiàn)的虛參必須是變量名,不能是常量、表達(dá)式或是數(shù)組元素;語(yǔ)句函數(shù)通過(guò)表達(dá)式得到的函數(shù)值的類(lèi)型必須與函數(shù)名的類(lèi)型一致。10.2.2語(yǔ)句函數(shù)的引用語(yǔ)句函數(shù)在完成定義后,就可以在程序單元中進(jìn)行引用了。實(shí)際上,在前一小節(jié)的例程中已經(jīng)演示了語(yǔ)句函數(shù)引用的一般方式。本小節(jié)將對(duì)語(yǔ)句函數(shù)的引用方
5、式進(jìn)行具體的說(shuō)明。語(yǔ)句函數(shù)的引用方式與Fortran中內(nèi)部函數(shù)的引用方式完全一致,就是用程序中定義的實(shí)參替換掉語(yǔ)句函數(shù)定義中的虛參。實(shí)參必須是與虛參類(lèi)型相同的常量、變量或表達(dá)式。10.3函數(shù)子程序函數(shù)子程序和子例行子程序是子程序的兩種常用基本形式。它們的共同特征就是作為數(shù)據(jù)處理過(guò)程的集合。但是這兩種子程序也不完全相同,函數(shù)子程序會(huì)返回一個(gè)函數(shù)值,且通常不會(huì)改變啞元的數(shù)值。因此,函數(shù)子程序更像是數(shù)學(xué)上的一個(gè)函數(shù)。而子例行子程序通常用于完成一項(xiàng)更為復(fù)雜的任務(wù),通過(guò)啞元或者其他手段返回幾個(gè)結(jié)果,啞元的數(shù)值通常會(huì)在程序的執(zhí)行過(guò)程中改變。10.3.1定義函數(shù)子程序下面給出函數(shù)子程序的一般形式為
6、:[prefix]FUNCTIONname([d-arg-list])[RESULT(r-name)]...END[FUNCTIONname]1.prefix說(shuō)明項(xiàng)prefix說(shuō)明項(xiàng)是一個(gè)可選參數(shù),可以使用如下兩種形式來(lái)書(shū)寫(xiě):type[keyword]或keyword[type]2.d-arg-listd-arg-list表示函數(shù)的啞元列表。如果函數(shù)子程序不包含啞元,則啞元列表可以省略,但是函數(shù)名后的括號(hào)不能省略。3.RESULT關(guān)鍵字RESULT關(guān)鍵字用于聲明將函數(shù)的返回值保存在其后的變量名中,稱為函數(shù)結(jié)果名。10.3.2調(diào)用函數(shù)子程序函數(shù)子程序的調(diào)用與內(nèi)在函數(shù)的調(diào)用形式一樣。在主
7、調(diào)程序的任意位置,可以通過(guò)下面的語(yǔ)句形式將函數(shù)子程序的計(jì)算結(jié)果賦值給變量:V=函數(shù)名(實(shí)元表)其中,V表示用于接收函數(shù)計(jì)算結(jié)果的變量;實(shí)元表是程序中實(shí)際傳入函數(shù)子程序的變量列表,除非有特殊說(shuō)明,變量列表中的實(shí)元個(gè)數(shù)以及類(lèi)型必須與函數(shù)子程序定義時(shí)的虛參在個(gè)數(shù)和類(lèi)型上一致。如果函數(shù)不包含啞元,則調(diào)用形式是在表達(dá)式中直接寫(xiě)上函數(shù)名再跟空括號(hào)即可:V=函數(shù)名()10.3.3函數(shù)子程序示例——進(jìn)制轉(zhuǎn)換下面來(lái)看一段函數(shù)子程序的實(shí)例,代碼將一個(gè)4字節(jié)的整數(shù)用16進(jìn)制的形