FORTRAN語言第5章(共8章).ppt_第1頁
FORTRAN語言第5章(共8章).ppt_第2頁
FORTRAN語言第5章(共8章).ppt_第3頁
FORTRAN語言第5章(共8章).ppt_第4頁
FORTRAN語言第5章(共8章).ppt_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第五章,FORTRAN 90數(shù)據(jù)類型,數(shù)據(jù)類型的概念 整型數(shù)據(jù) 實(shí)型數(shù)據(jù) 復(fù)型數(shù)據(jù) 字符型數(shù)據(jù) 邏輯型數(shù)據(jù),本章主要內(nèi)容,5.1 數(shù)據(jù)類型的概念,數(shù)據(jù)記錄了現(xiàn)實(shí)世界中客觀事物的屬性,它包括兩個(gè)方面:數(shù)據(jù)內(nèi)容(值)和數(shù)據(jù)形式(型)。 數(shù)據(jù)內(nèi)容就是數(shù)據(jù)的值; 數(shù)據(jù)形式就是數(shù)據(jù)的存儲(chǔ)形式和操作使用方式,也稱為數(shù)據(jù)類型。,整型 實(shí)型 復(fù)型 邏輯型 字符型,內(nèi)部數(shù)據(jù)類型,數(shù)值型,非數(shù)值型,派生數(shù)據(jù)類型,數(shù)據(jù)類型的性質(zhì):,(1)類型的名稱 (2)允許值的集合 (3)允許值(常量)的表示方法 (4)操作這些值的運(yùn)算的集合,5.2 整型數(shù)據(jù),在FORTRAN語言中,整型值的集合是數(shù)學(xué)上整數(shù)的一個(gè)子集。每種方法

2、用類別類型參數(shù)來區(qū)分。整型常量的表示形式為一個(gè)數(shù)字串,并在數(shù)字串后有一個(gè)可任選的下劃線后再跟類別類型參數(shù)。例如,373、-1024、35792、0、32_2、1992110235764803_8,整型數(shù)據(jù)類型的字節(jié)數(shù)和取值范圍,在FORTRAN90中,還可以使用二進(jìn)制、八進(jìn)制和十六進(jìn)制整型常量,但它只能用于DATA語句中。,二進(jìn)制常量的形式是以字母B開頭,后跟用一對(duì)撇號(hào)或雙引號(hào)括起來的數(shù)字串,而且每個(gè)數(shù)字不是0就是1。例如 B10101101、B1011101 八進(jìn)制常量的形式是以字母O開頭,后跟用一對(duì)撇號(hào)或雙引號(hào)括起來的數(shù)字串,而且每個(gè)數(shù)字是0到7之間的一個(gè)數(shù)字。例如,O453、O376。,

3、十六進(jìn)制常量的形式是以字母Z開頭,后跟用一對(duì)撇號(hào)或雙引號(hào)括起來的數(shù)字串,而且每個(gè)數(shù)字是0到9或字母A到F之間的一個(gè)。例如,ZFFA9、 B9B45 。 INTEGER i, j, k DATA i /B110010/ DATA j /O62/ DATA k /Z32/,整型變量的說明,基本格式為: INTEGER ( KIND = 類別參數(shù)值 ) ,屬性列表 : 變量列表 其中類別參數(shù)值取1,2,4 例:INTEGER I,TOTAL INTEGER(2) : K,LIMIT INTEGER(KIND=4) : MIN,MAX INTEGER*2 : K,LIMIT INTEGER*4 : M

4、IN,MAX,變量的屬性,屬性是被說明對(duì)象的所屬性質(zhì)。一個(gè)對(duì)象被說明具有某一屬性時(shí),就使該對(duì)象具有某種附加功能、特殊的使用方式與適用范圍。屬性的種類有很多,這里介紹兩種最常見屬性的說明格式。 INTEGER, PARAMETER : I=5,J=24 INTERGER, DIMENSION(1:10) : A,例5.1 求Fibonacci數(shù)列前30項(xiàng)之和。Fibonacci數(shù)列的遞推公式是: F00 F11 FiFi1Fi2,分析:設(shè)置兩個(gè)變量來存放已求得的最后兩項(xiàng)的值:F2保存已求得的最后一項(xiàng)(即Fi1),F(xiàn)1保存前一項(xiàng)(即Fi2)。這樣,下一待求項(xiàng)就是F1和F2之和,我們將它賦值給F,然

5、后將原來的F2賦值給F1,原來的F賦值給F2,又可以由F1和F2推出一個(gè)新的F,如此可以一直推下去。 本例中,F(xiàn)ibonacci數(shù)列前30項(xiàng)之和是一個(gè)很大的數(shù),已經(jīng)超過了類別參數(shù)為2的整數(shù)的取值范圍,只能采用類別參數(shù)為4整數(shù)。如果數(shù)超過類別參數(shù)為4的整數(shù)取值范圍,就只能采用實(shí)型數(shù)據(jù)來處理。,5.3 實(shí)型數(shù)據(jù),FORTRAN用類別類型參數(shù)區(qū)分不同類型的實(shí)型數(shù)據(jù)。實(shí)型數(shù)據(jù)有單精度和雙精度之分。單精度類別類型參數(shù)值為4,雙精度數(shù)類別類型參數(shù)值為8。 一般形式為: 有效數(shù)E指數(shù) _類別參數(shù) 有效數(shù)D指數(shù),實(shí)型變量的說明,REAL ( KIND = 類別參數(shù)值) ,屬性列表 : 變量列表 單精度用REA

6、L(4)定義,雙精度用REAL(8)或DOUBLE PRECISION定義。缺省的類別值為4,即為單精度。 REAL : M12,AREA,LEN REAL(4) : DX,DY REAL*4 : DX,DY REAL(8) : D_PRE,X REAL*8 : D_PRE,X DOUBLE PRECISION : D_PRE,X,例5.2 利用雙精度按下面近似公式求,直到最后一項(xiàng)的絕對(duì)值小于1015為止。 分析:首先找出累加項(xiàng)fn與fn-1的遞推關(guān)系。不難推出 f0 =x,源程序如下: Implicit none Real*8 :x,y,f Integer:n Read*,x Y=x F=x

7、 Do f=-f*(2*n-1)/(2*n)*(2*n-1)/(2*n+1)*x*x if (abs(f) .LT. 1d-15) exit y=y+f n=n+1 Enddo Print*,y=,y,f=,f end,5.4.1 復(fù)型常量 將兩個(gè)實(shí)數(shù)用逗號(hào)分隔,再用括號(hào)括起來就構(gòu)成了一個(gè)FORTRAN復(fù)型常量。其中第一個(gè)實(shí)數(shù)稱為復(fù)數(shù)的實(shí)部,第二個(gè)實(shí)數(shù)稱為復(fù)數(shù)的虛部。例如(1.25,0.4)、(1E2,-3.4)分別表示復(fù)數(shù)1.25+0.4i和100.0-3.4i,(1.0_4,4.2)。 復(fù)型數(shù)據(jù)的類別類型參數(shù)是用于說明實(shí)部和虛部這兩個(gè)實(shí)型數(shù)據(jù)的類別類型。,5.4 復(fù)型數(shù)據(jù),5.4.2 復(fù)型

8、變量 COMPLEX ( KIND = 類別值) ,屬性列表 : 變量列表 COMPLEX Z1,Z2 COMPLEX(4) : COM_VAL COMPLEX(8) : CZ, CQ CZ = (3.0, 6.3) CQ = (8.76E+5, -67.8E-3) 如果實(shí)部和虛部都不是常數(shù),而是表達(dá)式,則應(yīng)該用CMPLX函數(shù)將實(shí)部和虛部組成復(fù)型數(shù)據(jù)再賦給復(fù)型變量。例如 C = CMPLX(3.0*A, 6.0+B),例5.5 有一線段AB,A的坐標(biāo)為(1,1),B的坐標(biāo)為(4.5,4.5),如圖5.2所示。求AB的長(zhǎng)度,以及黃金分隔點(diǎn)C的坐標(biāo)。黃金分割點(diǎn)在線段的0.618處。,分析:A,B的

9、坐標(biāo)可用復(fù)數(shù)表示:即A為(1.0,1.0),B為(4.5,4.5)。AB的長(zhǎng)度就是(A-B)的模,從圖中可以明顯地看到,AB的長(zhǎng)度,可用ABS函數(shù)直接求出復(fù)數(shù)的模。黃金分隔點(diǎn)C的坐標(biāo)為A+0.618(B-A)。,PROGRAM COMP_3 IMPLICIT NONE COMPLEX:A,B,C REAL:L READ*,A,B C=A+0.618*(B-A) L=ABS(A-B) PRINT*,L=,L PRINT*,C=,C END PROGRAM COMP_3 用READ語句讀入復(fù)型數(shù)據(jù)時(shí),以2個(gè)實(shí)數(shù)作為一個(gè)復(fù)型數(shù)據(jù),第一個(gè)實(shí)數(shù)為復(fù)數(shù)的實(shí)部,第二個(gè)實(shí)數(shù)為虛部,用括號(hào)括起來。程序的輸入可以

10、如下: ( 1.0 , 1.0 ),( 4.5 , 4.5 ),5.5 字符型數(shù)據(jù),5.5.1 字符型常量 字符型常量又叫字符串常量,它是用單撇號(hào)或雙撇號(hào)括起來的字符序列。例如,ABCD、CHINA、12345678等都是FORTRAN字符型常量。字符型常量中的字符可以是計(jì)算機(jī)系統(tǒng)中允許使用的任何字符。在字符串內(nèi)大小寫字母均可使用,但它們是不同的字符。單撇號(hào)和雙撇號(hào)只起定界作用,它們不是字符串的組成部分。,字符串中含有單撇號(hào)或雙引號(hào)的處理,當(dāng)字符串中又含有單撇號(hào)時(shí),例如要將IM A STUDENT作為一個(gè)字符串來處理,為了區(qū)分是字符串中的字符還是定界符,可采用兩種方式表示: IM A STUD

11、ENT IM A STUDENT 前者用雙撇號(hào)作定界符,后者用單撇號(hào)作定界符,而將字符串的單撇號(hào)用兩個(gè)單撇號(hào)表示,系統(tǒng)會(huì)自動(dòng)將其處理為字符串的一個(gè)單撇號(hào)字符。,字符串內(nèi)字符的個(gè)數(shù)稱為字符串的長(zhǎng)度。字符串和的長(zhǎng)度為0。在字符串內(nèi)部的空格是有效字符,并占有一個(gè)字符的位置。例如,ABC和A B C是兩個(gè)不同的字符串。前者字符串的長(zhǎng)度為3,后者為5。 一個(gè)字符常數(shù)需要寫成多行源程序時(shí),有一條特殊的規(guī)則:不僅每一續(xù)行都不能尾隨注釋,而且每一續(xù)行必須以續(xù)行標(biāo)識(shí)符(&)作為開頭,任何尾隨&號(hào)之后或者前導(dǎo)&號(hào)之前的空格都不是字符常數(shù)的組成部分,&號(hào)本身不是常數(shù)的組成部分。其它的字符包括空格都是字符常數(shù)的有效組

12、成部分。,5.5.2 字符型變量,CHARACTER(LEN=n1,KIND=n2),屬性說明 : 變量列表 格式中的n1和n2是一個(gè)整數(shù)和整型表達(dá)式,n1代表被說明變量的長(zhǎng)度,n2代表字符變量的類別參數(shù),各項(xiàng)屬性說明是字符型變量有關(guān)屬性的說明。,例如: CHARACTER(LEN=25,KIND=2):A,B,C CHARACTER(KIND=3,LEN=15):VAR,CH CHARACTER(LEN=8),DIMENSION(1:10):X,Y,Z CHARACTER(LEN=10),PARAMETER:NAME=FORTRAN_90 CHARACTER(LEN=15):A CHARAC

13、TER*15:A CHARACTER(LEN=15):A,B*8,C*5,在以下兩種狀態(tài)下均可以采用星號(hào)來說明長(zhǎng)度: (1)具有PARAMETER屬性的字符常量。例如以下兩個(gè)語句: CHARACTER(LEN=*),PARAMETER:PARA= FORTRAN_90 CHARACTER*(*),PARAMETER:PARA= FORTRAN_90 給出的字符串長(zhǎng)度是確定的,因此字符符號(hào)常數(shù)PARA的長(zhǎng)度是可知的(等于10),可用*說明。 (2)用字符變量作虛元時(shí) 在子程序中,用字符型變量作虛元時(shí)可以不指明其具體長(zhǎng)度,即用*定義長(zhǎng)度。這時(shí)它可以與任意長(zhǎng)度的字符型實(shí)元相結(jié)合,有利于提高子程序的通

14、用性。,5.5.3 子字符串,字符變量名(m:n) 其中,m和n是整數(shù)和整型表達(dá)式,表示子字符串在字符串中的起止位置,該子字符串的長(zhǎng)度為n-m+1(nm1)。例如有說明語句如下: CHARACTER(LEN=80):ROW 則ROW(4:7)表示ROW字符串中從第4個(gè)字符到第7個(gè)字符組成的一個(gè)子串,其長(zhǎng)度為4;ROW(I:I)表示該字符型變量的第I個(gè)字符。,5.5.4 字符表達(dá)式與字符賦值語句,字符表達(dá)式是指用字符運(yùn)算符把字符常數(shù)、字符變量等字符型數(shù)據(jù)連接起來的有意義的式子。 字符運(yùn)算符只有一個(gè),就是字符連接符/,它是由兩個(gè)斜杠組合而成的,其作用是將兩個(gè)字符型數(shù)據(jù)連接起來,成為一個(gè)字符型數(shù)據(jù)。

15、該運(yùn)算符是一個(gè)雙目運(yùn)算符,在其兩側(cè)應(yīng)各有一個(gè)字符型操作數(shù)。 例如: HE/LLO!的值為HELLO!, FORTRAN/ /90的值為 FORTRAN 90。,PROGRAM CHAR_1 IMPLICIT NONE CHARACTER(LEN=5):A,B,C CHARACTER(LEN=11):D A=CHINA B=JAPAN C=A D=A/ /B PRINT*, A,B,C END PROGRAM CHAR_1,5.5.5 字符關(guān)系表達(dá)式,字符比較的規(guī)則是:一般按其ASCII代碼的值(見附錄)進(jìn)行比較。常用的字符順序?yàn)椋簲?shù)字0小9大;數(shù)字比字母小;大寫字母比小寫字母?。蛔帜窤小Z大,

16、a小z大;空格字符最小。 在進(jìn)行關(guān)系運(yùn)算時(shí),遵循以下規(guī)律: (1)兩個(gè)單個(gè)字符比較,以它們的代碼值決定大小。 A2的值為真,(2)兩個(gè)字符串比較時(shí),將兩個(gè)字符串中的字符自左向右這個(gè)進(jìn)行比較。若所有字符完全相同,則兩表達(dá)式相等;否則,以第一次出現(xiàn)不同字符的比較結(jié)果為準(zhǔn)。例如 SHANGHAI SHANKONG的值為真 因?yàn)榈?個(gè)字符E O,則前一表達(dá)式的值小于后者。 (3)若兩個(gè)字符串中字符個(gè)數(shù)不等時(shí),則將較短的字符串后面補(bǔ)足空格后再比較。例如 WHERE WHEREVER的值為真 因?yàn)橄葘HERE后邊補(bǔ)空格成為WHERE 之后,再與WHEREVER比較,第6個(gè)字符空格小于字母V。,5.5.6

17、 用于字符處理的內(nèi)部函數(shù),1求字符串長(zhǎng)度函數(shù)(LEN和LEN_TRIM) LEN(String)和LEN_TRIM(String) 其中String為字符型常量、變量等字符串。 函數(shù)LEN的結(jié)果值是String中字符個(gè)數(shù)(包括前置及尾隨空格)。函數(shù)LEN_TRIM的值是把字符串去掉尾部空格后的長(zhǎng)度。例如 LEN_TRIM(ABC D)的值為5 LEN(ABC D)的值為5 LEN_TRIM(ABC )的值為3 LEN(ABC )的值為5 LEN_TRIM( )的值為0 LEN( )的值為5,2除去字符串尾部空格函數(shù)(TRIM) 其一般形式為:TRIM(String) 函數(shù)的結(jié)果值是去掉Stri

18、ng中的尾部空格后剩余的字符串。例如 TRIM(ABC )的值為ABC TRIM( ABC )的值為 ABC,3子串位置函數(shù)(INDEX) 其一般形式為:INDEX(String1, String2) 其中String1,String2均為字符型,且類別參數(shù)應(yīng)該一致。若String2是String1的一個(gè)子串,其函數(shù)的結(jié)果值是一個(gè)正整數(shù),該數(shù)表示String2在String1中最左邊的子串的起始位置;若String2不是String1的子串,則函數(shù)結(jié)果值為0。例如,INDEX(FOLLOW ME, ME)的值為8,因?yàn)镸E的第一個(gè)字符M出現(xiàn)在FOLLOW ME的第8個(gè)字符位置上;INDEX(F

19、OLLOW ME, L O)的值為0。,4字符串比較函數(shù)(LGE、LGT、LLE和LLT) (1)大于或等于函數(shù)LGE 其一般形式為:LGE(String1,String2) 若String1String2,其函數(shù)值為真,否則為假。例如,LGE(ABC, EFG)的值為假。 (2)大于函數(shù)LGT (3)小于或等于函數(shù)LLE (4)小于函數(shù)LLT,5首、尾部空格調(diào)整函數(shù)(ADJUSTL和ADJUSTR) 其一般形式為:ADJUSTL(String)和ADJUSTR(String) 調(diào)左函數(shù)ADJUSTL的函數(shù)值是把String的首部空格調(diào)到尾部,調(diào)右函數(shù)ADJUSTR的函數(shù)值是把String的尾

20、部空格調(diào)到首部。例如 ADJUSTL( ABC )的值為ABC ADJUSTR(ABC )的值為 ABC,6.字符與字符序號(hào)相互轉(zhuǎn)化函數(shù),(1)字符向字符序號(hào)轉(zhuǎn)化函數(shù) 其一般形式為:ICHAR(CH)和IACHAR(CH) 其中CH是長(zhǎng)度為1的字符型常量和變量。其函數(shù)的結(jié)果值為字符在相應(yīng)處理系統(tǒng)中的字符序號(hào),例如 IACHAR(A)的值為65 IACHAR(Z)的值為90 在FORTRAN90中,允許String所代表的字符長(zhǎng)度超過1,此時(shí)只取第一個(gè)字符作為有效字符。例如,ICHAR(ABC)的值為65。,(2)字符序號(hào)向字符轉(zhuǎn)化函數(shù) 其一般形式為:CHAR(I)和ACHAR(I) 其中I可以

21、是整型常量、變量或表達(dá)式。其函數(shù)的結(jié)果值為序號(hào)I所對(duì)應(yīng)的字符。例如 ACHAR(65)的值為 A IACHAR(90)的值為Z,5.5.7 字符處理應(yīng)用舉例,例5.7 在讀入的一批單詞中,把以字母B開頭的打印出來,直到輸入ZZZ結(jié)束。 PROGRAM CHAR_2 IMPLICIT NONE CHARACTER*10:WORD DO READ*,WORD IF(WORD=ZZZ)EXIT IF(WORD(1:1)=B)PRINT*,WORD END DO END PROGRAM CHAR_2,也可以用INDEX函數(shù): PROGRAM CHAR_2 IMPLICIT NONE CHARACTER

22、*10:WORD DO READ*,WORD IF(WORD=ZZZ)EXIT IF(INDEX(WORD, B)=1)PRINT*,WORD END DO END PROGRAM CHAR_2,例5.9 翻譯密碼,為了保密,常不采用明碼電文,而用密碼電文,按事先約定的規(guī)律將一個(gè)字符轉(zhuǎn)換為另一個(gè)字符。收?qǐng)?bào)人則按相反的規(guī)律轉(zhuǎn)換得到原來的字符。例如,將字母AF,BG, C H,即將一個(gè)字母變成其后第五個(gè)字母。例如: HE IS IN BEIJING. 應(yīng)轉(zhuǎn)換為: MJ NX NS GJNONSL.,分析:可以這樣實(shí)現(xiàn),取該字母的ASCII代碼,加上5,再按其ASCII碼轉(zhuǎn)換為另一個(gè)字母。為此可用I

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論