版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Fortran概述作為一門誕生於上個(gè)世紀(jì)50年代後半期的高級(jí)電腦語(yǔ)言,F(xiàn)ortran在這個(gè)C/C++、Java等新興語(yǔ)言大行其道的時(shí)代仍然活躍在人們的視野之中。Fortran語(yǔ)言的長(zhǎng)項(xiàng)在於數(shù)值計(jì)算,在科學(xué)研究和工程設(shè)計(jì)領(lǐng)域有著廣泛的用途。在描述數(shù)學(xué)語(yǔ)言的自然性方面,F(xiàn)ortran同現(xiàn)存的其他高級(jí)語(yǔ)言相比有著明顯的優(yōu)勢(shì)。對(duì)於科研工作者和工程技術(shù)人員而言,F(xiàn)ortran語(yǔ)言的易學(xué)性和易用性是公認(rèn)的。1.1Fortran起源Fortran是英語(yǔ)中“公式(Formula)”和“翻譯(Translation)”兩個(gè)單詞取前幾個(gè)字母的縮寫(xiě)形式,意即“公式翻譯”。Fortran主要面向科學(xué)研究、工程設(shè)計(jì)或企事業(yè)管理中經(jīng)常遇到的能夠用數(shù)學(xué)公式表達(dá)的數(shù)值計(jì)算問(wèn)題。因?yàn)榭梢韵癯瓕?xiě)教科書(shū)裏的公式一樣書(shū)寫(xiě)數(shù)學(xué)運(yùn)算式,它比用英文書(shū)寫(xiě)的自然語(yǔ)言更接近數(shù)學(xué)語(yǔ)言。這使得Fortran在科研工作者和工程技術(shù)人員中擁有龐大的使用人群。Fortran語(yǔ)言是第一個(gè)被正式推廣的高級(jí)電腦語(yǔ)言。在四十多年的發(fā)展歷程中,它始終是數(shù)值計(jì)算領(lǐng)域所使用的主要語(yǔ)言。本小節(jié)主要介紹Fortran的起源。第一代Fortran語(yǔ)言是在1954年提出來(lái)的,稱為FortranI。它於1957年在IBM704電腦上得以實(shí)現(xiàn)。其開(kāi)發(fā)者巴科斯的目標(biāo)是開(kāi)發(fā)一種容易理解、簡(jiǎn)單易學(xué)又幾乎能像組合語(yǔ)言一樣高效運(yùn)行的電腦語(yǔ)言,他和他的團(tuán)隊(duì)在這一點(diǎn)上取得了極大的成功。但是這一計(jì)畫(huà)在最初階段並不被人們看好,這其中包括巴克斯的上司馮·諾依曼。1.2Windows下Fortran編譯器使用由於Windows操作系統(tǒng)有著龐大的用戶群體,因此Windows系統(tǒng)下的編譯器開(kāi)發(fā)非?;钴S。目前市場(chǎng)上常見(jiàn)的Fortran編譯器包括VisualFortran系列、Salford的FTN系列、G95/gFortran的Windows版本、Absoft公司的AbsoftFortran,Macrovision公司的PGIVisualFortran等。這其中,影響較大、功能較全、性能較好、應(yīng)用最廣泛的Fortran編譯器提供了集成開(kāi)發(fā)環(huán)境的VisualFortran系列。VisualFortran系列編譯器起源於微軟公司開(kāi)發(fā)的FortranPowerStation4.0編譯系統(tǒng)。該系統(tǒng)結(jié)合了當(dāng)時(shí)微軟最新開(kāi)發(fā)的DevelopStudio集成開(kāi)發(fā)環(huán)境(IDE),使得Fortran程式的開(kāi)發(fā)方式跟上了時(shí)代的潮流。但是該編譯系統(tǒng)在實(shí)際使用中出現(xiàn)的問(wèn)題較多,例如沒(méi)有嚴(yán)格的數(shù)組越界檢查功能等。這套工具隨後被賣給了數(shù)字設(shè)備(DEC)公司繼續(xù)開(kāi)發(fā),隨後產(chǎn)生了一個(gè)曾經(jīng)非常流行的Fortran編譯器系統(tǒng)。1.2.1安裝CompaqVisualFortranCompaqVisualFortran的安裝過(guò)程比較簡(jiǎn)單。用戶將安裝光碟放入CD-ROM後,電腦會(huì)自動(dòng)運(yùn)行光碟中的安裝程式。【SelectFolder】對(duì)話框安裝歡迎介面1.2.2創(chuàng)建第一個(gè)Fortran工程CompaqVisualFortran的圖形用戶介面直接使用了微軟公司的DevelopStudio6.0集成開(kāi)發(fā)環(huán)境,極大地方便了程式的編寫(xiě)、調(diào)試和修改。在圖形介面下,編寫(xiě)、調(diào)試一個(gè)Fortran程式首先需要?jiǎng)?chuàng)建一個(gè)DeveloperStudio工程。1.2.3在Fortran工程中添加源代碼完成工程的基本設(shè)置之後,就可以向Fortran工程添加用戶編寫(xiě)的源代碼了。向Fortran工程中添加源代碼可以參照下麵的步驟來(lái)進(jìn)行操作。1.2.4在Fortran工程中新建原始檔案除了添加已有的源代碼來(lái)對(duì)工程進(jìn)行填充外,還可以在工程中創(chuàng)建新的源代碼檔。在工程中創(chuàng)建新的源代碼檔有兩種方式可供選擇。下麵的圖示演示了第一種操作方法。1.2.5在CompaqVisualFortran中編譯原始檔案在CompaqVisualFortran中有兩種編譯模式可供選擇:一種是Debug模式(編譯出來(lái)的程式姑且稱作調(diào)試版本);另一種是Release模式(編譯出來(lái)的程式姑且稱作發(fā)行版本)。同一個(gè)源代碼經(jīng)過(guò)這兩種編譯模式編譯出來(lái)的程式在執(zhí)行效率和文件大小上都有很大區(qū)別:編譯程序在Debug模式下會(huì)向生成的可執(zhí)行檔寫(xiě)入很多調(diào)試資訊和控制語(yǔ)句,因此編譯出來(lái)的可執(zhí)行檔“個(gè)頭大”、“跑得慢”。在Release模式下,編譯程序只會(huì)將源代碼中的有效語(yǔ)句編譯成可執(zhí)行檔,因此編譯出來(lái)的可執(zhí)行檔“個(gè)頭小”、“跑得快”。1.3Linux下常見(jiàn)Fortran編譯器作為開(kāi)源的操作系統(tǒng),Linux因其較好的安全特性也擁有較多的使用人群,特別是一些資質(zhì)較深的電腦愛(ài)好者。在Linux系統(tǒng)下,常見(jiàn)的Fortran編譯器包括GNU的Fortran77編譯器G77、GNU的Fortran95編譯器gFortran和G95、Intel公司開(kāi)發(fā)的IntelFortranCompiler等。這裏主要介紹gFortran和G95的基本用法。在Linux系統(tǒng)下安裝Fortran編譯器需要在控制臺(tái)窗口中進(jìn)行。以G95編譯器的安裝為例,首先打開(kāi)一個(gè)控制臺(tái)窗口,並進(jìn)入到想要安裝G95編譯器的檔夾中。接下來(lái)運(yùn)行如下命令即可:wget-O-/g95-x86-linux.tgz|tarxvfz-ln-s$PWD/g95-install/bin/i686-pc-linux-gnu-g95/usr/bin/g951.4常見(jiàn)編譯器性能比較各個(gè)編譯器由於實(shí)現(xiàn)的方式有所區(qū)別,因此實(shí)際編譯出的執(zhí)行程式也有區(qū)別。這種區(qū)別主要體現(xiàn)在可執(zhí)行程式的大小、程式的運(yùn)行速度、編譯所花費(fèi)的時(shí)間等方面。本節(jié)主要給出Windows操作系統(tǒng)下,一些常見(jiàn)編譯器的性能比較。程式員可以以此為參考,在軟體開(kāi)發(fā)時(shí)選擇合適的編譯器版本。編譯器名稱和版本號(hào)廠商或組織編譯器名稱版本號(hào)AbsoftAbsoftProFortran95,簡(jiǎn)稱APF958.0CompaqCompaqVisualFortran,簡(jiǎn)稱CVF6.6CSalfordSalfordFTN77,簡(jiǎn)稱FTN774.02SalfordSalfordFTN95,簡(jiǎn)稱FTN953.4.1605GNUG773.220020907IntelIntelFortranCompiler,簡(jiǎn)稱IFC10.1LaheyLahey/FujitsuLF95,簡(jiǎn)稱LF957.2N.A.SoftwareN.A.SoftwareFortranPlus,簡(jiǎn)稱NAS2.21.5常用編輯器通常,編譯器廠商為了用戶更方便使用,會(huì)隨同編譯器為用戶提供簡(jiǎn)單的編輯器來(lái)書(shū)寫(xiě)源代碼。例如,CompaqVisualFortran借用了微軟的DevelopStudio6.0集成開(kāi)發(fā)環(huán)境。IntelVisualFortran雖然沒(méi)有集成可視化開(kāi)發(fā)環(huán)境,但它可以嵌入到DevelopStudio.NET集成開(kāi)發(fā)環(huán)境中。不過(guò)對(duì)於某些用戶而言,他們更習(xí)慣使用獨(dú)立的編輯器來(lái)進(jìn)行源代碼的編輯,而在命令行模式下對(duì)源代碼進(jìn)行編譯調(diào)試。獨(dú)立的源代碼編輯器大多也能用於普通文本的編輯。很多程式設(shè)計(jì)語(yǔ)言的源代碼檔同普通文本檔的差別僅僅是檔的擴(kuò)展名不同而已。本文主要介艸S玫囊恍Fortran源代碼編輯器和基本的使用方法。1.5.1UltraEditUltraEdit軟體是IDMComputerSolutions公司開(kāi)發(fā)的一款性能優(yōu)秀、功能強(qiáng)大的文本編輯器,能夠用於編寫(xiě)多種進(jìn)制格式的文本檔和各種程式設(shè)計(jì)語(yǔ)言的源代碼(如C、C++、JAVA、HTML等)。該編輯器配合自定義的語(yǔ)言配置檔,可以實(shí)現(xiàn)指定程式設(shè)計(jì)語(yǔ)言的語(yǔ)法高亮、代碼折疊、自動(dòng)縮進(jìn)和補(bǔ)位、代碼自動(dòng)補(bǔ)全、列操作模式等功能。本小節(jié)主要介紹UltraEdit文本編輯器的基本用法。在講解UltraEdit的用法前,建議首先用保存在本書(shū)配套光碟/Tools/IDM檔夾中的wordfile.txt文本檔替換掉UltraEdit安裝目錄中的對(duì)應(yīng)檔。光碟中的wordfile.txt文本檔已經(jīng)由作者添加了Fortran語(yǔ)言的語(yǔ)法定義模組,收集了盡可能全的Fortran語(yǔ)句、內(nèi)部函數(shù)、運(yùn)算符、關(guān)鍵字等資訊,添加了代碼折疊、縮進(jìn)和補(bǔ)位的定義,能夠?qū)崿F(xiàn)語(yǔ)法關(guān)鍵字的高亮顯示、源代碼折疊、自動(dòng)縮進(jìn)和補(bǔ)位等功能。在完成了語(yǔ)法配置檔的替換之後,就可以按照下圖所示的步驟學(xué)習(xí)應(yīng)用UltraEdit軟體進(jìn)行Fortran源代碼編輯的過(guò)程。1.5.2ZionEditZionEdit是一款定位於Windows平臺(tái)下的開(kāi)源源代碼編輯器。軟體作者的開(kāi)發(fā)目標(biāo)就是打造一個(gè)方便易用的源代碼編輯環(huán)境。ZionEdit的體積小巧、功能完善、介面友好,是不可多得的開(kāi)源源代碼編輯器。目前該軟體的最新版本為1.0.35版。這款編輯器同樣支持多種程式設(shè)計(jì)語(yǔ)言,能夠定制語(yǔ)法高亮方案。特別是列編輯模式,能夠方便的實(shí)現(xiàn)大段代碼的整體注釋。讀者可以在軟體作者的主頁(yè)中獲取相關(guān)的軟體。1.5.2gEditgEdit是Linux系統(tǒng)下常用的一款文本編輯器。該編輯器體積不大、功能較為完善,能夠支持語(yǔ)法自動(dòng)高亮和自動(dòng)保存。最主要的是該軟體的使用較為簡(jiǎn)單,很容易上手。對(duì)於一些對(duì)功能要求不多、對(duì)操作的簡(jiǎn)易性較高的用戶而言,是替代那些功能完善、操作複雜的專業(yè)軟體,如Emacs、Vim等的不二之選。需要注意的是,gEdit只能運(yùn)行在Linux的圖形用戶介面下,在字元模式下則不能正常運(yùn)行。如果想在字元模式下進(jìn)行Fortran源代碼的編輯,建議學(xué)習(xí)Emacs、Vim等不需要圖形環(huán)境的文本編輯器。2.1程式書(shū)寫(xiě)格式在1.6小節(jié)中,程式HELLO已經(jīng)展示了Fortran的一種源代碼書(shū)寫(xiě)格式,即自由格式(FreeFormat),這種格式是Fortran90/95標(biāo)準(zhǔn)中的一大特色。同F(xiàn)ortran77標(biāo)準(zhǔn)中的舊格式,即固定格式(FixedFormat)相比,取消了在源代碼書(shū)寫(xiě)上的諸多限制,程式編制起來(lái)更為靈活。兩種格式書(shū)寫(xiě)的源代碼通過(guò)檔擴(kuò)展名來(lái)進(jìn)行區(qū)別。2.1.1固定格式(FixedFormat)採(cǎi)用固定格式書(shū)寫(xiě)的Fortran源代碼,檔擴(kuò)展名為*.F或*.FOR。在固定格式中,F(xiàn)ortran標(biāo)準(zhǔn)規(guī)定了若干個(gè)列範(fàn)圍。每一個(gè)列範(fàn)圍都有自己的用途和約定,程式必須嚴(yán)格按照這些約定進(jìn)行編寫(xiě)。2.1.2自由格式(FreeFormat)採(cǎi)用自由格式書(shū)寫(xiě)的Fortran源代碼,檔擴(kuò)展名為*.F90。自由格式是Fortran90標(biāo)準(zhǔn)中的一大特色,廢除了固定格式中的許多限制。它並不規(guī)定程式代碼中每一行第幾列字元的具體作用,在源代碼的編寫(xiě)上顯得相當(dāng)自由。同固定格式相比,自由格式主要在以下幾個(gè)方面進(jìn)行了改進(jìn)。行的定義。在自由格式中每行可以書(shū)寫(xiě)132個(gè)字元。程式語(yǔ)句的位置沒(méi)有了只能從第7列後開(kāi)始書(shū)寫(xiě)的固定約定,可以在任意一列開(kāi)始書(shū)寫(xiě)。同一行中可以順序書(shū)寫(xiě)多條程式語(yǔ)句,語(yǔ)句之間用分號(hào)“;”進(jìn)行分隔。注釋行的定義。在自由格式中,驚嘆號(hào)“!”後的字元均被視為注釋。但是,字串中的“!”出外,如“PRINT*,‘Hello!Fortran90/95’”中,“Fortran90/95’”不會(huì)被認(rèn)為是注釋。續(xù)行的定義。在Fortran90/95標(biāo)準(zhǔn)中規(guī)定,當(dāng)程式代碼中的一行超過(guò)132個(gè)字元時(shí),至多可以有39個(gè)續(xù)行。續(xù)行標(biāo)誌固定為“&”。當(dāng)一行代碼的最後一個(gè)字元為“&”時(shí),則表示下一行與本行接續(xù);當(dāng)一行代碼的第一個(gè)字元為“&”時(shí),則表示本行與上一行接續(xù)。行號(hào)的定義。在Fortran90/95標(biāo)準(zhǔn)中規(guī)定,行號(hào)只需寫(xiě)在代碼行的最前面即可??崭竦膽?yīng)用。Fortran90/95標(biāo)準(zhǔn)中規(guī)定,語(yǔ)句和變數(shù)名中間不能有空格。例如,關(guān)係運(yùn)算符“==”不能寫(xiě)成“==”;“ABS(-2.0)”與“AB□S(-□2.0)”作用不再相同,“AB□S(-□2.0)”不能正常通過(guò)編譯。2.1.3兼顧兩種格式的代碼寫(xiě)法由於現(xiàn)存大量舊的Fortran代碼(Fortran77程式)都是採(cǎi)用固定格式編寫(xiě)的,在一些編譯器上可能會(huì)由於格式的問(wèn)題而出現(xiàn)編譯錯(cuò)誤。因此,有必要提供一種能夠兼顧兩種格式的代碼寫(xiě)法,以便於將固定格式的代碼轉(zhuǎn)換為符合自由格式要求的代碼。能夠兼顧兩種格式的代碼在書(shū)寫(xiě)時(shí)需要注意的要點(diǎn)有以下幾條:開(kāi)始列。除注釋行外的每一行代碼只能從第7列開(kāi)始編寫(xiě)。這主要是由於自由格式中並沒(méi)有規(guī)定代碼編寫(xiě)的起始列,因此可以套用固定格式的規(guī)定。注釋行。標(biāo)明注釋行的符號(hào)只能用感嘆號(hào)“!”,並且應(yīng)該寫(xiě)在第一列。注釋行必須單獨(dú)占一行,不能出現(xiàn)其他語(yǔ)句的行尾。續(xù)行方式。續(xù)行標(biāo)誌只能使用符號(hào)“&”。在接續(xù)的兩行中,前一行應(yīng)該在72列後、132列前添加續(xù)行標(biāo)誌;後一行則應(yīng)該在第6列書(shū)寫(xiě)續(xù)行標(biāo)誌??崭袷褂?。在Fortran90/95標(biāo)準(zhǔn)中,語(yǔ)句和變數(shù)中間不允許出現(xiàn)空格。因此,兼顧兩種格式的源代碼中也不允許在語(yǔ)句和變數(shù)中出現(xiàn)空格。2.2字元集“字元集”是指能夠用於編寫(xiě)Fortran程式的所有字元及符號(hào)。不是所有的外文字母或數(shù)字符號(hào)都能被某一高級(jí)電腦語(yǔ)言接受,每一種高級(jí)電腦語(yǔ)言都會(huì)規(guī)定它所能使用的字元。Fortran中允許使用的基本字元主要分為兩大類:文字字元和特殊字元。文字字元主要包括26個(gè)英文字母、10個(gè)自然數(shù)字和下劃線。如表所示。2.3空格的使用在Fortran90/95標(biāo)準(zhǔn)中,空格不能出現(xiàn)在語(yǔ)句和變數(shù)名中間;除了在字串常量或是輸入輸出中外,不代表任何具體意義。其主要作用是分隔語(yǔ)句和變數(shù),使代碼更為易讀。在國(guó)外的一些科學(xué)研究和工程設(shè)計(jì)機(jī)構(gòu),如美國(guó)航空航天局(NASA)等,在開(kāi)發(fā)科學(xué)計(jì)算程式時(shí)對(duì)空格的使用有一些很好的規(guī)定。在程式中要確保不在Fortran定義的語(yǔ)句或變數(shù)名中出現(xiàn)空格,不要嘗試通過(guò)空格來(lái)對(duì)變數(shù)名進(jìn)行區(qū)別;在編寫(xiě)公式時(shí),儘量通過(guò)空格來(lái)使公式的書(shū)寫(xiě)和閱讀更為清晰易懂;在編寫(xiě)大段代碼時(shí),可以使用整行的空格來(lái)對(duì)代碼段進(jìn)行功能劃分。建議在編寫(xiě)程式時(shí),儘量遵守這些規(guī)定。下麵來(lái)看一段使用空格來(lái)確分四則運(yùn)算的實(shí)例,先給出不使用空格進(jìn)行區(qū)分的範(fàn)例:Y=X+A*B/C-(0.5+C*D)**22.4注釋格式儘管注釋在編譯過(guò)程中是一定會(huì)被編譯器忽略的,但卻是源代碼檔中十分重要的一部分。因?yàn)樽⑨屖潜WC源代碼具有可讀性的一個(gè)非常重要的手段。在不同的高級(jí)電腦語(yǔ)言中,表示注釋的方法各有不同,甚至在一種語(yǔ)言裏,也可能有幾種引入注釋的方法。不同的注釋方法各有優(yōu)缺點(diǎn),在使用中應(yīng)該根據(jù)實(shí)際情況進(jìn)行選擇。在C語(yǔ)言程式中,需要使用“/*”和“*/”這樣的特殊標(biāo)記來(lái)界定注釋的內(nèi)容而不管行邊界。採(cǎi)用這種方式進(jìn)行注釋時(shí)經(jīng)常出現(xiàn)的錯(cuò)誤就是漏掉結(jié)束的界定符,使得後面的語(yǔ)句也變成了注解;好處也很明顯,就是能夠方便的實(shí)現(xiàn)代碼的塊注釋。而Fortran95語(yǔ)言中的“!”,Ada語(yǔ)言中的“-”,或是C++語(yǔ)言中的“//”,注釋都是在行的任意位置開(kāi)始直到行的末尾結(jié)束。這種做法更為合理、不容易出錯(cuò),但要實(shí)現(xiàn)大段代碼的整體注釋就不是特別方便了。2.5命名方式在Fortran中為對(duì)象命名有一定的要求。簡(jiǎn)單的說(shuō),F(xiàn)ortran77的命名要求和Fortran90/95的命名要求是不同的。本節(jié)主要介紹不同標(biāo)準(zhǔn)下的命名方式。在Fortran77標(biāo)準(zhǔn)中,程式和變數(shù)等對(duì)象的名字是由不多於6個(gè)字元(包括英文字母A-Z、a-z和數(shù)字0-9)組成的字元段。同時(shí),對(duì)象名字的第1個(gè)字元必須是字母,名字的有效使用範(fàn)圍原則上僅限於一個(gè)程式單元之中(內(nèi)部過(guò)程除外)。下麵的代碼段演示了Fortran77標(biāo)準(zhǔn)的對(duì)象命名方式。INTEGER0B !錯(cuò)誤INTEGERC-10 !錯(cuò)誤REALsin !正確REALtest:real !錯(cuò)誤3.1輸入和輸出概述在Fortran語(yǔ)言中,數(shù)據(jù)的輸入輸出操作由相應(yīng)的輸入輸出語(yǔ)句來(lái)完成。輸入輸出語(yǔ)句負(fù)責(zé)向電腦說(shuō)明程式中哪些數(shù)據(jù)要進(jìn)行輸入輸出、輸入輸出數(shù)據(jù)的格式、在何種設(shè)備上進(jìn)行輸入輸出等問(wèn)題。Fortran中的輸入輸出方式主要有以下三種:按用戶指定的格式進(jìn)行輸入輸出;按系統(tǒng)隱含的標(biāo)準(zhǔn)格式輸入輸出(也稱為表控輸入輸出、直接列表輸入輸出);無(wú)格式的輸入輸出。3.2簡(jiǎn)單輸出語(yǔ)句簡(jiǎn)單輸出語(yǔ)句主要是指表控輸出,即表控格式(ListDirectedFormat,也叫直接列表)輸出。在用這種格式進(jìn)行輸出時(shí),電腦系統(tǒng)會(huì)用隱含的輸出格式為每一種數(shù)據(jù)類型規(guī)定輸出的長(zhǎng)度和表示形式。例如,實(shí)數(shù)是用小數(shù)還是指數(shù)來(lái)表達(dá),小數(shù)位數(shù)有幾位等。在Fortran中沒(méi)有專用的表控輸出語(yǔ)句,表控輸出格式的輸出都是輸出語(yǔ)句的簡(jiǎn)化形式。具體來(lái)說(shuō),PRINT語(yǔ)句和WRITE語(yǔ)句都能夠進(jìn)行表控輸出。下麵分別對(duì)兩種語(yǔ)句的表控輸出用法進(jìn)行說(shuō)明。3.2.1PRINT語(yǔ)句的表控輸出PRINT語(yǔ)句是Fortran中較為常用的一種輸出語(yǔ)句,用它來(lái)完成表控輸出的語(yǔ)法格式如下所示。PRINT*[,輸出項(xiàng),……]在PRINT語(yǔ)句中不能指定輸出設(shè)備,只能向系統(tǒng)隱含指定的設(shè)備輸出數(shù)據(jù)(隱含指定的輸出設(shè)備一般是指電腦螢?zāi)唬?;語(yǔ)句中的星號(hào)“*”表示“表控格式輸出”,即按照電腦默認(rèn)的格式進(jìn)行數(shù)據(jù)的輸出;輸出項(xiàng)可以有多個(gè),每個(gè)輸出項(xiàng)之間用逗號(hào)“,”分隔;當(dāng)語(yǔ)句中沒(méi)有輸出項(xiàng)時(shí),命令將輸出一個(gè)空白行。3.2.2WRITE語(yǔ)句的表控輸出使用WRITE語(yǔ)句來(lái)完成表控輸出的語(yǔ)法格式如下所示。WRITE(*,*)[輸出項(xiàng),……]WRITE語(yǔ)句中第一個(gè)星號(hào)“*”表示在系統(tǒng)隱含指定的設(shè)備上輸出;WRITE語(yǔ)句中的第二個(gè)星號(hào)“*”表示“表控格式輸出”;輸出項(xiàng)可以有多個(gè),每個(gè)輸出項(xiàng)之間用逗號(hào)“,”分隔;當(dāng)語(yǔ)句中沒(méi)有輸出項(xiàng)時(shí),命令將輸出一個(gè)空白行。3.2.3表控輸出的特點(diǎn)從上面兩個(gè)例子中可以發(fā)現(xiàn)表控輸出的一些特點(diǎn)。如果輸出的是整數(shù),系統(tǒng)會(huì)自動(dòng)為每個(gè)整數(shù)分配11列,當(dāng)要輸出的數(shù)據(jù)位數(shù)不夠時(shí),左端以空格補(bǔ)齊。在輸出實(shí)數(shù)時(shí),給每個(gè)實(shí)數(shù)分配的輸出長(zhǎng)度分為以下兩種情況。當(dāng)實(shí)數(shù)能夠用小數(shù)形式表達(dá)時(shí),分配8列,小數(shù)點(diǎn)前最多7位。如果小數(shù)點(diǎn)後有效位數(shù)不足,則用“0”補(bǔ)齊。如果實(shí)數(shù)只能用指數(shù)形式表達(dá)時(shí),則分配13列。其中,指數(shù)部分占4位,小數(shù)點(diǎn)後占7位。在輸出數(shù)組時(shí),數(shù)組元素會(huì)按照它在數(shù)組中存儲(chǔ)的先後順序依次輸出。在輸出字串時(shí),直接按照字串的實(shí)際長(zhǎng)度進(jìn)行輸出。用戶也可以在同一條PRINT語(yǔ)句或WRITE語(yǔ)句中輸出整數(shù)、實(shí)數(shù)和字串。示例如下。PRINT*,1000,1.414,“TwoNumbers”3.3簡(jiǎn)單輸入語(yǔ)句簡(jiǎn)單輸入語(yǔ)句主要是指表控輸入格式,又稱為自由格式輸入。這種輸入操作不需要用戶指定輸入數(shù)據(jù)的具體格式,只要將數(shù)據(jù)按其合法的形式依次輸入就可以了。數(shù)據(jù)之間以逗號(hào)“,”或空格間隔。Fortran中的表控輸入語(yǔ)句也是特定輸入語(yǔ)句的簡(jiǎn)化形式。READ語(yǔ)句能夠?qū)崿F(xiàn)表控輸入,其實(shí)現(xiàn)形式有兩種。下麵分別給出兩種形式的表控輸入語(yǔ)句。3.3.1READ語(yǔ)句的表控輸入形式一使用READ語(yǔ)句來(lái)完成表控輸入的語(yǔ)法形式如下所示。READ*[,輸入項(xiàng),……]在這種形式中,不能指定輸入設(shè)備,只能由系統(tǒng)隱含指定的設(shè)備上輸入(系統(tǒng)隱含指定的設(shè)備一般是指鍵盤);語(yǔ)句中的星號(hào)“*”表示“表控輸入”,即按照數(shù)據(jù)合法的格式進(jìn)行輸入;輸入項(xiàng)可以有多個(gè),每個(gè)輸出項(xiàng)之間用逗號(hào)“,”分隔;當(dāng)語(yǔ)句中沒(méi)有輸入項(xiàng)時(shí),系統(tǒng)將掛起程序的運(yùn)行直到用戶鍵入回車符。3.3.2READ語(yǔ)句的表控輸入形式二第二種形式的READ語(yǔ)句表控輸入的語(yǔ)法如下。READ(*,*)[輸入項(xiàng),……]語(yǔ)句中的第一個(gè)星號(hào)“*”表示“系統(tǒng)默認(rèn)的輸入設(shè)備”(一般指鍵盤);第二個(gè)星號(hào)“*”表示“表控輸入”;輸入項(xiàng)可以有多個(gè),每個(gè)輸出項(xiàng)之間用逗號(hào)“,”分隔;當(dāng)語(yǔ)句中沒(méi)有輸入項(xiàng)時(shí),系統(tǒng)將掛起程序的運(yùn)行直到用戶鍵入回車符。下麵用一個(gè)具體的代碼來(lái)演示表控輸入語(yǔ)句的應(yīng)用。這段代碼主要演示了第二種形式的READ語(yǔ)句表控輸入在程式的簡(jiǎn)單實(shí)現(xiàn)。TEST0305.F90!這是直接列表輸入語(yǔ)句READ的範(fàn)例PROGRAMTEST0305IMPLICITNONE!變數(shù)定義
REAL::A,BINTEGER::I,J!表控輸入
READ(*,*)A,BREAD(*,*)I,J!表控輸出
PRINT*,"Output:"PRINT*,A,BPRINT*,I,J
ENDPROGRAMTEST03054.1數(shù)值型常量及其類型數(shù)值型常量的值在程式運(yùn)行過(guò)程中不會(huì)發(fā)生改變,它們通常也被稱為常數(shù)。數(shù)值型常量包括整型常量、實(shí)型常量和複型常量。本節(jié)主要介紹數(shù)值型常量的類型和基本概念。4.1.1整型常量整型常量也稱為整型常數(shù)或整數(shù)。按照所需存儲(chǔ)空間的大小,又分為長(zhǎng)整型和短整型兩種。長(zhǎng)整型佔(zhàn)用4位元組的存儲(chǔ)空間,短整型則佔(zhàn)用2位元組的存儲(chǔ)空間。默認(rèn)情況下為長(zhǎng)整型。有些編譯器還提供額外的擴(kuò)展整型常量,如CompaqVisualFortran在x86及其相容機(jī)上額外提供佔(zhàn)用1位元組空間的整型常量;在OpenVMS、Tru64UNIX和Linux系統(tǒng)中還提供佔(zhàn)用8位元組空間的整型常量。由於存儲(chǔ)整型常量的記憶體單元容量是一定的,因此整數(shù)所能表達(dá)的範(fàn)圍是有限的。長(zhǎng)整型能夠存儲(chǔ)的數(shù)值範(fàn)圍為-231到231-1,即-2,147,483,648到2,147,483,647之間;短整型能夠存儲(chǔ)的數(shù)值範(fàn)圍為-215到215-1,即-32,768到32,767之間。整型常量可以包含正負(fù)號(hào),也可以不包含(此時(shí)默認(rèn)為正,即+2與2等價(jià))。在Fortran77標(biāo)準(zhǔn)中,常量?jī)?nèi)部的空格不起任何作用,如“123”與“1□2□3”等價(jià);但Fortran90/95標(biāo)準(zhǔn)中則不允許出現(xiàn)這種表達(dá)方式。4.1.2實(shí)型常量實(shí)型常量也稱為實(shí)型常數(shù)或?qū)崝?shù)。按照所需存儲(chǔ)空間的大小,實(shí)數(shù)分為單精確度和雙精度兩種。在實(shí)數(shù)的表達(dá)方式上,可以分為小數(shù)形式和指數(shù)形式兩種。下麵分別進(jìn)行說(shuō)明。1.實(shí)數(shù)的精度:單精確度實(shí)數(shù)佔(zhàn)用4位元組的存儲(chǔ)空間,有效位數(shù)6到7位;雙精度實(shí)數(shù)佔(zhàn)用8位元組的存儲(chǔ)空間,有效位數(shù)15到16位。2.實(shí)數(shù)的表達(dá)形式:當(dāng)以小數(shù)形式來(lái)表達(dá)實(shí)數(shù)時(shí),小數(shù)點(diǎn)的前面或後面可以不出現(xiàn)數(shù)字,但不允許小數(shù)點(diǎn)前後都不出現(xiàn)數(shù)字。例如,+10.4、-0.8、34.、.01等都是合法的。4.1.3複型常量複型常量也稱為複型常數(shù)或複數(shù)。按所需存儲(chǔ)空間的大小分為單精確度和雙精度兩種。複型常數(shù)是Fortran語(yǔ)言中特有的一種數(shù)據(jù)結(jié)構(gòu),能夠同時(shí)存儲(chǔ)複數(shù)的實(shí)部和虛部。在程式中,複型常數(shù)用一個(gè)括弧中的兩個(gè)實(shí)數(shù)來(lái)表示。第一個(gè)實(shí)數(shù)表示複數(shù)的實(shí)部,第二個(gè)實(shí)數(shù)表示複數(shù)的虛部。比如:(3.0,6.3)和(1.0E2,2.0E3)。在存儲(chǔ)的時(shí)候,複型常數(shù)會(huì)佔(zhàn)據(jù)兩個(gè)實(shí)數(shù)的存儲(chǔ)單元。因此,單精確度的複型常數(shù)佔(zhàn)用8位元組的存儲(chǔ)空間;雙精度的複型常數(shù)則需要佔(zhàn)用16位元組的存儲(chǔ)空間。CompaqVisualFortran在OpenVMS、Tru64UNIX和Linux系統(tǒng)中還提供佔(zhàn)用32位元組存儲(chǔ)空間的複型常量。複型常量中實(shí)部和虛部所表達(dá)的數(shù)的範(fàn)圍與同精度的實(shí)數(shù)是一致的。即單精確度時(shí)的數(shù)值範(fàn)圍為1.17549435E-38到3.40282347E38;雙精度時(shí)的數(shù)值範(fàn)圍為2.2250738585072013D-308到1.7976931348623158D308。4.1.4常量的存儲(chǔ)形式電腦在存儲(chǔ)上述三種不同類型的常數(shù)時(shí),並不區(qū)分?jǐn)?shù)據(jù)的具體形式,而是統(tǒng)一將數(shù)據(jù)轉(zhuǎn)化為二進(jìn)位的形式進(jìn)行存儲(chǔ)。在轉(zhuǎn)化的過(guò)程中,由於存儲(chǔ)空間是一定的,因此存儲(chǔ)實(shí)型常數(shù)時(shí)會(huì)產(chǎn)生存儲(chǔ)誤差的問(wèn)題,即電腦的截?cái)鄦?wèn)題。在CompaqVisualFortran安裝目錄的\DF98\BIN檔夾中有一個(gè)BITVIEWER程式可以查看各種數(shù)據(jù)在電腦中存儲(chǔ)的二進(jìn)位數(shù)據(jù)形式。通過(guò)它可以直觀的瞭解電腦中數(shù)據(jù)的存儲(chǔ)方式。軟體的圖形用戶介面如圖4.1所示,圖中最下麵一排的方框表示數(shù)據(jù)在電腦中的存儲(chǔ)空間;每一個(gè)方框只有兩個(gè)數(shù)值,即0和1;右側(cè)有多個(gè)選項(xiàng)可供選擇,用於表示數(shù)據(jù)所佔(zhàn)用的存儲(chǔ)空間。如4表示4位元組、2表示2位元組等。4.1.5符號(hào)常量在程式中有時(shí)會(huì)經(jīng)常用到同一個(gè)常數(shù)。如一些數(shù)學(xué)常數(shù)、物理常數(shù)等。如果每次都在程式中重複書(shū)寫(xiě)使用這些常數(shù)值,會(huì)顯得很繁瑣。Fortran允許用一個(gè)名字來(lái)對(duì)常量進(jìn)行命名。比如常見(jiàn)的用PI來(lái)代表圓周率3.1415926535。此時(shí)稱PI為“符號(hào)常量”或“符號(hào)常數(shù)”,即用符號(hào)來(lái)表示常量。在Fortran中,可以使用PARAMETER語(yǔ)句將一個(gè)符號(hào)聲明為常量。比如將PI聲明為常數(shù)3.1415926535,可以用如下的語(yǔ)句實(shí)現(xiàn):PARAMETER(PI=3.1415926535)4.2數(shù)值型變數(shù)及其類型數(shù)值型變數(shù)主要是指整型、實(shí)型、複型三種變數(shù)。系統(tǒng)會(huì)為程式中的每一個(gè)變數(shù)按照其類型開(kāi)闢一塊存儲(chǔ)單元,用於存儲(chǔ)變數(shù)的值。每一個(gè)變數(shù)都需要用一個(gè)名字(變數(shù)名)來(lái)識(shí)別,並且同一個(gè)程式單元內(nèi)不能用同一個(gè)變數(shù)名來(lái)命名不同的變數(shù)。本節(jié)主要介紹數(shù)值型變數(shù)的類型和基本概念。4.2.1數(shù)值型變數(shù)概述數(shù)值型變數(shù)的分類同數(shù)值型常量一樣。整型變數(shù)用來(lái)存儲(chǔ)整型常量,實(shí)型變數(shù)用來(lái)存儲(chǔ)實(shí)型常量,複型變數(shù)用來(lái)存儲(chǔ)複型常量。在存儲(chǔ)空間的分配上,同類型的變數(shù)與常量佔(zhàn)據(jù)相同的存儲(chǔ)空間。變數(shù)名的作用是識(shí)別程式中的變數(shù)。Fortran中的變數(shù)名命名有一定的規(guī)則,主要有以下幾條。變數(shù)名中只能包含26個(gè)英文字母和0~9十個(gè)數(shù)字;在Fortran90/95標(biāo)準(zhǔn)中,還允許使用下劃線“_”。變數(shù)名的第一個(gè)字元必須是字母,不能是下劃線“_”或數(shù)字。在Fortran77標(biāo)準(zhǔn)中,變數(shù)名不允許超過(guò)6個(gè)字元;在Fortran90/95標(biāo)準(zhǔn)中,變數(shù)名不允許超過(guò)31個(gè)字元。4.2.2使用系統(tǒng)默認(rèn)的隱含約定Fortran中約定:在沒(méi)有強(qiáng)制規(guī)定變數(shù)類型的情況下,如果變數(shù)名的首字母為I、J、K、L、M、N六個(gè)字母中的一個(gè)時(shí),即認(rèn)為該變數(shù)為整型變數(shù),而以其他字母開(kāi)頭的變數(shù)則默認(rèn)為實(shí)型變數(shù)。這就是所謂的“I-N規(guī)則”。“I-N規(guī)則”的使用有利有弊。好處就是不管在程式的什麼位置,如果想要臨時(shí)添加一個(gè)變數(shù),只要按照“I-N規(guī)則”的約定取好變數(shù)名就可以使用了;缺點(diǎn)也是明顯的,就是眾多隨意添加的變數(shù)使得程式閱讀起來(lái)不是很方便,更有可能造成人為錯(cuò)誤。比如下麵的代碼段就是一個(gè)典型的錯(cuò)誤範(fàn)例。TEST0401.F90!這是一個(gè)錯(cuò)誤的變數(shù)定義範(fàn)例PROGRAMTEST0401I=3000*3WRITE(*,*)lENDPROGRAMTEST04014.2.3使用類型說(shuō)明語(yǔ)句聲明如果不想受“I-N規(guī)則”的約束,或是防止出現(xiàn)“I-N”規(guī)則下的常見(jiàn)錯(cuò)誤,可以使用類型說(shuō)明語(yǔ)句對(duì)變數(shù)的類型進(jìn)行約定。在Fortran中,基本的類型說(shuō)明語(yǔ)句主要有六種。即INTEGER語(yǔ)句、REAL語(yǔ)句、DOUBLPRECISION語(yǔ)句、COMPLEX語(yǔ)句、LOGICAL語(yǔ)句和CHARACTER語(yǔ)句。數(shù)值型變數(shù)主要涉及到前四種語(yǔ)句。即INTEGER語(yǔ)句(整型說(shuō)明語(yǔ)句)、REAL語(yǔ)句(實(shí)型說(shuō)明語(yǔ)句)、DOUBLPRECISION語(yǔ)句(雙精度說(shuō)明語(yǔ)句)和COMPLEX語(yǔ)句(複型說(shuō)明語(yǔ)句)。類型聲明語(yǔ)句的語(yǔ)法形式如下:類型說(shuō)明語(yǔ)句[([KIND=]數(shù)字)][::]變數(shù)名[,變數(shù)名……]4.2.4用隱含說(shuō)明語(yǔ)句聲明除了上面提到的兩種變數(shù)類型說(shuō)明方法外,還可以用隱含說(shuō)明語(yǔ)句(IMPLICIT語(yǔ)句)將以某一字母開(kāi)頭的所有變數(shù)都聲明為同一種類型。該語(yǔ)句的語(yǔ)法形式如下:IMPLICIT類型說(shuō)明語(yǔ)句(字母列表)其中字母列表中的字母用逗號(hào)進(jìn)行間隔。如果是連續(xù)的一串字母,可以用首尾字母間加符號(hào)“-”的方式來(lái)進(jìn)行縮寫(xiě)。比如“C-H”。下麵的聲明代碼將以字母A-G和N開(kāi)頭的變數(shù)都聲明為整型:IMPLICITINTEGER::(A-G,N)4.2.5數(shù)值型變數(shù)聲明及其應(yīng)用在編寫(xiě)程式的過(guò)程中,顯式的聲明所有用到的變數(shù)是一種良好的編程習(xí)慣,建議在編寫(xiě)實(shí)際的應(yīng)用程式時(shí)使用“IMPLICITNONE”來(lái)進(jìn)行強(qiáng)制的變數(shù)類型檢查。凡是沒(méi)有進(jìn)行類型說(shuō)明的變數(shù),在編譯過(guò)程中都會(huì)被編譯器找出來(lái)。在三種類型規(guī)定方法中,以類型說(shuō)明語(yǔ)句的優(yōu)先順序最高,IMPLICIT語(yǔ)句次之,“I-N規(guī)則”的級(jí)別最低;類型說(shuō)明語(yǔ)句和IMPLICIT語(yǔ)句都是不可執(zhí)行語(yǔ)句,必須出現(xiàn)在本程式單元中所有可執(zhí)行語(yǔ)句之前;類型說(shuō)明語(yǔ)句只能在本程式單元內(nèi)有效;DOUBLEPRECISION語(yǔ)句在Fortran90/95標(biāo)準(zhǔn)完全可以用REAL(8)語(yǔ)句代替,目前已很少使用。4.3字元型常量及變數(shù)文字處理能力是Fortran語(yǔ)言的另一特色。早期Fortran77中的文字處理能力較弱,在Fortran90/95標(biāo)準(zhǔn)中的文字處理能力已經(jīng)大大加強(qiáng)。本節(jié)將介紹字元型常量和變數(shù)的基本概念。4.3.1字元型變數(shù)概述字元型常量也稱為字串,它是用引號(hào)(單引號(hào)或雙引號(hào),F(xiàn)ortran77中只允許用單引號(hào))括起來(lái)的若干個(gè)字元。字串中的字元可以是電腦系統(tǒng)中允許使用的任意字元,通常會(huì)大於Fortran字元集。比如字元型常量‘BEIJING’,”PLANE”,”#$@%&”,”北京”都是合法的。在電腦中,一個(gè)字元通常會(huì)佔(zhàn)據(jù)一個(gè)位元組的存儲(chǔ)空間;但某些語(yǔ)言的字元在計(jì)算中需要多個(gè)位元組的空間來(lái)存儲(chǔ)。比如,一個(gè)漢字在電腦上會(huì)佔(zhàn)據(jù)4位元組的存儲(chǔ)空間。字元型變數(shù)是用來(lái)存儲(chǔ)字元型常量的變數(shù),在程式中必須事先定義字元型變數(shù)才能使用。定義字元型常量可以使用CHARACTER語(yǔ)句,有四種定義字元型變數(shù)的語(yǔ)法形式,這些語(yǔ)法定義會(huì)在隨後的小節(jié)進(jìn)行介紹。4.3.2定義形式一聲明字元型變數(shù)的第一種語(yǔ)法形式如下。CHARACTER[::]變數(shù)名在這種形式的定義中,類型聲明語(yǔ)句CHARACTER說(shuō)明其後變數(shù)名所代表的變數(shù)為字元型變數(shù)。Fortran77和Fortran90/95中都可以採(cǎi)用這種形式進(jìn)行聲明。但需要注意,在Fortran77下不能出現(xiàn)分隔符號(hào)“:”。採(cǎi)用這種形式進(jìn)行聲明時(shí),允許對(duì)變數(shù)的長(zhǎng)度進(jìn)行說(shuō)明,說(shuō)明的方式有兩種:變數(shù)名*len或變數(shù)名(len)4.3.3定義形式二第二種聲明字元型變數(shù)的語(yǔ)法形式如下。CHARACTER([KIND=]n)[::]變數(shù)名在這種形式的聲明中,關(guān)鍵字KIND用於指出賦值號(hào)“=”後所跟的數(shù)字n為變數(shù)的種別參數(shù)(有關(guān)種別參數(shù)的內(nèi)容會(huì)在後面的小節(jié)進(jìn)行講解)。這個(gè)數(shù)字實(shí)際上就是說(shuō)明聲明語(yǔ)句中變數(shù)名所代表的變數(shù)的長(zhǎng)度的,意義同定義形式一中的len。採(cǎi)用這種形式也可以定義字元型數(shù)組。在實(shí)際的編程實(shí)踐中,也可以採(cǎi)用如下替代形式:CHARACTER([LEN=]n)[::]變數(shù)名4.3.4定義形式三第三種形式的字元型變數(shù)聲明的語(yǔ)法形式如下。CHARACTER*len[::]變數(shù)名在這種形式的聲明中,類型聲明語(yǔ)句後的星號(hào)“*”用於指明其後所跟的數(shù)字表示變數(shù)的長(zhǎng)度,意義和前面兩種定義形式中的差不多。這種形式的定義也可用於聲明字元型數(shù)組,形式如下:CHARACTER*len[::]變數(shù)名(dim)其中的dim用於說(shuō)明字元數(shù)組中的緯度的長(zhǎng),即長(zhǎng)度。下麵給出幾個(gè)實(shí)例。CHARACTER*20::StringCHARACTER*10::Array_string(20)4.3.5定義形式四在這種形式中,通過(guò)IMPLICIT語(yǔ)句來(lái)強(qiáng)迫使以某些字母開(kāi)頭的變數(shù)被默認(rèn)處理成字元型。語(yǔ)法形式如下:IMPLICITCHARACTER[*數(shù)字]字母表IMPLICITCHARACTER[(數(shù)字)]字母表Fortran77標(biāo)準(zhǔn)中通常採(cǎi)用前一種形式,F(xiàn)ortran90/95標(biāo)準(zhǔn)中通常採(cǎi)用後一種形式。定義中的數(shù)字表示字元型變數(shù)的長(zhǎng)度,即能夠存儲(chǔ)多少個(gè)字元。當(dāng)數(shù)字緊跟CHARACTER語(yǔ)句之後時(shí),表示統(tǒng)一指定字元長(zhǎng)度;當(dāng)數(shù)字緊跟變數(shù)名之後時(shí),表示單獨(dú)指定字元的長(zhǎng)度。如果統(tǒng)一指定的字元長(zhǎng)度與變數(shù)個(gè)別指定的長(zhǎng)度不一致時(shí),以個(gè)別指定優(yōu)先於統(tǒng)一指定。定義中括弧內(nèi)的部分可有可無(wú)。比如:IMPLICITCHARACTER(5)(G-N),CHARACTERX4.3.6字元型變數(shù)聲明及其應(yīng)用實(shí)際上,只要字元變數(shù)的長(zhǎng)度不為1,則可以將其看作數(shù)組來(lái)進(jìn)行理解。正因?yàn)槿绱耍趯?duì)字元型變數(shù)進(jìn)行操作時(shí),允許對(duì)字元型變數(shù)中的某一個(gè)或某幾個(gè)存儲(chǔ)位置上的數(shù)據(jù)進(jìn)行單獨(dú)操作。這在接下來(lái)的子字串的相關(guān)內(nèi)容中進(jìn)行講解。用PARAMETER語(yǔ)句配合CHARACTER語(yǔ)句還可以定義有名字元型常量,比如:CHARACTER(9)::NamePARAMETER(Name=‘PeterPan’)或CHARACTER(9),PARAMETER::Name=‘PeterPan’4.3.7子字串的概念在字元型數(shù)據(jù)的應(yīng)用上,還有一個(gè)子字串(Substring)的概念需要瞭解。所謂子字串是指字串的一部分。比如有一字串為“Beijing”,則“Bei”、“jing”、“ei”等都是該字串的子字串??梢杂孟曼I的形式來(lái)引用子字串:字串變數(shù)名([star]:[end])其中,star和end都是整型運(yùn)算式。他們指定了要引用的子字串在字串中的起始和終止位置。4.4邏輯型常量及變數(shù)邏輯量通常用於程式中的流程控制。在Fortran中,邏輯量主要有三種:邏輯常量、邏輯變數(shù)和關(guān)係運(yùn)算式。本小節(jié)主要介紹Fortran中邏輯常量和邏輯變數(shù)的基本概念和應(yīng)用。Fortran中的邏輯常量只有兩個(gè):TRUE,表示“真”,即滿足邏輯條件;FALSE,表示“假”,即不滿足邏輯條件。例如,當(dāng)A=0時(shí),此時(shí)“A<1”的值就為TRUE(真),而“A<-1”的值就為FALSE(假)。邏輯常量又稱為邏輯常數(shù),在程式中,它們通常被賦給一個(gè)邏輯變數(shù)。邏輯變數(shù)被用來(lái)存放邏輯常量,它的值只能是TRUE或FALSE中的一個(gè)。在程式中使用邏輯變數(shù)必須事先加以定義說(shuō)明。在Fortran中,邏輯變數(shù)的定義是通過(guò)LOGICAL語(yǔ)句來(lái)實(shí)現(xiàn)的。該語(yǔ)句的一般形式為:LOGICAL[([KIND=]數(shù)字)][::]變數(shù)名[,變數(shù)名]4.5變數(shù)的初始化變數(shù)在定義之後,通常會(huì)由系統(tǒng)按照自身設(shè)置為變數(shù)賦給一個(gè)初值。這一過(guò)程稱為變數(shù)的初始化。但是有些系統(tǒng)並不提供這種功能。如果貿(mào)然使用沒(méi)有經(jīng)過(guò)初始化的變數(shù),很可能導(dǎo)致程式運(yùn)行出錯(cuò)。在Fortran中,允許在聲明變數(shù)的同時(shí)設(shè)置變數(shù)的初置。在Fortran90/95中要設(shè)置變數(shù)的初置,可以將想要設(shè)置的初值直接寫(xiě)在聲明的變數(shù)之後。使用這種方法進(jìn)行初值的設(shè)置時(shí),聲明中的兩個(gè)冒號(hào)不能省略。4.6賦值語(yǔ)句變數(shù)在聲明後就可以使用了,在使用過(guò)程中,變數(shù)需要保存不同的數(shù)據(jù)。將數(shù)據(jù)的值寫(xiě)進(jìn)變數(shù)的過(guò)程就是賦值的過(guò)程。在Fortran語(yǔ)言中,除了一些專用的特殊語(yǔ)句外,最常用的賦值手段就是賦值語(yǔ)句。賦值語(yǔ)句就是等號(hào)“=”,在Fortran中有著廣泛的用途。本節(jié)就將介紹賦值的概念和賦值語(yǔ)句的作用。4.6.1何為賦值所謂賦值,就是將一個(gè)常量的值傳輸給一個(gè)相應(yīng)的變數(shù)。在Fortran中,賦值除了通過(guò)DATA語(yǔ)句之外,還可以使用賦值語(yǔ)句來(lái)實(shí)現(xiàn),並且賦值語(yǔ)句具有比DATA語(yǔ)句更廣泛的用途。賦值語(yǔ)句的作用就是將一個(gè)確定的值賦給一個(gè)變數(shù),語(yǔ)句的一般格式為:V=P其中,運(yùn)算式中的等號(hào)“=”就是賦值符;V代表一個(gè)變數(shù)名,P代表一個(gè)運(yùn)算式。Fortran的賦值語(yǔ)句有三種類型:算術(shù)賦值語(yǔ)句、邏輯賦值語(yǔ)句和字元賦值語(yǔ)句。算術(shù)賦值語(yǔ)句的作用是將一個(gè)算術(shù)量賦予一個(gè)算術(shù)型變數(shù);邏輯賦值語(yǔ)句的作用是將一個(gè)邏輯量賦給一個(gè)邏輯性變數(shù);字元賦值語(yǔ)句的作用就是將一個(gè)字元型數(shù)據(jù)賦給一個(gè)字元型變數(shù)。儘管用途不一樣,但是三種賦值語(yǔ)句採(cǎi)用的都是同樣的運(yùn)算符號(hào),即賦值符“=”。賦值語(yǔ)句中的“=”號(hào)是賦值符,而不是等號(hào)。賦值符的作用是將賦值符右邊運(yùn)算式的值傳遞給賦值符左邊的變數(shù)。例如,賦值語(yǔ)句“X=3.0”的作用是將數(shù)值3.0傳遞到變數(shù)X中。因此,在閱讀程式代碼時(shí)對(duì)賦值符的理解應(yīng)是帶方向的,即將什麼數(shù)據(jù)賦值給什麼變數(shù)。5.1種別概述種別是一個(gè)全新的程式設(shè)計(jì)概念。通過(guò)它,程式員可以更靈活的控制程式所佔(zhàn)用的存儲(chǔ)空間。本節(jié)將對(duì)種別的一些基本概念進(jìn)行介紹。5.1.1種別的概念種別是Fortran90/95標(biāo)準(zhǔn)中才開(kāi)始引入的一種表示數(shù)據(jù)大小和精度的概念。引入種別的概念後,F(xiàn)ortran中的數(shù)據(jù),不僅僅有一個(gè)類型所屬,並且同一類型下還可進(jìn)一步分出若干個(gè)種別。種別數(shù)值的大小確定了該類型數(shù)據(jù)實(shí)際的大小範(fàn)圍和存儲(chǔ)精度。這就好比動(dòng)物學(xué)中的分類,在貓科動(dòng)物這一大的類型之下,還有老虎、獵豹、家貓等的進(jìn)一步劃分,它們的個(gè)頭會(huì)有很大差異。有了種別說(shuō)明之後,電腦程式會(huì)更容易在不同硬體和軟體平臺(tái)間進(jìn)行移植。由於目前的電腦系統(tǒng)並不統(tǒng)一,多種體系平臺(tái)的現(xiàn)象依然客觀存在。在不同的平臺(tái)上,同種類型的變數(shù)可能規(guī)定了不同的精度範(fàn)圍。因此,在某種電腦上正確運(yùn)行的程式在另一種電腦上運(yùn)行時(shí)就有可能出現(xiàn)溢出等現(xiàn)象。有了數(shù)據(jù)的種別屬性之後,就可以有效避免這種情況的發(fā)生。5.1.2種別的使用在變數(shù)聲明中,種別由種別說(shuō)明符進(jìn)行說(shuō)明。帶種別說(shuō)明符的類型說(shuō)明語(yǔ)句的基本語(yǔ)法形式如下:類型說(shuō)明([KIND=]種別值)[::]變數(shù)名列表種別說(shuō)明符寫(xiě)在類型說(shuō)明語(yǔ)句後的括弧內(nèi),由關(guān)鍵字KIND,賦值號(hào)“=”以及種別值組成。其中,關(guān)鍵字KIND和賦值號(hào)“=”可以省略。例如程式中要說(shuō)明一個(gè)實(shí)型變數(shù)A,種別值為4;一個(gè)字元型變數(shù)C,種別值為10;一個(gè)整型變數(shù)K,種別值為8。那麼可以用下麵的代碼來(lái)進(jìn)行聲明:REAL(KIND=4)::ACHARACTER(KIND=10)::CINTEGER(KIND=8)::K5.2種別值和種別函數(shù)前面已經(jīng)提到過(guò)了,由於Fortran國(guó)際標(biāo)準(zhǔn)中只是提出了數(shù)據(jù)的種別概念和定義,但並沒(méi)有規(guī)定統(tǒng)一的種別分類和相關(guān)的數(shù)值定義。這一現(xiàn)象是由於當(dāng)前電腦體系並不統(tǒng)一的現(xiàn)實(shí)造成的。因此,具體的種別值是由各個(gè)編譯器廠商自行確定的。本節(jié)主要介紹CompaqVisualFortran編譯系統(tǒng)中提供的幾類種別值。5.2.1整型數(shù)據(jù)的種別整型數(shù)據(jù)在CompaqVisualFortran中被劃分為4種種別,種別值即表示整型數(shù)據(jù)所占記憶體空間的位元組數(shù)n。表所示是CompaqVisualFortran中定義的幾種整型數(shù)據(jù)種別。整型數(shù)據(jù)的種別種別值n取值範(fà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晶片機(jī)型5.2.2實(shí)型數(shù)據(jù)的種別實(shí)型數(shù)據(jù)在CompaqVisualFortran中被劃分為3種種別。在Fortran90/95標(biāo)準(zhǔn)中並沒(méi)有明確規(guī)定實(shí)型數(shù)據(jù)中指數(shù)的允許範(fàn)圍和有效位數(shù),表中的數(shù)據(jù)僅適用於CompaqVisualFortran。實(shí)型數(shù)據(jù)的種別種別值取值範(fàn)圍備註REAL([KIND=]4)或REAL*410-38
到1038,7位有效數(shù)字缺省值REAL([KIND=]8)或REAL*810-308
到10308,15位有效數(shù)字等價(jià)於雙精度型DOUBLEPRECISIONREAL([KIND=]16)或REAL*16
僅用於OpenVMS、Tru64UNIX、Linux操作系統(tǒng)5.2.3複型數(shù)據(jù)的種別複型數(shù)據(jù)在CompaqVisualFortran中被劃分為3種種別,如表所示。每種表示實(shí)型數(shù)據(jù)的方法都可以用來(lái)表示複型數(shù)據(jù)的實(shí)部和虛部,數(shù)據(jù)的取值範(fàn)圍可以參考前一小節(jié)。需要注意的是簡(jiǎn)寫(xiě)寫(xiě)法與完整寫(xiě)法之間的差別。複型數(shù)據(jù)的種別種別值備註COMPLEX([KIND=]4)或COMPLEX*8缺省值COMPLEX([KIND=]8)或COMPLEX*16等價(jià)於雙精度複型DOUBLECOMPLEXCOMPLEX([KIND=]16)或COMPLEX*32僅用於OpenVMS、Tru64UNIX、Linux操作系統(tǒng)5.2.4邏輯型數(shù)據(jù)的種別邏輯型數(shù)據(jù)在CompaqVisualFortran中被劃分為4種種別,如表所示。由於邏輯型數(shù)據(jù)只有兩種,即TRUE(真)和FALSE(假),因此不管具體是何種種別,使用上並無(wú)太大區(qū)別。筆者的習(xí)慣是,使用邏輯型數(shù)據(jù)時(shí)採(cǎi)用其默認(rèn)的種別值即可,如果想進(jìn)一步節(jié)省記憶體,還可以使用種別值為1的邏輯型數(shù)據(jù)。邏輯型數(shù)據(jù)的種別種別值備註LOGICAL([KIND=]1)orLOGICAL*1
LOGICAL([KIND=]2)orLOGICAL*2
LOGICAL([KIND=]4)orLOGICAL*4缺省值LOGICAL([KIND=]8)orLOGICAL*8僅用於Alpha晶片機(jī)型5.2.5字元型數(shù)據(jù)的種別字元型數(shù)據(jù)在CompaqVisualFortran中只有1種種別,種別值的大小為1。除了上述5種基本數(shù)據(jù)類型外,CompaqVisualFortran中還提供了一種位元組型數(shù)據(jù)BYTE。該類型的數(shù)據(jù)只佔(zhàn)用一個(gè)位元組的存儲(chǔ)空間,等價(jià)於INTEGER([KIND=]1)。5.2.6種別函數(shù)儘管沒(méi)有統(tǒng)一的標(biāo)準(zhǔn)來(lái)規(guī)定種別的具體分類和數(shù)值,但是Fortran90/95中提供了用於查詢和選擇種別值的內(nèi)部函數(shù)。下麵分別介紹這些函數(shù)和它們的用途。1.KIND函數(shù):KIND函數(shù)用於查詢變數(shù)所屬的種別,函數(shù)的原型為:C=KIND(X)。2.SELECTED_REAL_KIND函數(shù):SELECTED_REAL_KIND函數(shù)返回與實(shí)型變數(shù)的取值範(fàn)圍和存儲(chǔ)精度相一致的種別參數(shù),函數(shù)的原型為:C=SELECTED_REAL_KIND([p][,r])。3.SELECTED_INT_KIND函數(shù):SELECTED_INT_KIND函數(shù)返回與整型變數(shù)的取值範(fàn)圍相一致的種別參數(shù),函數(shù)的原型為:C=SELECTED_INT_KIND([m])。其中,整型參數(shù)m用來(lái)指出所需要的取值範(fàn)圍在-10m到10m之間。5.3常數(shù)種別和進(jìn)制變數(shù)的種別可以在變數(shù)聲明的過(guò)程中通過(guò)類型說(shuō)明語(yǔ)句進(jìn)行說(shuō)明,那麼常數(shù)是否也有種別之分呢?答案是肯定的。既然變數(shù)有種別之分,那麼用於給變數(shù)賦值的常數(shù)自然也有種別之分。種別值較?。ㄒ簿褪侨≈倒?fàn)圍較小、數(shù)據(jù)精度較低)的常數(shù)在賦值給種別值較高的變數(shù)時(shí),不會(huì)有什麼問(wèn)題;但是反過(guò)來(lái)將種別值較高的常數(shù)賦值給種別值較低的變數(shù)時(shí)就會(huì)出現(xiàn)問(wèn)題,如丟失數(shù)據(jù)精度等。本節(jié)主要介紹如何對(duì)程式中出現(xiàn)的常數(shù)進(jìn)行種別的表明。5.3.1非字元型常數(shù)的種別說(shuō)明對(duì)於數(shù)值型或邏輯型常數(shù)這類非字元型常數(shù)來(lái)說(shuō),可以使用後輟法來(lái)表示數(shù)據(jù)所屬的種別。尾碼法在常數(shù)數(shù)值後面加上一道下劃線“_”,然後再跟上具體的種別值。對(duì)於實(shí)型常數(shù),如果數(shù)據(jù)指數(shù)部分的字母是D時(shí),禁止使用種別值進(jìn)行說(shuō)明。因?yàn)樽帜窪表示該數(shù)據(jù)已經(jīng)是實(shí)型數(shù)據(jù)的最高種別,種別值為8,即雙精度實(shí)數(shù)。對(duì)於複型常數(shù),如果數(shù)據(jù)的實(shí)部和虛部都是用整數(shù)的形式來(lái)表示的,那麼它的精度和範(fàn)圍都會(huì)被默認(rèn)為與缺省的實(shí)型常數(shù)相同;如果實(shí)部和虛部都是用實(shí)數(shù)的形式來(lái)表示,那麼它的精度和範(fàn)圍會(huì)視具體的情況來(lái)確定:如果實(shí)部和虛部具有相同的種別說(shuō)明,則複數(shù)的種別就是該種別;如果實(shí)部和虛部具有不同的種別說(shuō)明,則複數(shù)的種別由較大的種別值確定。5.3.2字元型常數(shù)的種別說(shuō)明如果是字元型常數(shù),則應(yīng)改用前輟法來(lái)說(shuō)明數(shù)據(jù)的種別。嵌綴法將種別值寫(xiě)在字元型常數(shù)的前面,其間通過(guò)下劃線“_”把數(shù)據(jù)部分和種別值連接起來(lái)。例如下麵的例子:1_’αβγ’ 2_’計(jì)算方法’字串中使用了希臘字母和漢字,是假定所使用的電腦系統(tǒng)支持希臘字母與漢字,並且規(guī)定這兩個(gè)字串的種別參數(shù)分別是1和2。理論上說(shuō),這樣進(jìn)行種別說(shuō)明是可行的,因?yàn)闈h字在內(nèi)存中會(huì)佔(zhàn)用兩個(gè)位元組,而一般的英文字元只佔(zhàn)用一個(gè)位元組。但是,實(shí)際情況卻不是這樣的。5.3.3數(shù)據(jù)的進(jìn)制說(shuō)明除了前面兩個(gè)小節(jié)介紹的情況之外,在Fortran90/95中,還可以根據(jù)需要定義不同進(jìn)制的正整數(shù)常量,這包括二進(jìn)位、八進(jìn)制和十六進(jìn)制。二進(jìn)位常量以字母“B”開(kāi)頭,後跟定界符括起來(lái)的數(shù)字串,定界符可以是單引號(hào)“'”或者雙引號(hào)“””,數(shù)字只能是0或1。例如:B’01011’B”01011”5.4屬性說(shuō)明在類型說(shuō)明語(yǔ)句中除了可以說(shuō)明對(duì)象的類型和種別之外,還可以進(jìn)一步說(shuō)明對(duì)象的屬性。當(dāng)一個(gè)對(duì)象在類型說(shuō)明語(yǔ)句中被說(shuō)明具有某種屬性後,該對(duì)象就具有了某種附加的特殊功能。本節(jié)主要介紹Fortran中屬性的相關(guān)概念。5.4.1對(duì)象的屬性在Fortran90/95中,一個(gè)對(duì)象可以沒(méi)有附加的屬性說(shuō)明,此時(shí)它只是普通的一般變數(shù),與Fortran77中的變數(shù)完全相同。一個(gè)對(duì)象也可以有多個(gè)附加的屬性說(shuō)明,之後被說(shuō)明對(duì)象就具有了多個(gè)附加的特殊功能,並且確定了它在不同場(chǎng)合下的特定使用方式。每種屬性說(shuō)明都有專門的關(guān)鍵字與之對(duì)應(yīng),各屬性關(guān)鍵字間用逗號(hào)進(jìn)行分隔,之間沒(méi)有嚴(yán)格的先後關(guān)係,但是屬性關(guān)鍵字應(yīng)該寫(xiě)在類型說(shuō)明語(yǔ)句的種別說(shuō)明符之後,分隔符號(hào)“::”之前。屬性不僅僅可用於說(shuō)明數(shù)據(jù),還可以用於說(shuō)明過(guò)程。6.1內(nèi)部過(guò)程概述在Fortran語(yǔ)言中,有很多常用的數(shù)學(xué)過(guò)程、字元處理過(guò)程和系統(tǒng)過(guò)程。其中,數(shù)學(xué)過(guò)程和字元處理過(guò)程通常是以函數(shù)副程式的形式存在,而系統(tǒng)過(guò)程則通常是以子例行副程式的形式存在。這些過(guò)程為應(yīng)用程式的編寫(xiě)提供了非常方便的手段和豐富的功能。Fortran語(yǔ)言將這些功能各異、用途各異的過(guò)程分別編寫(xiě)成一個(gè)個(gè)獨(dú)立的副程式,編譯後組成一個(gè)大的標(biāo)準(zhǔn)過(guò)程庫(kù)(有時(shí)也稱為標(biāo)準(zhǔn)函數(shù)庫(kù)),存放在外部存儲(chǔ)介質(zhì)(如電腦的硬碟)上。用戶在完成自身根源程式的編譯之後,使用LINK命令將已翻譯成二進(jìn)位指令的目標(biāo)程式與這個(gè)標(biāo)準(zhǔn)過(guò)程庫(kù)連接起來(lái)。通過(guò)這個(gè)連接,將程式中出現(xiàn)過(guò)程名的地方用標(biāo)準(zhǔn)過(guò)程庫(kù)中相應(yīng)的一組指令代替,最終形成統(tǒng)一的用戶可執(zhí)行程式。6.2常用數(shù)學(xué)函數(shù)作為一種主要面向科學(xué)、工程和事務(wù)處理中的數(shù)值計(jì)算問(wèn)題的高級(jí)電腦語(yǔ)言,F(xiàn)ortran提供了豐富的數(shù)學(xué)函數(shù)供用戶在編程時(shí)使用。本小節(jié)主要介紹在日常編程中經(jīng)常會(huì)遇到和使用的數(shù)學(xué)函數(shù)。6.2.1絕對(duì)值函數(shù)絕對(duì)值函數(shù)用於求出數(shù)據(jù)的絕對(duì)值,函數(shù)的原型如下:C=ABS(X)其中,ABS是Fortran中絕對(duì)值函數(shù)的通用名。除了這個(gè)通用名外,絕對(duì)值函數(shù)還有4個(gè)專用名,它們是:IABS,專用於求默認(rèn)種別的整型數(shù)據(jù)的絕對(duì)值,返回值也為默認(rèn)種別的整型數(shù)據(jù)。ABS,專用於求默認(rèn)種別的實(shí)型數(shù)據(jù)的絕對(duì)值,返回值也為默認(rèn)種別的實(shí)型數(shù)據(jù)。DABS,專用於求雙精度實(shí)型數(shù)據(jù)的絕對(duì)值,返回值也為雙精度的實(shí)型數(shù)據(jù)。CABS,專用於默認(rèn)種別的複型數(shù)據(jù)的絕對(duì)值,返回值也為默認(rèn)種別的複型數(shù)據(jù)。6.2.2指數(shù)函數(shù)指數(shù)函數(shù)用於求出數(shù)據(jù)的指數(shù)值,函數(shù)的原型如下:C=EXP(X)其中,EXP是Fortran中指數(shù)函數(shù)的通用名。除了這個(gè)通用名外,指數(shù)函數(shù)還有3個(gè)專用名,它們是:EXP,專用於求默認(rèn)種別的實(shí)型數(shù)據(jù)的指數(shù)值,返回值也為默認(rèn)種別的整型數(shù)據(jù)。DEXP,專用於求雙精度的實(shí)型數(shù)據(jù)的指數(shù)值,返回值也為雙精度的實(shí)型數(shù)據(jù)。CEXP,專用於默認(rèn)種別的複型數(shù)據(jù)的指數(shù)值,返回值也為默認(rèn)種別的複型數(shù)據(jù)。6.2.3正弦函數(shù)正弦函數(shù)用於求出數(shù)據(jù)的正弦值,函數(shù)的原型如下:C=SIN(X)其中,SIN是Fortran中正弦函數(shù)的通用名。除了這個(gè)通用名外,正弦函數(shù)還有3個(gè)專用名,它們是:SIN,專用於求默認(rèn)種別的實(shí)型數(shù)據(jù)的正弦值,返回值也為默認(rèn)種別的整型數(shù)據(jù)。DSIN,專用於求雙精度的實(shí)型數(shù)據(jù)的正弦值,返回值也為雙精度的實(shí)型數(shù)據(jù)。CSIN,專用於默認(rèn)種別的複型數(shù)據(jù)的正弦值,返回值也為默認(rèn)種別的複型數(shù)據(jù)。函數(shù)在數(shù)學(xué)上等價(jià)於。函數(shù)中參數(shù)的單位是弧度而不是度,在使用時(shí)需要注意這一點(diǎn)。6.2.4余弦函數(shù)余弦函數(shù)用於求出數(shù)據(jù)的余弦值,函數(shù)的原型如下:C=COS(X)其中,COS是Fortran中余弦函數(shù)的通用名。除了這個(gè)通用名外,余弦函數(shù)還有3個(gè)專用名,它們是:COS,專用於求默認(rèn)種別的實(shí)型數(shù)據(jù)的余弦值,返回值也為默認(rèn)種別的整型數(shù)據(jù)。DCOS,專用於求雙精度的實(shí)型數(shù)據(jù)的余弦值,返回值也為雙精度的實(shí)型數(shù)據(jù)。CCOS,專用於默認(rèn)種別的複型數(shù)據(jù)的余弦值,返回值也為默認(rèn)種別的複型數(shù)據(jù)。6.2.5反正弦函數(shù)反正弦函數(shù)用於求出數(shù)據(jù)的反正弦值,函數(shù)的原型如下:C=ASIN(X)其中,ASIN是Fortran中反正弦函數(shù)的通用名。除了這個(gè)通用名外,反正弦函數(shù)還有2個(gè)專用名,它們是:ASIN,專用於求默認(rèn)種別的實(shí)型數(shù)據(jù)的反正弦值,返回值也為默認(rèn)種別的整型數(shù)據(jù)。DASIN,專用於求雙精度的實(shí)型數(shù)據(jù)的反正弦值,返回值也為雙精度的實(shí)型數(shù)據(jù)。6.2.6反余弦函數(shù)反余弦函數(shù)用於求出數(shù)據(jù)的反余弦值,函數(shù)的原型如下:C=ACOS(X)其中,ACOS是Fortran中反余弦函數(shù)的通用名。除了這個(gè)通用名外,反余弦函數(shù)還有2個(gè)專用名,它們是:ACOS,專用於求默認(rèn)種別的實(shí)型數(shù)據(jù)的反余弦值,返回值也為默認(rèn)種別的整型數(shù)據(jù)。DACOS,專用於求雙精度的實(shí)型數(shù)據(jù)的反余弦值,返回值也為雙精度的實(shí)型數(shù)據(jù)。6.2.7正切函數(shù)正切函數(shù)用於求出數(shù)據(jù)的正切值,函數(shù)的原型如下:C=TAN(X)其中,TAN是Fortran中正切函數(shù)的通用名。除了這個(gè)通用名外,正切函數(shù)還有2個(gè)專用名,它們是:TAN,專用於求默認(rèn)種別的實(shí)型數(shù)據(jù)的正切值,返回值也為默認(rèn)種別的整型數(shù)據(jù)。DTAN,專用於求雙精度的實(shí)型數(shù)據(jù)的正切值,返回值也為雙精度的實(shí)型數(shù)據(jù)。6.2.8反正切函數(shù)反正切函數(shù)用於求出數(shù)據(jù)的反正切值,函數(shù)的原型如下:C=ATAN(X)其中,ATAN是Fortran中反正切函數(shù)的通用名。除了這個(gè)通用名外,反正切函數(shù)還有2個(gè)專用名,它們是:ATAN,專用於求默認(rèn)種別的實(shí)型數(shù)據(jù)的反正切值,返回值也為默認(rèn)種別的整型數(shù)據(jù)。DATAN,專用於求雙精度的實(shí)型數(shù)據(jù)的反正切值,返回值也為雙精度的實(shí)型數(shù)據(jù)。6.2.9自然對(duì)數(shù)函數(shù)自然對(duì)數(shù)函數(shù)用於求數(shù)據(jù)的自然對(duì)數(shù)值,函數(shù)的原型如下:C=LOG(X)其中,LOG是Fortran中自然對(duì)數(shù)函數(shù)的通用名。除了這個(gè)通用名外,自然對(duì)數(shù)函數(shù)還有3個(gè)專用名,它們是:ALOG,專用於求默認(rèn)種別的實(shí)型數(shù)據(jù)的自然對(duì)數(shù)值,返回值也為默認(rèn)種別的整型數(shù)據(jù)。DLOG,專用於求雙精度的實(shí)型數(shù)據(jù)的自然對(duì)數(shù)值,返回值也為雙精度的實(shí)型數(shù)據(jù)。CLOG,專用於求默認(rèn)種別的複型數(shù)據(jù)的自然對(duì)數(shù)值,返回值也為默認(rèn)種別的複型數(shù)據(jù)。6.2.10常用對(duì)數(shù)函數(shù)常用對(duì)數(shù)函數(shù)用於求數(shù)據(jù)的常用對(duì)數(shù)值,函數(shù)的原型如下:C=LOG10(X)其中,LOG10是Fortran中常用對(duì)數(shù)函數(shù)的通用名。除了這個(gè)通用名外,常用對(duì)數(shù)函數(shù)還有2個(gè)專用名,它們是:ALOG10,專用於求默認(rèn)種別的實(shí)型數(shù)據(jù)的常用對(duì)數(shù)值,返回值也為默認(rèn)種別的整型數(shù)據(jù)。DLOG10,專用於求雙精度的實(shí)型數(shù)據(jù)的常用對(duì)數(shù)值,返回值也為雙精度的實(shí)型數(shù)據(jù)。6.2.11取整函數(shù)取整函數(shù)用於將數(shù)據(jù)轉(zhuǎn)換為整型,函數(shù)的原型如下:C=INT(X)其中,INT是Fortran中取整函數(shù)的通用名。除了這個(gè)通用名外,取整函數(shù)還有3個(gè)專用名,它們是:IFIX,專用於將默認(rèn)種別的實(shí)型數(shù)據(jù)轉(zhuǎn)換為整數(shù),返回值為默認(rèn)種別的整型數(shù)據(jù)。INT,專用於將默認(rèn)種別的實(shí)型數(shù)據(jù)轉(zhuǎn)換為整數(shù),返回值為默認(rèn)種別的整型數(shù)據(jù)。IDINT,專用於將雙精度的實(shí)型數(shù)據(jù)轉(zhuǎn)換為整數(shù),返回值為默認(rèn)種別的整型數(shù)據(jù)。函數(shù)的執(zhí)行結(jié)果同數(shù)學(xué)上的取整有所不同,F(xiàn)ortran中的取整函數(shù)只是將數(shù)據(jù)的小數(shù)部分截去,不使用四捨五入規(guī)則。函數(shù)的參數(shù)可以是實(shí)型、整型和複型。6.2.12求餘函數(shù)求餘函數(shù)用於求第一個(gè)變數(shù)被第二個(gè)變數(shù)所除後的餘數(shù),函數(shù)的原型如下:C=MOD(X1,X2)其中,MOD是Fortran中求餘函數(shù)的通用名。除了這個(gè)通用名外,求餘函數(shù)還有2個(gè)專用名,它們是:MOD,適用於默認(rèn)種別的整型數(shù)據(jù),返回值為默認(rèn)種別的整型數(shù)據(jù)。AMOD,適用於默認(rèn)種別的實(shí)型數(shù)據(jù),返回值為默認(rèn)種別的實(shí)型數(shù)據(jù)。6.2.13取符號(hào)函數(shù)取符號(hào)函數(shù)返回第一個(gè)參數(shù)的絕對(duì)值與第二個(gè)參數(shù)的符號(hào)的乘積,函數(shù)的原型如下:C=SIGN(X1,X2)其中,SIGN是Fortran中取符號(hào)函數(shù)的通用名。除了這個(gè)通用名外,取符號(hào)函數(shù)還有3個(gè)專用名,它們是:ISIGN,適用於默認(rèn)種別的整型數(shù)據(jù),返回值為默認(rèn)種別的整型數(shù)據(jù)。SIGN,適用於默認(rèn)種別的實(shí)型數(shù)據(jù),返回值為默認(rèn)種別的實(shí)型數(shù)據(jù)。DSIGN,適用於雙精度的實(shí)型數(shù)據(jù),返回值為雙精度的實(shí)型數(shù)據(jù)。6.2.14最大值函數(shù)最大值函數(shù)用於找出一系列數(shù)據(jù)中的最大值,函數(shù)的原型為:C=MAX(X1,X2[,X3]…)其中,MAX是Fortran中最大值函數(shù)的通用名。除了這個(gè)通用名外,最大值函數(shù)還有5個(gè)專用名,它們是:MAX0,適用於默認(rèn)種別的整型數(shù)據(jù),返回值為默認(rèn)種別的整型數(shù)據(jù)。AMAX0,適用於默認(rèn)種別的整型數(shù)據(jù),返回值為默認(rèn)種別的實(shí)型數(shù)據(jù)。MAX1,適用於默認(rèn)種別的實(shí)型數(shù)據(jù),返回值為默認(rèn)種別的整型數(shù)據(jù)。AMAX1,適用於默認(rèn)種別的實(shí)型數(shù)據(jù),返回值為默認(rèn)種別的實(shí)型數(shù)據(jù)。DMAX1,適用於雙精度的實(shí)型數(shù)據(jù),返回值為雙精度的實(shí)型數(shù)據(jù)。6.2.15最小值函數(shù)最小值函數(shù)用於找出一系列數(shù)據(jù)中的最小值,函數(shù)的原型為:C=MIN(X1,X2[,X3]…)其中,MIN是Fortran中最小值函數(shù)的通用名。除了這個(gè)通用名外,最小值函數(shù)還有5個(gè)專用名,它們是:MIN0,適用於默認(rèn)種別的整型數(shù)據(jù),返回值為默認(rèn)種別的整型數(shù)據(jù)。AMIN0,適用於默認(rèn)種別的整型數(shù)據(jù),返回值為默認(rèn)種別的實(shí)型數(shù)據(jù)。MIN1,適用於默認(rèn)種別的實(shí)型數(shù)據(jù),返回值為默認(rèn)種別的整型數(shù)據(jù)。AMIN1,適用於默認(rèn)種別的實(shí)型數(shù)據(jù),返回值為默認(rèn)種別的實(shí)型數(shù)據(jù)。DMIN1,適用於雙精度的實(shí)型數(shù)據(jù),返回值為雙精度的實(shí)型數(shù)據(jù)。6.3常用字符函數(shù)Fortran90/95的內(nèi)部函數(shù)中新增了許多和字元型數(shù)據(jù)操作有關(guān)的函數(shù)供用戶使用,可以很方便地進(jìn)行各種字元操作。6.3.1字元與數(shù)值轉(zhuǎn)換函數(shù)這是一系列函數(shù)的總稱,涉及到4個(gè)基本函數(shù):ICHAR,CHAR,IACHR和ACHAR函數(shù)。Fortran90/95中允許把字元型的值轉(zhuǎn)換成數(shù)值型的值(已知字元得到字元在某種字元集中的序號(hào)數(shù)值),也可把數(shù)值型的值轉(zhuǎn)換成字元型的值(已知字元在某種字元集中的序號(hào)數(shù)值進(jìn)而得到該位置上的字元)。函數(shù)ICHAR的作用是根據(jù)字元得到字元在電腦字元集中的位置,函數(shù)的原型為:C=ICHAR(字元數(shù)據(jù))6.3.2字串長(zhǎng)度函數(shù)字串長(zhǎng)度函數(shù)用於求出參數(shù)字元實(shí)體的字段長(zhǎng)度,函數(shù)的原型為:C=LEN(string)其中,string必須是字元型,可以是字元標(biāo)量也可以是字元數(shù)組。函數(shù)返回一個(gè)正整數(shù),為該字元實(shí)體的字段長(zhǎng)度(包括尾隨空格、中間空格在內(nèi))。比如LEN(‘ABC123’)的值是9(6個(gè)字元加3個(gè)空格)。如果想要得到不計(jì)尾部空格的字串長(zhǎng)度,則可以使用LEN_TRIM函數(shù)。函數(shù)的原型如下:C=LEN_TRIM(string)6.3.3子字串位置索引函數(shù)子字串位置索引函數(shù)的作用是找出指定子字串在目標(biāo)字串內(nèi)的起始位置,函數(shù)的原型如下:C=INDEX(string,substring[,back])其中,string表示要在其中進(jìn)行索引的目標(biāo)字串;substring表示子字串;back為邏輯型變數(shù),當(dāng)back的值為.TRUE.時(shí)表示從目標(biāo)字串的後面開(kāi)始搜索,當(dāng)back的值為.FALSE.或省略不寫(xiě)時(shí),表示從目標(biāo)字串的前面開(kāi)始搜索。函數(shù)值返回一個(gè)正整數(shù),指明子字串在目標(biāo)字串中是從第幾個(gè)字元開(kāi)始的。目標(biāo)字串和子字串可以是任何形式的字元實(shí)體。如果目標(biāo)字串中不含有子字串中的內(nèi)容,則函數(shù)的返回值為0。例如INDEX(‘VitaminC’,‘i’)的值為2;INDEX(‘VitaminC’,‘i’,BACK=.TRUE.)的值為6;INDEX(‘VitaminC’,‘b’)的值為0。6.3.4字串驗(yàn)證函數(shù)字串驗(yàn)證函數(shù)的作用是確認(rèn)指定的字元集中是否包含了給定字串中所有的字元,函數(shù)的原型為:C=VERIFY(string,set,[,back])其中,string為要在其中進(jìn)行驗(yàn)證的字元集;set為給定的字串;back表示是從字元集的前面還是後面開(kāi)始驗(yàn)證:當(dāng)back值為.TRUE.時(shí)表示從後面開(kāi)始驗(yàn)證,當(dāng)back的值為.FALSE.或省略不寫(xiě)時(shí)表示從前面開(kāi)始驗(yàn)證。函數(shù)的返回值是一個(gè)正整數(shù),指明給定字串中與字元集相異的第一個(gè)字元是從左邊第幾個(gè)字元開(kāi)始的。如果沒(méi)有相異的字元,則返回函數(shù)值為0。比如VERIFY('banana','nbc')的值為2,VERIFY('banana','nbc',BACK=.TRUE.)的值為6,VERIFY('banana','nbca')的值為0。6.3.5尾部空格除去函數(shù)尾部空格除去函數(shù)的作用就是除去字串尾部的尾隨空格,函數(shù)的原型為:C=TRIM(string)函數(shù)的返回值與函數(shù)的輸入?yún)?shù)類型相同、種別相同。返回值就是輸入?yún)?shù)除去尾部空格後剩餘的部分。比如TRIM(‘ABC123’)///’34’的值是’ABC12334’。這個(gè)函數(shù)在進(jìn)行檔案名的處理上較為方便:為了保存檔的完整路徑名稱,通常需要使用一個(gè)字段寬度較大的字元變數(shù)(在Windows系統(tǒng)下,如果使用系統(tǒng)函數(shù),一般要求256個(gè)字元寬度)。如果輸入的檔實(shí)際路徑名較短,則在顯示時(shí)會(huì)留下大段的空格。使用TRIM函數(shù)就可以避免這種現(xiàn)象。6.3.6字元大小比較函數(shù)字元大小比較函數(shù)是一個(gè)函數(shù)族,共包含了4個(gè)基本函數(shù)。其作用就是比較字元在ASCII字元集中的先後位置,其原型為:C=LGE(string_a,string_b)C=LGT(string_a,string_b)C=LLE(string_a,string_b)C=LLT(string_a,string_b)四個(gè)函數(shù)都是用兩個(gè)字元型實(shí)體作為參數(shù),用來(lái)判斷它們之間是否滿足大於等於、大於、小於等於、小於關(guān)係。6.4常用系統(tǒng)過(guò)程在Fortran90/95中還增加了許多常用的系統(tǒng)過(guò)程,這些系統(tǒng)過(guò)程大多採(cǎi)用子例行副程式的形式。這裏介紹的主要是用於獲得系統(tǒng)時(shí)間和亂數(shù)的系統(tǒng)過(guò)程。6.4.1CPU時(shí)間函數(shù)該函數(shù)用於返回同處理器無(wú)關(guān)的精確的處理器運(yùn)行時(shí)間,單位為秒。過(guò)程的原型如下:CALLCPU_TIME(time)其中,time是一個(gè)實(shí)型變數(shù),用於保存處理器的運(yùn)行時(shí)間。如果過(guò)程不能返回有意義的時(shí)間,則會(huì)返回一個(gè)與處理器無(wú)關(guān)的負(fù)值。CPU_TIME函數(shù)可以用於獲得某一段可執(zhí)行代碼在CPU中的實(shí)際運(yùn)行時(shí)間,比如下麵的代碼段用於確定代碼執(zhí)行時(shí)間並將其列印出來(lái):
REAL::time_begin,time_end……CALLCPU_TIME(time_begin)!可執(zhí)行代碼段
CALLCPU_TIME(time_end)PRINT*,'Timeofoperationwas',time_end-time_begin,'seconds'6.4.2日期和時(shí)間函數(shù)該過(guò)程用於返回從即時(shí)時(shí)鐘處獲得的日期和時(shí)間相關(guān)資訊,日期和時(shí)間的格式符合國(guó)際標(biāo)準(zhǔn)ISO8601:1988。過(guò)程的原型如下:CALLDATE_AND_TIME([date][,time][,zone][,values])其中,date用於保存返回的日期資訊,必須是一個(gè)至少有8個(gè)字元長(zhǎng)度的字串??梢杂渺侗4媸兰o(jì)、年、月、日等資訊,形式為CCYYNNDD。下麵分別給出這些字元的意義:CC:表示系統(tǒng)中所處的世紀(jì);YY:表示系統(tǒng)中所處的年份;MM:表示系統(tǒng)中所處的月份;DD:表示系統(tǒng)中所處的日期。6.4.3系統(tǒng)時(shí)間過(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 共青科技職業(yè)學(xué)院《高級(jí)商務(wù)英語(yǔ)(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 《知識(shí)經(jīng)濟(jì)時(shí)代》課件
- 2022年一級(jí)建造師-管理-李娜章節(jié)練習(xí)題講義合集(含答案解析)
- 贛南科技學(xué)院《大數(shù)據(jù)技術(shù)基礎(chǔ)(計(jì)算模型)》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛東學(xué)院《翻譯概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 甘肅中醫(yī)藥大學(xué)《土木工程結(jié)構(gòu)試驗(yàn)與檢測(cè)》2023-2024學(xué)年第一學(xué)期期末試卷
- 語(yǔ)文培訓(xùn)機(jī)構(gòu)課件
- 七年級(jí)科學(xué)上冊(cè)第1章科學(xué)入門第3節(jié)科學(xué)觀察第1課時(shí)教案新版浙教版
- 七年級(jí)道德與法治上冊(cè)第四單元生命的思考第十課綻放生命之花第1課時(shí)感受生命的意義教案新人教版
- 三年級(jí)數(shù)學(xué)上冊(cè)五周長(zhǎng)什么是周長(zhǎng)說(shuō)課稿北師大版
- 2024年度員工試用期勞動(dòng)合同模板(含保密條款)3篇
- 2024-2030年全球與中國(guó)汽車音頻DSP芯片組市場(chǎng)銷售前景及競(jìng)爭(zhēng)策略分析報(bào)告
- 機(jī)關(guān)事業(yè)單位財(cái)務(wù)管理制度(六篇)
- 2025禮品定制合同范本
- 醫(yī)院消毒隔離制度范文(2篇)
- 2024年01月11026經(jīng)濟(jì)學(xué)(本)期末試題答案
- 烘干煤泥合同范例
- 人教版六年級(jí)上冊(cè)數(shù)學(xué)第八單元數(shù)學(xué)廣角數(shù)與形單元試題含答案
- 2025年“三基”培訓(xùn)計(jì)劃
- 第20課 北洋軍閥統(tǒng)治時(shí)期的政治、經(jīng)濟(jì)與文化 教案
- 叉車租賃合同模板
評(píng)論
0/150
提交評(píng)論