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