FORTRAN 語言程序設計課件_第1頁
FORTRAN 語言程序設計課件_第2頁
FORTRAN 語言程序設計課件_第3頁
FORTRAN 語言程序設計課件_第4頁
FORTRAN 語言程序設計課件_第5頁
已閱讀5頁,還剩236頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2023-11-181FORTRAN語言程式設計2第一章FORTRAN

語言的

程式結(jié)構(gòu)及其相容性

程式設計基本概念FORTRAN語言的發(fā)展簡史FORTRAN77程式的構(gòu)成FORTRAN90程式的構(gòu)成及其相容性

3第一節(jié)程式設計基本概念程式設計的基本過程程式設計的基本方法模組化設計自頂向下、逐步細化的設計過程結(jié)構(gòu)化設計程式設計語言4高級語言程式設計基礎(Fortran)什麼是程式?用電腦能識別的語言所描述的解決實際問題的方法和步驟。電腦能識別的語言有哪些?機器語言、組合語言、高級語言什麼是程式設計?5程式設計的基本過程問題的分析問題的性質(zhì);輸入/輸出數(shù)據(jù);數(shù)學模型或常用的方法-----演算法演算法的設計可行性;確定性;有窮性;有零或多個輸入;有一個或多個輸出流程的描述自然語言;演算法描述語言;流程圖;編程調(diào)試與運行測試;調(diào)試程式設計=演算法+數(shù)據(jù)結(jié)構(gòu)+方法+工具BACK6演算法什麼是演算法?解決問題的方法和步驟。演算法的特徵?有窮性演算法中執(zhí)行的步驟總是有限次數(shù)的,不能無止境地執(zhí)行下去。

確定性演算法中的每一步操作必須具有確切的含義,不能有二義性有效性演算法中的每一步操作必須是可執(zhí)行的。要有數(shù)據(jù)輸入演算法中操作的對象是數(shù)據(jù),因此應提供有關(guān)數(shù)據(jù)。要有結(jié)果輸出演算法的目的是用來解決一個給定的問題,因此應提供輸出結(jié)果,否則演算法就沒有實際意義。7演算法演算法的描述有哪些?

自然語言一般流程圖

N-S圖

Pad圖偽代碼演算法描述語言(如:C,F(xiàn)ortran)等8自然語言:輸入x,y;判斷x是否為0:若x=0,則輸出錯誤資訊;否則計算y/x→z,且輸出z

例:計算z=y/x演算法描述語言演算法描述語言+自然語言(偽代碼)INPUTx,y輸入x,yIF(x=0)THENIF(x=0)THENOUTPUT“ERROR”

輸出錯誤資訊ELSEELSE{z=y/x{z=y/xOUTPUTz

輸出z}}BACK9N-S結(jié)構(gòu)化流程圖輸入x,y

輸出錯誤資訊z=y/x

輸出z

結(jié)束編程WRITE(*,100)100FORMAT(1X,‘INPUTX,Y:’)READ(*,*)X,YIF(X.EQ.0.0)THENWRITE(*,200)ELSEZ=Y/XWRITE(*,300)ZENDIF200FORMAT(1X,‘ERROR!X=0’)300

FORMAT(1X,‘Z=’,E15.6)ENDx=0yesnoBACK101.一般流程圖是一種傳統(tǒng)的演算法描述方法它用不同的幾何圖形來代表不同性質(zhì)的操作。主要優(yōu)點:是直觀性強,初學者容易掌握。缺點是對流程線的使用沒有嚴格限制,如毫無限制地使流程任意轉(zhuǎn)來轉(zhuǎn)去,將使流程圖變得毫無規(guī)律,難以閱讀。為了提高演算法可讀性和可維護性,必須限制無規(guī)則的轉(zhuǎn)移,使演算法結(jié)構(gòu)規(guī)範化。11例1.4用一般流程圖來描述例1.1的演算法。輸入a、ba<b?輸出uyn12例1.2的演算法。y1→ix>max?輸入maxy輸入xi≤9?x→maxi+1→i輸出maxnn132.N-S圖S1S2S3

YNS1S2

當P滿足時SP由於傳統(tǒng)流程圖的缺點,1973年美國學者I.Nassi和B.Shneiderman提出了一種新的流程圖工具─N-S圖。N-S圖以三種基本結(jié)構(gòu)作為構(gòu)成演算法的基本元素,每一種基本結(jié)構(gòu)用一個矩形框來表示,而且取消了流程線,各基本結(jié)構(gòu)之間保持順序執(zhí)行關(guān)係。N-S圖可以保證程式具有良好的結(jié)構(gòu),所以N-S圖又叫做結(jié)構(gòu)化流程圖。14例1.5用N-S圖來描述例1.1的演算法。輸入a、bYN輸出ua<b?15例1.2的演算法。輸入max1→i當i≤9時輸入xynx→maxi+1→i輸出maxx>max?16按功能劃分模組按層次組織模組主模組模組1模組2模組3模組5模組6模組4模組化設計BACK17自頂向下、逐步細化的設計過程

優(yōu)點:符合人們解決複雜問題的普遍規(guī)律,可顯著提高程式設計效率;用先全局後局部、先整體後細節(jié)、先抽象後具體的方法設計出的程式具有清晰的層次結(jié)構(gòu),容易閱讀和理解。BACK181966年Bohra和Jacopini提出了組成結(jié)構(gòu)化演算法的三種基本結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)迴圈結(jié)構(gòu)特點:

(1)只有一個入口。

(2)只有一個出口。

(3)結(jié)構(gòu)中無死語句,即結(jié)構(gòu)內(nèi)的每一部分都有機會被執(zhí)行。

(4)結(jié)構(gòu)中無死迴圈。結(jié)構(gòu)化設計記憶:單入口、單出口、無死語句、無死迴圈。19順序結(jié)構(gòu)選擇結(jié)構(gòu)迴圈結(jié)構(gòu)順序結(jié)構(gòu)S1S2S3結(jié)構(gòu)化設計20兩路分支結(jié)構(gòu)S1

S2

多路分支結(jié)構(gòu)條件情況1情況2情況3……S1S2S3……當型迴圈WHILE條件S直到型迴圈SUNTIL條件條件滿足不滿足BACK21自頂向下逐步細化模組化設計結(jié)構(gòu)化編碼如何保證得到結(jié)構(gòu)化程式22程式設計語言機器語言;組合語言;高級語言語言名稱適用範圍BASIC教學和小型應用程式的開發(fā)FORTRAN科學與工程計算程式的開發(fā)PASCAL專業(yè)教學與應用程式的開發(fā)C中小型系統(tǒng)程式的開發(fā)COBAL商業(yè)與管理應用程式的開發(fā)dBASE資料庫管理程式的開發(fā)FoxBASE資料庫管理程式的開發(fā)C++面向?qū)ο蟪淌降拈_發(fā)LISP人工智慧程式的開發(fā)PROLOG人工智慧程式的開發(fā)JAVA應用程式的開發(fā)BACK23第二節(jié)FORTRAN語言的發(fā)展簡史

1954年IBM公司在IBM704上發(fā)展

DOS下

1956年IBM公司FORTRANII1966年美國國家標準化協(xié)會(兩級美國標準)FORTRANII和FORTRANIV1972年國際標準化組織(三級國際標準)FORTRANII(基本級)FORTRAN中間級和FORTRANIV(完全級)1978年美國國家標準化協(xié)會FORTRAN771992年國際標準化組織ISO公佈Fortran90標準

與77版本差異較大在“形式”上讓Fortran脫胎換骨

BACK24第二節(jié)FORTRAN語言的發(fā)展簡史

Microsoft(微軟)公司FORTRAN90FORTRANPOWERSTATION1.0~4.0DEC公司VisualFORTRANVisualFORTRAN5.0~6.01997年國際標準化組織ISO公佈Fortran95標準

加強平行運算2004年Fortran2003面向?qū)ο驜ACK25第三節(jié)FORTRAN77程式的構(gòu)成計算z=x+y

PROGRAMMAIN主程序說明語句

INTEGERX,Y,Z說明了三個整型變數(shù)X、Y、Z

WRITE(*,100)用於輸出一個提示資訊,以提醒用戶從鍵盤輸入兩個整數(shù)給X與Y100FORMAT(1X,‘INPUTX,Y:’)

READ(*,*)X,Y輸入語句,表示要從鍵盤輸入兩個整型數(shù)分別賦給X與Y

Z=X+Y賦值語句,X與Y相加後賦給Z

WRITE(*,200)Z輸出X與Y之和,即Z的值200FORMAT(1X,‘X+Y=’,I6)

END結(jié)束語句,表示程式的結(jié)束26

INTEGERX,Y,Z主程序,並不直接計算X與Y的和,而是通過調(diào)用函數(shù)副程式(副程式名為M)來計算;另外,在主程序中可以省略主程序說明語句(即PROGRAM語句)

WRITE(*,10)10FORMAT(1X,‘INPUTX,Y:’)

READ(*,*)X,Y

Z=M(X,Y)

WRITE(*,20)Z20FORMAT(1X,‘X+Y=’,I6)

ENDCFUNCTION副程式(稱為函數(shù)副程式),此函數(shù)副程式M的功能是具體計算兩個整數(shù)之和FUNCTIONM(A,B)INTEGERA,BM=A+BEND27一個程式單位必須有一個、也只能有一個END語句,並且它只能出現(xiàn)在一個程式單位的最後;每一個程式單位可以包括若干行,在FORTRAN77中,有語句行和非語句行兩類;FORTRAN77程式中的語句前可以沒有標號,也可以有標號,根據(jù)需要而定;FORTRAN77對各類程式單位中的第一個語句是有規(guī)定的;FORTRAN77根源程式必須按一定的格式書寫。標號區(qū)續(xù)行標誌區(qū)語句區(qū)注釋區(qū)1~567~7273~80FORTRAN77

程式結(jié)構(gòu)與組成的規(guī)定BACK28第四節(jié)FORTRAN90程式的構(gòu)成

及其相容性FORTRAN77FORTRAN90源代碼只能用固定格式進行輸入源代碼可以用兩種格式進行輸入:自由格式和固定格式以字母C或字元“*”起始的一行為注釋行以“!”起始的一行為注釋行要求以一個非空格且非零的字元作為續(xù)行標誌要求以一個“&”作為一個續(xù)行標誌一行中最多只能寫一條語句一行中可以寫多條語句,用“;”隔開29第二章MicrosoftFortranPowerStation4.0

開發(fā)環(huán)境介紹MicrosoftFortranPowerStation4.0用戶介面查看文檔查看介面元素對話框菜單工具欄輸出和出錯資訊30第一節(jié)MicrosoftFortranPowerStation4.0用戶介面專案工作區(qū)窗口:這個帶標籤的窗口使訪問應用程式的任何部分變得簡單、迅速;資訊視圖:在BooksOnline中可找到答案;資源視圖:訪問菜單、對話框、位圖、以及其他用戶介面的資源;檔視圖:組織檔,並方便地打開它們;輸出窗口和狀態(tài)欄:位於螢幕下端,這些區(qū)域通知用戶並提供結(jié)果;代碼編輯器:此為用戶工作之地,它可以輸入代碼、修正錯誤、以及觀察應用程式的形態(tài)。BACK第二節(jié)查看文檔BACK第三節(jié)查看介面元素對話框BACKResourceID(資源ID);Caption(標題);Prompt(提示)BACK菜單菜單BACK2023-11-1838

數(shù)據(jù)類型及其運算最基本的語句實例分析順序結(jié)構(gòu)是面向過程程式設計三種基本結(jié)構(gòu)中最簡單的一種結(jié)構(gòu),它只需按照處理順序,依次寫出相應的語句即可。2023-11-1839§2.1數(shù)據(jù)類型及其運算數(shù)據(jù)

表現(xiàn)形式

數(shù)據(jù)類型常量變數(shù)運算式函數(shù)整型實型雙精度型常量複型常量邏輯型常量字元型常量2023-11-1840§2.1數(shù)據(jù)類型及其運算常量變數(shù)及其定義符號常量及其定義FORTRAN運算式41常量整型常量小數(shù)形式實型常量指數(shù)形式雙精度型常量複型常量邏輯型常量字元型常量42常量常量是在程式運行過程中,其值不改變的量。例如15、0、-21、3.1416、’FORTRAN’等分為:直接常量和符號常量兩大類。

431.直接常量

直接常量是指數(shù)據(jù)本身就是一個常量。分為:整型常量、實型常量(1)整型常量:稱為整型常數(shù)或整數(shù),(正數(shù)、負數(shù)、0)。如125,-258,+28等。注意:123,000×;千分位123.00×

;點123

00×

空格(77可以,而90及以上版本出錯)。

4477中一個整型常量占2個位元組90中整型常量的範圍沒有明確規(guī)定。如16位電腦上整型常量的範圍是2個位元組,表示為十進位數(shù)為-32768~+32767,即-215~215-1。45

(2)實型常量

即實型常數(shù)或簡稱實數(shù)。它有2種表示形式:小數(shù)形式和指數(shù)形式。小數(shù)形式根據(jù)小數(shù)點前後是否有數(shù)字形成3種不同格式,分別是:m.n、m.、.n。數(shù)字前面可以加上“+”或“-”號,默認為正號。小數(shù)點“.”前或後可以不出現(xiàn)數(shù)字。例如3.52、4.0、-5.(相當於-5.0)、.6378(相當於0.6378)等。46指數(shù)形式可以表示一個絕對值非常大或非常小的數(shù),表示方式是用E將有效數(shù)字和指數(shù)分隔,E的前面是指數(shù),E的後面是小數(shù)。例如:

1.32E5表示13200或1.32*105。1.285E-12表示1.285*10-12。注意:有效數(shù)字可是整型或?qū)嵭统A?,?E2和1.0E2兩種表示100.0,但與100同;E後只能是整型常量,如5E3.2×

,.E8×

。還有複型、邏輯型、字元型等類型的常量練習:P28/3472.符號常量

是用一個識別字來代表一個常量。常用PARAMETER語句來定義。例如:PARAMETER(PI=3.1416,M=10,…)。含義:定義了兩符號常量PI和M,PI代表3.1416,M代表10,…注意:PARAMETER、()、如有多項,用逗號隔開。

48符號常量及其定義注意問題:非執(zhí)行語句,寫在所有可執(zhí)行語句之前,且,一旦定義,不能再改變;命名規(guī)則:同變數(shù)名;但應先寫類型說明,後寫PARAMETER語句;一個PARAMETER中,可定義多個符號常量;類型:數(shù)值型、邏輯型、字元型;符號常量不能作為語句標號,也不能出現(xiàn)在FORMAT中;此外,均可。符號常量與變數(shù)的區(qū)別:編譯時,變數(shù)分配存儲空間,符號常量進行數(shù)據(jù)替換。49變數(shù)及其定義變數(shù)與變數(shù)名隱含規(guī)則類型說明語句整型說明語句實型說明語句雙精度型說明語句複型說明語句邏輯型說明語句字元型說明語句隱含說明語句50變數(shù)說明中應注意的問題有效範圍:說明語句中所說明的變數(shù)類型只在本程式單位內(nèi)有效;優(yōu)先順序:類型說明語句→隱含說明語句→隱含規(guī)則(I-N規(guī)則);出現(xiàn)順序:IMPLICIT在最前,專門的類型說明語句在本程式中所有執(zhí)行語句的前面;隱含規(guī)則適用:整型和實型變數(shù);IMPLICIT適用:所有的FORTRAN變數(shù)的類型,但各種專門的類型說明語句只適用於對一種類型的變數(shù)進行說明。51變數(shù)

是指在程式運行過程中其值可以改變的量。變數(shù)實質(zhì)上代表一個記憶體單元52變數(shù)名

一個變數(shù)需要一個名字來識別同一程式中,不能用同一個變數(shù)名代表不同的變數(shù)。變數(shù)的名字即識別字。53

表2.1FORTRAN77與FORTRAN90識別字對照FORTRAN類型組成字元長短開頭字元大小寫要求FORTRAN77及以前版本字母、數(shù)字1~6個字元超過6後面字元無效字母不區(qū)分FORTRAN90及以上字母、數(shù)字和下劃線1~31個字元超過31個後面字元無效字母不區(qū)分練習:P28/254注意:要“見名知義”,如:AREA“面積”,GRADE“成績”,AVER“平均值”等。FORTRAN無“保留字”,但為避免誤解、混淆,應儘量避免。55變數(shù)的說明

三種方式:1.強制說明2.

隱含說明語句IMPLICIT3.

隱含說明I—N規(guī)則順序:123561.強制說明格式為:類型說明符變數(shù)名1,變數(shù)名2…另一種格式:REAL::SCORE=89.5可同時進行初始化INTEGER整型REAL實型DOUBLEPRECISION雙精度型

COMPLEX複型變數(shù)說明LOGICAL邏輯型CHARACTER字元型可定義多個,中間用“,”分開。如:REALAREA,AVER,STUD572.隱含說明語句IMPLICIT將某個或某些字母開頭的變數(shù)規(guī)定為所需的類型格式:IMPLICIT類型說明(字母表)例:IMPLICITINTEGER(A,C,T-V)含義583.隱含約定

FORTRAN語言規(guī)定:以I,J,K,L,M,N6個字母開頭的變數(shù)被當作整型變數(shù)。又稱I~N規(guī)則如:在無前面兩種說明時,I1,MA,N3S等都為整型變數(shù)。

59FORTRAN運算式算術(shù)運算式關(guān)係運算式邏輯運算式字元運算式不同類型數(shù)據(jù)的混合運算例題60算術(shù)運算式運算順序為:乘冪**→乘*、除/→加+、減-常用的算術(shù)型標準函數(shù)P19—2061注意問題書寫:左

右,數(shù)學

FORTRAN,適當加括??;乘號*不能省略;只允許用圓括號;連續(xù)使用乘冪運算符時,加上必要的括??;求值順序:括弧內(nèi)→函數(shù)→**→*、/→+、-允許不同數(shù)值類型的量進行混合運算;實型運算注意誤差問題;整型運算注意整數(shù)範圍。62例題A=1.0,B=3.5,T=10.0,X=5.0,I=-5,J=7,K=3,求下麵運算式的值。-(A+T)(B+(X/T))/(4.0*A)(I*J)/K(I/K)*J+T/X-(K+1)/5+I*A-BSQRT(REAL(ABS(K)+1))MAX(J,MOD(J,K))J+INT(T/B)/A2023-11-1863§2.2最基本的語句賦值表控輸入輸出END、STOP、GOTO賦初值格式輸入輸出64賦值語句格式:變數(shù)名=運算式算術(shù)賦值語句邏輯賦值語句邏輯型變數(shù)=邏輯運算式數(shù)值型變數(shù)=邏輯運算式×

邏輯型變數(shù)=算術(shù)運算式×

字元賦值語句

65算術(shù)賦值語句數(shù)值型變數(shù)名或數(shù)組元素=算術(shù)運算式右邊的算術(shù)運算式允許整型與實型的混合運算;但注意:整數(shù)相除,結(jié)果為整型;左、右類型不一致,系統(tǒng)自動右轉(zhuǎn)左算術(shù)賦值語句執(zhí)行過程:1、計算右邊的值2、計算結(jié)果轉(zhuǎn)換與左邊類型一致3、左邊=右邊。66表控輸入輸出語句格式:WRITE(*,*)

輸出表項

PRINT*,輸出項表輸出空行,WRITE(*,*)

;邏輯型變數(shù),.TRUE.輸出T;.FALSE.輸出F。表控輸入語句例題1、267表控輸入語句格式:READ(*,*)

輸入表項注意輸入數(shù)據(jù)的個數(shù)、類型應與READ一致規(guī)定:每個READ總是從新的輸入行開始讀數(shù)邏輯型變數(shù),.TRUE.用以T開頭的一串字母代替,.FALSE.以F開頭的一串字母代替READ(*,*),輸入Enter分隔符號:Enter,空格、逗號、斜杠(/)出現(xiàn)斜杠(/)符號,輸入結(jié)束,後面變數(shù)不再賦值數(shù)據(jù)各數(shù)字間不能有空格68END語句、STOP語句與GOTO語句END語句程式單位的結(jié)束主程序中END表示停止程式運行副程式中END表示需要返回調(diào)用程式STOP語句作用是停止程式的運行格式:STOP[n]GOTO語句格式:GOTO語句標號

×

69程式舉例

例2.3任意輸入兩個數(shù),對它們進行加、減、乘、除、乘方運算分析:結(jié)構(gòu)?變數(shù)?結(jié)構(gòu):順序結(jié)構(gòu)變數(shù):X1、X2,S1、S2、S3、S4、S570

realx1,x2 read*,x1,x2 s1=x1+x2 s2=x1-x2 s3=x1*x2 s4=x1/x2 s5=x1**x2 print*,"2數(shù)之和為",s1 print*,"2數(shù)之差為",s2 print*,"2數(shù)之積為",s3 print*,"2數(shù)之商為",s4 print*,"2數(shù)之冪為",s5 end問題:S1、S2、S3、S4、S5沒說明,如何判斷類型?71例2.4求f(x)=x3+sin2x+ln(x4+1)分析:f(x)用y表示,x從鍵盤輸入

implicitnone realx,y read*,x y=x**3+(sin(x))**2+log(x**4+1) print*,y end輸入:154輸出:2.40122172例2.5將兩個變數(shù)的值互換。分析:臨時變數(shù)T做橋樑

realx,y,t read*,x,y print*,"交換前x=",x print*,"交換前y=",y t=x x=y y=t print*,"交換後x=",x print*,"交換後y=",y end73方法二、直接用X和Y交換

integerx,y read*,x,y print*,"交換前x=",x print*,"交換前y=",y x=x+y y=x-y x=x-y print*,"交換後x=",x print*,"交換後y=",y end如何記?左邊:xyx右邊:x與y,+--74例2.6輸入一個三位整數(shù),將它反向輸出,如輸入123,輸出321。分析:關(guān)鍵在於如何將N拆分?

integern,m,n1,n2,n3 read*,n n1=mod(n,10) n2=mod(n/10,10) n3=n/100 m=n1*100+n2*10+n3 print*,"原來的數(shù)為:",n print*,"反向輸出的數(shù)為:",m end 如何取位?取第n位:除10n-1,除10取餘75賦初值語句DATA語句格式DATA變數(shù)表列/初值表/,變數(shù)表列/初值表/,…用DATA注意變數(shù)與常量在個數(shù)、類型等方面要一一對應初值表中,如n個連續(xù)的常量相同,簡寫:n*常量初值表中,不允許出現(xiàn)運算式如有多個DATA語句給同一變數(shù)賦初值,以最後一個為準2023-11-1876

邏輯if語句塊if結(jié)構(gòu)選擇結(jié)構(gòu)的嵌套用elseif語句實現(xiàn)多路分支塊分支選擇結(jié)構(gòu)程式舉例關(guān)係運算式格式:<算術(shù)量><關(guān)係運算符><算術(shù)量>關(guān)係運算符

.GT.(>大於);.LT.(<小於);.EQ.(==等於);

.NE.(/=不等於);.GE.(>=大於或等於);

.LE.(<=小於或等於)結(jié)果是邏輯型常數(shù).TRUE.或.FALSE.

注意兩邊的小數(shù)點不能漏實數(shù)存在誤差,在用.EQ.

與.NE.

時要特別注意一個算術(shù)型量的兩側(cè)不允許都是關(guān)係運算符邏輯運算式格式:<邏輯型量><邏輯運算符><邏輯型量>邏輯運算符

.AND.

與.OR.或.NOT.非

.EQV.等價.NEQV.不等價.XOR.異或結(jié)果是邏輯型值.TRUE.或.FALSE.含義運算順序.NOT.→.AND.→.OR.→.EQV.

.NEQV.

.XOR.邏輯運算式中,各種運算符的優(yōu)先順序:注意不同運算符的運算對象和運算結(jié)果一個邏輯型量的兩側(cè)都可以與邏輯運算符相鄰,但不能與算術(shù)運算符、關(guān)係運算符相鄰不能在算術(shù)量的兩側(cè)都出現(xiàn)關(guān)係運算符一定要注意運算順序邏輯IF語句一般形式:if(邏輯運算式)

內(nèi)嵌語句執(zhí)行過程:

1.先算圓括號內(nèi)判斷條件

2.成立,執(zhí)行內(nèi)嵌語句,然後執(zhí)行後面的語句

3.不成立,直接執(zhí)行後面的語句適用範圍:只關(guān)心一種條件時,僅執(zhí)行一個處理的簡單情況注意問題:邏輯if語句中的邏輯運算式一定要用一對圓括號括起來;邏輯if語句中的內(nèi)嵌語句只能是單個的可執(zhí)行語句,即內(nèi)嵌語句不能是非執(zhí)行語句,也不能有多於一個可執(zhí)行語句;在使用邏輯if語句時,一定要注意邏輯運算式的正確寫法,特別是在使用多個邏輯if語句時更要注意。例3.1輸入三個數(shù),求出最大和最小的值。

realx,y,z,max,min read*,x,y,z max=xmin=x if(max<y)max=y if(max<z)max=z print*,"三個數(shù)中最大數(shù)是",max if(min>y)min=y if(min>z)min=z print*,“三個數(shù)中最小數(shù)是",min end塊IF結(jié)構(gòu)邏輯if語句的局限性只允許有一個語句,多個語句無法實現(xiàn)實現(xiàn)多個分支時,如用多個邏輯if語句實現(xiàn),則每一個邏輯if語句中的邏輯運算式比較複雜塊if結(jié)構(gòu)的一般形式If(邏輯運算式)thenS1elseS2endif邏輯運算式必須用一對圓括號括起來S1、S2可由若干個可執(zhí)行語句組成,但一行上只能寫一個語句,語句太長時可以使用繼續(xù)行else語句必須單獨占一行endif語句必須單獨占一行,表示塊if結(jié)構(gòu)結(jié)束if語句與endif語句是必須的,而then、else語句可根據(jù)實際情況省略注意問題塊if語句至少應有一個end

if語句與它相對應;而邏輯if語句不用塊if結(jié)構(gòu)中有then;而邏輯if語句中無塊if語句中的then後面有多句;邏輯if語句有一句邏輯if可用塊if實現(xiàn);反之,不一定。例題3.2邏輯if與塊if區(qū)別選擇結(jié)構(gòu)的嵌套一般形式注意每層必以if開始,以end

if結(jié)束。採用縮進規(guī)則每層不允許出現(xiàn)交叉可從內(nèi)層轉(zhuǎn)到外層。反之不行;then塊與else塊也不能互轉(zhuǎn)例題3.3N-S流程圖用ELSEIF語句實現(xiàn)多路分支一般形式注意的問題:用ELSEIF語句實現(xiàn)多路分支例題3.4例題3.5使用ELSEIF語句時應注意的問題elseif語句相當於將else語句與下一行的塊if語句連接成一個語句用塊if實現(xiàn)多路分支,每一塊if必有一endif與之對應。但elseif語句不需endif與之對應塊if結(jié)構(gòu)中,可有多個else

if,但只能有一個else語句,且與最後一個else

if語句相配對塊if結(jié)構(gòu)中,也可只有else

if,而沒有else特別強調(diào),條件必須寫對,否則會出現(xiàn)邏輯錯誤塊SELECT CASE選擇結(jié)構(gòu)

問題:用elseif語句實現(xiàn)多路分支,書寫是否方便?是否容易閱讀?解決辦法:塊select case選擇結(jié)構(gòu)

一般格式selectcase(運算式)

case(運算式1)塊1case(運算式2)塊2……case(運算式n)塊ncasedefault

默認塊endselect執(zhí)行過程(1)selectcase後括弧裏的“運算式”,用來表示待選擇的內(nèi)容,如成績、工資、年齡等,一般為變數(shù)名,可是整型、邏輯型、單個字元型變數(shù)或者相應的運算式(2)後面各case分支中,case後面括弧裏的運算式相當於前面selectcase括弧裏運算式的具體取值,取值不同,動作不同(3)casedefault是缺省情況,可有可無(4)endselect為case結(jié)構(gòu)結(jié)束標誌說明

例3.4、設計程式,完成小學加、減、乘、除四則運算,即輸入兩個數(shù),再輸入一個運算符號,做對應的運算,並顯示相應的結(jié)果。

reala,b characterop!定義一個字元變數(shù)

read*,a,b,opselectcase(op) case('+') print*,'兩個數(shù)之和為:',a+b case('-') if(a<b)then print*,'被減數(shù)不能小於減數(shù)' else print*,'兩個數(shù)之差為:',a-b endifcase('*') print*,'兩個數(shù)之積為',a*bcase('/') if(b==0)then print*,'除數(shù)不能為0' else print*,'兩個數(shù)之商為',a/b endifcasedefault print*,"輸入錯誤,請重新輸入"endselectendcase後括弧內(nèi)運算式的值可用以下方式確定:(1)用逗號隔開的單個值,如:case(1,3,5,7)(2)用冒號分隔的值的範圍。一般形式為case(a:b),其中,a為下界,b為上界,下界或上界也可缺省,如:case(2:8)、case(:10)、case(’i’:’n’)、case(15:)(3)1和2的混合,如:case(2:4,6,8:)

說明例3.5編寫程式,輸入年月,輸出該月所對應的天數(shù)

分析4、6、9、11為30天,其他為31天2月:一般28天,閏年29天閏年:年能被4整除,但不能被100整除;或年能被400整除都為閏年 integeryear,month,day read*,year,month selectcase(month) case(1,3,5,7,8,10,12) day=31 case(4,6,9,11) day=30 case(2) if((mod(year,4).eq.0.and.mod(year,100).ne.0) $.or.mod(year,400).eq.0)then day=29 else day=28 endif casedefault print*,"月份輸入錯誤" endselect print*,year,"年",month,"月所對應的天數(shù)為:",dayend算術(shù)IF語句(簡單瞭解)

格式:if(算術(shù)運算式)標號1,標號2,標號3執(zhí)行過程計算算術(shù)運算式的值值小於0,執(zhí)行標號1對應的語句等於0,執(zhí)行標號2對應的語句大於0,執(zhí)行標號3對應的語句

例3.6輸入x,求函數(shù)的值。已知函數(shù)如下:此問題可以用算術(shù)if語句實現(xiàn)。程式如下:

realx read*,x if(x)10,20,3010 y=x*x+1 goto10020 y=sin(x+1) goto100 30 y=sqrt(x+2) goto100100continueprint*,"y=",yend

從上可看出,和goto結(jié)合使用,使程式結(jié)構(gòu)不太清晰,不宜多用。

程式舉例例題3.7由鍵盤輸入三個整數(shù)A、B、C,然後按從小到大的順序輸出。流程圖:例3.8輸入一個三位自然數(shù),判斷它是否為水仙花數(shù)。即:各位數(shù)字的立方和等於該數(shù)本身的數(shù)。如153=13+53+33integern,g,s,b,sread*,ng=mod(n,10) !求n的個位s=mod(n/10,10)!求n的十位b=mod(n/100,10)!求n的百位s=g**3+s*3+b**3If(s==n)thenprint*,n,"是水仙花數(shù)"elseprint*,"不是水仙花數(shù)"endifend可看運行結(jié)果153;243例3.9將學生成績分為優(yōu)(90~100分)、良(80~89)、中(70~79)、及格(60~69)、不及格五個檔次,輸入成績,輸出對應的檔次。思考:用什麼語句實現(xiàn)? integerg read*,g selectcase(g) case(0:59) print*,"不及格" case(60:69) print*,"及格" case(70:79) print*,"中" case(80:89)print*,"良" case(90:100) print*,"優(yōu)" casedefault print*,"成績輸入錯誤,請重新輸入!" endselect end作業(yè)P445、7、9要求:1、作業(yè)本上畫流程圖2、程式輸入電腦,下次上機使用3、上機要求與上次一致2023-11-18104

DO迴圈DO迴圈的一般形式與執(zhí)行過程DO迴圈中迴圈次數(shù)的計算DOwhile迴圈DOwhile迴圈的一般形式DOWHILE迴圈的執(zhí)行過程迴圈的嵌套DO迴圈的一般形式與執(zhí)行過程DO迴圈的一般形式

DOi=e1,e2[,e3](循環(huán)體)

ENDDO計算e1、e2、e3的值e1→i計算迴圈次數(shù)rr=0?執(zhí)行循環(huán)體i+e3→ir-1→rENDDO下麵的語句YN如何計算迴圈次數(shù)?DO迴圈的迴圈次數(shù)計算公式:CONT=INT((e2-e1+e3)/e3)

DO迴圈的迴圈次數(shù)的計算:迴圈控制變數(shù)可為整型、實型先將e1,e2,e3轉(zhuǎn)換成與迴圈控制變數(shù)類型一致,再計算迴圈次數(shù)當計算迴圈次數(shù)為負數(shù)時,則迴圈次數(shù)為0FORTRAN對DO迴圈結(jié)構(gòu)的一些規(guī)定:e1、e2與e3在循環(huán)體內(nèi)可以被引用,但不能被賦值在DO迴圈結(jié)構(gòu)中,可從循環(huán)體內(nèi)轉(zhuǎn)到外,但不允許從外轉(zhuǎn)到內(nèi)例4.1求累加項f的遞推式為:fi=fi-1*x/i可用賦值語句f=f*x/i來實現(xiàn)read*,x,nf=1.0y=1.0doi=1,nf=f*x/iy=y+fenddoprint*,’y=’,yend思考(舉一反三)類似這樣的連加或連乘的式子如何處理?例4.2一個整數(shù)的因數(shù)(不包括該數(shù)本身)之和等於它本身,則稱該數(shù)為完數(shù)。例如6的因數(shù)有1,2,3,1+2+3=6,6是完數(shù)。輸入一整數(shù),判斷它是否完數(shù)

integerm,sum,iread*,msum=0doi=1,m/2!該迴圈求因數(shù)之和

if(mod(m,i)==0)sum=sum+ienddoif(m==sum)thenprint*,m,'是完數(shù)'elseprint*,m,'不是完數(shù)'endifend

例4.3Fibonacci數(shù)列定義如下:

F1=1

F2=1

Fn=Fn-1+Fn-2(n>2)

求Fibonacci數(shù)列的前30項。

設待求項為F,待求項前面的第1項為F1,待求項前面的第2項為F2。首先根據(jù)F1和F2推出F,再將F1作為F2,F(xiàn)作為f1,為求下一項作準備。如此一直遞推下去。具體過程如下:

11235

第一次F2+F1→F↓↓

第二次F2+F1→F↓↓

第三次F2+F1→F與迴圈有關(guān)的控制語句1、EXIT語句迫使迴圈立即終止。通常與IF語句配合使用:IF(e)EXIT例4.6求兩個整數(shù)a與b的最大公約數(shù)和最小公倍數(shù)分析演算法:找出a與b中較小的一個,則最大公約數(shù)必在1與最小整數(shù)的範圍內(nèi)使用DO語句,迴圈變數(shù)i從較小整數(shù)變化到1一旦迴圈控制變數(shù)i同時整除a與b,則i就是最大公約數(shù),然後使用EXIT語句強制退出迴圈求出最大公約數(shù)後,直接應用最小公倍數(shù)和最大公約數(shù)之間的關(guān)係求出最小公倍數(shù)。integera,b,gcd,lcm,t print*,'請輸入兩個自然數(shù)' read*,a,b if(a>b)then

t=a;a=b;b=t

endif dot=a,1,-1 if(mod(a,t)==0.and.mod(b,t)==0)then

print*,'gcd=',t

exit endif enddo

print*,'lcm=',a*b/t

end思考加入exit後的迴圈結(jié)構(gòu),對結(jié)構(gòu)化有什麼影響?如何將這樣的程式改為結(jié)構(gòu)化的程式?2.CYCLE語句(1)用來結(jié)束本次迴圈,即跳過循環(huán)體中尚未執(zhí)行的語句

(2)使控制直接轉(zhuǎn)向迴圈條件測試部分,從而決定是否繼續(xù)執(zhí)行迴圈

(3)CYCLE和EXIT的區(qū)別

CYCLE只結(jié)束本次迴圈,而不是終止整個迴圈的執(zhí)行

EXIT語句則是結(jié)束所在迴圈,跳出所在循環(huán)體。例4.7求1~100之間的全部奇數(shù)之和。

integer::x=0,y=0

dox=1,100,1 if(mod(x,2)==0)then cycle endify=y+x

enddo print*,y end思考加入cycle後的迴圈結(jié)構(gòu),對結(jié)構(gòu)化有什麼影響?當型迴圈當型迴圈結(jié)構(gòu)的流程圖一般形式

DOWHILE

(邏輯運算式)

循環(huán)體

ENDDO例題4.8計算並輸入下列級數(shù)和DOWHILE迴圈的執(zhí)行過程執(zhí)行循環(huán)體ENDDO下麵的語句滿足迴圈條件?例4.8輸入一個整數(shù),輸出其位數(shù)

輸入整數(shù)n,位數(shù)kinteger::n,k=1read*,nn=abs(n/10)dowhile(n>0)k=k+1n=n/10enddoprint*,'k=',kend迴圈的嵌套迴圈的嵌套是指在一個循環(huán)體內(nèi)又完整地包含了另一個迴圈結(jié)構(gòu),又稱“多重迴圈”例題計算並輸出10以內(nèi)(包括10)所有自然數(shù)的階乘值,即計算1!,2!,3!,4!,5!,6!,7!,8!,9!,10!FORTRAN對迴圈嵌套的規(guī)定迴圈控制變數(shù)不允許同名不允許迴圈的交叉,會造成語法上的錯誤迴圈結(jié)構(gòu)及塊IF結(jié)構(gòu)的嵌套,要遵循“完全包含”的原則允許從內(nèi)層將控制轉(zhuǎn)到外層,但不允許從外層轉(zhuǎn)到內(nèi)層。例4.12求[100,1000]以內(nèi)的全部素數(shù)(1)判素數(shù)

(2)用窮舉法將判某個範圍內(nèi)所有數(shù)是否素數(shù)

logicalflagdom=101,1000,2flag=.true.i=2j=sqrt(real(m))dowhile(i<=j.and.flag)if(mod(m,i)==0)flag=.false.i=i+1enddoif(flag)thenprint*,m,’isaprimenumber’endifenddoend幾種迴圈組織方式的比較問題:如何選擇所需要的迴圈語句?do?dowhile?事先能確定迴圈次數(shù)

do或dowhile事先不能確定迴圈次數(shù)

dowhile很多情況下它們是可以相互代替

具體情況視個人喜好2023-11-18126結(jié)構(gòu)化程式設計鞏固訓練判斷迴圈次數(shù)訓練程式邏輯一致性訓練程式填空訓練程式改錯訓練編程訓練判斷迴圈次數(shù)訓練迴圈語句dox=2.5,-1.5,-0.5所確定的迴圈次數(shù)為迴圈語句doi=4,2,2所確定的迴圈次數(shù)為

循環(huán)體執(zhí)行的總次數(shù)為dot=1.5,10.5,1.5doi=1,10<循環(huán)體>enddoenddo循環(huán)體執(zhí)行的總次數(shù)為doj=1,10doi=j,10<循環(huán)體>enddoenddo循環(huán)體執(zhí)行的總次數(shù)為doj=1,5,2doi=10,3<循環(huán)體>enddoenddo0970550程式邏輯一致性訓練請在下面程式的空白添入合適內(nèi)容,使與上述程式等價read

(*,*)

ns=0.0[

(10)

]k=110s=s+d[

(11)

]d=1.0/(k*(k+1))if

(k.le.n

)

goto

10write

(*,*)

‘s=’,send

d

=0.5

k=k+1閱讀程式read

(*,*)

ns=0.0do

k=1,ns=s+1.0/(k*(k+1))enddowrite(*,*)

‘s=’,send

程式填空訓練1dowhile(k.ne.0)

(1)

(2)

(3)

enddogcd=llcm=

(4)

write(*,*)’n1,n2=’,n1,n2write(*,*)’gcd=’,gcdwrite(*,*)’lcm=’,lcmend

k=mod(m,l)m=linteger

gcd,lcminteger

n1,n2,mwrite(*,*)’n1,n2=’read(*,*)n1,n2if(n1.ge.n2)

then

m=n1l=n2elsem=n2l=n1endifk=mod(m,l)l=kn1*n2/l求兩個數(shù)n1,n2的最大公約數(shù)gcd,和最小公倍數(shù)lcm參照P2-3的演算法程式填空訓練2ave=(5)write(*,*)‘a(chǎn)ve=‘,avewrite(*,*)‘a(chǎn)max=‘,amaxwrite(*,*)‘a(chǎn)min=‘,aminend

x>=0.00n=(1)sum=(2)read*,,xamax=xamin=xdowhile((3))n=n+1sum=sum+xif(x>amax)amax=x

if((4))amin=xread*,xenddo0.0x<amin從鍵盤輸入一個班的學生成績,計算平均成績,班上的最高與最低成績,以輸入負數(shù)結(jié)束輸入.sum/n程式改錯訓練logicalpread(*,*)np=.true.k=2dowhile(k<=n/2)if(n/k==0)thenwrite(*,*)kp=.false.endifk=k+1enddoif(.not.p)write(*,*)nendif(mod(n,k)==0)then輸入一個正數(shù),若該數(shù)是素數(shù),則輸出素數(shù),否則,輸出該數(shù)的所有因數(shù).注意:書上p143有錯(答案k==0?!)一般改錯題有1—2處錯誤編程訓練1請編寫一程式,功能:判斷整數(shù)x是否是同構(gòu)數(shù)所謂“同構(gòu)數(shù)”是指這樣的數(shù),它出現(xiàn)在它的平方數(shù)的右邊例如:輸入整數(shù)5,5的平方數(shù)是25,5是25中右側(cè)的數(shù),所以5是同構(gòu)數(shù)x的值從健盤讀入,要求不大於100。要求:畫出此程式的流程圖(形式不限)用fortran語言,編寫此程式編程訓練2牛頓法解方程。課本P59(重要的實際應用)

要求:畫出此程式的流程圖(形式不限)用fortran語言,編寫此程式編程訓練3列印1到1000之內(nèi)能被7或11整除、但不能同時被7和11整除的所有整數(shù),並統(tǒng)計這樣的數(shù)的個數(shù)要求:畫出此程式的流程圖(形式不限)用fortran語言,編寫此程式編程訓練4辛普森法求定積分。課本P60(重要的實際應用)要求:畫出此程式的流程圖(形式不限)用fortran語言,編寫此程式

數(shù)據(jù)常量變數(shù)運算式函數(shù)整型實型

表現(xiàn)形式

數(shù)據(jù)類型數(shù)值非數(shù)值構(gòu)造類型雙精度型常量複型常量邏輯型常量字元型常量5.1數(shù)據(jù)類型的概念

一種數(shù)據(jù)類型(1)類型的名稱(2)允許值的集合(3)允許值(常量)的表示方法(4)操作這些值的運算的集合5.2整型數(shù)據(jù)

在FORTRAN語言中,整型值的集合是數(shù)學上整數(shù)的一個子集。每種方法用類別類型參數(shù)來區(qū)分。整型常量的表示形式為一個數(shù)字串,並在數(shù)字串後有一個可任選的下劃線後再跟類別類型參數(shù)。例如,373、-1024、35792、0、32_2、1992110235764803_8整型數(shù)據(jù)類型的位元組數(shù)和取值範圍在FORTRAN90中,還可以使用二進位、八進制和十六進制整型常量,但它只能用於DATA語句中。二進位:以字母B開頭,後跟用一對撇號或雙引號括起來的數(shù)字串,0--1。例如B'10101101'、B"1011101"八進制:以字母O開頭,後跟用一對撇號或雙引號括起來的數(shù)字串,0--7。例如,O'453'、O"376"。十六進制:以字母Z開頭,後跟用一對撇號或雙引號括起來的數(shù)字串,0--9或A--F。例如,Z‘FFA9’、Z“9B45”。INTEGERi,j,kDATAi/B'110010'/DATAj/O'62'/DATAk/Z'32'/

整型變數(shù)的說明格式:integer[([kind=]類別參數(shù)值)][[,屬性列表]::]變數(shù)列表1,2,4例:integeri,totalinteger(2)::k,limitinteger(kind=4)::min,maxinteger*2::k,limitinteger*4::min,max變數(shù)的屬性

屬性是被說明對象的所屬性質(zhì)。一個對象被說明具有某一屬性時,就使該對象具有某種附加功能、特殊的使用方式與適用範圍。屬性的種類有很多,這裏介紹兩種最常見屬性的說明格式。integer,parameter::i=5,j=24interger,dimension(1:10)::a例5.1求Fibonacci數(shù)列前30項之和。

Fibonacci數(shù)列的遞推公式是:

F0=0

F1=1

Fi=Fi-1+Fi-2

問題:選用那種類型合適?

Fibonacci數(shù)列前30項之和是一個很大的數(shù),已經(jīng)超過了類別參數(shù)為2的整數(shù)的取值範圍,只能採用類別參數(shù)為4整數(shù)。如果數(shù)超過類別參數(shù)為4的整數(shù)取值範圍,就只能採用實型數(shù)據(jù)來處理。

5.3實型數(shù)據(jù)FORTRAN用類別類型參數(shù)區(qū)分不同類型的實型數(shù)據(jù)。實型數(shù)據(jù)有單精確度和雙精度之分。單精確度類別類型參數(shù)值為4,雙精度數(shù)類別類型參數(shù)值為8。一般形式為:有效數(shù)E指數(shù)[_類別參數(shù)]

有效數(shù)D指數(shù)實型變數(shù)的說明real[([kind=]類別參數(shù)值)][[,屬性列表]::]變數(shù)列表單精確度用real(4)定義,雙精度用real(8)或doubleprecision定義。缺省為4。real::m12,area,lenreal(4)::dx,dyreal*4::dx,dyreal(8)::d_pre,xreal*8::d_pre,xdoubleprecision::d_pre,x1,2,4例5.2利用雙精度按下麵近似公式求直到最後一項的絕對值小於10-15為止。分析:首先找出累加項fn與fn-1的遞推關(guān)係。不難推出其中f0=x5.4.1複型常量將兩個實數(shù)用逗號分隔,再用括弧括起來就構(gòu)成了一個FORTRAN複型常量。其中:第一個為實部,第二個為虛部。例如(1.25,0.4)、(1E2,-3.4)分別表示複數(shù)1.25+0.4i和100.0-3.4i,(1.0_4,4.2)。複型數(shù)據(jù)的類別類型參數(shù)是用於說明實部和虛部這兩個實型數(shù)據(jù)的類別類型。5.4複型數(shù)據(jù)5.4.2複型變數(shù)complex[([kind=]類別值)][[,屬性列表]::]變數(shù)列表

complexz1,z2

complex(4)::com_val

complex(8)::cz,cq

cz=(3.0,6.3)

cq=(8.76e+5,-67.8e-3)若實部、虛部是運算式,則應用cmplx函數(shù)將實部和虛部組成複型數(shù)據(jù)再賦給複型變數(shù)。例如c=cmplx(3.0*a,6.0+b)例5.5有一線段AB,A的座標為(1,1),B的座標為(4.5,4.5),如圖5.2所示。求AB的長度,以及黃金分隔點C的座標。黃金分割點線上段的0.618處。分析:

A,B的座標可用複數(shù)表示:即A為(1.0,1.0),B為(4.5,4.5)。

AB的長度就是(A-B)的模,從圖中可以明顯地看到,AB的長度,可用ABS函數(shù)直接求出複數(shù)的模。黃金分隔點C的座標為:A+0.618×(B-A)。

programcomp_3implicitnonecomplex::a,b,creal::lread*,a,bc=a+0.618*(b-a)l=abs(a-b)print*,'l=',lprint*,'c=',cendprogramcomp_3

注意:讀入複型數(shù)據(jù)時,以2個實數(shù)作為一個複型數(shù)據(jù),一為實部,二為虛部,用括弧括起來。程式的輸入可以如下:(1.0,1.0),(4.5,4.5)5.5字元型數(shù)據(jù)5.5.1字元型常量

字元型常量又叫字串常量,它是用單撇號或雙撇號括起來的字元序列。例如,″ABCD″、'CHINA'、'12345678'字元可是允許使用的任何字元。區(qū)分大小寫。單撇號和雙撇號只起定界作用,不屬字串。問題:串中含有單撇號或雙引號如何處理兩種方式表示:

″I'MASTUDENT″'I''MASTUDENT'前者用雙撇號作定界符後者用單撇號作定界符,而將字串的單撇號用兩個單撇號表示,系統(tǒng)會自動將其處理為字串的一個單撇號字元。同樣,要表示雙撇號如何?串內(nèi)字元的個數(shù)稱為字串的長度。字串’’和””的長度為0。在字串內(nèi)部的空格是有效字元,並佔有一個字元的位置。例如,'ABC'和'A

B

C'是兩個不同的字串。前者長度為3,後者為5。一個字元常數(shù)需要寫成多行根源程式時,有一條特殊的規(guī)則:1、每一續(xù)行都不能尾隨注釋。2、每一續(xù)行必須以續(xù)行識別字(&)作為開頭,任何尾隨&號之後或者前導&號之前的空格都不是字元常數(shù)的組成部分,&號本身不是常數(shù)的組成部分。其他的字元包括空格都是字元常數(shù)的有效組成部分。5.5.2字元型變數(shù)character(len=n1[,kind=n2])[[,屬性說明]::]變數(shù)列表

格式中的n1和n2是一個整數(shù)和整型運算式n1代表長度,n2代表類別參數(shù),各項屬性說明是字元型變數(shù)有關(guān)屬性的說明。例如character(len=25,kind=2)::a,b,ccharacter(kind=3,len=15)::var,chcharacter(len=8),dimension(1:10)::x,y,zcharacter(len=10),parameter::name='fortran_90'character(len=15)::acharacter*15::acharacter(len=15)::a,b*8,c*5在以下兩種狀態(tài)下均可以採用星號來說明長度:(1)具有parameter屬性的字元常量。例如以下兩個語句:character(len=*),parameter::para='fortran_90'character*(*),parameter::para='fortran_90'給出的字串長度是確定的,因此字元符號常數(shù)para的長度是可知的(等於10),可用*說明。(2)用字符變數(shù)作虛元時副程式中,用字符型變數(shù)作虛元時可以不指明其具體長度,即用*定義長度。這時它可以與任意長度的字元型實元相結(jié)合,有利於提高副程式的通用性。5.5.3子字串字元變數(shù)名(m:n)

其中:

m和n是整數(shù)和整型運算式,表示子串在串中的起止位置,該子串長度為n-m+1(n≥m≥1)。例如:character(len=80)::row

row(4:7)表示row字串中從第4個字元到第7個字元組成的一個子串,其長度為4;row(i:i)表示該字元型變數(shù)的第i個字元。5.5.4字元運算式與字元賦值語句字元運算式是指用字元運算符把字元常數(shù)、字元變數(shù)等字元型數(shù)據(jù)連接起來的有意義的式子。字元運算符只有一個″//″作用是將兩個字元型數(shù)據(jù)連接起來,成為一個字元型數(shù)據(jù)。該運算符是一個雙目運算符。例如,'he'//'llo!'

'hello!','fortran'//''//'90'

'fortran

90'。programchar_1implicitnonecharacter(len=5)::a,b,ccharacter(len=11)::da='china'b='japan'c=ad=a//''//bprint*,a,b,c,d

endprogramchar_15.5.5字元關(guān)係運算式字元比較的規(guī)則是:按ASCII碼的值(見附錄)進行比較。常用的字元順序為:

″空格″<0<…<9<A<…<Z<a<…<z在進行關(guān)係運算時,遵循以下規(guī)律:(1)單個字元,以代碼值決定大小。

'A'>'B'的值為假

'8'>'2'的值為真(2)兩串比較時,自左向右逐個進行比較。所有字元完全相同,則兩運算式相等;否則,以第一次出現(xiàn)不同字元的比較結(jié)果為準。例如:'SHANGHAI'<'SHENZHENG'

真(3)兩串字元個數(shù)不等,短串後補空格後再比較。例如:'WHERE'<'WHEREVER'

真5.5.6用於字元處理的內(nèi)部函數(shù)1.求字串長度函數(shù)(len和len_trim)len(string)和len_trim(string)其中string為字元型常量、變數(shù)等字串。函數(shù)len=string中字元個數(shù)(包括空格)。函數(shù)len_trim去掉尾部空格後的長度。例如

len_trim(‘a(chǎn)bcd’)=5;len(‘a(chǎn)bcd’)=5len_trim(‘a(chǎn)bc‘)=3;len(‘a(chǎn)bc‘)=5len_trim(‘‘)=0;len(‘‘)=52.除去字串尾部空格函數(shù)(trim)一般形式為:trim(string)

函數(shù)的結(jié)果值是去掉string中的尾部空格後剩餘的字串。例如

trim('abc')的值為'abc'trim('abc')的值為'abc'3.子串位置函數(shù)(index)其一般形式為:index(string1,string2)其中:1、string1,string2均為字元型,且類別參數(shù)應該一致。2、若string2是string1的一個子串,其函數(shù)的結(jié)果值是一個正整數(shù),該數(shù)表示string2在string1中最左邊的子串的起始位置;3、若string2不是string1的子串,則函數(shù)結(jié)果值為0。例如,index('followme','me')=8

index('followme','lo')=0。4.字串比較函數(shù)(lge、lgt、lle和llt)(1)大於或等於:lge(2)大於:lgt(3)小於或等於:lle(4)小於:llt其一般形式為:lge(string1,string2)若string1≥string2,為真,否則為假。例如,l

溫馨提示

  • 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

提交評論