版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、3.4 FORTRAN 字符集3.5 常量3.6 變量 3.7 內部函數(shù)3.8 算術表達式3.9 賦值語句3.10簡單的輸出語句(表控輸出)3.11簡單的輸入語句(表控輸入)3.12 PARAMETER語句(參數(shù)說明) 3.13 PROGRAM語句,END語句,STOP語句,PAUSE語句不是任何一種外文字母或數(shù)字符號都能被某一計算機語言接受。每一種計算機的高級語言分別規(guī)定了它允許使用的字符。Fortran允許使用的字符如下:英文字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 阿拉伯數(shù)字:0 1 2 3 4 5 6 7 8 9 特殊
2、符號:空格 = + - * / ( ) , . : ! % & ; $ ? _ (F90中新增的字符)3.4 FORTRAN 字符集文字字符英文字母 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z數(shù)字 0 1 2 3 4 5 6 7 8 9 下劃線 _特殊字符圖形名稱圖形名稱空格: 冒號 等號!嘆號 十加號” 引號 一減號 百分號 * 星號 英語的and 斜線; 分號 ( 左括號 小于 ) 右活號 大于 ,逗號?問號 小數(shù)點或句號 貨幣符號 撇號表3-1基本的FORTRAN 90/95字符集 基本字符分為兩大類:文字字符和特殊字符。除了貨
3、幣符號可以本地化之外,其他任何字符都必須依照表里的形式。注意: 一. 文字字符的用處 主要是命名的作用,可以用來命名語言中的一切對象,這三種符號可以混合使用; 其中數(shù)字還具有它本來的含義,就是表示數(shù)目。 二. 特殊字符的用處特殊字符主要具有功能的意義,如編輯功能,運算功能,語法功能等。FORTRAN 90/95標準原則上接受小寫字母。因此除了以下位置,大小寫是等價的。 三.大小寫必須區(qū)分的位置 作為字符常量的字符串里面; 輸入輸出的紀錄里面; 作為編輯描述符的引號或撇號里面。四. CVF編譯平臺接受小寫字母。 在OPEN或者INQUIRE語句里面的FILE=或NAME=后面是否區(qū)分大小寫,也是
4、由編譯平臺指定的。五.如果是需要調用其他語言寫的子程序, 而恰好該種語言(例如C語言)是區(qū)分大小寫的,這時就需要特別小心?!纠?_1】 如果用C寫了兩個子程序EIGEN和eigen,然后有如下的FROTRAN片斷: EXTERNAL EIGEN . CALL EIGEN . END這時它是該引用EIGEN還是eigen呢?如果所使用的FROTRAN系統(tǒng)正好是怪異的那種,沒問題。如果是常見的如CVF,這時它就無法區(qū)分EIGEN和eigen,這樣就必須給它們更換名稱了。 六.數(shù)字的涵義:除了以下情形,數(shù)字總是表示十進位數(shù)字 屬于二進制,八進制,十六進制的字面常量; 帶有B,O,Z編輯描述符的輸入輸
5、出紀錄。【例3_2】 以下語句當中的數(shù)字不是屬于十進位數(shù)字: DATA I, J, K / O1001, 23.54, Z5CA2 / 其中第一個為八進制數(shù),第二個為十進制數(shù),第三個為十六進制數(shù)。七.下劃線的涵義: 下劃線的主要作用就是置于單詞之間代替空格,使得我們在命名時使用清楚的英語詞匯。 下劃線不能置于任意名稱的前面,但是可以置于名稱的最后。 下劃線也用于在字面常量中區(qū)隔常量的值和種別參數(shù)。無論給什么對象起名,都盡量使用完整的英語單詞,同時使用下劃線以區(qū)隔不同的單詞。所謂好記性不如爛筆頭,只有這樣才能切實保證你在任何時候,在程序代碼的任意位置都知道任意變量等的含義。 與平臺有關的FORT
6、RAN輔助字符集基本字符集是在一切FROTRAN的編譯平臺都可以使用的,被FORTRAN 95標準規(guī)定為必須使用的默認字符集。另外還有些輔助的字符則是不同的平臺有不同的用法約定。輔助字符分兩類:可打印字符和不可打印字符。 可打印字符;各種本地化語言的字符,象漢字,希臘字母等,都可以應用在字符串,注釋,和輸入輸出紀錄當中。 不可打印字符。主要就是控制字符,例如制表符Tab鍵。制表符(Tab鍵) 對于一個FORTRAN77標準的編譯系統(tǒng)來說,在固定源程序形式里的Tab被看成是至少6個空格,而在自由源程序形式里的Tab被看成1個空格。這樣如果Tab被放在文本當中用于輸出格式控制,那么這種默認的轉換方
7、式,有時就會導致輸出格式的混亂。有關FORTRAN 95的輔助字符集的使用規(guī)則,請參考具體的編譯系統(tǒng)的說明。 所謂FORTRAN的詞匯就是一個語句的最小的意義單位,它由一個或多個FORTRAN字符集里的字符組成。包括兩類共6種,分類例舉如下: 3.5 詞匯 由文字字符組成的詞匯,包括4種: 語句關鍵詞 名稱 由單個詞匯組成的字面常量 標識符 由特殊字符組成 算符: +,.OR. 定界符:逗號,=,=,:,:,;,%。1.語句關鍵詞標志語句本身 【例3-3】下面的DO語句中的關鍵詞DO本身標志了該語句 DO I=1,500 標志選項。 【例3-4】下面的INTENT語句當中的IN,OUT,或IN
8、OUT。 INTENT(IN),A。B INTENT(INOUT),X,Y,Z 用在語句當中,起分界的作用。 【例3-5】 如下面DO語句當中的WHILE DO WHILE( .NOT. VECTOR )并非所有的語句都必須包含關鍵詞,在FORTRAN里面,賦值語句和函數(shù)都不需要關鍵詞。在一個程序當中,任何對象都需要有一個名稱,給它們命名所得到的詞匯,可以說就是一般語言里的名詞,這樣的對象包括:變量,命名常量,程序單元,過程,公用塊,構造,派生類型,啞元等。2.名稱名稱的拼寫規(guī)則為: 名稱必須由字母開頭,可以由文字字符混合組成,而下劃線不能作為名稱的第一個字符。 一個名稱至多允許含有31個字符
9、。 一個常量就是對一個值的合乎語法的字符標記。常量分為字面常量和命名常量兩種:一個值如果沒有在程序里面經過命名,則稱為字面常量,這種常量不能取派生數(shù)據(jù)類型。【例4-6】 66953 Z5120A 2.3417 .TRUE. (33.2, 5.0)3. 常量 一個值如果在程序里面經過命名,則稱為命名常量,這種常量能取派生數(shù)據(jù)類型?!纠?-7】 在如下聲明語句當中的常量UNSTABLE_POINT為命名常量: PARAMETER (UNSTABLE_POINT=5.332) 對于常量的語義,將在說明數(shù)據(jù)時進一步討論。 在一個程序單元內部,對任何一條語句,都可以在該語句的前面加上語句標簽,以便在該程
10、序單元內部的任何其他位置引用該語句。需要引用其他語句的語句包括CALL語句,DO結構,分支語句,輸入輸出語句等。4. 語句標簽語句標簽的書寫規(guī)則為: 語句標簽由1到5個十進制數(shù)字組成,其中必須至少有一個數(shù)字不能是0,例如000不能作為標識符; 標識符以0開頭是沒有任何意義的,例如0034與34沒有區(qū)別。 標識符不能放置于空語句之前。算符用在表達式當中,通過運算而獲得某種類型的值。算符分為固有算符和自定義算符兩類: 固有算符在FORTRAN 95語法當中,R310規(guī)定了固有算符的構成法則。【例4-9】 /表示字符串的連接 + 表示對數(shù)值的加法 .NOT. 表示邏輯否 .OR. 表示邏輯或5. 算
11、符6. 定界符全部的定界符有如下12種形式:/ ( ) (/ /) , = = : : ; %其中(和),(/和/)都必須成對出現(xiàn)顧名思義,這些定界符的功能就是在一個連續(xù)的源碼文本當中,用來把不同性質的源碼成分區(qū)分開。它們的具體含義將在具體的語句當中說明。數(shù)據(jù)表示的實現(xiàn)具有一個重要的參數(shù),即存儲空間,所以當問題要求的數(shù)據(jù),不能滿足于默認的存儲空間的時候,這時,就需要進一步給出數(shù)據(jù)的種別參數(shù),這是更加詳細的數(shù)據(jù)描述。 如果在真實世界問題當中出現(xiàn)的的數(shù)據(jù)對象,不符合已有的固有數(shù)據(jù)類型以及數(shù)組的定義,這時就需要根據(jù)用戶的要求構造一個依賴于問題的特定的數(shù)據(jù)結構,這就是數(shù)據(jù)描述時會遇到的三種情況。對于這
12、三種情況,F(xiàn)ORTRAN的解決方式如下: 數(shù)據(jù)的性質 (數(shù)據(jù)的類型以及其他屬性)3.6 常量與變量第一種情況: 確定(固有)數(shù)據(jù)的類型以及相應的可能具有的屬性。 FORTRAN所能辨識的數(shù)據(jù)類型首先分為兩大類: 固有數(shù)據(jù)類型 派生數(shù)據(jù)類型 所謂固有類型,是FORTRAN語言所定義的最基本的數(shù)據(jù)類型,每一種固有類型是和該種數(shù)據(jù)類型相應的各種運算一起隱式定義的,也就是說一旦聲明引入某種固有數(shù)據(jù)類型,則系統(tǒng)總是默認為對它進行相應的運算是合法的,并且總是可訪問的。固有類型包括五種:整型(INTEGER)、實型(REAL)、復型(COMPLEX)、邏輯型(LOGICAL)和字符型(CHARACTER)。
13、所謂派生類型是由用戶定義的,非隱式定義的類型,只要用一個類型定義來聲明其成員是何種固有類型,或者是何種其它已經定義過的派生類型,就能夠被FORTRAN認可為一種數(shù)據(jù)類型。 由于派生數(shù)據(jù)類型正是由固有數(shù)據(jù)類型充當成員而構成的,因此在結構關系上,可以把固有數(shù)據(jù)類型看成原子,而把派生數(shù)據(jù)類型看成分子。 派生類型數(shù)據(jù)最重要的用途就是擴充了數(shù)組這種重要的數(shù)據(jù)結構。 每一種固有數(shù)據(jù)類型的存儲模式:在FORTRAN77中: 整型,實型,邏輯型數(shù)據(jù)都是使用了一個數(shù)值存儲單元,復型和雙精度數(shù)據(jù)則使用了兩個數(shù)值存儲單元, 字符型數(shù)據(jù)使用一個字符存儲單元。在FORTRAN90與95中:默認在FORTRAN77中的規(guī)
14、定, 在FORTRAN90之后的標準里,開始允許在一個程序單元內,由用戶定義特定的不依賴于固有數(shù)據(jù)存儲模式的數(shù)據(jù)類型,這就是派生數(shù)據(jù)類型。第二種情況: 指定固有數(shù)據(jù)類型的種別參數(shù)。用來指定程序當中需要使用的每一種固有數(shù)據(jù)類型所要求占據(jù)的內存空間大小的屬性由種別參數(shù)表示。給這個變量(參數(shù))指定一個數(shù)值,就可以說明數(shù)據(jù)所需要的存儲空間的大小,也就是程序允許的數(shù)值數(shù)據(jù)的位數(shù)和字符串的字符數(shù)目。 KIND(種類種別參數(shù))分別說明整數(shù)類型的十進制指數(shù)范圍,實數(shù)類型和復數(shù)類型的十進制精度和指數(shù)范圍,字符類型和邏輯類型的表示方法。 LEN(長度種別參數(shù))對字符類型規(guī)定了字符的個數(shù)。【例】 REAL(KIND
15、2):ABC,X,LONG CHARACTER(LEN40,KINDGREECE):NAME如果沒有聲明數(shù)據(jù)的種別,那么程序就會采用默認的參數(shù),F(xiàn)ORTRAN的早期版本沒有引入種別參數(shù),直接采用了兩種不同的數(shù)據(jù)類型: REAL和DOUBLE PRECISIONFORTRAN90以來的版本里,引入種別參數(shù),對種別參數(shù)的不同取值,就足夠表達不同的精度,對于在指定種別參數(shù)的數(shù)值時,一般是以字或字節(jié)為單位,這樣對于字長不同的機器而言,相互之間就會出現(xiàn)程序移植的困難,下面分情況予以說明:實型-由于DOUBLE PRECISION是屬于老式標準的遺留物,因此使用DOUBLE PRECISION作為數(shù)據(jù)聲明
16、的程序就不具備良好的可移植性,因為所謂雙精度是針對具體的機器的字長而言的,對于32位的機器,雙精度就是64位,而對于64位機器,雙精度就意味著128位,這樣在不同字長的機器環(huán)境里,雙精度就具有不同的位數(shù),使得程序無法在不同字長的平臺之間進行直接的移植。最好統(tǒng)一使用REAL的種別參數(shù)來表達算法所要求的實數(shù)精度。整型-在程序應用當中會出現(xiàn)幾乎任何大小的整型數(shù)據(jù),因此無法在語言標準里面統(tǒng)一的規(guī)定整型數(shù)據(jù)的存儲空間大小,這就同樣需要依靠種別參數(shù)來指定應該給具體問題當中的整型數(shù)據(jù)確定多大的存儲空間。具體地指定方式屬于編譯器設計者的選擇,需要參考相應編譯器的語言說明。 復型-由于所謂復型本質上就是由兩個實
17、數(shù)表達的,因此按道理復型同樣應該能夠具有表達多種精度的能力,而實際上早期的版本在這方面是有欠缺的,不過隨著FORTRAN90引入種別參數(shù),就可以在COMPLEX的聲明語句里通過運用種別參數(shù)來實現(xiàn)多種精度的表達,對于任何FORTRAN的實現(xiàn),至少能表達兩種精度,而一般來說是多于兩種的。 字符型-對于字符,一般的機器都是用單字節(jié)8bits來表示一個字符,這樣就可以總共表示28=256個不同的字符,這對于任何以字母寫出來的語言都是足夠的了,不過對于漢語,日語這樣一些語言就不夠用了,一般得需要雙字節(jié),即16bits,這樣就可以表達216個字符。因此字符型數(shù)據(jù)同樣需要附加種別參數(shù),以便除了使用默認的基本
18、字符之外,還可以使用輔助字符集里的字符,從而實現(xiàn)程序的本地化。不過某個具體的編譯器是否支持雙字節(jié)字符,必須參考相應的手冊。 邏輯型-由于一切邏輯型數(shù)據(jù)都只有兩個值,因此如何確定邏輯型數(shù)據(jù)的存儲空間應該是非常好辦的,不過不幸的是,F(xiàn)ORTRAN的早期版本規(guī)定邏輯型數(shù)據(jù)使用和實型數(shù)據(jù)一樣大小的機器存儲單位,這樣當機器的字長很大時,就會非常的浪費機器的存儲空間。因此到了FORTRAN90和FORTRAN 95,除了作為默認的情形,和舊的語言標準保持兼容之外,還可以通過指定種別參數(shù),使得邏輯型數(shù)據(jù)的存儲空間大小只有一個字,甚至一個bit。當然具體的使用方法需要參考相應編譯器的說明。第三種情況: 派生數(shù)
19、據(jù)類型。在計算機語言里,把對象的每一個需要描述的性質用一個適當?shù)幕緮?shù)據(jù)類型來表示,這樣用一組基本數(shù)據(jù)類型就可以描述該對象。而這一組數(shù)據(jù)可以看成是一個新的數(shù)據(jù)類型,表示了一個變量。這樣構造出來的數(shù)據(jù)類型稱為派生數(shù)據(jù)類型,和固有數(shù)據(jù)類型一樣,在聲明派生數(shù)據(jù)類型時,需要給出名稱,描述它的每一個元素的固有數(shù)據(jù)類型以及相應屬性和種別參數(shù)(如果非默認的話),當然也需要適當?shù)囟x其運算。派生數(shù)據(jù)類型是由一組數(shù)組成,就會出現(xiàn)兩種情況:這組數(shù)據(jù)都是屬于一個數(shù)據(jù)類型這樣構成的派生數(shù)據(jù)類型就是數(shù)組,顯然對于數(shù)組的元素的描述就可以統(tǒng)一進行。具體的用法會在后面專門說明。這組數(shù)據(jù)的各個元素屬于不同的數(shù)據(jù)類型這樣構成的派
20、生數(shù)據(jù)類型稱為結構,這時就需要對每個數(shù)據(jù)元素進行分別的說明, 即每一個元素的數(shù)據(jù)類型,可能有的屬性,種別參數(shù)等等?!纠?-2】 下面是一個典型的派生數(shù)據(jù)類型。 TYPE SAMPLE REAL CURRENT COMPLEX (KIND = QUAD) PHASE CHARACTER (LEN = 50) SOURCE END TYPE SAMPLE TYPE (SAMPLE)SI401,SI402,SI403,SI404在上面的例子里,首先定義了一個名稱為SAMPLE的數(shù)據(jù)類型,每一個SAMPLE類型的數(shù)據(jù)由三個分量組成,它們的名稱分別為CURRENT,PHASE,SOURCE,分別屬于實型
21、,復型和字符型,其中復型和字符型還分別說明了種別參數(shù)和字符長度屬性,然后給出了程序當中需要使用的四個屬于該種數(shù)據(jù)類型的變量:SI401,SI402,SI403,SI404。數(shù)據(jù)不同種類的存儲模式對于計算機來說,數(shù)據(jù)分類的第一個反應就是針對不同類型的數(shù)據(jù)約定不同的存儲模式。由于存儲模式的規(guī)定涉及到編譯環(huán)境的設置,因此存儲模式的約定是與系統(tǒng)環(huán)境相關的,鑒于Compaq Visual Fortran的廣泛應用,本節(jié)特別針對Compaq Visual Fortran系統(tǒng)而言的說明了數(shù)據(jù)的各種存儲模式。下表5-1列出了Compaq Visual Fortran所有的固有數(shù)據(jù)類型的存儲空間要求,和相應的能
22、夠在這個空間里表達的數(shù)據(jù)規(guī)模。 數(shù)據(jù)類型單位存儲空間能表示的數(shù)據(jù)規(guī)模BYTEINTEGER(1) 1 byte (8 bits) BYTE表示等價于INTEGER(1)的帶符號的整型數(shù)據(jù)類型。 INTEGER 參見INTEGER(2), INTEGER(4), 以及 INTEGER(8). 帶符號的整型數(shù)據(jù), 包括INTEGER(2), INTEGER(4), or INTEGER(8)。數(shù)據(jù)規(guī)模由編譯器選項/integer_size:nn 控制。默認的規(guī)??刂七x項為/integer_size:32 (等價于INTEGER(4)。INTEGER(1)1 byte (8 bits)從-128到1
23、27帶符號的整數(shù)。INTEGER(2)2 bytes (16 bits)從-32,768到32,767帶符號的整數(shù)。INTEGER(4) 4 bytes (32 bits) 從-2,147,483,648到2,147,483,647帶符號的整型數(shù)據(jù)。INTEGER(8) 8 bytes (64 bits) 從-9,223,372,036,854,775,808到9,223,372,036,854,775,807帶符號的整型數(shù)據(jù)。 REAL(4)REAL 4 bytes (32 bits) 從1.17549435E-38到 3.40282347E38的按照IEEE S_floating格式的單精
24、度實型浮點值。在1.17549429E-38和1.40129846E-45之間的值是非常態(tài)的。REAL(8)DOUBLE PRECISION8 bytes (64 bits)從2.2250738585072013D-308到1.7976931348623158D308的按照IEEE T_floating格式的雙精度實型浮點值。在2.2250738585072008D-308和4.94065645841246544D-324之間的值是非常態(tài)的。COMPLEX(4)COMPLEX8 bytes (64 bits)由一對從1.17549435E-38到 3.40282347E38的按照IEEE S_
25、floating格式的單精度實型浮點值組成的單精度復型浮點值。在1.17549429E-38和1.40129846E-45之間的值是非常態(tài)的。COMPLEX(8)DOUBLE COMPLEX16 bytes (128 bits)由一對從2.2250738585072013D-308到1.7976931348623158D308的按照IEEE T_floating格式的雙精度實型浮點值組成的雙精度復型浮點值。在2.2250738585072008D-308和4.94065645841246544D-324之間的值是非常態(tài)的。LOGICAL參見LOGICAL(2), LOGICAL(4), 以及L
26、OGICAL(8).邏輯型值, 包括LOGICAL(2), LOGICAL(4),以及 LOGICAL(8). 數(shù)據(jù)規(guī)模由編譯器選項/integer_size:nn 控制。默認的規(guī)??刂七x項為/integer_size:32 (等價于LOGICAL(4)。LOGICAL(1)1 byte (8 bits)邏輯型值.TRUE. 或.FALSE.LOGICAL(2) 2 bytes (16 bits)邏輯型值.TRUE. 或.FALSE.LOGICAL(4) 4 bytes (32 bits)邏輯型值.TRUE. 或.FALSE.LOGICAL(8) 8 bytes (64 bits)邏輯型值.T
27、RUE. 或.FALSE.CHARACTER每個字符1 byte (8 bits) 根據(jù)約定的字符編碼表示的字符數(shù)據(jù),通過字符數(shù)據(jù)的聲明形式:CHARACTER(LEN=n)或 CHARACTER*n,其中n 表示byte數(shù),來表示數(shù)據(jù)規(guī)模。 HOLLERITH每個Hollerith 字符1 byte (8 bits) Hollerith 常量。 對于字符型數(shù)據(jù)來說,它的存儲空間完全和字符串長度成正比,因此只要直接規(guī)定字符串的字符個數(shù),就可以一致地得到其存儲空間分配標準。至于復型和派生類型,則完全以其他數(shù)據(jù)類型作為成員,自身沒有什么特別的規(guī)定,因此也就沒有獨特的針對這兩種數(shù)據(jù)類型的種別參數(shù)。顯
28、然,F(xiàn)ORTRAN通過運用種別參數(shù)來明確地規(guī)定數(shù)據(jù)的表示,使得Fortran的標準化程度得到了進一步提高,從而提高了程序的可移植性。 數(shù)據(jù)的基本(固有)類型 對于計算機來說,數(shù)據(jù)的意義無非就是要知道在存儲空間為一個特定的數(shù)據(jù)劃出多大的空間來裝載它。 FORTRAN早期的做法統(tǒng)一地給一類數(shù)據(jù)指定固定的存儲模式。 FORTRAN90引進的種別參數(shù),這樣就擴充了固有數(shù)據(jù)類型的存儲模式。 整型(INTEGER) 實型(REAL) 雙精度型(DOUBLE PRECISION) 復型(COMPLEX) 邏輯型(LOGICAL) 字符型(CHARACTER)隱含說明IMPLICIT固有數(shù)據(jù)類型:Fortra
29、n中有七種類型說明語句:類型說明 1隱式類型描述法 當初FORTRAN使用隱式類型聲明方法,是與語言的簡樸形態(tài)相適應的除非首先聲明了IMPLICIT語句。 隱式類型聲明方法的約定,就是讓名稱的第一個字母來標記它的類型,隱含說明(I-N規(guī)則) I-N規(guī)則:若不加說明,以字母I,J,K,L,M,N六個字母開頭的所有變量名,其變量類型為整型,以其他字母開頭的為實型變量。例如:I,J,IMAX,NUMBER,LINE,JOB Kl為整型變量A,Bl,COUNT,AMOUNT,TOTAL 為實型變量 FORTRAN沿用了數(shù)學里的很多習慣,這里使用I,J,K,L,M,N來表述整數(shù),就是一個明顯的數(shù)學習慣。
30、 利用IMPLICIT語句來自定義字母分配模式,一般的 IMPLICIT語句的句法形式有2種,分別行使不同的功能: IMPLICIT type-specification(letter-specification-list) IMPLICIT NONE (f90) 其中的字母分配說明列表的句法形式為: letter-letter 例如:IMPLICIT INTEGER (A,C,T-V)IMPLICIT REAL (I,J)IMPLICIT INTEGER (A,B),REAL(I,K),INTEGER (X-Z) 隱式類型的一般規(guī)則如下: 如果要使用IMPLICIT NONE語句,那么它必須
31、放置在任何PARAMETER語句之前,并且在其作用域內,再也不能出現(xiàn)其他IMPLICIT語句。 IMPLICIT語句當中出現(xiàn)的表述字母范圍的letter-letter,左邊的字母絕對不能是右邊字母的按照字母表順序的后面的字母。 letter-letter的字母之間為減號,而非下劃線,表示按照字母表順序從左邊字母到右邊字母的所有字母。 在一個作用域里面的IMPLICIT語句里面,同一個字母不能出現(xiàn)在字母分配說明列表里面的不同項里,例如作為單個字母出現(xiàn)了,又同時處于另一個字母范圍之中,或同時處于2個不同的字母范圍里面。 IMPLICIT語句同樣可以用來為派生數(shù)據(jù)類型分配首字母作為類型標記。 例如:
32、 IMPLICIT COMPLEX(E-G,W-Z) IMPLICIT NONE f90中每個變量名都應該在說明部分中說明其類型,不應該使用隱式說明、為了抑制隱式說明發(fā)生作用,應該在程序說明部分開始就寫出語句:IMIPLlCIT NONE 既聲明不使用隱式說明。【例7-15】 下面的IMPLICIT語句都是合法語句: IMPLICIT CHARACTER*30(B,T),COMPLEX(W-Z) IMPLICIT LOGICAL(KIND=BIT)(Q) IMPLICIT REAL(QUAD)(X-Z) IMPLICIT TYPE(NUMBER)(A-E) IMPLICIT TYPE(ARTI
33、CAL)(A,V),CHARACTER*100(B)【例7-16】 下面的IMPLICIT語句都是非法語句: IMPLICIT CHARACTER*30(B,T),COMPLEX(Z -W) !W應該放置在Z 之前。 IMPLICIT LOGICAL(KIND=BIT)(Q),REAL(QUAD)(P-T) ! Q同時表示2種類型。 IMPLICIT TYPE(ARTICAL)(A-H),CHARACTER*100(B,Q) !B同時表示2種類型。 使用隱式類型聲明在一個嵌套作用域里面所導致的變量作用域混亂問題在有關作用域之間通訊時再討論。 注: (1) “IN規(guī)則”的隱含約定級別最低。 如下
34、程序中IMAX變量為整型,而其它以I、J開頭的 變量為實型: IMPLICIT REAL(I,J) INTEGER IMAX (2) 類型說明語句和IMPLICIT語句是非執(zhí)行語句。 (3) 類型說明只在本程序單位內有效。 (4) IMPLICIT語句和類型說明語句應該出現(xiàn)在本程序單位中的所有執(zhí)行語句之前,其中IMPLICIT語句又應在所有的類型說明語句之前。a)一般形式 類型說明(種別說明),屬性說明表 : 變量名表=初值 2類型說明語句 F90程序中的數(shù)據(jù)都有三個特征:類型、種別、屬性,由類型說明語句來定義說明 例:REAL(KIND=2), DIMENSION(1:10): X,Y說明變
35、量X,Y都是實型,種別是2,屬性是一維數(shù)組。這樣X、Y實際上是兩個種別參數(shù)為2的一維實型數(shù)組,各具有10個元素。在某些場合下,種別說明與屬性說明可以省略,此時它的一般形式是最基本形式: 類型說明: 變量名表 (90/95) 類型說明 變量名表 (77) b)類型說明內部類型一共有五種,三種數(shù)值型: 整數(shù)型INTEGER 、實數(shù)型、復數(shù)型COMPLEX ; 兩種非數(shù)值型: 邏輯型LOGICAL 、字符型CHARACTER 。例:INTEGER: X,YREAL: A,BCOMPLEX: C,D或:INTEGER X,Y REAL A,B COMPLEX C,D c) 賦初值F90中置初值不需要專
36、門語句,只需在類型說明語句的變量表中,把要置的初值寫在指定的變量名后即可。它的形式為:類型說明: 變量名1=初值1,變量名2=初值2,例如 REAL: X=1.1, Y=2.2, Z, W=4.4注意:在過程中這種賦初值的方法實際上是對變量賦于了SAVE屬性,即當過程被調用以后,變量的新值將被保存下來,過程再次被調用時變量的初值不再是類型說明語句中的初值,而是上次被保留下來的值。例如,如果希望上面的變量X在過程每次被調用時都有相同的初值,則應該寫成: REAL, SAVE : X, Y=2.2, Z, W=4.4 X=1.1 d)DATA語句在F77中,有一個專門給變量賦初值的說明語句,即DA
37、TA語句。它的一般形式為:DATA 變量名表1/初值表1/,變量名表2/初值表2/ 變量名表可以是隱DO循環(huán),初值表中的常數(shù)之間須用逗號分開,重復的常數(shù)表值可以采用如下表示方法: 重復次數(shù)*常數(shù)值 在DATA語句中賦值的變量都有SAVE屬性,除非變量名又出現(xiàn)在COMMON語句中,可以通過SAVE語句或類型說明中的SAVE屬性對其顯式說明。 例如,可以對數(shù)組作以下的初始化:DIMENSION A(10,10)DATA A/100*1.0/ ! 按數(shù)組變量名統(tǒng)一初始化DATA A(1,1), A(10,1), A(3,3) /2*2.5, 2.0/! 按數(shù)組元素逐個初始化DATA (A(I,J),
38、I=1,5,2),J=1,5) /15*1.0/! 按隱DO循環(huán)初始化對數(shù)值型數(shù)據(jù)作初始化: INTEGER n, order, list(100)REAL coef(4),eps(2),pi(5),x(5,5)COMPLEX*8 cstuffDATA n/0/, order/3/, list/100*0/DATA coef/1.0,2*3.0,1.0/, eps(1)/.00001/DATA pi/5*3.14159/DATA (x(j,i),i=1,j),j=1,5)/15*1.0/DATA cstuff/(-1.0,-1.0)/ a)種別說明方法種別是F90的新概念。一個數(shù)據(jù),不僅有一個
39、類型,并在同一類型下可分為若干種別,種別值確定了數(shù)據(jù)的大小范圍和精度。有了種別說明后,程序更易于移植。為了提高效率,節(jié)約內存,按照該變量表達的值范圍與表達的精度范圍,把同一類劃分成幾個種別,不同種別分配不同數(shù)目的內存單元。3種別說明種別由種別選擇符說明,寫在類型關鍵字后括號內,其關鍵字是KIND,后跟=號及種別值。其形式為: 類型說明(KIND=種別值) 例如:要說明變量X是實型,種別值是2 REAL(KIND=2): X 一個變量必有一個種別,如果變量的類型說明語句中沒有種別說明符,如: REAL: X, Y或 REAL X, Y則表示變量X,Y的種別缺省,這時采用系統(tǒng)規(guī)定的標準值。 b)
40、種別值Compaq Fortran 提供了如下幾類種別值:整數(shù):有4種,種別值即為字節(jié)數(shù)n。 種別值n取值范圍 (-28n-128n-1-1)INTEGER(KIND=1) 或 INTEGER*1 -128127INTEGER(KIND=2) 或 INTEGER*2 -3276832767INTEGER(KIND=4) 或 INTEGER*4 -21474836482147483647缺省值INTEGER(KIND=8) 或 INTEGER*8 -92233720368547758089223372036854775807僅用于Alpha芯片機型實型數(shù):有3種。F90標準沒有規(guī)定指數(shù)的允許范圍
41、和有效位數(shù)。 REAL(KIND=4) or REAL*4通常實數(shù)的范圍是10-381038之間的7位有效數(shù)字缺省值REAL(KIND=8) or REAL*8等價于雙精度型DOUBLE PRECISIONREAL(KIND=16) or REAL*16僅用于OpenVMS、Tru64 UNIX、Linux操作系統(tǒng)復型數(shù):有3種。每種表示整型數(shù)據(jù)或實型數(shù)據(jù)的方法都可以用來表示復型數(shù)據(jù)的實部和虛部。注意簡寫與完整寫法之間的差別。 COMPLEX(KIND=4) or COMPLEX*8缺省值COMPLEX(KIND=8) or COMPLEX*16等價于雙精度復型DOUBLE COMPLEXCO
42、MPLEX(KIND=16) or COMPLEX*32僅用于OpenVMS、Tru64 UNIX、Linux操作系統(tǒng)邏輯型:有4種 LOGICAL(KIND=1) or LOGICAL*1LOGICAL(KIND=2) or LOGICAL*2LOGICAL(KIND=4) or LOGICAL*4缺省值LOGICAL(KIND=8) or LOGICAL*8僅用于Alpha芯片機型字符型:有1種CHARACTER(KIND=1)字節(jié)型BYTE:取值為1個字節(jié),等價于INTEGER(KIND=1)。 c)種別函數(shù)F90中關于種別選擇的內部函數(shù)有:KIND(X): 函數(shù)KIND用于查詢變量的種
43、別,它返回X的種別值,當X取值為0時,返回標準種別值即缺省值。 如:KIND(0)返回值是整型的標準種別值 KIND(0.)返回值是實型的標準種別值 KIND(.FALSE.)返回值是邏輯型的標準種別值 KIND(“A”)返回字符型的標準種別值。SELECTED_REAL_KIND(n,m): 該函數(shù)返回實型變量對所取的值范圍和精度恰當?shù)姆N別值。其中n是指明十進制有效位的位數(shù),m指明值范圍內以10為底的冪次。例如: SELECTED_REAL_KIND(6,70)的返回值為8,表示一個能表達6位精度、值范圍在10701070之間實型數(shù)的種別值為8。 如該機型上不能提供滿足要求的種別值時,它的返
44、回值是:-1(當精度位數(shù)達不到時),-2(當數(shù)值范圍達不到時),-3(兩者都達不到時)。對給定的實型和復型量X,它的精度和范圍可通過內部函數(shù)PRECISION(X)和RANGE(X)查出。 SELECTED_INT_KIND(m): 該函數(shù)返回整型變量對所取的值范圍恰當?shù)姆N別值。m指明值的范圍是10m10m。可以用SELECTED_REAL_KIND或SELECTED_INT_KIND定義一個PARAMETER常數(shù)以備后用。例如:下面的語句定義了有9位數(shù)的整型數(shù)。INTEGER, PARAMETER : MY_INT_KIND = SELECTED_INT_KIND(9)INTEGER(MY_
45、INT_KIND) : HILL d)常數(shù)種別程序中的常數(shù)如要標明種別,方法有二。若是數(shù)值型常數(shù)或邏輯型常數(shù)則用后輟法,即后加一下劃線,再跟種別值。注意: 當實數(shù)型數(shù)據(jù)的指數(shù)字母是D時,禁止說明種別值。 如果復型數(shù)據(jù)的實部和虛部都是整數(shù),則它的精度和范圍與缺省的實型相同。如果兩部分都是實型,則它的精度和范圍按如下的方法確定:兩部分有相同的種別,為該種別,兩部分中有不同的種別,則由較大的種別值確定。例如:21_2+7.6_4 表示整型種別為2的數(shù)21與實型種別為4的數(shù)7.6相加。3.8E-5_40.87D-16雙精度數(shù)據(jù)禁止說明種別值(4.7_8,5)復型數(shù)據(jù)表示用括號,逗號分開前面的實部(種別
46、值為8的實數(shù))和后面的虛部(缺省種別值的整數(shù))。.FALSE._4 表示邏輯型,其常數(shù)值是假,種別值是4。 例: INTEGER,PARAMETER: LONG=SELECTED_REAL_KIND(9,99) REAL : A=2.8_LONG, B=1.23456789E60_LONG來保證常數(shù)有需要的9位有效數(shù)字和-10-991099的指數(shù)范圍。PRECISION(A)和RANGE(A)的返回值應是9和99。若是字符型常數(shù),則用前輟法,把種別值列在字符常數(shù)之前,其間用下劃線連接。例如:對Compaq Fortran 1_或: 1_計算數(shù)學或:計算數(shù)學 字符串的字符不只限于Fortran字
47、符集內,處理系統(tǒng)支持的圖形符號也是允許的。在FORTRAN語言標準里面,規(guī)定了十進制之外的三種進制形式: 二進制常量形式: B digit digit B “ digit digit ”其中的數(shù)字只能是0或1.即二進制常量表示為以字母B開頭,后跟用一對撇號或引號括起來的數(shù)字串,而且每個數(shù)字不是0就是l。 e)整數(shù)的其他進制 八進制常量形式: O digit digit O “ digit digit ”其中的數(shù)字只能是0到7.八進制常量表示為以字母O開頭,后跟用一對撇號或引號括起來的數(shù)字串,而且每個數(shù)字是0到7之間的一個數(shù)字。十六進制常量形式: Z digit digit Z “ digit
48、digit ”其中的數(shù)字只能是0到9,和A到F這五個字母,用來表示10到15.十六進制常量表示為以字母z開頭,后服用一對撇號或引號括起來的數(shù)字或字母的串,而且每個數(shù)字是數(shù)字0到9或字母A到F之一。 這里定義的二進制、八進制和十六進制的字面常量形式只能用于DATA語句中。 如果要在CVF系統(tǒng)里面使用非十進制來表示數(shù)值,除了屬于FORTRAN標準的二進制,八進制,十六進制三種額外的進制形式之外,還可以使用如下的語法形式表示更多的進制形式: s base # nnn.其中:base是從2到36的任意整數(shù)。這表明CVF可以使用從2進制一直到36進制來表示整數(shù)。而如果base省略了,但是給出了符號#,那
49、么表示后面的整型數(shù)據(jù)被看成16進制,如果base 和#都被省略了,那么后面的整型數(shù)據(jù)就被看成默認的10進制。s 數(shù)的符號例: 下面的7個變量所賦予的整型數(shù)值都是表示十進制的3,994,575:I = 2#1111001111001111001111m = 7#45644664J = +8#17171717K = #3CF3CFn = +17#2DE110L = 3994575index = 36#2DM8F例: 這些都是正確的整型常量; 0 -112 +43212 62_2 1992110235764803_831_SHORT 9999999999999999999_LONG例: 這些都是錯誤
50、的整型常量:9999999999999999999 !對于默認的種別參數(shù)來說,這個數(shù)太大了。3.14 !不允許出現(xiàn)小數(shù)點。32,767 !不允許出現(xiàn)逗號。33_3 !3不是一個有定義的種別參數(shù)。 4屬性說明說明語句除說明對象的類型、種別外,還可說明對象的屬性。每種屬性說明都有專門的關鍵字,各屬性關鍵字間用逗號分開,全部屬性關鍵字寫在說明語句種別說明符之后,雙分隔號:之前,各屬性關鍵字之間次序任意。屬性不僅用于說明數(shù)據(jù),還用于說明過程。 a)屬性屬性說明關鍵字有很多,將在有關章節(jié)中詳細說明。一般來說,數(shù)據(jù)屬性描述了一個對象是如何在程序中被應用的,可以使用一個或多個語句來規(guī)定某個數(shù)據(jù)對象的屬性。V
51、isual Fortran的數(shù)據(jù)屬性如下表所示。屬性關鍵字描述適用范圍ALLOCATABLE說明動態(tài)數(shù)組數(shù)組AUTOMATIC聲明變量在堆棧中而不是在內存中變量DIMENSION說明數(shù)組數(shù)組變量EXTERNAL聲明外部函數(shù)的名稱過程INTENT說明過程啞元的用意過程啞元INTRINSIC聲明一個內部函數(shù)過程OPTIONAL允許過程被調用時省略啞元過程啞元PARAMETER聲明常量常量POINTER聲明數(shù)據(jù)對象為指針變量PRIVATE限制模塊中的實體訪問于本塊內常量、變量或模塊PUBLIC允許模塊中的實體被外部使用常量、變量或模塊SAVE保存過程執(zhí)行后其中的變量值變量或公共塊STATIC說明變量
52、為靜態(tài)存儲變量TARGET聲明變量為目標變量VOLATILE聲明對象為完全不可預測并在編譯時無優(yōu)化數(shù)據(jù)對象或公共塊 a) PARAMETER屬性PARAMETER屬性也稱常數(shù)名屬性。被說明對象一旦附加了PARAMETER屬性,就不再是變量名,而是一個常數(shù)的名字,它的形式雖與變量名形式一樣,但在程序中不能改變值,只能當常數(shù)使用。在F77中: PARAMETER參數(shù)語句 例:PARAMETER (LOCAL=100) 具體使用在后面張杰介紹例如:INTEGER,PARAMETER : K=20REAL(8),PARAMETER : PI=3.141592654, K_PAI=K*PI, Light
53、_Speed=2.99654E10b) DIMENSION屬性說明一個符號名是數(shù)組名,只要在說明語句中附加數(shù)組屬性關鍵字。數(shù)組屬性關鍵字是:DIMENSION(數(shù)組形狀說明)。例如: INTEGER(KIND=2),DIMENSION(-2:8) : X 說明了X是種別為2的整型一維數(shù)組名,數(shù)組下標以-2為下界,8為上界,共有11個元素。注意:F77中不允許DIMENSION和類型說明語句出現(xiàn)在同一個語句中。 a) 邏輯型變量類型說明語句一般形式為:LOGICAL(KIND=種別值),屬性說明表: 變量名表=初始值例如:LOGICAL(KIND=2),DIMENSION(1:10) : X說明
54、X數(shù)組內有元素X(1),X(2),X(10)都是種別值為2的邏輯型數(shù)據(jù)。變量名表中要說明為邏輯型的對象可以是一般變量名、數(shù)組名、函數(shù)名、構造名等等,彼此用逗號分開,還可以對變量賦以初值。例如要說明L1,L2是邏輯型變量,并且置L1初值為真,可寫成: LOGICAL : L1=.TRUE.,L2 或 LOGICAL L1,L25 邏輯型數(shù)據(jù)b) 邏輯賦值邏輯變量取值的方法和數(shù)值型數(shù)據(jù)類似:賦初值、讀入、使用邏輯賦值語句賦值。邏輯賦值語句的一般形式是: 邏輯變量邏輯表達式它通常用來將一個較長的表達式的值賦給一個邏輯型變量,而后作為條件寫在IF語句或選擇構造中,使條件變得簡短明確。例:輸入實數(shù)x,求
55、下面的函數(shù)值。Program Sampleimplicit nonereal : x,ylogical : in_sideread *, x ; print *,x=,xin_side=x1.and.x字符型數(shù)據(jù) a) 字符變量字符常數(shù)的一般形式是由一對單引號 或一對雙引號“”(90)限定的一串字符。字符串中的字符,允許是PORTRAN字符集的任意字符,如果系統(tǒng)還支持其它字符,例如漢字、希臘字、化學符號、數(shù)學符號,也可引入字符串內,用一對 或“”界定。字符型數(shù)據(jù)除了有類型、種別外,比其它類型還多了一個長度特性,即規(guī)定它有幾個字符數(shù)。其一般形式是:CHARACTER(LEN=整型字符長度表達式,
56、KIND=種別值),屬性說明 : 變量名表=初始值或 CHARACTER *字符長度 變量名表 CHARACTER 變量名1*字符長度,變量名2*字符長度, 例如:CHARACTER(LEN=12,KIND=1) : A,BCHARACTER(KIND=1,LEN=12) : A,BCHARACTER(12,1) : A,BCHARACTER *12 : A,BCHARACTER *12 A,B都是等價的,前者說明X、Y2是字符型變量,種別參數(shù)為3每個變量長度為12。后者說明表明長度為12,種別值為1。例如:CHARACTER(LEN=*),PARAMETER : C_NAME=GIRLCHA
57、RACTER(LEN=*),PARAMETER : C_NAME=BOY都是合法的說明語句,說明字符常量C_NAME,前者長度為4,后者長度為3。 CHARACTER后面說明的長度是其后所有實體名的公共長度,如果某一變量的長度與其它不同,可以在其變量名后標出自己的特有長度,方法是在變量名后寫上*及長度。例加:CHARACTER(LEN=12) : A,B*5,C,D*7,E長度也可以寫成一個*號,表示長度暫不確定,待以后與程序中實際需要的長度相一致。b)字符子串字符數(shù)據(jù)中某一部分相連的字符為字符子串,也可以作為一個實體與字符變量一樣參加操作。字符子串的一般形式是:V(e1:e2)。 V是字符型
58、實體名,包括字符變量名、字符函數(shù)名、字符數(shù)組元素等等。 e1,e2是整型表達式或正整常數(shù),e1的值指明子串在V中的起始列號,e2的值指明子串在V中的終止列號。如果e1省略,表示子串從第一個字符取起;e2省略,表示子串取到末尾;如e1,e2都省略,表示子串從頭取到尾。例如:設有字符變量A,其取值為ABCDE12345FGH,則下面的子串取值為:A(3:11) - CDE12345F,A(I+4:9) - E1234(I=1),1234(I=2)A(:5) - ABCDEA(11:) - FGHA(:) - ABCDE12345FGHA(3:3) - Cc) 字符操作與賦值字符操作符只有一個,稱并
59、置符,為兩相連的斜杠“/”,其功能是把前后兩個字符串拼連在一起。例如:AB/CDE的值為ABCDE。 C/ABC/A(2:6)/B(1:4)/D是把幾個字符串連在一起。字符賦值語句的一般形式: 字符變量字符表達式 在字符賦值語句中,要求兩邊種別值一致,此外還有長度問題。當兩邊長度不等時,賦值時以左邊的字符變量說明長度為準,當右邊小于左邊時,尾部補空格,否則將右邊尾部的多余部分截去。對字符串作初始化: CHARACTER (LEN=10) nameCHARACTER BELL, TAB, LF, FF, STARS*6CHARACTER*8 helpDATA name,STARS /Zhang
60、Fei,*/DATA BELL,TAB,LF,FF /7,9,10,12/! 對ACSII控制字符碼賦于值DATA help(1:4),help(5:8) /2*HELP/! 對字符子串分段賦值 d) 字符比較在書寫FORTRAN語句時,大小寫字母是等價的,但當進行字符操作和字符比較時必須看成是不同的。字符作比較實際上是比較它們的ASCII碼代碼大小。字符比較的一般形式:字符表達式關系操作符字符表達式例如:A=(XY/C2)/C3 當C1、C2、C3是字符型變量名時是合法的,要先計算兩端字符表達式的值,而后比較它們是否滿足關系。比較的方法隨關系操作符而異: 、關系操作符只要兩邊表達式第一個字符
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版實驗室裝修、設備采購一體化合同范本3篇
- 2025版庭院園藝設計租賃合同示范文本大全3篇
- 《社會主義發(fā)展戰(zhàn)略》課件
- 《我的家鄉(xiāng)河北》課件
- 基于2025年度標準的軟件開發(fā)與技術服務合同3篇
- 2025版木托盤產業(yè)鏈整合合同4篇
- 2025版學校飯?zhí)檬称钒踩c營養(yǎng)管理承包合同3篇
- 云母制品在平板電腦觸控面板材料中的應用考核試卷
- 公路工程現(xiàn)場急救與事故處理考核試卷
- 2025年度木材進出口貿易代理合同標準文本2篇
- 2024版?zhèn)€人私有房屋購買合同
- 2024爆炸物運輸安全保障協(xié)議版B版
- 《食品與食品》課件
- 讀書分享會《白夜行》
- 光伏工程施工組織設計
- DB4101-T 121-2024 類家庭社會工作服務規(guī)范
- 化學纖維的鑒別與測試方法考核試卷
- 2024-2025學年全國中學生天文知識競賽考試題庫(含答案)
- 臨床微生物檢查課件 第2章細菌的生理
- 作品著作權獨家授權協(xié)議(部分授權)
- 取水泵站施工組織設計
評論
0/150
提交評論