版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Fortran概述作為一門誕生於上個世紀50年代後半期的高級電腦語言,Fortran在這個C/C++、Java等新興語言大行其道的時代仍然活躍在人們的視野之中。Fortran語言的長項在於數值計算,在科學研究和工程設計領域有著廣泛的用途。在描述數學語言的自然性方面,Fortran同現存的其他高級語言相比有著明顯的優勢。對於科研工作者和工程技術人員而言,Fortran語言的易學性和易用性是公認的。1.1Fortran起源Fortran是英語中“公式(Formula)”和“翻譯(Translation)”兩個單詞取前幾個字母的縮寫形式,意即“公式翻譯”。Fortran主要面向科學研究、工程設計或企事業管理中經常遇到的能夠用數學公式表達的數值計算問題。因為可以像抄寫教科書裏的公式一樣書寫數學運算式,它比用英文書寫的自然語言更接近數學語言。這使得Fortran在科研工作者和工程技術人員中擁有龐大的使用人群。Fortran語言是第一個被正式推廣的高級電腦語言。在四十多年的發展歷程中,它始終是數值計算領域所使用的主要語言。本小節主要介紹Fortran的起源。第一代Fortran語言是在1954年提出來的,稱為FortranI。它於1957年在IBM704電腦上得以實現。其開發者巴科斯的目標是開發一種容易理解、簡單易學又幾乎能像組合語言一樣高效運行的電腦語言,他和他的團隊在這一點上取得了極大的成功。但是這一計畫在最初階段並不被人們看好,這其中包括巴克斯的上司馮·諾依曼。1.2Windows下Fortran編譯器使用由於Windows操作系統有著龐大的用戶群體,因此Windows系統下的編譯器開發非常活躍。目前市場上常見的Fortran編譯器包括VisualFortran系列、Salford的FTN系列、G95/gFortran的Windows版本、Absoft公司的AbsoftFortran,Macrovision公司的PGIVisualFortran等。這其中,影響較大、功能較全、性能較好、應用最廣泛的Fortran編譯器提供了集成開發環境的VisualFortran系列。VisualFortran系列編譯器起源於微軟公司開發的FortranPowerStation4.0編譯系統。該系統結合了當時微軟最新開發的DevelopStudio集成開發環境(IDE),使得Fortran程式的開發方式跟上了時代的潮流。但是該編譯系統在實際使用中出現的問題較多,例如沒有嚴格的數組越界檢查功能等。這套工具隨後被賣給了數字設備(DEC)公司繼續開發,隨後產生了一個曾經非常流行的Fortran編譯器系統。1.2.1安裝CompaqVisualFortranCompaqVisualFortran的安裝過程比較簡單。用戶將安裝光碟放入CD-ROM後,電腦會自動運行光碟中的安裝程式。【SelectFolder】對話框安裝歡迎介面1.2.2創建第一個Fortran工程CompaqVisualFortran的圖形用戶介面直接使用了微軟公司的DevelopStudio6.0集成開發環境,極大地方便了程式的編寫、調試和修改。在圖形介面下,編寫、調試一個Fortran程式首先需要創建一個DeveloperStudio工程。1.2.3在Fortran工程中添加源代碼完成工程的基本設置之後,就可以向Fortran工程添加用戶編寫的源代碼了。向Fortran工程中添加源代碼可以參照下麵的步驟來進行操作。1.2.4在Fortran工程中新建原始檔案除了添加已有的源代碼來對工程進行填充外,還可以在工程中創建新的源代碼檔。在工程中創建新的源代碼檔有兩種方式可供選擇。下麵的圖示演示了第一種操作方法。1.2.5在CompaqVisualFortran中編譯原始檔案在CompaqVisualFortran中有兩種編譯模式可供選擇:一種是Debug模式(編譯出來的程式姑且稱作調試版本);另一種是Release模式(編譯出來的程式姑且稱作發行版本)。同一個源代碼經過這兩種編譯模式編譯出來的程式在執行效率和文件大小上都有很大區別:編譯程序在Debug模式下會向生成的可執行檔寫入很多調試資訊和控制語句,因此編譯出來的可執行檔“個頭大”、“跑得慢”。在Release模式下,編譯程序只會將源代碼中的有效語句編譯成可執行檔,因此編譯出來的可執行檔“個頭小”、“跑得快”。1.3Linux下常見Fortran編譯器作為開源的操作系統,Linux因其較好的安全特性也擁有較多的使用人群,特別是一些資質較深的電腦愛好者。在Linux系統下,常見的Fortran編譯器包括GNU的Fortran77編譯器G77、GNU的Fortran95編譯器gFortran和G95、Intel公司開發的IntelFortranCompiler等。這裏主要介紹gFortran和G95的基本用法。在Linux系統下安裝Fortran編譯器需要在控制臺窗口中進行。以G95編譯器的安裝為例,首先打開一個控制臺窗口,並進入到想要安裝G95編譯器的檔夾中。接下來運行如下命令即可:wget-O-/g95-x86-linux.tgz|tarxvfz-ln-s$PWD/g95-install/bin/i686-pc-linux-gnu-g95/usr/bin/g951.4常見編譯器性能比較各個編譯器由於實現的方式有所區別,因此實際編譯出的執行程式也有區別。這種區別主要體現在可執行程式的大小、程式的運行速度、編譯所花費的時間等方面。本節主要給出Windows操作系統下,一些常見編譯器的性能比較。程式員可以以此為參考,在軟體開發時選擇合適的編譯器版本。編譯器名稱和版本號廠商或組織編譯器名稱版本號AbsoftAbsoftProFortran95,簡稱APF958.0CompaqCompaqVisualFortran,簡稱CVF6.6CSalfordSalfordFTN77,簡稱FTN774.02SalfordSalfordFTN95,簡稱FTN953.4.1605GNUG773.220020907IntelIntelFortranCompiler,簡稱IFC10.1LaheyLahey/FujitsuLF95,簡稱LF957.2N.A.SoftwareN.A.SoftwareFortranPlus,簡稱NAS2.21.5常用編輯器通常,編譯器廠商為了用戶更方便使用,會隨同編譯器為用戶提供簡單的編輯器來書寫源代碼。例如,CompaqVisualFortran借用了微軟的DevelopStudio6.0集成開發環境。IntelVisualFortran雖然沒有集成可視化開發環境,但它可以嵌入到DevelopStudio.NET集成開發環境中。不過對於某些用戶而言,他們更習慣使用獨立的編輯器來進行源代碼的編輯,而在命令行模式下對源代碼進行編譯調試。獨立的源代碼編輯器大多也能用於普通文本的編輯。很多程式設計語言的源代碼檔同普通文本檔的差別僅僅是檔的擴展名不同而已。本文主要介艸S玫囊恍Fortran源代碼編輯器和基本的使用方法。1.5.1UltraEditUltraEdit軟體是IDMComputerSolutions公司開發的一款性能優秀、功能強大的文本編輯器,能夠用於編寫多種進制格式的文本檔和各種程式設計語言的源代碼(如C、C++、JAVA、HTML等)。該編輯器配合自定義的語言配置檔,可以實現指定程式設計語言的語法高亮、代碼折疊、自動縮進和補位、代碼自動補全、列操作模式等功能。本小節主要介紹UltraEdit文本編輯器的基本用法。在講解UltraEdit的用法前,建議首先用保存在本書配套光碟/Tools/IDM檔夾中的wordfile.txt文本檔替換掉UltraEdit安裝目錄中的對應檔。光碟中的wordfile.txt文本檔已經由作者添加了Fortran語言的語法定義模組,收集了盡可能全的Fortran語句、內部函數、運算符、關鍵字等資訊,添加了代碼折疊、縮進和補位的定義,能夠實現語法關鍵字的高亮顯示、源代碼折疊、自動縮進和補位等功能。在完成了語法配置檔的替換之後,就可以按照下圖所示的步驟學習應用UltraEdit軟體進行Fortran源代碼編輯的過程。1.5.2ZionEditZionEdit是一款定位於Windows平臺下的開源源代碼編輯器。軟體作者的開發目標就是打造一個方便易用的源代碼編輯環境。ZionEdit的體積小巧、功能完善、介面友好,是不可多得的開源源代碼編輯器。目前該軟體的最新版本為1.0.35版。這款編輯器同樣支持多種程式設計語言,能夠定制語法高亮方案。特別是列編輯模式,能夠方便的實現大段代碼的整體注釋。讀者可以在軟體作者的主頁中獲取相關的軟體。1.5.2gEditgEdit是Linux系統下常用的一款文本編輯器。該編輯器體積不大、功能較為完善,能夠支持語法自動高亮和自動保存。最主要的是該軟體的使用較為簡單,很容易上手。對於一些對功能要求不多、對操作的簡易性較高的用戶而言,是替代那些功能完善、操作複雜的專業軟體,如Emacs、Vim等的不二之選。需要注意的是,gEdit只能運行在Linux的圖形用戶介面下,在字元模式下則不能正常運行。如果想在字元模式下進行Fortran源代碼的編輯,建議學習Emacs、Vim等不需要圖形環境的文本編輯器。1.6第一個Fortran程式——Hello!Fortran90/951.2節和1.5節分別介紹了幾種常用的Fortran編譯器和源代碼編輯器。在對軟體的介紹過程中,我們已經開始了與Fortran源代碼的初步接觸。在光碟\Program\chap01\檔夾中也提供了一段最簡單的源代碼。本節就主要通過對一個基本程式的介紹來使大家對Fortran程式有一個初步的認識。對於瞭解C/C++語言的程式員肯定都非常熟悉一個著名的C/C++入門程式,即Hello!World。該程式通過最簡單的幾句代碼使初學者對C/C++程式的結構有了一個基本的瞭解。本節將借鑒這一做法,對Fortran程式的基本結構進行講解。用UltraEdit、ZionEdit、gEdit或是CompaqVisualFortran編輯窗,輸入如下代碼段。PROGRAMHELLOIMPLICITNONEPRINT*,“Hello!Fortran90/95”ENDPROGRAMHELLO
Fortran語法基礎Fortran從誕生至今,已經走過了長達50餘年的發展歷程中。在這一發展歷程中,相關的語言標準先後制定了5部。具體的語法也隨著標準的變更而變化著。在每一個新標準中,前一個標準中的一些舊語句、語法或是被廢棄、或是建議減少使用,如Fortran90標準中就建議減少使用“COMMON”語句;或者新增了一些新的語句,如Fortran95標準中的“FORALL”語句。本章將主要介紹Fortran的基本語法。2.1程式書寫格式在1.6小節中,程式HELLO已經展示了Fortran的一種源代碼書寫格式,即自由格式(FreeFormat),這種格式是Fortran90/95標準中的一大特色。同Fortran77標準中的舊格式,即固定格式(FixedFormat)相比,取消了在源代碼書寫上的諸多限制,程式編制起來更為靈活。兩種格式書寫的源代碼通過檔擴展名來進行區別。2.1.1固定格式(FixedFormat)採用固定格式書寫的Fortran源代碼,檔擴展名為*.F或*.FOR。在固定格式中,Fortran標準規定了若干個列範圍。每一個列範圍都有自己的用途和約定,程式必須嚴格按照這些約定進行編寫。2.1.2自由格式(FreeFormat)採用自由格式書寫的Fortran源代碼,檔擴展名為*.F90。自由格式是Fortran90標準中的一大特色,廢除了固定格式中的許多限制。它並不規定程式代碼中每一行第幾列字元的具體作用,在源代碼的編寫上顯得相當自由。同固定格式相比,自由格式主要在以下幾個方面進行了改進。行的定義。在自由格式中每行可以書寫132個字元。程式語句的位置沒有了只能從第7列後開始書寫的固定約定,可以在任意一列開始書寫。同一行中可以順序書寫多條程式語句,語句之間用分號“;”進行分隔。注釋行的定義。在自由格式中,驚嘆號“!”後的字元均被視為注釋。但是,字串中的“!”出外,如“PRINT*,‘Hello!Fortran90/95’”中,“Fortran90/95’”不會被認為是注釋。續行的定義。在Fortran90/95標準中規定,當程式代碼中的一行超過132個字元時,至多可以有39個續行。續行標誌固定為“&”。當一行代碼的最後一個字元為“&”時,則表示下一行與本行接續;當一行代碼的第一個字元為“&”時,則表示本行與上一行接續。行號的定義。在Fortran90/95標準中規定,行號只需寫在代碼行的最前面即可。空格的應用。Fortran90/95標準中規定,語句和變數名中間不能有空格。例如,關係運算符“==”不能寫成“==”;“ABS(-2.0)”與“AB□S(-□2.0)”作用不再相同,“AB□S(-□2.0)”不能正常通過編譯。2.1.3兼顧兩種格式的代碼寫法由於現存大量舊的Fortran代碼(Fortran77程式)都是採用固定格式編寫的,在一些編譯器上可能會由於格式的問題而出現編譯錯誤。因此,有必要提供一種能夠兼顧兩種格式的代碼寫法,以便於將固定格式的代碼轉換為符合自由格式要求的代碼。能夠兼顧兩種格式的代碼在書寫時需要注意的要點有以下幾條:開始列。除注釋行外的每一行代碼只能從第7列開始編寫。這主要是由於自由格式中並沒有規定代碼編寫的起始列,因此可以套用固定格式的規定。注釋行。標明注釋行的符號只能用感嘆號“!”,並且應該寫在第一列。注釋行必須單獨占一行,不能出現其他語句的行尾。續行方式。續行標誌只能使用符號“&”。在接續的兩行中,前一行應該在72列後、132列前添加續行標誌;後一行則應該在第6列書寫續行標誌。空格使用。在Fortran90/95標準中,語句和變數中間不允許出現空格。因此,兼顧兩種格式的源代碼中也不允許在語句和變數中出現空格。2.2字元集“字元集”是指能夠用於編寫Fortran程式的所有字元及符號。不是所有的外文字母或數字符號都能被某一高級電腦語言接受,每一種高級電腦語言都會規定它所能使用的字元。Fortran中允許使用的基本字元主要分為兩大類:文字字元和特殊字元。文字字元主要包括26個英文字母、10個自然數字和下劃線。如表所示。2.3空格的使用在Fortran90/95標準中,空格不能出現在語句和變數名中間;除了在字串常量或是輸入輸出中外,不代表任何具體意義。其主要作用是分隔語句和變數,使代碼更為易讀。在國外的一些科學研究和工程設計機構,如美國航空航天局(NASA)等,在開發科學計算程式時對空格的使用有一些很好的規定。在程式中要確保不在Fortran定義的語句或變數名中出現空格,不要嘗試通過空格來對變數名進行區別;在編寫公式時,儘量通過空格來使公式的書寫和閱讀更為清晰易懂;在編寫大段代碼時,可以使用整行的空格來對代碼段進行功能劃分。建議在編寫程式時,儘量遵守這些規定。下麵來看一段使用空格來確分四則運算的實例,先給出不使用空格進行區分的範例:Y=X+A*B/C-(0.5+C*D)**22.4注釋格式儘管注釋在編譯過程中是一定會被編譯器忽略的,但卻是源代碼檔中十分重要的一部分。因為注釋是保證源代碼具有可讀性的一個非常重要的手段。在不同的高級電腦語言中,表示注釋的方法各有不同,甚至在一種語言裏,也可能有幾種引入注釋的方法。不同的注釋方法各有優缺點,在使用中應該根據實際情況進行選擇。在C語言程式中,需要使用“/*”和“*/”這樣的特殊標記來界定注釋的內容而不管行邊界。採用這種方式進行注釋時經常出現的錯誤就是漏掉結束的界定符,使得後面的語句也變成了注解;好處也很明顯,就是能夠方便的實現代碼的塊注釋。而Fortran95語言中的“!”,Ada語言中的“-”,或是C++語言中的“//”,注釋都是在行的任意位置開始直到行的末尾結束。這種做法更為合理、不容易出錯,但要實現大段代碼的整體注釋就不是特別方便了。2.5命名方式在Fortran中為對象命名有一定的要求。簡單的說,Fortran77的命名要求和Fortran90/95的命名要求是不同的。本節主要介紹不同標準下的命名方式。在Fortran77標準中,程式和變數等對象的名字是由不多於6個字元(包括英文字母A-Z、a-z和數字0-9)組成的字元段。同時,對象名字的第1個字元必須是字母,名字的有效使用範圍原則上僅限於一個程式單元之中(內部過程除外)。下麵的代碼段演示了Fortran77標準的對象命名方式。INTEGER0B !錯誤INTEGERC-10 !錯誤REALsin !正確REALtest:real !錯誤2.6程式單元和語句順序程式單元是程式中的基本組成部分,瞭解程式單元的用途可以加深對電腦程式的理解。本節主要介紹Fortran程式中的程式單元和句順序的基本概念及相關規定。Fortran中的程式單元分為兩大類:可執行程式單元和不可執行程式單元。可執行程式單元,在程式中主要用來執行一個完整的功能。可執行程式單元主要包括以下三種:主程序單元、外部函數副程式單元和外部子例行副程式單元。不可執行程式單位,在程式中主要用來為其他程式單元提供定義。不可執行程式單元有兩種:模組程式單元和數據塊程式單元。
簡單輸入與輸出電腦程式的主要作用是對輸入的數據進行適當的加工處理以得到人們關心的結果,並將結果輸出。在進一步講解程式設計的基本概念前,有必要介紹簡單的輸入輸出語句。這樣,程式設計中的一些問題可以直觀的表現出來,便於對一些概念的理解。3.1輸入和輸出概述在Fortran語言中,數據的輸入輸出操作由相應的輸入輸出語句來完成。輸入輸出語句負責向電腦說明程式中哪些數據要進行輸入輸出、輸入輸出數據的格式、在何種設備上進行輸入輸出等問題。Fortran中的輸入輸出方式主要有以下三種:按用戶指定的格式進行輸入輸出;按系統隱含的標準格式輸入輸出(也稱為表控輸入輸出、直接列表輸入輸出);無格式的輸入輸出。3.2簡單輸出語句簡單輸出語句主要是指表控輸出,即表控格式(ListDirectedFormat,也叫直接列表)輸出。在用這種格式進行輸出時,電腦系統會用隱含的輸出格式為每一種數據類型規定輸出的長度和表示形式。例如,實數是用小數還是指數來表達,小數位數有幾位等。在Fortran中沒有專用的表控輸出語句,表控輸出格式的輸出都是輸出語句的簡化形式。具體來說,PRINT語句和WRITE語句都能夠進行表控輸出。下麵分別對兩種語句的表控輸出用法進行說明。3.2.1PRINT語句的表控輸出PRINT語句是Fortran中較為常用的一種輸出語句,用它來完成表控輸出的語法格式如下所示。PRINT*[,輸出項,……]在PRINT語句中不能指定輸出設備,只能向系統隱含指定的設備輸出數據(隱含指定的輸出設備一般是指電腦螢幕);語句中的星號“*”表示“表控格式輸出”,即按照電腦默認的格式進行數據的輸出;輸出項可以有多個,每個輸出項之間用逗號“,”分隔;當語句中沒有輸出項時,命令將輸出一個空白行。3.2.2WRITE語句的表控輸出使用WRITE語句來完成表控輸出的語法格式如下所示。WRITE(*,*)[輸出項,……]WRITE語句中第一個星號“*”表示在系統隱含指定的設備上輸出;WRITE語句中的第二個星號“*”表示“表控格式輸出”;輸出項可以有多個,每個輸出項之間用逗號“,”分隔;當語句中沒有輸出項時,命令將輸出一個空白行。3.2.3表控輸出的特點從上面兩個例子中可以發現表控輸出的一些特點。如果輸出的是整數,系統會自動為每個整數分配11列,當要輸出的數據位數不夠時,左端以空格補齊。在輸出實數時,給每個實數分配的輸出長度分為以下兩種情況。當實數能夠用小數形式表達時,分配8列,小數點前最多7位。如果小數點後有效位數不足,則用“0”補齊。如果實數只能用指數形式表達時,則分配13列。其中,指數部分占4位,小數點後占7位。在輸出數組時,數組元素會按照它在數組中存儲的先後順序依次輸出。在輸出字串時,直接按照字串的實際長度進行輸出。用戶也可以在同一條PRINT語句或WRITE語句中輸出整數、實數和字串。示例如下。PRINT*,1000,1.414,“TwoNumbers”3.3簡單輸入語句簡單輸入語句主要是指表控輸入格式,又稱為自由格式輸入。這種輸入操作不需要用戶指定輸入數據的具體格式,只要將數據按其合法的形式依次輸入就可以了。數據之間以逗號“,”或空格間隔。Fortran中的表控輸入語句也是特定輸入語句的簡化形式。READ語句能夠實現表控輸入,其實現形式有兩種。下麵分別給出兩種形式的表控輸入語句。3.3.1READ語句的表控輸入形式一使用READ語句來完成表控輸入的語法形式如下所示。READ*[,輸入項,……]在這種形式中,不能指定輸入設備,只能由系統隱含指定的設備上輸入(系統隱含指定的設備一般是指鍵盤);語句中的星號“*”表示“表控輸入”,即按照數據合法的格式進行輸入;輸入項可以有多個,每個輸出項之間用逗號“,”分隔;當語句中沒有輸入項時,系統將掛起程序的運行直到用戶鍵入回車符。3.3.2READ語句的表控輸入形式二第二種形式的READ語句表控輸入的語法如下。READ(*,*)[輸入項,……]語句中的第一個星號“*”表示“系統默認的輸入設備”(一般指鍵盤);第二個星號“*”表示“表控輸入”;輸入項可以有多個,每個輸出項之間用逗號“,”分隔;當語句中沒有輸入項時,系統將掛起程序的運行直到用戶鍵入回車符。下麵用一個具體的代碼來演示表控輸入語句的應用。這段代碼主要演示了第二種形式的READ語句表控輸入在程式的簡單實現。TEST0305.F90!這是直接列表輸入語句READ的範例PROGRAMTEST0305IMPLICITNONE!變數定義
REAL::A,BINTEGER::I,J!表控輸入
READ(*,*)A,BREAD(*,*)I,J!表控輸出
PRINT*,"Output:"PRINT*,A,BPRINT*,I,J
ENDPROGRAMTEST03053.3.3表控輸入的特點在應用READ語句進行表控輸入操作時,輸入的數據應該符合READ語句中的要求,即輸入的數據個數應該與READ語句中的變數個數一致;輸入數據的類型應與READ語句中相應變數的類型一致。如果輸入的數據不夠,READ語句將會等待用戶繼續輸入,直到輸入所需的全部數據為止。如果輸入的數據過多,則多餘的數據不起作用。如果輸入的數據與READ語句中的變數類型不一致,則可能出現賦值錯誤。
常量和變數常量和變數都是程式中預留的用於保存數據的記憶體空間。常量的值在程式運行過程中始終不會發生變化。而變數的值在程式的運行過程中是可以變化的。在Fortran語言中,有五種基本的數據類型可供使用。他們分別是整型(INTEGER)、實型(REAL)、複型(COMPLEX)、字元型(CHARACTER)和邏輯型(LOGICAL)。按用途,又可以分數值型、字元型和邏輯型三種。相應的常量和變數也可以分為這三種。本章將按照用途介紹常量和變數的基本概念。4.1數值型常量及其類型數值型常量的值在程式運行過程中不會發生改變,它們通常也被稱為常數。數值型常量包括整型常量、實型常量和複型常量。本節主要介紹數值型常量的類型和基本概念。4.1.1整型常量整型常量也稱為整型常數或整數。按照所需存儲空間的大小,又分為長整型和短整型兩種。長整型佔用4位元組的存儲空間,短整型則佔用2位元組的存儲空間。默認情況下為長整型。有些編譯器還提供額外的擴展整型常量,如CompaqVisualFortran在x86及其相容機上額外提供佔用1位元組空間的整型常量;在OpenVMS、Tru64UNIX和Linux系統中還提供佔用8位元組空間的整型常量。由於存儲整型常量的記憶體單元容量是一定的,因此整數所能表達的範圍是有限的。長整型能夠存儲的數值範圍為-231到231-1,即-2,147,483,648到2,147,483,647之間;短整型能夠存儲的數值範圍為-215到215-1,即-32,768到32,767之間。整型常量可以包含正負號,也可以不包含(此時默認為正,即+2與2等價)。在Fortran77標準中,常量內部的空格不起任何作用,如“123”與“1□2□3”等價;但Fortran90/95標準中則不允許出現這種表達方式。4.1.2實型常量實型常量也稱為實型常數或實數。按照所需存儲空間的大小,實數分為單精確度和雙精度兩種。在實數的表達方式上,可以分為小數形式和指數形式兩種。下麵分別進行說明。1.實數的精度:單精確度實數佔用4位元組的存儲空間,有效位數6到7位;雙精度實數佔用8位元組的存儲空間,有效位數15到16位。2.實數的表達形式:當以小數形式來表達實數時,小數點的前面或後面可以不出現數字,但不允許小數點前後都不出現數字。例如,+10.4、-0.8、34.、.01等都是合法的。4.1.3複型常量複型常量也稱為複型常數或複數。按所需存儲空間的大小分為單精確度和雙精度兩種。複型常數是Fortran語言中特有的一種數據結構,能夠同時存儲複數的實部和虛部。在程式中,複型常數用一個括弧中的兩個實數來表示。第一個實數表示複數的實部,第二個實數表示複數的虛部。比如:(3.0,6.3)和(1.0E2,2.0E3)。在存儲的時候,複型常數會佔據兩個實數的存儲單元。因此,單精確度的複型常數佔用8位元組的存儲空間;雙精度的複型常數則需要佔用16位元組的存儲空間。CompaqVisualFortran在OpenVMS、Tru64UNIX和Linux系統中還提供佔用32位元組存儲空間的複型常量。複型常量中實部和虛部所表達的數的範圍與同精度的實數是一致的。即單精確度時的數值範圍為1.17549435E-38到3.40282347E38;雙精度時的數值範圍為2.2250738585072013D-308到1.7976931348623158D308。4.1.4常量的存儲形式電腦在存儲上述三種不同類型的常數時,並不區分數據的具體形式,而是統一將數據轉化為二進位的形式進行存儲。在轉化的過程中,由於存儲空間是一定的,因此存儲實型常數時會產生存儲誤差的問題,即電腦的截斷問題。在CompaqVisualFortran安裝目錄的\DF98\BIN檔夾中有一個BITVIEWER程式可以查看各種數據在電腦中存儲的二進位數據形式。通過它可以直觀的瞭解電腦中數據的存儲方式。軟體的圖形用戶介面如圖4.1所示,圖中最下麵一排的方框表示數據在電腦中的存儲空間;每一個方框只有兩個數值,即0和1;右側有多個選項可供選擇,用於表示數據所佔用的存儲空間。如4表示4位元組、2表示2位元組等。4.1.5符號常量在程式中有時會經常用到同一個常數。如一些數學常數、物理常數等。如果每次都在程式中重複書寫使用這些常數值,會顯得很繁瑣。Fortran允許用一個名字來對常量進行命名。比如常見的用PI來代表圓周率3.1415926535。此時稱PI為“符號常量”或“符號常數”,即用符號來表示常量。在Fortran中,可以使用PARAMETER語句將一個符號聲明為常量。比如將PI聲明為常數3.1415926535,可以用如下的語句實現:PARAMETER(PI=3.1415926535)4.2數值型變數及其類型數值型變數主要是指整型、實型、複型三種變數。系統會為程式中的每一個變數按照其類型開闢一塊存儲單元,用於存儲變數的值。每一個變數都需要用一個名字(變數名)來識別,並且同一個程式單元內不能用同一個變數名來命名不同的變數。本節主要介紹數值型變數的類型和基本概念。4.2.1數值型變數概述數值型變數的分類同數值型常量一樣。整型變數用來存儲整型常量,實型變數用來存儲實型常量,複型變數用來存儲複型常量。在存儲空間的分配上,同類型的變數與常量佔據相同的存儲空間。變數名的作用是識別程式中的變數。Fortran中的變數名命名有一定的規則,主要有以下幾條。變數名中只能包含26個英文字母和0~9十個數字;在Fortran90/95標準中,還允許使用下劃線“_”。變數名的第一個字元必須是字母,不能是下劃線“_”或數字。在Fortran77標準中,變數名不允許超過6個字元;在Fortran90/95標準中,變數名不允許超過31個字元。4.2.2使用系統默認的隱含約定Fortran中約定:在沒有強制規定變數類型的情況下,如果變數名的首字母為I、J、K、L、M、N六個字母中的一個時,即認為該變數為整型變數,而以其他字母開頭的變數則默認為實型變數。這就是所謂的“I-N規則”。“I-N規則”的使用有利有弊。好處就是不管在程式的什麼位置,如果想要臨時添加一個變數,只要按照“I-N規則”的約定取好變數名就可以使用了;缺點也是明顯的,就是眾多隨意添加的變數使得程式閱讀起來不是很方便,更有可能造成人為錯誤。比如下麵的代碼段就是一個典型的錯誤範例。TEST0401.F90!這是一個錯誤的變數定義範例PROGRAMTEST0401I=3000*3WRITE(*,*)lENDPROGRAMTEST04014.2.3使用類型說明語句聲明如果不想受“I-N規則”的約束,或是防止出現“I-N”規則下的常見錯誤,可以使用類型說明語句對變數的類型進行約定。在Fortran中,基本的類型說明語句主要有六種。即INTEGER語句、REAL語句、DOUBLPRECISION語句、COMPLEX語句、LOGICAL語句和CHARACTER語句。數值型變數主要涉及到前四種語句。即INTEGER語句(整型說明語句)、REAL語句(實型說明語句)、DOUBLPRECISION語句(雙精度說明語句)和COMPLEX語句(複型說明語句)。類型聲明語句的語法形式如下:類型說明語句[([KIND=]數字)][::]變數名[,變數名……]4.2.4用隱含說明語句聲明除了上面提到的兩種變數類型說明方法外,還可以用隱含說明語句(IMPLICIT語句)將以某一字母開頭的所有變數都聲明為同一種類型。該語句的語法形式如下:IMPLICIT類型說明語句(字母列表)其中字母列表中的字母用逗號進行間隔。如果是連續的一串字母,可以用首尾字母間加符號“-”的方式來進行縮寫。比如“C-H”。下麵的聲明代碼將以字母A-G和N開頭的變數都聲明為整型:IMPLICITINTEGER::(A-G,N)4.2.5數值型變數聲明及其應用在編寫程式的過程中,顯式的聲明所有用到的變數是一種良好的編程習慣,建議在編寫實際的應用程式時使用“IMPLICITNONE”來進行強制的變數類型檢查。凡是沒有進行類型說明的變數,在編譯過程中都會被編譯器找出來。在三種類型規定方法中,以類型說明語句的優先順序最高,IMPLICIT語句次之,“I-N規則”的級別最低;類型說明語句和IMPLICIT語句都是不可執行語句,必須出現在本程式單元中所有可執行語句之前;類型說明語句只能在本程式單元內有效;DOUBLEPRECISION語句在Fortran90/95標準完全可以用REAL(8)語句代替,目前已很少使用。4.3字元型常量及變數文字處理能力是Fortran語言的另一特色。早期Fortran77中的文字處理能力較弱,在Fortran90/95標準中的文字處理能力已經大大加強。本節將介紹字元型常量和變數的基本概念。4.3.1字元型變數概述字元型常量也稱為字串,它是用引號(單引號或雙引號,Fortran77中只允許用單引號)括起來的若干個字元。字串中的字元可以是電腦系統中允許使用的任意字元,通常會大於Fortran字元集。比如字元型常量‘BEIJING’,”PLANE”,”#$@%&”,”北京”都是合法的。在電腦中,一個字元通常會佔據一個位元組的存儲空間;但某些語言的字元在計算中需要多個位元組的空間來存儲。比如,一個漢字在電腦上會佔據4位元組的存儲空間。字元型變數是用來存儲字元型常量的變數,在程式中必須事先定義字元型變數才能使用。定義字元型常量可以使用CHARACTER語句,有四種定義字元型變數的語法形式,這些語法定義會在隨後的小節進行介紹。4.3.2定義形式一聲明字元型變數的第一種語法形式如下。CHARACTER[::]變數名在這種形式的定義中,類型聲明語句CHARACTER說明其後變數名所代表的變數為字元型變數。Fortran77和Fortran90/95中都可以採用這種形式進行聲明。但需要注意,在Fortran77下不能出現分隔符號“:”。採用這種形式進行聲明時,允許對變數的長度進行說明,說明的方式有兩種:變數名*len或變數名(len)4.3.3定義形式二第二種聲明字元型變數的語法形式如下。CHARACTER([KIND=]n)[::]變數名在這種形式的聲明中,關鍵字KIND用於指出賦值號“=”後所跟的數字n為變數的種別參數(有關種別參數的內容會在後面的小節進行講解)。這個數字實際上就是說明聲明語句中變數名所代表的變數的長度的,意義同定義形式一中的len。採用這種形式也可以定義字元型數組。在實際的編程實踐中,也可以採用如下替代形式:CHARACTER([LEN=]n)[::]變數名4.3.4定義形式三第三種形式的字元型變數聲明的語法形式如下。CHARACTER*len[::]變數名在這種形式的聲明中,類型聲明語句後的星號“*”用於指明其後所跟的數字表示變數的長度,意義和前面兩種定義形式中的差不多。這種形式的定義也可用於聲明字元型數組,形式如下:CHARACTER*len[::]變數名(dim)其中的dim用於說明字元數組中的緯度的長,即長度。下麵給出幾個實例。CHARACTER*20::StringCHARACTER*10::Array_string(20)4.3.5定義形式四在這種形式中,通過IMPLICIT語句來強迫使以某些字母開頭的變數被默認處理成字元型。語法形式如下:IMPLICITCHARACTER[*數字]字母表IMPLICITCHARACTER[(數字)]字母表Fortran77標準中通常採用前一種形式,Fortran90/95標準中通常採用後一種形式。定義中的數字表示字元型變數的長度,即能夠存儲多少個字元。當數字緊跟CHARACTER語句之後時,表示統一指定字元長度;當數字緊跟變數名之後時,表示單獨指定字元的長度。如果統一指定的字元長度與變數個別指定的長度不一致時,以個別指定優先於統一指定。定義中括弧內的部分可有可無。比如:IMPLICITCHARACTER(5)(G-N),CHARACTERX4.3.6字元型變數聲明及其應用實際上,只要字元變數的長度不為1,則可以將其看作數組來進行理解。正因為如此,在對字元型變數進行操作時,允許對字元型變數中的某一個或某幾個存儲位置上的數據進行單獨操作。這在接下來的子字串的相關內容中進行講解。用PARAMETER語句配合CHARACTER語句還可以定義有名字元型常量,比如:CHARACTER(9)::NamePARAMETER(Name=‘PeterPan’)或CHARACTER(9),PARAMETER::Name=‘PeterPan’4.3.7子字串的概念在字元型數據的應用上,還有一個子字串(Substring)的概念需要瞭解。所謂子字串是指字串的一部分。比如有一字串為“Beijing”,則“Bei”、“jing”、“ei”等都是該字串的子字串。可以用下麵的形式來引用子字串:字串變數名([star]:[end])其中,star和end都是整型運算式。他們指定了要引用的子字串在字串中的起始和終止位置。4.4邏輯型常量及變數邏輯量通常用於程式中的流程控制。在Fortran中,邏輯量主要有三種:邏輯常量、邏輯變數和關係運算式。本小節主要介紹Fortran中邏輯常量和邏輯變數的基本概念和應用。Fortran中的邏輯常量只有兩個:TRUE,表示“真”,即滿足邏輯條件;FALSE,表示“假”,即不滿足邏輯條件。例如,當A=0時,此時“A<1”的值就為TRUE(真),而“A<-1”的值就為FALSE(假)。邏輯常量又稱為邏輯常數,在程式中,它們通常被賦給一個邏輯變數。邏輯變數被用來存放邏輯常量,它的值只能是TRUE或FALSE中的一個。在程式中使用邏輯變數必須事先加以定義說明。在Fortran中,邏輯變數的定義是通過LOGICAL語句來實現的。該語句的一般形式為:LOGICAL[([KIND=]數字)][::]變數名[,變數名]4.5變數的初始化變數在定義之後,通常會由系統按照自身設置為變數賦給一個初值。這一過程稱為變數的初始化。但是有些系統並不提供這種功能。如果貿然使用沒有經過初始化的變數,很可能導致程式運行出錯。在Fortran中,允許在聲明變數的同時設置變數的初置。在Fortran90/95中要設置變數的初置,可以將想要設置的初值直接寫在聲明的變數之後。使用這種方法進行初值的設置時,聲明中的兩個冒號不能省略。4.6賦值語句變數在聲明後就可以使用了,在使用過程中,變數需要保存不同的數據。將數據的值寫進變數的過程就是賦值的過程。在Fortran語言中,除了一些專用的特殊語句外,最常用的賦值手段就是賦值語句。賦值語句就是等號“=”,在Fortran中有著廣泛的用途。本節就將介紹賦值的概念和賦值語句的作用。4.6.1何為賦值所謂賦值,就是將一個常量的值傳輸給一個相應的變數。在Fortran中,賦值除了通過DATA語句之外,還可以使用賦值語句來實現,並且賦值語句具有比DATA語句更廣泛的用途。賦值語句的作用就是將一個確定的值賦給一個變數,語句的一般格式為:V=P其中,運算式中的等號“=”就是賦值符;V代表一個變數名,P代表一個運算式。Fortran的賦值語句有三種類型:算術賦值語句、邏輯賦值語句和字元賦值語句。算術賦值語句的作用是將一個算術量賦予一個算術型變數;邏輯賦值語句的作用是將一個邏輯量賦給一個邏輯性變數;字元賦值語句的作用就是將一個字元型數據賦給一個字元型變數。儘管用途不一樣,但是三種賦值語句採用的都是同樣的運算符號,即賦值符“=”。賦值語句中的“=”號是賦值符,而不是等號。賦值符的作用是將賦值符右邊運算式的值傳遞給賦值符左邊的變數。例如,賦值語句“X=3.0”的作用是將數值3.0傳遞到變數X中。因此,在閱讀程式代碼時對賦值符的理解應是帶方向的,即將什麼數據賦值給什麼變數。4.6.2賦值過程的類型轉換在一個算術賦值語句V=e中,賦值變數(V)和運算式(e)的類型既可以相同,也可以不相同。Fortran中對於賦值時的類型轉換問題作了如下規定。如果變數V與運算式e的類型相同,則直接進行賦值,不需進行類型轉換。如果變數V與運算式e的類型不同,則首先進行運算式的求值,然後求值的結果轉換為賦值變數的類型。在不同的類型之間進行轉換是有限制條件的:數值型以及邏輯型數據之間允許相互賦值轉換;數值型數據與字元型數據之間則不允許進行直接賦值轉換,需要使用專用的字元函數;邏輯型數據不允許與字元型數據之間進行直接或間接的轉換。整型數據與實型數據的相互轉換遵循如下規則:整形向實型轉換時,保持數值的大小不變;實型向整型轉換時,直接將實型的小數部分截去。在由整型數據向邏輯型數據轉換時,邏輯型數據的值由整型數據的奇偶來決定:當整型數據為奇數時,轉換成的邏輯型數據的值為TRUE;當整型數據為偶數(包括0)時,轉換成的邏輯型數據的值為FALSE。在由實型數據向邏輯型數據轉換時,實型數據會首先轉換成整型,然後再由整型向邏輯型轉換。
種別和屬性在前面的章節中,談到過數值型常量的存儲空間問題。不同精度的數值所需的存儲空間是不同的,相應的變數也應該與常量的存儲空間一致。如果變數的存儲空間不夠,則會造成常量在存儲時的精度丟失。在Fortran中,可以通過種別參數來指定變數的儲存空間,從而達到優化使用存儲空間、防止精度丟失的目的。本節主要介紹種別和屬性的基本概念。5.1種別概述種別是一個全新的程式設計概念。通過它,程式員可以更靈活的控制程式所佔用的存儲空間。本節將對種別的一些基本概念進行介紹。5.1.1種別的概念種別是Fortran90/95標準中才開始引入的一種表示數據大小和精度的概念。引入種別的概念後,Fortran中的數據,不僅僅有一個類型所屬,並且同一類型下還可進一步分出若干個種別。種別數值的大小確定了該類型數據實際的大小範圍和存儲精度。這就好比動物學中的分類,在貓科動物這一大的類型之下,還有老虎、獵豹、家貓等的進一步劃分,它們的個頭會有很大差異。有了種別說明之後,電腦程式會更容易在不同硬體和軟體平臺間進行移植。由於目前的電腦系統並不統一,多種體系平臺的現象依然客觀存在。在不同的平臺上,同種類型的變數可能規定了不同的精度範圍。因此,在某種電腦上正確運行的程式在另一種電腦上運行時就有可能出現溢出等現象。有了數據的種別屬性之後,就可以有效避免這種情況的發生。5.1.2種別的使用在變數聲明中,種別由種別說明符進行說明。帶種別說明符的類型說明語句的基本語法形式如下:類型說明([KIND=]種別值)[::]變數名列表種別說明符寫在類型說明語句後的括弧內,由關鍵字KIND,賦值號“=”以及種別值組成。其中,關鍵字KIND和賦值號“=”可以省略。例如程式中要說明一個實型變數A,種別值為4;一個字元型變數C,種別值為10;一個整型變數K,種別值為8。那麼可以用下麵的代碼來進行聲明:REAL(KIND=4)::ACHARACTER(KIND=10)::CINTEGER(KIND=8)::K5.2種別值和種別函數前面已經提到過了,由於Fortran國際標準中只是提出了數據的種別概念和定義,但並沒有規定統一的種別分類和相關的數值定義。這一現象是由於當前電腦體系並不統一的現實造成的。因此,具體的種別值是由各個編譯器廠商自行確定的。本節主要介紹CompaqVisualFortran編譯系統中提供的幾類種別值。5.2.1整型數據的種別整型數據在CompaqVisualFortran中被劃分為4種種別,種別值即表示整型數據所占記憶體空間的位元組數n。表所示是CompaqVisualFortran中定義的幾種整型數據種別。整型數據的種別種別值n取值範圍(-28n-1—28n-1-1)備註INTEGER([KIND=]1)或INTEGER*1-128到127
INTEGER([KIND=]2)或INTEGER*2-32768到32767
INTEGER([KIND=]4)或INTEGER*4-2147483648到2147483647缺省值INTEGER([KIND=]8)或INTEGER*8-9223372036854775808到9223372036854775807僅適用於Alpha晶片機型5.2.2實型數據的種別實型數據在CompaqVisualFortran中被劃分為3種種別。在Fortran90/95標準中並沒有明確規定實型數據中指數的允許範圍和有效位數,表中的數據僅適用於CompaqVisualFortran。實型數據的種別種別值取值範圍備註REAL([KIND=]4)或REAL*410-38
到1038,7位有效數字缺省值REAL([KIND=]8)或REAL*810-308
到10308,15位有效數字等價於雙精度型DOUBLEPRECISIONREAL([KIND=]16)或REAL*16
僅用於OpenVMS、Tru64UNIX、Linux操作系統5.2.3複型數據的種別複型數據在CompaqVisualFortran中被劃分為3種種別,如表所示。每種表示實型數據的方法都可以用來表示複型數據的實部和虛部,數據的取值範圍可以參考前一小節。需要注意的是簡寫寫法與完整寫法之間的差別。複型數據的種別種別值備註COMPLEX([KIND=]4)或COMPLEX*8缺省值COMPLEX([KIND=]8)或COMPLEX*16等價於雙精度複型DOUBLECOMPLEXCOMPLEX([KIND=]16)或COMPLEX*32僅用於OpenVMS、Tru64UNIX、Linux操作系統5.2.4邏輯型數據的種別邏輯型數據在CompaqVisualFortran中被劃分為4種種別,如表所示。由於邏輯型數據只有兩種,即TRUE(真)和FALSE(假),因此不管具體是何種種別,使用上並無太大區別。筆者的習慣是,使用邏輯型數據時採用其默認的種別值即可,如果想進一步節省記憶體,還可以使用種別值為1的邏輯型數據。邏輯型數據的種別種別值備註LOGICAL([KIND=]1)orLOGICAL*1
LOGICAL([KIND=]2)orLOGICAL*2
LOGICAL([KIND=]4)orLOGICAL*4缺省值LOGICAL([KIND=]8)orLOGICAL*8僅用於Alpha晶片機型5.2.5字元型數據的種別字元型數據在CompaqVisualFortran中只有1種種別,種別值的大小為1。除了上述5種基本數據類型外,CompaqVisualFortran中還提供了一種位元組型數據BYTE。該類型的數據只佔用一個位元組的存儲空間,等價於INTEGER([KIND=]1)。5.2.6種別函數儘管沒有統一的標準來規定種別的具體分類和數值,但是Fortran90/95中提供了用於查詢和選擇種別值的內部函數。下麵分別介紹這些函數和它們的用途。1.KIND函數:KIND函數用於查詢變數所屬的種別,函數的原型為:C=KIND(X)。2.SELECTED_REAL_KIND函數:SELECTED_REAL_KIND函數返回與實型變數的取值範圍和存儲精度相一致的種別參數,函數的原型為:C=SELECTED_REAL_KIND([p][,r])。3.SELECTED_INT_KIND函數:SELECTED_INT_KIND函數返回與整型變數的取值範圍相一致的種別參數,函數的原型為:C=SELECTED_INT_KIND([m])。其中,整型參數m用來指出所需要的取值範圍在-10m到10m之間。5.3常數種別和進制變數的種別可以在變數聲明的過程中通過類型說明語句進行說明,那麼常數是否也有種別之分呢?答案是肯定的。既然變數有種別之分,那麼用於給變數賦值的常數自然也有種別之分。種別值較小(也就是取值範圍較小、數據精度較低)的常數在賦值給種別值較高的變數時,不會有什麼問題;但是反過來將種別值較高的常數賦值給種別值較低的變數時就會出現問題,如丟失數據精度等。本節主要介紹如何對程式中出現的常數進行種別的表明。5.3.1非字元型常數的種別說明對於數值型或邏輯型常數這類非字元型常數來說,可以使用後輟法來表示數據所屬的種別。尾碼法在常數數值後面加上一道下劃線“_”,然後再跟上具體的種別值。對於實型常數,如果數據指數部分的字母是D時,禁止使用種別值進行說明。因為字母D表示該數據已經是實型數據的最高種別,種別值為8,即雙精度實數。對於複型常數,如果數據的實部和虛部都是用整數的形式來表示的,那麼它的精度和範圍都會被默認為與缺省的實型常數相同;如果實部和虛部都是用實數的形式來表示,那麼它的精度和範圍會視具體的情況來確定:如果實部和虛部具有相同的種別說明,則複數的種別就是該種別;如果實部和虛部具有不同的種別說明,則複數的種別由較大的種別值確定。5.3.2字元型常數的種別說明如果是字元型常數,則應改用前輟法來說明數據的種別。嵌綴法將種別值寫在字元型常數的前面,其間通過下劃線“_”把數據部分和種別值連接起來。例如下麵的例子:1_’αβγ’ 2_’計算方法’字串中使用了希臘字母和漢字,是假定所使用的電腦系統支持希臘字母與漢字,並且規定這兩個字串的種別參數分別是1和2。理論上說,這樣進行種別說明是可行的,因為漢字在內存中會佔用兩個位元組,而一般的英文字元只佔用一個位元組。但是,實際情況卻不是這樣的。5.3.3數據的進制說明除了前面兩個小節介紹的情況之外,在Fortran90/95中,還可以根據需要定義不同進制的正整數常量,這包括二進位、八進制和十六進制。二進位常量以字母“B”開頭,後跟定界符括起來的數字串,定界符可以是單引號“'”或者雙引號“””,數字只能是0或1。例如:B’01011’B”01011”5.4屬性說明在類型說明語句中除了可以說明對象的類型和種別之外,還可以進一步說明對象的屬性。當一個對象在類型說明語句中被說明具有某種屬性後,該對象就具有了某種附加的特殊功能。本節主要介紹Fortran中屬性的相關概念。5.4.1對象的屬性在Fortran90/95中,一個對象可以沒有附加的屬性說明,此時它只是普通的一般變數,與Fortran77中的變數完全相同。一個對象也可以有多個附加的屬性說明,之後被說明對象就具有了多個附加的特殊功能,並且確定了它在不同場合下的特定使用方式。每種屬性說明都有專門的關鍵字與之對應,各屬性關鍵字間用逗號進行分隔,之間沒有嚴格的先後關係,但是屬性關鍵字應該寫在類型說明語句的種別說明符之後,分隔符號“::”之前。屬性不僅僅可用於說明數據,還可以用於說明過程。5.4.2常用屬性說明常用的屬性說明是在編程實踐中經常會碰到的,這些屬性說明會為程式設計帶來某種方便。本小節將對這些常用屬性進行簡單的介紹。1.PARAMETER屬性PARAMETER屬性也稱為常數名屬性、參數屬性,這種屬性在前面的小節中已經遇到過,這裏作為單獨的概念進行解釋。2.DIMENSION屬性DIMENSION屬性用於說明一個對象名是數組名,該語句的一般形式如下:類型說明語句,DIMENSION[(形狀說明符)][::]數組名[(形狀說明符)]3.EXTERNAL屬性EXTERNAL屬性用於說明一個函數為外部函數,該屬性的一般使用形式為:類型說明語句,EXTERNAL::外部函數名
常用內部過程作為一門古老而又年輕的高級電腦語言,Fortran提供了大量的內部過程供程式員在編程過程中使用。並且隨著新標準的推出,Fortran語言的內部過程還在繼續擴展,能夠提供更多的常用功能,大大減輕了程式員的重複性勞動。本節主要介紹常用內部過程的基本知識。6.1內部過程概述在Fortran語言中,有很多常用的數學過程、字元處理過程和系統過程。其中,數學過程和字元處理過程通常是以函數副程式的形式存在,而系統過程則通常是以子例行副程式的形式存在。這些過程為應用程式的編寫提供了非常方便的手段和豐富的功能。Fortran語言將這些功能各異、用途各異的過程分別編寫成一個個獨立的副程式,編譯後組成一個大的標準過程庫(有時也稱為標準函數庫),存放在外部存儲介質(如電腦的硬碟)上。用戶在完成自身根源程式的編譯之後,使用LINK命令將已翻譯成二進位指令的目標程式與這個標準過程庫連接起來。通過這個連接,將程式中出現過程名的地方用標準過程庫中相應的一組指令代替,最終形成統一的用戶可執行程式。6.2常用數學函數作為一種主要面向科學、工程和事務處理中的數值計算問題的高級電腦語言,Fortran提供了豐富的數學函數供用戶在編程時使用。本小節主要介紹在日常編程中經常會遇到和使用的數學函數。6.2.1絕對值函數絕對值函數用於求出數據的絕對值,函數的原型如下:C=ABS(X)其中,ABS是Fortran中絕對值函數的通用名。除了這個通用名外,絕對值函數還有4個專用名,它們是:IABS,專用於求默認種別的整型數據的絕對值,返回值也為默認種別的整型數據。ABS,專用於求默認種別的實型數據的絕對值,返回值也為默認種別的實型數據。DABS,專用於求雙精度實型數據的絕對值,返回值也為雙精度的實型數據。CABS,專用於默認種別的複型數據的絕對值,返回值也為默認種別的複型數據。6.2.2指數函數指數函數用於求出數據的指數值,函數的原型如下:C=EXP(X)其中,EXP是Fortran中指數函數的通用名。除了這個通用名外,指數函數還有3個專用名,它們是:EXP,專用於求默認種別的實型數據的指數值,返回值也為默認種別的整型數據。DEXP,專用於求雙精度的實型數據的指數值,返回值也為雙精度的實型數據。CEXP,專用於默認種別的複型數據的指數值,返回值也為默認種別的複型數據。6.2.3正弦函數正弦函數用於求出數據的正弦值,函數的原型如下:C=SIN(X)其中,SIN是Fortran中正弦函數的通用名。除了這個通用名外,正弦函數還有3個專用名,它們是:SIN,專用於求默認種別的實型數據的正弦值,返回值也為默認種別的整型數據。DSIN,專用於求雙精度的實型數據的正弦值,返回值也為雙精度的實型數據。CSIN,專用於默認種別的複型數據的正弦值,返回值也為默認種別的複型數據。函數在數學上等價於。函數中參數的單位是弧度而不是度,在使用時需要注意這一點。6.2.4余弦函數余弦函數用於求出數據的余弦值,函數的原型如下:C=COS(X)其中,COS是Fortran中余弦函數的通用名。除了這個通用名外,余弦函數還有3個專用名,它們是:COS,專用於求默認種別的實型數據的余弦值,返回值也為默認種別的整型數據。DCOS,專用於求雙精度的實型數據的余弦值,返回值也為雙精度的實型數據。CCOS,專用於默認種別的複型數據的余弦值,返回值也為默認種別的複型數據。6.2.5反正弦函數反正弦函數用於求出數據的反正弦值,函數的原型如下:C=ASIN(X)其中,ASIN是Fortran中反正弦函數的通用名。除了這個通用名外,反正弦函數還有2個專用名,它們是:ASIN,專用於求默認種別的實型數據的反正弦值,返回值也為默認種別的整型數據。DASIN,專用於求雙精度的實型數據的反正弦值,返回值也為雙精度的實型數據。6.2.6反余弦函數反余弦函數用於求出數據的反余弦值,函數的原型如下:C=ACOS(X)其中,ACOS是Fortran中反余弦函數的通用名。除了這個通用名外,反余弦函數還有2個專用名,它們是:ACOS,專用於求默認種別的實型數據的反余弦值,返回值也為默認種別的整型數據。DACOS,專用於求雙精度的實型數據的反余弦值,返回值也為雙精度的實型數據。6.2.7正切函數正切函數用於求出數據的正切值,函數的原型如下:C=TAN(X)其中,TAN是Fortran中正切函數的通用名。除了這個通用名外,正切函數還有2個專用名,它們是:TAN,專用於求默認種別的實型數據的正切值,返回值也為默認種別的整型數據。DTAN,專用於求雙精度的實型數據的正切值,返回值也為雙精度的實型數據。6.2.8反正切函數反正切函數用於求出數據的反正切值,函數的原型如下:C=ATAN(X)其中,ATAN是Fortran中反正切函數的通用名。除了這個通用名外,反正切函數還有2個專用名,它們是:ATAN,專用於求默認種別的實型數據的反正切值,返回值也為默認種別的整型數據。DATAN,專用於求雙精度的實型數據的反正切值,返回值也為雙精度的實型數據。6.2.9自然對數函數自然對數函數用於求數據的自然對數值,函數的原型如下:C=LOG(X)其中,LOG是Fortran中自然對數函數的通用名。除了這個通用名外,自然對數函數還有3個專用名,它們是:ALOG,專用於求默認種別的實型數據的自然對數值,返回值也為默認種別的整型數據。DLOG,專用於求雙精度的實型數據的自然對數值,返回值也為雙精度的實型數據。CLOG,專用於求默認種別的複型數據的自然對數值,返回值也為默認種別的複型數據。6.2.10常用對數函數常用對數函數用於求數據的常用對數值,函數的原型如下:C=LOG10(X)其中,LOG10是Fortran中常用對數函數的通用名。除了這個通用名外,常用對數函數還有2個專用名,它們是:ALOG10,專用於求默認種別的實型數據的常用對數值,返回值也為默認種別的整型數據。DLOG10,專用於求雙精度的實型數據的常用對數值,返回值也為雙精度的實型數據。6.2.11取整函數取整函數用於將數據轉換為整型,函數的原型如下:C=INT(X)其中,INT是Fortran中取整函數的通用名。除了這個通用名外,取整函數還有3個專用名,它們是:IFIX,專用於將默認種別的實型數據轉換為整數,返回值為默認種別的整型數據。INT,專用於將默認種別的實型數據轉換為整數,返回值為默認種別的整型數據。IDINT,專用於將雙精度的實型數據轉換為整數,返回值為默認種別的整型數據。函數的執行結果同數學上的取整有所不同,Fortran中的取整函數只是將數據的小數部分截去,不使用四捨五入規則。函數的參數可以是實型、整型和複型。6.2.12求餘函數求餘函數用於求第一個變數被第二個變數所除後的餘數,函數的原型如下:C=MOD(X1,X2)其中,MOD是Fortran中求餘函數的通用名。除了這個通用名外,求餘函數還有2個專用名,它們是:MOD,適用於默認種別的整型數據,返回值為默認種別的整型數據。AMOD,適用於默認種別的實型數據,返回值為默認種別的實型數據。6.2.13取符號函數取符號函數返回第一個參數的絕對值與第二個參數的符號的乘積,函數的原型如下:C=SIGN(X1,X2)其中,SIGN是Fortran中取符號函數的通用名。除了這個通用名外,取符號函數還有3個專用名,它們是:ISIGN,適用於默認種別的整型數據,返回值為默認種別的整型數據。SIGN,適用於默認種別的實型數據,返回值為默認種別的實型數據。DSIGN,適用於雙精度的實型數據,返回值為雙精度的實型數據。6.2.14最大值函數最大值函數用於找出一系列數據中的最大值,函數的原型為:C=MAX(X1,X2[,X3]…)其中,MAX是Fortran中最大值函數的通用名。除了這個通用名外,最大值函數還有5個專用名,它們是:MAX0,適用於默認種別的整型數據,返回值為默認種別的整型數據。AMAX0,適用於默認種別的整型數據,返回值為默認種別的實型數據。MAX1,適用於默認種別的實型數據,返回值為默認種別的整型數據。AMAX1,適用於默認種別的實型數據,返回值為默認種別的實型數據。DMAX1,適用於雙精度的實型數據,返回值為雙精度的實型數據。6.2.15最小值函數最小值函數用於找出一系列數據中的最小值,函數的原型為:C=MIN(X1,X2[,X3]…)其中,MIN是Fortran中最小值函數的通用名。除了這個通用名外,最小值函數還有5個專用名,它們是:MIN0,適用於默認種別的整型數據,返回值為默認種別的整型數據。AMIN0,適用於默認種別的整型數據,返回值為默認種
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026猪肉加工产业市场发展趋势全面调研及投资布局优化研究报告
- 2026微生物组检测产品临床价值验证与体检中心合作模式研究报告
- 2026中国高端装备制造业技术创新能力国际对标研究
- 2026中国共享经济行业创新趋势与投资机会分析报告
- 2026中国资产管理银行业金融机构行业市场深度调研及发展趋势和投资前景预测研究报告
- 2026专利药品市场深入研判及发展方向与资金前景展望文件
- 2026边缘计算在物联网场景中的商业化应用评估报告
- 2026中国铸造粘合剂行业市场现状供需分析及投资评估规划分析研究报告
- 2026竹丝网篮业市场现状供需分析及投资评估规划分析研究报告
- 2026智能穿戴设备消费者行为变化及市场需求演变
- 2026年全国法律硕士(法学)联考真题及答案
- 招聘84人!2026年青海省检察机关面向社会公开招聘聘用制书记员考试备考试题及答案解析
- 2026年湖南水利水电职业技术学院单招职业技能考试题库附答案
- 2026-2027学年浙教版数学九上 第3章 圆的基本性质 单元综合知识梳理卷
- 新教科版三上科学学科教学计划-2026秋
- 重症营养支持中国指南(2026版)
- 2026年三力测试考试题库及答案
- 中考英语-阅读理解之推断题专题讲义
- 公路水运试验检测师《水运结构与地基》考试真题(2026年新版)
- 医共体信息中心工作制度
- 2025年高级育婴师实操考试试题及答案
评论
0/150
提交评论