FORTRAN語(yǔ)言程序設(shè)計(jì)課件_第1頁(yè)
FORTRAN語(yǔ)言程序設(shè)計(jì)課件_第2頁(yè)
FORTRAN語(yǔ)言程序設(shè)計(jì)課件_第3頁(yè)
FORTRAN語(yǔ)言程序設(shè)計(jì)課件_第4頁(yè)
FORTRAN語(yǔ)言程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩264頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第一章FORTRAN

語(yǔ)言的

程序結(jié)構(gòu)及其兼容性

程序設(shè)計(jì)基本概念FORTRAN語(yǔ)言的發(fā)展簡(jiǎn)史FORTRAN77程序的構(gòu)成FORTRAN90程序的構(gòu)成及其兼容性

*第一節(jié)程序設(shè)計(jì)基本概念程序設(shè)計(jì)的基本過(guò)程程序設(shè)計(jì)的基本方法模塊化設(shè)計(jì)自頂向下、逐步細(xì)化的設(shè)計(jì)過(guò)程結(jié)構(gòu)化設(shè)計(jì)程序設(shè)計(jì)語(yǔ)言*高級(jí)語(yǔ)言程序設(shè)計(jì)基礎(chǔ)(Fortran)什么是程序?用計(jì)算機(jī)能識(shí)別的語(yǔ)言所描述的解決實(shí)際問(wèn)題的方法和步驟。計(jì)算機(jī)能識(shí)別的語(yǔ)言有哪些?機(jī)器語(yǔ)言、匯編語(yǔ)言、高級(jí)語(yǔ)言什么是程序設(shè)計(jì)?*程序設(shè)計(jì)的基本過(guò)程問(wèn)題的分析問(wèn)題的性質(zhì);輸入/輸出數(shù)據(jù);數(shù)學(xué)模型或常用的方法-----算法算法的設(shè)計(jì)可行性;確定性;有窮性;有零或多個(gè)輸入;有一個(gè)或多個(gè)輸出流程的描述自然語(yǔ)言;算法描述語(yǔ)言;流程圖;編程調(diào)試與運(yùn)行測(cè)試;調(diào)試程序設(shè)計(jì)=算法+數(shù)據(jù)結(jié)構(gòu)+方法+工具BACK*算法什么是算法?解決問(wèn)題的方法和步驟。算法的特征?有窮性算法中執(zhí)行的步驟總是有限次數(shù)的,不能無(wú)止境地執(zhí)行下去。

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

自然語(yǔ)言一般流程圖

N-S圖

Pad圖偽代碼算法描述語(yǔ)言(如:C,F(xiàn)ortran)等*自然語(yǔ)言:輸入x,y;判斷x是否為0:若x=0,則輸出錯(cuò)誤信息;否則計(jì)算y/x→z,且輸出z

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

輸出錯(cuò)誤信息ELSEELSE{z=y/x{z=y/xOUTPUTz

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

輸出錯(cuò)誤信息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=0yesnoBACK*1.一般流程圖是一種傳統(tǒng)的算法描述方法它用不同的幾何圖形來(lái)代表不同性質(zhì)的操作。主要優(yōu)點(diǎn):是直觀性強(qiáng),初學(xué)者容易掌握。缺點(diǎn)是對(duì)流程線的使用沒(méi)有嚴(yán)格限制,如毫無(wú)限制地使流程任意轉(zhuǎn)來(lái)轉(zhuǎn)去,將使流程圖變得毫無(wú)規(guī)律,難以閱讀。為了提高算法可讀性和可維護(hù)性,必須限制無(wú)規(guī)則的轉(zhuǎn)移,使算法結(jié)構(gòu)規(guī)范化。*例1.4用一般流程圖來(lái)描述例1.1的算法。輸入a、ba<b?輸出uyn*例1.2的算法。y1→ix>max?輸入maxy輸入xi≤9?x→maxi+1→i輸出maxnn*2.N-S圖S1S2S3

YNS1S2

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

優(yōu)點(diǎn):符合人們解決復(fù)雜問(wèn)題的普遍規(guī)律,可顯著提高程序設(shè)計(jì)效率;用先全局后局部、先整體后細(xì)節(jié)、先抽象后具體的方法設(shè)計(jì)出的程序具有清晰的層次結(jié)構(gòu),容易閱讀和理解。BACK*1966年Bohra和Jacopini提出了組成結(jié)構(gòu)化算法的三種基本結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)特點(diǎn):

(1)只有一個(gè)入口。

(2)只有一個(gè)出口。

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

(4)結(jié)構(gòu)中無(wú)死循環(huán)。結(jié)構(gòu)化設(shè)計(jì)記憶:?jiǎn)稳肟?、單出口、無(wú)死語(yǔ)句、無(wú)死循環(huán)。*順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)順序結(jié)構(gòu)S1S2S3結(jié)構(gòu)化設(shè)計(jì)*兩路分支結(jié)構(gòu)S1

S2

多路分支結(jié)構(gòu)條件情況1情況2情況3……S1S2S3……當(dāng)型循環(huán)WHILE條件S直到型循環(huán)SUNTIL條件條件滿足不滿足BACK*自頂向下逐步細(xì)化模塊化設(shè)計(jì)結(jié)構(gòu)化編碼如何保證得到結(jié)構(gòu)化程序*程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言;匯編語(yǔ)言;高級(jí)語(yǔ)言語(yǔ)言名稱適用范圍BASIC教學(xué)和小型應(yīng)用程序的開發(fā)FORTRAN科學(xué)與工程計(jì)算程序的開發(fā)PASCAL專業(yè)教學(xué)與應(yīng)用程序的開發(fā)C中小型系統(tǒng)程序的開發(fā)COBAL商業(yè)與管理應(yīng)用程序的開發(fā)dBASE數(shù)據(jù)庫(kù)管理程序的開發(fā)FoxBASE數(shù)據(jù)庫(kù)管理程序的開發(fā)C++面向?qū)ο蟪绦虻拈_發(fā)LISP人工智能程序的開發(fā)PROLOG人工智能程序的開發(fā)JAVA應(yīng)用程序的開發(fā)BACK*第二節(jié)FORTRAN語(yǔ)言的發(fā)展簡(jiǎn)史

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

DOS下

1956年IBM公司FORTRANII1966年美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(兩級(jí)美國(guó)標(biāo)準(zhǔn))FORTRANII和FORTRANIV1972年國(guó)際標(biāo)準(zhǔn)化組織(三級(jí)國(guó)際標(biāo)準(zhǔn))FORTRANII(基本級(jí))FORTRAN中間級(jí)和FORTRANIV(完全級(jí))1978年美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)FORTRAN771992年國(guó)際標(biāo)準(zhǔn)化組織ISO公布Fortran90標(biāo)準(zhǔn)

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

BACK*第二節(jié)FORTRAN語(yǔ)言的發(fā)展簡(jiǎn)史

Microsoft(微軟)公司FORTRAN90FORTRANPOWERSTATION1.0~4.0DEC公司VisualFORTRANVisualFORTRAN5.0~6.01997年國(guó)際標(biāo)準(zhǔn)化組織ISO公布Fortran95標(biāo)準(zhǔn)

加強(qiáng)平行運(yùn)算2004年Fortran2003面向?qū)ο驜ACK*第三節(jié)FORTRAN77程序的構(gòu)成計(jì)算z=x+y

PROGRAMMAIN主程序說(shuō)明語(yǔ)句

INTEGERX,Y,Z說(shuō)明了三個(gè)整型變量X、Y、Z

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

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

Z=X+Y賦值語(yǔ)句,X與Y相加后賦給Z

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

END結(jié)束語(yǔ)句,表示程序的結(jié)束*

INTEGERX,Y,Z主程序,并不直接計(jì)算X與Y的和,而是通過(guò)調(diào)用函數(shù)子程序(子程序名為M)來(lái)計(jì)算;另外,在主程序中可以省略主程序說(shuō)明語(yǔ)句(即PROGRAM語(yǔ)句)

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

READ(*,*)X,Y

Z=M(X,Y)

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

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

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

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

開發(fā)環(huán)境介紹MicrosoftFortranPowerStation4.0用戶界面查看文檔查看界面元素對(duì)話框菜單工具欄輸出和出錯(cuò)信息*第一節(jié)MicrosoftFortranPowerStation4.0用戶界面項(xiàng)目工作區(qū)窗口:這個(gè)帶標(biāo)簽的窗口使訪問(wèn)應(yīng)用程序的任何部分變得簡(jiǎn)單、迅速;信息視圖:在BooksOnline中可找到答案;資源視圖:訪問(wèn)菜單、對(duì)話框、位圖、以及其他用戶界面的資源;文件視圖:組織文件,并方便地打開它們;輸出窗口和狀態(tài)欄:位于屏幕下端,這些區(qū)域通知用戶并提供結(jié)果;代碼編輯器:此為用戶工作之地,它可以輸入代碼、修正錯(cuò)誤、以及觀察應(yīng)用程序的形態(tài)。*BACK第二節(jié)查看文檔BACK第三節(jié)查看界面元素對(duì)話框BACKResourceID(資源ID);Caption(標(biāo)題);Prompt(提示)BACK菜單菜單BACK工具欄BACK創(chuàng)建(Build):顯示編譯和鏈接結(jié)果;調(diào)試(Debug):調(diào)試時(shí)使用;在文件中查找(FindinFile):顯示在文件搜索中查找的結(jié)果;結(jié)果(Profile):顯示結(jié)果。

第四節(jié)輸出和出錯(cuò)信息

*39第二章順序結(jié)構(gòu)程序設(shè)計(jì)

REALX,Y,T READ*,X,Y PRINT*,"交換前X=",X PRINT*,"交換前Y=",Y T=X X=Y Y=T PRINT*,"交換后X=",X PRINT*,"交換后Y=",Y END2023/11/1240第二章順序結(jié)構(gòu)程序設(shè)計(jì)數(shù)據(jù)類型及其運(yùn)算最基本的語(yǔ)句實(shí)例分析順序結(jié)構(gòu)是面向過(guò)程程序設(shè)計(jì)三種基本結(jié)構(gòu)中最簡(jiǎn)單的一種結(jié)構(gòu),它只需按照處理順序,依次寫出相應(yīng)的語(yǔ)句即可。2023/11/1241§2.1數(shù)據(jù)類型及其運(yùn)算數(shù)據(jù)

表現(xiàn)形式

數(shù)據(jù)類型常量變量表達(dá)式函數(shù)整型實(shí)型雙精度型常量復(fù)型常量邏輯型常量字符型常量2023/11/1242§2.1數(shù)據(jù)類型及其運(yùn)算常量變量及其定義符號(hào)常量及其定義FORTRAN表達(dá)式43常量整型常量小數(shù)形式實(shí)型常量指數(shù)形式雙精度型常量復(fù)型常量邏輯型常量字符型常量44常量常量是在程序運(yùn)行過(guò)程中,其值不改變的量。例如15、0、-21、3.1416、’FORTRAN’等分為:直接常量和符號(hào)常量?jī)纱箢悺?/p>

451.直接常量

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

;點(diǎn)123

00×

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

4677中一個(gè)整型常量占2個(gè)字節(jié)90中整型常量的范圍沒(méi)有明確規(guī)定。如16位計(jì)算機(jī)上整型常量的范圍是2個(gè)字節(jié),表示為十進(jìn)制數(shù)為-32768~+32767,即-215~215-1。47

(2)實(shí)型常量

即實(shí)型常數(shù)或簡(jiǎn)稱實(shí)數(shù)。它有2種表示形式:小數(shù)形式和指數(shù)形式。小數(shù)形式根據(jù)小數(shù)點(diǎn)前后是否有數(shù)字形成3種不同格式,分別是:m.n、m.、.n。數(shù)字前面可以加上“+”或“-”號(hào),默認(rèn)為正號(hào)。小數(shù)點(diǎn)“.”前或后可以不出現(xiàn)數(shù)字。例如3.52、4.0、-5.(相當(dāng)于-5.0)、.6378(相當(dāng)于0.6378)等。48指數(shù)形式可以表示一個(gè)絕對(duì)值非常大或非常小的數(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×

。還有復(fù)型、邏輯型、字符型等類型的常量練習(xí):P28/3492.符號(hào)常量

是用一個(gè)標(biāo)識(shí)符來(lái)代表一個(gè)常量。常用PARAMETER語(yǔ)句來(lái)定義。例如:PARAMETER(PI=3.1416,M=10,…)。含義:定義了兩符號(hào)常量PI和M,PI代表3.1416,M代表10,…注意:PARAMETER、()、如有多項(xiàng),用逗號(hào)隔開。

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

是指在程序運(yùn)行過(guò)程中其值可以改變的量。變量實(shí)質(zhì)上代表一個(gè)內(nèi)存單元54變量名

一個(gè)變量需要一個(gè)名字來(lái)識(shí)別同一程序中,不能用同一個(gè)變量名代表不同的變量。變量的名字即標(biāo)識(shí)符。55

表2.1FORTRAN77與FORTRAN90標(biāo)識(shí)符對(duì)照FORTRAN類型組成字符長(zhǎng)短開頭字符大小寫要求FORTRAN77及以前版本字母、數(shù)字1~6個(gè)字符超過(guò)6后面字符無(wú)效字母不區(qū)分FORTRAN90及以上字母、數(shù)字和下劃線1~31個(gè)字符超過(guò)31個(gè)后面字符無(wú)效字母不區(qū)分練習(xí):P28/256注意:要“見(jiàn)名知義”,如:AREA“面積”,GRADE“成績(jī)”,AVER“平均值”等。FORTRAN無(wú)“保留字”,但為避免誤解、混淆,應(yīng)盡量避免。57變量的說(shuō)明

三種方式:1.強(qiáng)制說(shuō)明2.

隱含說(shuō)明語(yǔ)句IMPLICIT3.

隱含說(shuō)明I—N規(guī)則順序:123581.強(qiáng)制說(shuō)明格式為:類型說(shuō)明符變量名1,變量名2…另一種格式:REAL::SCORE=89.5可同時(shí)進(jìn)行初始化INTEGER整型REAL實(shí)型DOUBLEPRECISION雙精度型

COMPLEX復(fù)型變量說(shuō)明LOGICAL邏輯型CHARACTER字符型可定義多個(gè),中間用“,”分開。如:REALAREA,AVER,STUD592.隱含說(shuō)明語(yǔ)句IMPLICIT將某個(gè)或某些字母開頭的變量規(guī)定為所需的類型格式:IMPLICIT類型說(shuō)明(字母表)例:IMPLICITINTEGER(A,C,T-V)含義603.隱含約定

FORTRAN語(yǔ)言規(guī)定:以I,J,K,L,M,N6個(gè)字母開頭的變量被當(dāng)作整型變量。又稱I~N規(guī)則如:在無(wú)前面兩種說(shuō)明時(shí),I1,MA,N3S等都為整型變量。

61FORTRAN表達(dá)式算術(shù)表達(dá)式關(guān)系表達(dá)式邏輯表達(dá)式字符表達(dá)式不同類型數(shù)據(jù)的混合運(yùn)算例題62算術(shù)表達(dá)式運(yùn)算順序?yàn)椋撼藘?*→乘*、除/→加+、減-常用的算術(shù)型標(biāo)準(zhǔn)函數(shù)P19—2063注意問(wèn)題書寫:左

右,數(shù)學(xué)

FORTRAN,適當(dāng)加括號(hào);乘號(hào)*不能省略;只允許用圓括號(hào);連續(xù)使用乘冪運(yùn)算符時(shí),加上必要的括號(hào);求值順序:括號(hào)內(nèi)→函數(shù)→**→*、/→+、-允許不同數(shù)值類型的量進(jìn)行混合運(yùn)算;實(shí)型運(yùn)算注意誤差問(wèn)題;整型運(yùn)算注意整數(shù)范圍。64例題A=1.0,B=3.5,T=10.0,X=5.0,I=-5,J=7,K=3,求下面表達(dá)式的值。-(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/1265§2.2最基本的語(yǔ)句賦值表控輸入輸出END、STOP、GOTO賦初值格式輸入輸出66賦值語(yǔ)句格式:變量名=表達(dá)式算術(shù)賦值語(yǔ)句邏輯賦值語(yǔ)句邏輯型變量=邏輯表達(dá)式數(shù)值型變量=邏輯表達(dá)式×

邏輯型變量=算術(shù)表達(dá)式×

字符賦值語(yǔ)句

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

輸出表項(xiàng)

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

;邏輯型變量,.TRUE.輸出T;.FALSE.輸出F。表控輸入語(yǔ)句例題1、269表控輸入語(yǔ)句格式:READ(*,*)

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

×

71程序舉例

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

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問(wèn)題:S1、S2、S3、S4、S5沒(méi)說(shuō)明,如何判斷類型?73例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.40122174例2.5將兩個(gè)變量的值互換。分析:臨時(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 end75方法二、直接用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,+--76例2.6輸入一個(gè)三位整數(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*,"原來(lái)的數(shù)為:",n print*,"反向輸出的數(shù)為:",m end 如何取位?取第n位:除10n-1,除10取余77賦初值語(yǔ)句DATA語(yǔ)句格式DATA變量表列/初值表/,變量表列/初值表/,…用DATA注意變量與常量在個(gè)數(shù)、類型等方面要一一對(duì)應(yīng)初值表中,如n個(gè)連續(xù)的常量相同,簡(jiǎn)寫:n*常量初值表中,不允許出現(xiàn)表達(dá)式如有多個(gè)DATA語(yǔ)句給同一變量賦初值,以最后一個(gè)為準(zhǔn)78作業(yè)與實(shí)驗(yàn)作業(yè)

P29:8.1、10實(shí)驗(yàn)實(shí)驗(yàn)手冊(cè):P18:2、3、5要求:1、提前想好如何編程2、文件名起名為:LX1_2,LX1_3,LX1_53、每人建一個(gè)文件夾,起名為:學(xué)號(hào)+姓名,如:05王剛4、把自己的程序文件保存到本班下的自己的文件夾里。注意:只要后綴名為.f90的文件,其他的不要考進(jìn)來(lái)。2023/11/1279第三章

選擇結(jié)構(gòu)程序設(shè)計(jì)課前思考對(duì)于條件語(yǔ)句,fortran中提供了幾種形式?每種形式各適用于什么場(chǎng)合?每種形式的注意事項(xiàng)是什么?編寫程序時(shí)應(yīng)考慮哪些問(wèn)題?2023/11/1281第三章選擇結(jié)構(gòu)程序設(shè)計(jì)邏輯if語(yǔ)句塊if結(jié)構(gòu)選擇結(jié)構(gòu)的嵌套用elseif語(yǔ)句實(shí)現(xiàn)多路分支塊分支選擇結(jié)構(gòu)程序舉例關(guān)系表達(dá)式格式:<算術(shù)量><關(guān)系運(yùn)算符><算術(shù)量>關(guān)系運(yùn)算符

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

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

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

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

與.NE.

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

.AND.

與.OR.或.NOT.非

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

.NEQV.

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

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

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

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

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

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

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

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

if,但只能有一個(gè)else語(yǔ)句,且與最后一個(gè)else

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

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

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

一般格式selectcase(表達(dá)式)

case(表達(dá)式1)塊1case(表達(dá)式2)塊2……case(表達(dá)式n)塊ncasedefault

默認(rèn)塊endselect執(zhí)行過(guò)程(1)selectcase后括號(hào)里的“表達(dá)式”,用來(lái)表示待選擇的內(nèi)容,如成績(jī)、工資、年齡等,一般為變量名,可是整型、邏輯型、單個(gè)字符型變量或者相應(yīng)的表達(dá)式(2)后面各case分支中,case后面括號(hào)里的表達(dá)式相當(dāng)于前面selectcase括號(hào)里表達(dá)式的具體取值,取值不同,動(dòng)作不同(3)casedefault是缺省情況,可有可無(wú)(4)endselect為case結(jié)構(gòu)結(jié)束標(biāo)志說(shuō)明

例3.4、設(shè)計(jì)程序,完成小學(xué)加、減、乘、除四則運(yùn)算,即輸入兩個(gè)數(shù),再輸入一個(gè)運(yùn)算符號(hào),做對(duì)應(yīng)的運(yùn)算,并顯示相應(yīng)的結(jié)果。

reala,b characterop!定義一個(gè)字符變量

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

說(shuō)明例3.5編寫程序,輸入年月,輸出該月所對(duì)應(yīng)的天數(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*,"月份輸入錯(cuò)誤" endselect print*,year,"年",month,"月所對(duì)應(yīng)的天數(shù)為:",dayend算術(shù)IF語(yǔ)句(簡(jiǎn)單了解)

格式:if(算術(shù)表達(dá)式)標(biāo)號(hào)1,標(biāo)號(hào)2,標(biāo)號(hào)3執(zhí)行過(guò)程計(jì)算算術(shù)表達(dá)式的值值小于0,執(zhí)行標(biāo)號(hào)1對(duì)應(yīng)的語(yǔ)句等于0,執(zhí)行標(biāo)號(hào)2對(duì)應(yīng)的語(yǔ)句大于0,執(zhí)行標(biāo)號(hào)3對(duì)應(yīng)的語(yǔ)句

例3.6輸入x,求函數(shù)的值。已知函數(shù)如下:此問(wèn)題可以用算術(shù)if語(yǔ)句實(shí)現(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由鍵盤輸入三個(gè)整數(shù)A、B、C,然后按從小到大的順序輸出。流程圖:例3.8輸入一個(gè)三位自然數(shù),判斷它是否為水仙花數(shù)。即:各位數(shù)字的立方和等于該數(shù)本身的數(shù)。如153=13+53+33integern,g,s,b,sread*,ng=mod(n,10) !求n的個(gè)位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可看運(yùn)行結(jié)果153;243例3.9將學(xué)生成績(jī)分為優(yōu)(90~100分)、良(80~89)、中(70~79)、及格(60~69)、不及格五個(gè)檔次,輸入成績(jī),輸出對(duì)應(yīng)的檔次。思考:用什么語(yǔ)句實(shí)現(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*,"成績(jī)輸入錯(cuò)誤,請(qǐng)重新輸入!" endselect end作業(yè)P445、7、9要求:1、作業(yè)本上畫流程圖2、程序輸入計(jì)算機(jī),下次上機(jī)使用3、上機(jī)要求與上次一致預(yù)習(xí)如何構(gòu)造循環(huán)結(jié)構(gòu)?有哪些基本的循環(huán)語(yǔ)句?適用場(chǎng)合?2023/11/12110第四章

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)課前思考現(xiàn)實(shí)生活中,如果一件事情重復(fù)去做,你會(huì)有什么感受?對(duì)于循環(huán)結(jié)構(gòu),fortran中提供了幾種形式?每種形式各適用于什么場(chǎng)合?每種形式的注意事項(xiàng)是什么?怎樣選擇循環(huán)的形式?編寫程序時(shí)應(yīng)考慮哪些問(wèn)題?2023/11/12112第四章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)DO循環(huán)DO循環(huán)的一般形式與執(zhí)行過(guò)程DO循環(huán)中循環(huán)次數(shù)的計(jì)算DOwhile循環(huán)DOwhile循環(huán)的一般形式DOWHILE循環(huán)的執(zhí)行過(guò)程循環(huán)的嵌套DO循環(huán)的一般形式與執(zhí)行過(guò)程DO循環(huán)的一般形式

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

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

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

integerm,sum,iread*,msum=0doi=1,m/2!該循環(huán)求因子之和

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項(xiàng)。

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

11235

第一次F2+F1→F↓↓

第二次F2+F1→F↓↓

第三次F2+F1→F與循環(huán)有關(guān)的控制語(yǔ)句1、EXIT語(yǔ)句迫使循環(huán)立即終止。通常與IF語(yǔ)句配合使用:IF(e)EXIT例4.6求兩個(gè)整數(shù)a與b的最大公約數(shù)和最小公倍數(shù)分析算法:找出a與b中較小的一個(gè),則最大公約數(shù)必在1與最小整數(shù)的范圍內(nèi)使用DO語(yǔ)句,循環(huán)變量i從較小整數(shù)變化到1一旦循環(huán)控制變量i同時(shí)整除a與b,則i就是最大公約數(shù),然后使用EXIT語(yǔ)句強(qiáng)制退出循環(huán)求出最大公約數(shù)后,直接應(yīng)用最小公倍數(shù)和最大公約數(shù)之間的關(guān)系求出最小公倍數(shù)。integera,b,gcd,lcm,t print*,'請(qǐng)輸入兩個(gè)自然數(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后的循環(huán)結(jié)構(gòu),對(duì)結(jié)構(gòu)化有什么影響?如何將這樣的程序改為結(jié)構(gòu)化的程序?2.CYCLE語(yǔ)句(1)用來(lái)結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句

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

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

CYCLE只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行

EXIT語(yǔ)句則是結(jié)束所在循環(huán),跳出所在循環(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后的循環(huán)結(jié)構(gòu),對(duì)結(jié)構(gòu)化有什么影響?當(dāng)型循環(huán)當(dāng)型循環(huán)結(jié)構(gòu)的流程圖一般形式

DOWHILE

(邏輯表達(dá)式)

循環(huán)體

ENDDO例題4.8計(jì)算并輸入下列級(jí)數(shù)和DOWHILE循環(huán)的執(zhí)行過(guò)程執(zhí)行循環(huán)體ENDDO下面的語(yǔ)句滿足循環(huán)條件?例4.8輸入一個(gè)整數(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)的嵌套循環(huán)的嵌套是指在一個(gè)循環(huán)體內(nèi)又完整地包含了另一個(gè)循環(huán)結(jié)構(gòu),又稱“多重循環(huán)”例題計(jì)算并輸出10以內(nèi)(包括10)所有自然數(shù)的階乘值,即計(jì)算1!,2!,3!,4!,5!,6!,7!,8!,9!,10!FORTRAN對(duì)循環(huán)嵌套的規(guī)定循環(huán)控制變量不允許同名不允許循環(huán)的交叉,會(huì)造成語(yǔ)法上的錯(cuò)誤循環(huán)結(jié)構(gòu)及塊IF結(jié)構(gòu)的嵌套,要遵循“完全包含”的原則允許從內(nèi)層將控制轉(zhuǎn)到外層,但不允許從外層轉(zhuǎn)到內(nèi)層。例4.12求[100,1000]以內(nèi)的全部素?cái)?shù)(1)判素?cái)?shù)

(2)用窮舉法將判某個(gè)范圍內(nèi)所有數(shù)是否素?cái)?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幾種循環(huán)組織方式的比較問(wèn)題:如何選擇所需要的循環(huán)語(yǔ)句?do?dowhile?事先能確定循環(huán)次數(shù)

do或dowhile事先不能確定循環(huán)次數(shù)

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

具體情況視個(gè)人喜好作業(yè)P652、5、9要求:1、作業(yè)本上畫流程圖2、程序輸入計(jì)算機(jī),下次上機(jī)使用3、上機(jī)要求與上次一致2023/11/12135第四章

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

(深入討論與訓(xùn)練)上次課提出的問(wèn)題現(xiàn)實(shí)生活中,如果一件事情重復(fù)去做,你會(huì)有什么感受?對(duì)于循環(huán)結(jié)構(gòu),fortran中提供了幾種形式?每種形式各適用于什么場(chǎng)合?每種形式的注意事項(xiàng)是什么?怎樣選擇循環(huán)的形式?編寫程序時(shí)應(yīng)考慮哪些問(wèn)題?2023/11/12137結(jié)構(gòu)化程序設(shè)計(jì)鞏固訓(xùn)練判斷循環(huán)次數(shù)訓(xùn)練程序邏輯一致性訓(xùn)練程序填空訓(xùn)練程序改錯(cuò)訓(xùn)練編程訓(xùn)練判斷循環(huán)次數(shù)訓(xùn)練循環(huán)語(yǔ)句dox=2.5,-1.5,-0.5所確定的循環(huán)次數(shù)為循環(huán)語(yǔ)句doi=4,2,2所確定的循環(huán)次數(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程序邏輯一致性訓(xùn)練請(qǐng)?jiān)谙旅娉绦虻目瞻滋砣牒线m內(nèi)容,使與上述程序等價(jià)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

程序填空訓(xùn)練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求兩個(gè)數(shù)n1,n2的最大公約數(shù)gcd,和最小公倍數(shù)lcm參照P2-3的算法程序填空訓(xùn)練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從鍵盤輸入一個(gè)班的學(xué)生成績(jī),計(jì)算平均成績(jī),班上的最高與最低成績(jī),以輸入負(fù)數(shù)結(jié)束輸入.sum/n程序改錯(cuò)訓(xù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輸入一個(gè)正數(shù),若該數(shù)是素?cái)?shù),則輸出素?cái)?shù),否則,輸出該數(shù)的所有因子.注意:書上p143有錯(cuò)(答案k==0?!)一般改錯(cuò)題有1—2處錯(cuò)誤編程訓(xùn)練1請(qǐng)編寫一程序,功能:判斷整數(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語(yǔ)言,編寫此程序編程訓(xùn)練2牛頓法解方程。課本P59(重要的實(shí)際應(yīng)用)

要求:畫出此程序的流程圖(形式不限)用fortran語(yǔ)言,編寫此程序編程訓(xùn)練3打印1到1000之內(nèi)能被7或11整除、但不能同時(shí)被7和11整除的所有整數(shù),并統(tǒng)計(jì)這樣的數(shù)的個(gè)數(shù)要求:畫出此程序的流程圖(形式不限)用fortran語(yǔ)言,編寫此程序編程訓(xùn)練4辛普森法求定積分。課本P60(重要的實(shí)際應(yīng)用)要求:畫出此程序的流程圖(形式不限)用fortran語(yǔ)言,編寫此程序作業(yè)P6611、12要求:1、作業(yè)本上畫流程圖2、程序輸入計(jì)算機(jī),下次上機(jī)使用3、上機(jī)要求與上次一致第五章

FORTRAN90數(shù)據(jù)類型第五章FORTRAN90數(shù)據(jù)類型數(shù)據(jù)常量變量表達(dá)式函數(shù)整型實(shí)型

表現(xiàn)形式

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

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

在FORTRAN語(yǔ)言中,整型值的集合是數(shù)學(xué)上整數(shù)的一個(gè)子集。每種方法用類別類型參數(shù)來(lái)區(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語(yǔ)句中。二進(jìn)制:以字母B開頭,后跟用一對(duì)撇號(hào)或雙引號(hào)括起來(lái)的數(shù)字串,0--1。例如B'10101101'、B"1011101"八進(jìn)制:以字母O開頭,后跟用一對(duì)撇號(hào)或雙引號(hào)括起來(lái)的數(shù)字串,0--7。例如,O'453'、O"376"。十六進(jìn)制:以字母Z開頭,后跟用一對(duì)撇號(hào)或雙引號(hào)括起來(lái)的數(shù)字串,0--9或A--F。例如,Z‘FFA9’、Z“9B45”。INTEGERi,j,kDATAi/B'110010'/DATAj/O'62'/DATAk/Z'32'/

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

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

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

F0=0

F1=1

Fi=Fi-1+Fi-2

問(wèn)題:選用那種類型合適?

Fibonacci數(shù)列前30項(xiàng)之和是一個(gè)很大的數(shù),已經(jīng)超過(guò)了類別參數(shù)為2的整數(shù)的取值范圍,只能采用類別參數(shù)為4整數(shù)。如果數(shù)超過(guò)類別參數(shù)為4的整數(shù)取值范圍,就只能采用實(shí)型數(shù)據(jù)來(lái)處理。

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í)型變量的說(shuō)明real[([kind=]類別參數(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利用雙精度按下面近似公式求直到最后一項(xiàng)的絕對(duì)值小于10-15為止。分析:首先找出累加項(xiàng)fn與fn-1的遞推關(guān)系。不難推出其中f0=x5.4.1復(fù)型常量將兩個(gè)實(shí)數(shù)用逗號(hào)分隔,再用括號(hào)括起來(lái)就構(gòu)成了一個(gè)FORTRAN復(fù)型常量。其中:第一個(gè)為實(shí)部,第二個(gè)為虛部。例如(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ù)是用于說(shuō)明實(shí)部和虛部這兩個(gè)實(shí)型數(shù)據(jù)的類別類型。5.4復(fù)型數(shù)據(jù)5.4.2復(fù)型變量complex[([kind=]類別值)][[,屬性列表]::]變量列表

complexz1,z2

complex(4)::com_val

complex(8)::cz,cq

cz=(3.0,6.3)

cq=(8.76e+5,-67.8e-3)若實(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的坐標(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)。

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

注意:讀入復(fù)型數(shù)據(jù)時(shí),以2個(gè)實(shí)數(shù)作為一個(gè)復(fù)型數(shù)據(jù),一為實(shí)部,二為虛部,用括號(hào)括起來(lái)。程序的輸入可以如下:(1.0,1.0),(4.5,4.5)5.5字符型數(shù)據(jù)5.5.1字符型常量

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

″I'MASTUDENT″'I''MASTUDENT'前者用雙撇號(hào)作定界符后者用單撇號(hào)作定界符,而將字符串的單撇號(hào)用兩個(gè)單撇號(hào)表示,系統(tǒng)會(huì)自動(dòng)將其處理為字符串的一個(gè)單撇號(hào)字符。同樣,要表示雙撇號(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ī)則:1、每一續(xù)行都不能尾隨注釋。2、每一續(xù)行必須以續(xù)行標(biāo)識(shí)符(&)作為開頭,任何尾隨&號(hào)之后或者前導(dǎo)&號(hào)之前的空格都不是字符常數(shù)的組成部分,&號(hào)本身不是常數(shù)的組成部分。其它的字符包括空格都是字符常數(shù)的有效組成部分。5.5.2字符型變量character(len=n1[,kind=n2])[[,屬性說(shuō)明]::]變量列表

格式中的n1和n2是一個(gè)整數(shù)和整型表達(dá)式n1代表長(zhǎng)度,n2代表類別參數(shù),各項(xiàng)屬性說(shuō)明是字符型變量有關(guān)屬性的說(shuō)明。例如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)下均可以采用星號(hào)來(lái)說(shuō)明長(zhǎng)度:(1)具有parameter屬性的字符常量。例如以下兩個(gè)語(yǔ)句:character(len=*),parameter::para='fortran_90'character*(*),parameter::para='fortran_90'給出的字符串長(zhǎng)度是確定的,因此字符符號(hào)常數(shù)para的長(zhǎng)度是可知的(等于10),可用*說(shuō)明。(2)用字符變量作虛元時(shí)子程序中,用字符型變量作虛元時(shí)可以不指明其具體長(zhǎng)度,即用*定義長(zhǎng)度。這時(shí)它可以與任意長(zhǎng)度的字符型實(shí)元相結(jié)合,有利于提高子程序的通用性。5.5.3子字符串字符變量名(m:n)

其中:

m和n是整數(shù)和整型表達(dá)式,表示子串在串中的起止位置,該子串長(zhǎng)度為n-m+1(n≥m≥1)。例如: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á)式與字符賦值語(yǔ)句字符表達(dá)式是指用字符運(yùn)算符把字符常數(shù)、字符變量等字符型數(shù)據(jù)連接起來(lái)的有意義的式子。字符運(yùn)算符只有一個(gè)″//″作用是將兩個(gè)字符型數(shù)據(jù)連接起來(lái),成為一個(gè)字符型數(shù)據(jù)。該運(yùn)算符是一個(gè)雙目運(yùn)算符。例如,'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)系表達(dá)式字符比較的規(guī)則是:按ASCII碼的值(見(jiàn)附錄)進(jìn)行比較。常用的字符順序?yàn)椋?/p>

″空格″<0<…<9<A<…<Z<a<…<z在進(jìn)行關(guān)系運(yùn)算時(shí),遵循以下規(guī)律:(1)單個(gè)字符,以代碼值決定大小。

'A'>'B'的值為假

'8'>'2'的值為真(2)兩串比較時(shí),自左向右逐個(gè)進(jìn)行比較。所有字符完全相同,則兩

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論