第4章常和變量_第1頁
第4章常和變量_第2頁
第4章常和變量_第3頁
第4章常和變量_第4頁
第4章常和變量_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第4章 常量和變量 常量和變量都是程序中預留的用于保存數(shù)據(jù)的內(nèi)存空間。常量的值在程序運行過程中始終不會發(fā)生變化。而變量的值在程序的運行過程中是可以變化的。在fortran語言中,有五種基本的數(shù)據(jù)類型可供使用。他們分別是整型(integer)、實型(real)、復型(complex)、字符型(character)和邏輯型(logical)。按用途,又可以分數(shù)值型、字符型和邏輯型三種。相應的常量和變量也可以分為這三種。本章將按照用途介紹常量和變量的基本概念。4.1 數(shù)值型常量及其類型 數(shù)值型常量的值在程序運行過程中不會發(fā)生改變,它們通常也被稱為常數(shù)。數(shù)值型常量包括整型常量、實型常量和復型常量。本節(jié)

2、主要介紹數(shù)值型常量的類型和基本概念。4.1.1 整型常量整型常量也稱為整型常數(shù)或整數(shù)。按照所需存儲空間的大小,又分為長整型和短整型兩種。長整型占用4字節(jié)的存儲空間,短整型則占用2字節(jié)的存儲空間。默認情況下為長整型。有些編譯器還提供額外的擴展整型常量,如compaq visual fortran在x86及其兼容機上額外提供占用1字節(jié)空間的整型常量;在openvms、tru64unix和linux系統(tǒng)中還提供占用8字節(jié)空間的整型常量。由于存儲整型常量的內(nèi)存單元容量是一定的,因此整數(shù)所能表達的范圍是有限的。長整型能夠存儲的數(shù)值范圍為-231到231-1,即-2,147,483,648到2,147,4

3、83,647之間;短整型能夠存儲的數(shù)值范圍為-215到215-1,即-32,768到32,767之間。整型常量可以包含正負號,也可以不包含(此時默認為正,即+2與2等價)。在fortran77標準中,常量內(nèi)部的空格不起任何作用,如“123”與“123”等價;但fortran90/95標準中則不允許出現(xiàn)這種表達方式。4.1.2 實型常量 實型常量也稱為實型常數(shù)或?qū)崝?shù)。按照所需存儲空間的大小,實數(shù)分為單精度和雙精度兩種。在實數(shù)的表達方式上,可以分為小數(shù)形式和指數(shù)形式兩種。下面分別進行說明。 1實數(shù)的精度:單精度實數(shù)占用4字節(jié)的存儲空間,有效位數(shù)6到7位;雙精度實數(shù)占用8字節(jié)的存儲空間,有效位數(shù)15

4、到16位。 2實數(shù)的表達形式:當以小數(shù)形式來表達實數(shù)時,小數(shù)點的前面或后面可以不出現(xiàn)數(shù)字,但不允許小數(shù)點前后都不出現(xiàn)數(shù)字。例如,+10.4、-0.8、34.、.01等都是合法的。4.1.3 復型常量復型常量也稱為復型常數(shù)或復數(shù)。按所需存儲空間的大小分為單精度和雙精度兩種。復型常數(shù)是fortran語言中特有的一種數(shù)據(jù)結(jié)構(gòu),能夠同時存儲復數(shù)的實部和虛部。在程序中,復型常數(shù)用一個括弧中的兩個實數(shù)來表示。第一個實數(shù)表示復數(shù)的實部,第二個實數(shù)表示復數(shù)的虛部。比如:(3.0,6.3)和(1.0e2,2.0e3)。在存儲的時候,復型常數(shù)會占據(jù)兩個實數(shù)的存儲單元。因此,單精度的復型常數(shù)占用8字節(jié)的存儲空間;雙

5、精度的復型常數(shù)則需要占用16字節(jié)的存儲空間。compaq visual fortran在openvms、tru64unix和linux系統(tǒng)中還提供占用32字節(jié)存儲空間的復型常量。復型常量中實部和虛部所表達的數(shù)的范圍與同精度的實數(shù)是一致的。即單精度時的數(shù)值范圍為1.17549435e-38到3.40282347e38;雙精度時的數(shù)值范圍為2.2250738585072013d-308到1.7976931348623158d308。4.1.4 常量的存儲形式計算機在存儲上述三種不同類型的常數(shù)時,并不區(qū)分數(shù)據(jù)的具體形式,而是統(tǒng)一將數(shù)據(jù)轉(zhuǎn)化為二進制的形式進行存儲。在轉(zhuǎn)化的過程中,由于存儲空間是一定的,

6、因此存儲實型常數(shù)時會產(chǎn)生存儲誤差的問題,即計算機的截斷問題。在compaq visual fortran安裝目錄的df98bin文件夾中有一個bitviewer程序可以查看各種數(shù)據(jù)在計算機中存儲的二進制數(shù)據(jù)形式。通過它可以直觀的了解計算機中數(shù)據(jù)的存儲方式。軟件的圖形用戶界面如圖4.1所示,圖中最下面一排的方框表示數(shù)據(jù)在計算機中的存儲空間;每一個方框只有兩個數(shù)值,即0和1;右側(cè)有多個選項可供選擇,用于表示數(shù)據(jù)所占用的存儲空間。如4表示4字節(jié)、2表示2字節(jié)等。4.1.5 符號常量 在程序中有時會經(jīng)常用到同一個常數(shù)。如一些數(shù)學常數(shù)、物理常數(shù)等。如果每次都在程序中重復書寫使用這些常數(shù)值,會顯得很繁瑣。

7、fortran允許用一個名字來對常量進行命名。比如常見的用pi來代表圓周率3.1415926535。此時稱pi為“符號常量”或“符號常數(shù)”,即用符號來表示常量。在fortran中,可以使用parameter語句將一個符號聲明為常量。比如將pi聲明為常數(shù)3.1415926535,可以用如下的語句實現(xiàn): parameter (pi = 3.1415926535)4.2 數(shù)值型變量及其類型 數(shù)值型變量主要是指整型、實型、復型三種變量。系統(tǒng)會為程序中的每一個變量按照其類型開辟一塊存儲單元,用于存儲變量的值。每一個變量都需要用一個名字(變量名)來識別,并且同一個程序單元內(nèi)不能用同一個變量名來命名不同的變

8、量。本節(jié)主要介紹數(shù)值型變量的類型和基本概念。4.2.1 數(shù)值型變量概述數(shù)值型變量的分類同數(shù)值型常量一樣。整型變量用來存儲整型常量,實型變量用來存儲實型常量,復型變量用來存儲復型常量。在存儲空間的分配上,同類型的變量與常量占據(jù)相同的存儲空間。變量名的作用是識別程序中的變量。fortran中的變量名命名有一定的規(guī)則,主要有以下幾條。變量名中只能包含26個英文字母和09十個數(shù)字;在fortran90/95標準中,還允許使用下劃線“_”。變量名的第一個字符必須是字母,不能是下劃線“_”或數(shù)字。在fortran77標準中,變量名不允許超過6個字符;在fortran90/95標準中,變量名不允許超過31個

9、字符。4.2.2 使用系統(tǒng)默認的隱含約定fortran中約定:在沒有強制規(guī)定變量類型的情況下,如果變量名的首字母為i、j、k、l、m、n六個字母中的一個時,即認為該變量為整型變量,而以其他字母開頭的變量則默認為實型變量。這就是所謂的“i-n規(guī)則”?!癷-n規(guī)則”的使用有利有弊。好處就是不管在程序的什么位置,如果想要臨時添加一個變量,只要按照“i-n規(guī)則”的約定取好變量名就可以使用了;缺點也是明顯的,就是眾多隨意添加的變量使得程序閱讀起來不是很方便,更有可能造成人為錯誤。比如下面的代碼段就是一個典型的錯誤范例。test0401.f90! 這是一個錯誤的變量定義范例program test0401

10、 i = 3000 * 3 write(*, *)lend program test04014.2.3 使用類型說明語句聲明如果不想受“i-n規(guī)則”的約束,或是防止出現(xiàn)“i-n”規(guī)則下的常見錯誤,可以使用類型說明語句對變量的類型進行約定。在fortran中,基本的類型說明語句主要有六種。即integer語句、real語句、doubl precision語句、complex語句、logical語句和character語句。數(shù)值型變量主要涉及到前四種語句。即integer語句(整型說明語句)、real語句(實型說明語句)、doubl precision語句(雙精度說明語句)和complex語句(復

11、型說明語句)。類型聲明語句的語法形式如下:類型說明語句(kind=數(shù)字) : 變量名, 變量名4.2.4 用隱含說明語句聲明 除了上面提到的兩種變量類型說明方法外,還可以用隱含說明語句(implicit語句)將以某一字母開頭的所有變量都聲明為同一種類型。該語句的語法形式如下: implicit 類型說明語句 (字母列表) 其中字母列表中的字母用逗號進行間隔。如果是連續(xù)的一串字母,可以用首尾字母間加符號“-”的方式來進行縮寫。比如“c-h”。下面的聲明代碼將以字母a-g和n開頭的變量都聲明為整型: implicit integer : (a-g, n)4.2.5 數(shù)值型變量聲明及其應用 在編寫程

12、序的過程中,顯式的聲明所有用到的變量是一種良好的編程習慣,建議在編寫實際的應用程序時使用“implicit none”來進行強制的變量類型檢查。凡是沒有進行類型說明的變量,在編譯過程中都會被編譯器找出來。 在三種類型規(guī)定方法中,以類型說明語句的優(yōu)先級最高,implicit語句次之,“i-n規(guī)則”的級別最低;類型說明語句和implicit語句都是不可執(zhí)行語句,必須出現(xiàn)在本程序單元中所有可執(zhí)行語句之前;類型說明語句只能在本程序單元內(nèi)有效;double precision語句在fortran90/95標準完全可以用real(8)語句代替,目前已很少使用。4.3 字符型常量及變量 文字處理能力是for

13、tran語言的另一特色。早期fortran77中的文字處理能力較弱,在fortran90/95標準中的文字處理能力已經(jīng)大大加強。本節(jié)將介紹字符型常量和變量的基本概念。4.3.1 字符型變量概述字符型常量也稱為字符串,它是用引號(單引號或雙引號,fortran77中只允許用單引號)括起來的若干個字符。字符串中的字符可以是計算機系統(tǒng)中允許使用的任意字符,通常會大于fortran字符集。比如字符型常量beijing,”plane”,”#$%&”,”北京”都是合法的。在計算機中,一個字符通常會占據(jù)一個字節(jié)的存儲空間;但某些語言的字符在計算中需要多個字節(jié)的空間來存儲。比如,一個漢字在計算機上會占

14、據(jù)4字節(jié)的存儲空間。字符型變量是用來存儲字符型常量的變量,在程序中必須事先定義字符型變量才能使用。定義字符型常量可以使用character語句,有四種定義字符型變量的語法形式,這些語法定義會在隨后的小節(jié)進行介紹。4.3.2 定義形式一 聲明字符型變量的第一種語法形式如下。 character : 變量名 在這種形式的定義中,類型聲明語句character說明其后變量名所代表的變量為字符型變量。fortran77和fortran90/95中都可以采用這種形式進行聲明。但需要注意,在fortran77下不能出現(xiàn)分隔符“:”。采用這種形式進行聲明時,允許對變量的長度進行說明,說明的方式有兩種: 變量

15、名*len 或 變量名(len)4.3.3 定義形式二 第二種聲明字符型變量的語法形式如下。 character(kind=n) : 變量名 在這種形式的聲明中,關(guān)鍵字kind用于指出賦值號“=”后所跟的數(shù)字n為變量的種別參數(shù)(有關(guān)種別參數(shù)的內(nèi)容會在后面的小節(jié)進行講解)。這個數(shù)字實際上就是說明聲明語句中變量名所代表的變量的長度的,意義同定義形式一中的len。采用這種形式也可以定義字符型數(shù)組。在實際的編程實踐中,也可以采用如下替代形式: character(len=n) : 變量名4.3.4 定義形式三 第三種形式的字符型變量聲明的語法形式如下。 character*len : 變量名 在這種形

16、式的聲明中,類型聲明語句后的星號“*”用于指明其后所跟的數(shù)字表示變量的長度,意義和前面兩種定義形式中的差不多。這種形式的定義也可用于聲明字符型數(shù)組,形式如下: character*len : 變量名(dim) 其中的dim用于說明字符數(shù)組中的緯度的長,即長度。下面給出幾個實例。 character*20 : string character*10 : array_string(20)4.3.5 定義形式四在這種形式中,通過implicit語句來強迫使以某些字母開頭的變量被默認處理成字符型。語法形式如下:implicit character*數(shù)字 字母表implicit character(數(shù)字

17、) 字母表fortran77標準中通常采用前一種形式,fortran90/95標準中通常采用后一種形式。定義中的數(shù)字表示字符型變量的長度,即能夠存儲多少個字符。當數(shù)字緊跟character語句之后時,表示統(tǒng)一指定字符長度;當數(shù)字緊跟變量名之后時,表示單獨指定字符的長度。如果統(tǒng)一指定的字符長度與變量個別指定的長度不一致時,以個別指定優(yōu)先于統(tǒng)一指定。定義中括弧內(nèi)的部分可有可無。比如:implicit character(5) (g-n), character x4.3.6 字符型變量聲明及其應用 實際上,只要字符變量的長度不為1,則可以將其看作數(shù)組來進行理解。正因為如此,在對字符型變量進行操作時,

18、允許對字符型變量中的某一個或某幾個存儲位置上的數(shù)據(jù)進行單獨操作。這在接下來的子字符串的相關(guān)內(nèi)容中進行講解。用parameter語句配合character語句還可以定義有名字符型常量,比如: character(9) : name parameter (name = peter pan) 或 character(9), parameter : name = peter pan4.3.7 子字符串的概念 在字符型數(shù)據(jù)的應用上,還有一個子字符串(substring)的概念需要了解。所謂子字符串是指字符串的一部分。比如有一字符串為“beijing”,則“bei”、“jing”、“ei”等都是該字符串的

19、子字符串??梢杂孟旅娴男问絹硪米幼址?字符串變量名(star:end) 其中,star和end都是整型表達式。他們指定了要引用的子字符串在字符串中的起始和終止位置。4.4 邏輯型常量及變量邏輯量通常用于程序中的流程控制。在fortran中,邏輯量主要有三種:邏輯常量、邏輯變量和關(guān)系表達式。本小節(jié)主要介紹fortran中邏輯常量和邏輯變量的基本概念和應用。fortran中的邏輯常量只有兩個:true,表示“真”,即滿足邏輯條件;false,表示“假”,即不滿足邏輯條件。例如,當a=0時,此時“a1”的值就為true(真),而“a-1”的值就為false(假)。邏輯常量又稱為邏輯常數(shù),在程序

20、中,它們通常被賦給一個邏輯變量。邏輯變量被用來存放邏輯常量,它的值只能是true或false中的一個。在程序中使用邏輯變量必須事先加以定義說明。在fortran中,邏輯變量的定義是通過logical語句來實現(xiàn)的。該語句的一般形式為:logical(kind=數(shù)字) :變量名,變量名4.5 變量的初始化 變量在定義之后,通常會由系統(tǒng)按照自身設(shè)置為變量賦給一個初值。這一過程稱為變量的初始化。但是有些系統(tǒng)并不提供這種功能。如果貿(mào)然使用沒有經(jīng)過初始化的變量,很可能導致程序運行出錯。 在fortran中,允許在聲明變量的同時設(shè)置變量的初置。在fortran90/95中要設(shè)置變量的初置,可以將想要設(shè)置的初

21、值直接寫在聲明的變量之后。使用這種方法進行初值的設(shè)置時,聲明中的兩個冒號不能省略。4.6 賦值語句 變量在聲明后就可以使用了,在使用過程中,變量需要保存不同的數(shù)據(jù)。將數(shù)據(jù)的值寫進變量的過程就是賦值的過程。在fortran語言中,除了一些專用的特殊語句外,最常用的賦值手段就是賦值語句。賦值語句就是等號“=”,在fortran中有著廣泛的用途。本節(jié)就將介紹賦值的概念和賦值語句的作用。4.6.1 何為賦值所謂賦值,就是將一個常量的值傳輸給一個相應的變量。在fortran中,賦值除了通過data語句之外,還可以使用賦值語句來實現(xiàn),并且賦值語句具有比data語句更廣泛的用途。賦值語句的作用就是將一個確定的值賦給一個變量,語句的一般格式為:vp其中,表達式中的等號“=”就是賦值符;v代表一個變量名,p代表一個表達式。fortran的賦值語句有三種類型:算術(shù)賦值語句、邏輯賦值語句和字符賦值語句。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論