Fortran語言教程.ppt_第1頁
Fortran語言教程.ppt_第2頁
Fortran語言教程.ppt_第3頁
Fortran語言教程.ppt_第4頁
Fortran語言教程.ppt_第5頁
已閱讀5頁,還剩371頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Fortran語言(Fortran77結(jié)構(gòu)化程序設(shè)計(jì)),普通高校計(jì)算機(jī)基礎(chǔ)教學(xué)課程,2020/9/20,2,第三章 Fortran語言程序設(shè)計(jì)初步,2020/9/20,3,3.1 Fortran語言的發(fā)展概況,FORmula TRANslator 公式翻譯器 Fortran語言是一種適合于科學(xué)和工程計(jì)算問題的程序設(shè)計(jì)語言;也是計(jì)算機(jī)高級語言發(fā)展史上使用最早的一種程序設(shè)計(jì)語言。,2020/9/20,4,Fortran語言的特征,Fortran語言的最大特性是接近數(shù)學(xué)公式的自然描述,在計(jì)算機(jī)里具有很高的執(zhí)行效率。 易學(xué),語法嚴(yán)謹(jǐn)。 可以直接對矩陣和復(fù)數(shù)進(jìn)行運(yùn)算。 自誕生以來廣泛地應(yīng)用于數(shù)值計(jì)算領(lǐng)域

2、,積累了大量高效而可靠的源程序。 很多專用的大型數(shù)值運(yùn)算計(jì)算機(jī)針對Fortran做了優(yōu)化。 廣泛地應(yīng)用于并行計(jì)算和高性能計(jì)算領(lǐng)域。 Fortran 90,F(xiàn)ortran 95,F(xiàn)ortran 2003的相繼推出使Fortran語言具備了現(xiàn)代高級編程語言的一些特性。,2020/9/20,5,3.2 簡單的Fortran程序分析,例1:求一元二次方程x2+3x-5.6=0的根,并打印結(jié)果。 利用公式: (這里,a=1,b=3,c=-5.6),2020/9/20,6,3.2 簡單的Fortran程序分析,編程如下: c the roots of the quadratic equation a=1.

3、0 b=3.0 c=-5.6 x1=(-b+sqrt(b*b-4.0*a*c)/(2.0*a) x2=(-b-sqrt(b*b-4.0*a*c)/(2.0*a) write(*,100)x1,x2 100 format(1x,x1=,f6.2,x2=,f6.2) end,2020/9/20,7,3.2 簡單的Fortran程序分析,執(zhí)行結(jié)果: x1= 1.30 x2=-4.30,例2:試求3!,6!,9!的值。 編程如下:,2020/9/20,8,3.2 簡單的Fortran程序分析,主程序: 子程序: c main program c subprogram j=k(3) function k

4、(n) l=k(6) k=1 m=k(9) i=2 write(*,*)j,l,m 5 if (i.le.n) then end k=k*i i=i+1 執(zhí)行結(jié)果: goto 5 6 720 362880 endif return end,2020/9/20,9,3.2 簡單的Fortran程序分析,Fortran程序的基本結(jié)構(gòu): 一個Fortran源程序由一個或多個程序單位組成,每個程序單位以“end”語句結(jié)束。 每個程序單位包括若干行 語句行(執(zhí)行語句和非執(zhí)行語句行) 非語句行(注釋行) 語句前可不設(shè)標(biāo)號,也可根據(jù)需要設(shè)標(biāo)號。 各類語句在程序單位中的位置有一定規(guī)則。 程序必須按規(guī)定格式書寫

5、。,2020/9/20,10,3.3 Fortran源程序的書寫格式,Fortran77源程序必須按以下格式書寫: 每行只能在80列內(nèi)書寫,并把80列分為4個區(qū)。 15列:標(biāo)號區(qū) ( 15 位無符號整數(shù);第1列為“*”或“c”時(shí),為注釋行) 第6列:續(xù)行標(biāo)志區(qū) (非空格或非零字符;最多19個續(xù)行) 772列:語句區(qū) (書寫語句;一行只能寫一條語句) 7380列:語句注釋區(qū) (一般作編號注釋),2020/9/20,11,3.4 Fortran程序的編輯與運(yùn)行,Fortran PowerStation 4.0集成開發(fā)環(huán)境 簡 介,2020/9/20,12,3.4 Fortran程序的編輯與運(yùn)行,一

6、、Fortran PowerStation 4.0的啟動 選“開始”“程序”“Fortran PowerStation 4.0”“Microsoft Developer Studio”。 二、創(chuàng)建項(xiàng)目工作間 選“File”“New”“Project Workspace”“Console Application”,并輸入項(xiàng)目工作間名稱(如:aaa)和存放項(xiàng)目工作間的位置或路徑(如:c:for) Create。,2020/9/20,13,3.4 Fortran程序的編輯與運(yùn)行,三、給項(xiàng)目工作間添加和編輯文件 打開指定的項(xiàng)目工作間選 “Insert” “File into Project”輸入要添加

7、的文件名(如:st01.for)“Add”。然后按Fortran程序的書寫規(guī)則編輯程序。 四、編譯項(xiàng)目工作間中的文件 打開指定的文件選 “Build” “Compile st01.for”。 五、連編項(xiàng)目文件 選 “Build” “Build aaa.exe”。 六、運(yùn)行項(xiàng)目文件 選 “Build” “Execute aaa.exe”。(顯示程序執(zhí)行結(jié)果),2020/9/20,14,3.4 Fortran程序的編輯與運(yùn)行,注:若Fortran程序是由一個主程序文件和若干個子程序文件組成,則應(yīng)將各文件添加到同一項(xiàng)目工作間,分別進(jìn)行編譯,然后連編和運(yùn)行項(xiàng)目文件。 七、打開項(xiàng)目文件 選“File”“

8、Open”在打開對話框文件類型下拉列表中選“Project Workspace(*.mdp)”然后選項(xiàng)目工作間文件夾中的項(xiàng)目文件。,2020/9/20,15,3.5 常 量,常量在程序執(zhí)行期間其值固定不變的量。 Fortran處理六種類型的常量: 整型常量(Integer) 實(shí)型常量(Real) 雙精度常量(Double precision) 復(fù)型常量(Complex) 邏輯型常量(Logical) 字符型常量(Character),2020/9/20,16,3.5 常 量,3.5.1 整型常量 包括正、負(fù)整數(shù)和零。 例:5,-13,0, 說明: 在(16位)微機(jī)中,整數(shù)的取值范圍為: -21

9、5215-1(-3276832767) 在(32位)微機(jī)中,整數(shù)的取值范圍為: -231231-1(-21474836482147483647 ),2020/9/20,17,3.5 常 量,3.5.2 實(shí)型常量 (有二種表示形式) 小數(shù)形式 例:15.8,-21.05,14.0 ,14.,.17,0.0 , 指數(shù)形式(通常表示較大或較小的數(shù)) 例:1000000001.0E+8 0.00001251.25E-05 數(shù)字部分 指數(shù)部分,2020/9/20,18,3.5 常 量,說明: 一個數(shù)值用指數(shù)形式表示時(shí)有兩種表達(dá)方式: 一個基本實(shí)數(shù)后面跟指數(shù)部分。 例: 0.8768.76E-1 -258

10、9.4-2.5894E+3 一個整數(shù)后面跟指數(shù)部分。 例: 0.876876E-3 -2589.4-25894E-1,2020/9/20,19,3.5 常 量,同一個數(shù)值可用不同的指數(shù)形式表示。 例: 0.8768.76E-187.6E-2876E-3 計(jì)算機(jī)在輸出時(shí),按標(biāo)準(zhǔn)化指數(shù)形式輸出。 例:0.282.800000E-01 -59.58E+12-5.958000E+13 即數(shù)字部分大于1,且小數(shù)點(diǎn)前只有一位非零數(shù)字的指數(shù)輸出形式。 在微機(jī)中,一般用四個字節(jié)存放一個實(shí)數(shù),其取值范圍為:10-751075。超出此范圍時(shí)為“溢出”錯誤。,2020/9/20,20,3.5 常 量,下列形式為不合

11、法的指數(shù)形式: 單獨(dú)的小數(shù)點(diǎn)和單獨(dú)的指數(shù)部分。 例:.E5, E10 指數(shù)部分只能是整數(shù),不能帶小數(shù)點(diǎn)。 例:8E0.5, 12.3E1.5 ,2020/9/20,21,3.6 變 量,變量在程序執(zhí)行期間其值可以改變的量。 3.6.1 變量的概念 Fortran為每一個變量分配一個相應(yīng)的存儲單元;每個變量在每個時(shí)刻只能有一個確定的值。 例:x=4.5 x x=8.0 x 注:在程序中用到的變量都必須要有確定的值。,4.5,8.0,2020/9/20,22,3.6 變 量,3.6.2 變量名 變量名標(biāo)識一個變量所用的名字。 命名規(guī)則: 變量名的第一個字符必須是字母; 在第一個字符后可跟15個字母

12、或數(shù)字。 例: x,m1,total,k123,,2020/9/20,23,3.6 變 量,注意幾點(diǎn): 變量名不區(qū)分大小寫字母。 例:TOTAL,Total,total 代表同一變量 變量名中的空格不起作用。 例:abc,a bc,ab c,a b c 代表同一變量 變量名盡量做到“見名知義” AVER、SUM、Imax 允許變量名與語言中具有特定含義的字(“保留字”)同名。 例:sin,read,open,end, 建議不要使用fortran中具有特定含義的字作變量名,2020/9/20,24,3.6 變 量,3.6.3 變量的類型 Fortran能處理各種類型的變量。不同類型的變量用來存放

13、不同類型的數(shù)據(jù)。 變量類型的說明(三種方式) 隱含說明 即以I、j、k、l、m、n開頭的變量為整型變量,以其它字母開頭的變量為實(shí)型變量。(“IN規(guī)則”) 例:imax,m5,number, 為整型變量 v,h2,aver, 為實(shí)型變量,2020/9/20,25,3.6 變 量,顯式說明 即用類型說明語句指定變量的類型。 如: Integer說明變量為整型變量 Real說明變量為實(shí)型變量 Double precision說明變量為雙精度變量 Complex說明變量為復(fù)型變量 Logical說明變量為邏輯型變量 Character說明變量為字符型變量,2020/9/20,26,3.6 變 量,如:

14、 Integer abc,xyz real imax,k3 logical a1,kpz 用implicit語句說明 即說明用某一字母開頭的變量為指定的類型。 例: implicit integer(a,b),real(k) implicit integer(x-z),2020/9/20,27,3.6 變 量,三種類型說明的優(yōu)先級: 高 類型說明語句(顯式說明) implicit語句說明 低 “IN規(guī)則”,2020/9/20,28,3.7 Fortran內(nèi)部函數(shù),在編制Fortran程序時(shí),經(jīng)常要用到一些基本的數(shù)學(xué)函數(shù),如三角函數(shù)、指數(shù)函數(shù)、對數(shù)函數(shù)等。為方便用戶,F(xiàn)ortran編譯系統(tǒng)已提供

15、了這些函數(shù)的計(jì)算程序,需要時(shí)即可調(diào)用。 Fortran內(nèi)部函數(shù)調(diào)用格式: 函數(shù)名(自變量),2020/9/20,29,3.7 Fortran內(nèi)部函數(shù),如: sin(90*3.14159/180) 1.0 sqrt(9.0) 3.0 abs(-5.6) 5.6 int(6.75) 6 exp(3.0) 20.085540 Fortran77全部內(nèi)部函數(shù)見附錄,2020/9/20,30,3.7 Fortran內(nèi)部函數(shù),注意幾點(diǎn): 函數(shù)自變量(參數(shù))必須用括號括起來。 例:sinx+cosx sin(x)+cos(x) 函數(shù)自變量可以是常量、變量或表達(dá)式。 例: exp(3.0) sin (x+co

16、s(x) 有些函數(shù)的類型是由自變量的類型確定的。 例:mod(8.0,3.0) 2.0 mod(8,3) 2 三角函數(shù)的角度單位是“弧度”而不是“度”。 函數(shù)名分為“通用名”和“專用名”內(nèi)部函數(shù)名一般用“通用名”。,2020/9/20,31,3.8 Fortran算術(shù)表達(dá)式,Fortran77提供了四種表達(dá)式: 算術(shù)表達(dá)式 關(guān)系表達(dá)式 邏輯表達(dá)式 字符表達(dá)式 算術(shù)表達(dá)式將各運(yùn)算元素(常量、變量、函數(shù)和數(shù)組等)用算術(shù)運(yùn)算符連接起來的一個有值的式子。,2020/9/20,32,3.8 Fortran算術(shù)表達(dá)式,一、算術(shù)運(yùn)算符及其優(yōu)先級 算術(shù)運(yùn)算符(五種) 加(+) 減(-) 乘(*) 除(/) 乘

17、方(*) 算術(shù)運(yùn)算符的優(yōu)先級 括號函數(shù)乘方乘、除加、減 注:同級運(yùn)算“先左后右”,連續(xù)乘方時(shí)“先右后左”。,2020/9/20,33,3.8 Fortran算術(shù)表達(dá)式,例: 3+5-6.0*8.5/4*2+sin(x) 3+5-6.08.542sinx x*y*z、x*(y*z) xyz (x*y)*z (xy)z 有了算術(shù)表達(dá)式概念之后,我們就可以將:數(shù)學(xué)運(yùn)算式Fortran算術(shù)表達(dá)式,2020/9/20,34,3.8 Fortran算術(shù)表達(dá)式,二、算術(shù)表達(dá)式書寫規(guī)則 表達(dá)式中的各運(yùn)算元素之間必須用運(yùn)算符分隔。 例:xyzx*y*z 2(x+y) 2*(x+y) 作任何運(yùn)算的表達(dá)式只能寫在一

18、行。 例: (a+b)/(c+d) a+b/c+d ,2020/9/20,35,3.8 Fortran算術(shù)表達(dá)式,兩個運(yùn)算符不能緊鄰。 例: a/(-b)-a/b a/-b 表達(dá)式一律用小括號。 例: ax+b(y+c) a*(x+b*(y+c),2020/9/20,36,3.8 Fortran算術(shù)表達(dá)式,三、表達(dá)式求值中的類型問題 同類型量運(yùn)算的結(jié)果,仍為原類型。 例:4*5=20,4.0*5.0=20.0 6.0/4.0=1.5,6/4=1(1.5) 不同類型量運(yùn)算時(shí),先將低級類型(整型)轉(zhuǎn)換為高級類型(實(shí)型),然后再按同類型量進(jìn)行運(yùn)算。 例:2.5*4=10.0( 10) 2.0*3=2

19、.0*2.0*2.0=8.0(屬同類量運(yùn)算),2020/9/20,37,3.8 Fortran算術(shù)表達(dá)式,四、運(yùn)算中的誤差問題 整數(shù)量運(yùn)算沒有誤差 實(shí)型量由于有效位數(shù)的限制,運(yùn)算時(shí)會出現(xiàn)誤差 例1:(1.0/3.0)*3.0=0.9999999 (1.0) 1.0/3.0=0.3333333 例2: X=1E30 Y=-1E30 Z=1.0 (X+Y)+Z=? X+(Y+Z)=?,2020/9/20,38,3.9 賦值語句,Fortran提供三類賦值語句: 算術(shù)賦值語句 邏輯賦值語句 字符賦值語句 一、算術(shù)賦值語句一般格式 V=e 功能:把賦值號右邊表達(dá)式的值,賦給賦值號左邊的變量或數(shù)組元素。

20、 例: S=3.14159*r*2,2020/9/20,39,3.9 賦值語句,二、算術(shù)賦值語句中的類型轉(zhuǎn)換問題 賦值號兩邊類型一致時(shí),直接賦值。 例: k=355 賦值號兩邊類型不一致時(shí),先計(jì)算,再轉(zhuǎn)換,最后賦值。 例:y1=6*2 (y1的值為12.0) Imax=3.6*2 (imax的值為7(7.27),2020/9/20,40,3.9 賦值語句,注意幾點(diǎn): 賦值號左邊只能是變量或數(shù)組元素,不能為帶運(yùn)算符的表達(dá)式。 例:3*a=6*x+sin(x) 一個賦值語句只能給一個變量或數(shù)組元素賦值。 例:a=b=c=d=3.5 一個賦值語句執(zhí)行后,賦值號左邊變量的原值被右邊表達(dá)式的值取代。 例

21、:x=1.0 x=x+1.0 (x的值為2.0),2020/9/20,41,3.10 簡單的輸出語句,用戶編制的程序必須要有輸出語句,把結(jié)果顯示或打印出來。 Fortran提供了三種輸出方式: 表控格式輸出(標(biāo)準(zhǔn)或固定格式輸出) 指定格式輸出 無格式輸出(二進(jìn)制形式,適應(yīng)磁盤文件) 一、表控格式輸出 按Fortran編譯系統(tǒng)隱含規(guī)定的格式輸出。(即系統(tǒng)根據(jù)輸出數(shù)據(jù)的不同類型,自動給出相應(yīng)的輸出格式。),2020/9/20,42,3.10 簡單的輸出語句,二、表控格式輸出語句 一般格式: print ,輸出表列 write (,)輸出表列 例1: print ,56.8,125 或 write

22、(,) 56.8,125 例2: print ,a, b, c 或 write (,) a, b, c,2020/9/20,43,3.10 簡單的輸出語句,例3: x=12.5 y=90.5 z=x+y print *, x, y print *, z=, z end 運(yùn)行結(jié)果: 12.500000 90.500000 Z= 103.000000,2020/9/20,44,3.10 簡單的輸出語句,整數(shù)的表控格式輸出 規(guī)定:每個整數(shù)占12列,數(shù)據(jù)打印在右端,左補(bǔ)空格。 例:print *,123,-1128 輸出結(jié)果: 123-1128,2020/9/20,45,3.10 簡單的輸出語句,實(shí)數(shù)

23、的表控格式輸出 規(guī)定:每個實(shí)數(shù)占16列,數(shù)據(jù)打印在右端,左補(bǔ)空格。 例:print *,15.4,-321.45 輸出結(jié)果: 15.400000-321.450000,2020/9/20,46,3.10 簡單的輸出語句,當(dāng)實(shí)數(shù)值的絕對值107或1時(shí),按標(biāo)準(zhǔn)的指數(shù)形式輸出。 例:print *,-10000000.,0.98 輸出結(jié)果: -1.000000E+079.800000E-01,2020/9/20,47,3.11 簡單的輸入語句,Fortran提供了三種輸入方式: 表控格式輸入(自由格式輸入) 指定格式輸入 無格式輸入 一、表控格式輸入 表控格式輸入根據(jù)變量的數(shù)據(jù)類型輸入相應(yīng)的數(shù)據(jù)形式

24、,數(shù)據(jù)間以逗號或空格分隔的輸入方式。,2020/9/20,48,3.11 簡單的輸入語句,二、表控格式輸入語句 一般格式: read ,輸入表列 read (,)輸入表列 例1: read ,a, b (若a=14.7, b=30.0) 鍵盤輸入: 14.7,30.0,2020/9/20,49,3.11 簡單的輸入語句,例2: read ,x,k (若x=4.5,k=200) 鍵盤輸入: 4.5,200 例3: read ,x,y,z (若x=1.5,y=2.5,z=3.5) read ,i,j (若i=5,j=10) 鍵盤輸入: 1.5,2.5,3.5 5,10,2020/9/20,50,3

25、.11 簡單的輸入語句,注意幾點(diǎn): 輸入數(shù)據(jù)的個數(shù)不得少于read語句中變量的個數(shù),但多余的數(shù)據(jù)也不起作用。 例: read ,x,y,z (若x=1.5,y=2.5,z=3.5) 鍵盤輸入: 1.5,2.5,3.5 1.5,2.5,3.5,5.2,6.0(最后兩個數(shù)被忽略) 1.5,2.5(計(jì)算機(jī)將等待用戶繼續(xù)輸入數(shù)據(jù)),2020/9/20,51,3.11 簡單的輸入語句,注意幾點(diǎn): 一個read語句可以分多行輸入,但每一個read語句必須從新的一行輸入。 例: read ,x,y,z (若x=1.5,y=2.5,z=3.5) read ,i,j (若i=5,j=10) 鍵盤輸入: 1.5

26、2.5 3.5 5,10 若鍵盤輸入: 1.5,2.5,3.5,5,10 (錯),2020/9/20,52,3.11 簡單的輸入語句,在輸入數(shù)據(jù)時(shí)若出現(xiàn)“/”,則終止對此read語句的輸入。 例: read ,x,y,z 鍵盤輸入: 1.5,2.5/ (變量z的值為原值或?yàn)榱?。?2020/9/20,53,3.12 參數(shù)語句(parameter語句),一、parameter語句的功能 為常量命名,即用一個符號代表一個常量。 二、parameter語句一般形式 Parameter(p1=c1,p2=c2,pn=cn) 其中: pn符號常量; cn常量。,2020/9/20,54,3.12 參數(shù)語

27、句(parameter語句),例:求半徑為0.5m的圓面積和圓周長。 編程如下: parameter (r=0.5,pi=3.14159) s=pi*r*2 h=2.0*pi*r print*,s,h end,2020/9/20,55,3.12 參數(shù)語句(parameter語句),注意幾點(diǎn): 參數(shù)語句必須寫在所有可執(zhí)行語句之前; 符號常量的命名規(guī)則及類型與變量相同,并遵循“IN規(guī)則”; 程序中不能給符號常量再賦值。,2020/9/20,56,3.13 pause語句, stop語句, end語句,一、pause語句 一般形式 Pause n 注:n為15位正整數(shù)或字符常量。 功能 暫停程序的執(zhí)

28、行。 (一個程序單位可以有多個pause語句),2020/9/20,57,3.13 pause語句, stop語句, end語句,例: parameter (r=0.5,pi=3.14159) s=pi*r*2 h=2.0*pi*r pause 打印面積和周長 print*,s,h end,2020/9/20,58,3.13 pause語句, stop語句, end語句,二、stop語句 一般形式 stop n 注:n為15位正整數(shù)或字符常量。 功能 終止程序的執(zhí)行。 (一個程序單位可以有多個stop語句),2020/9/20,59,3.13 pause語句, stop語句, end語句,三、

29、end語句 一般形式 end 功能 對主程序:終止程序的執(zhí)行和作為程序單位的結(jié)束標(biāo)志; 對子程序:返回調(diào)用程序和作為程序單位的結(jié)束標(biāo)志。 (一個程序單位只能有一個end語句),2020/9/20,60,第四章 邏輯運(yùn)算和選擇結(jié)構(gòu),2020/9/20,61,計(jì)算機(jī)程序,程序設(shè)計(jì)的基本方法,計(jì)算機(jī)解決問題所需要的一系列代碼化指令序列計(jì)算機(jī)程序。 程序=數(shù)據(jù)結(jié)構(gòu)+算法 即“程序就是在數(shù)據(jù)的某些特定的表示方式和結(jié)構(gòu)的基礎(chǔ)上,對抽象算法的具體描述?!?上述公式可擴(kuò)充為: 程序=數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計(jì)方法+語言工具,2020/9/20,62,所謂面向過程的程序設(shè)計(jì),是指利用面向過程的語言工具(如Basi

30、c、Pascal、Fortran和C等)進(jìn)行程序開發(fā)的各項(xiàng)活動。,程序設(shè)計(jì)的基本方法,面向過程的程序設(shè)計(jì),優(yōu)點(diǎn):編程簡單、結(jié)構(gòu)性強(qiáng)、可讀性好,程序執(zhí)行時(shí)序特征明顯;遵循這種結(jié)構(gòu)的程序只有一個入口和一個出口。 缺點(diǎn):存在數(shù)據(jù)與程序模塊的分離和程序的可重用性差等問題。,2020/9/20,63,程序設(shè)計(jì)的基本方法,結(jié)構(gòu)化程序設(shè)計(jì)方法:,結(jié)構(gòu)化編碼 在結(jié)構(gòu)化程序設(shè)計(jì)中,任何復(fù)雜的算法,都可以由三種基本結(jié)構(gòu)組成。 在構(gòu)造算法時(shí),也僅以三種基本結(jié)構(gòu)作為基本單元。 遵循這種結(jié)構(gòu)的程序只有一個輸入口和一個輸出口。,模塊化設(shè)計(jì) 將一個復(fù)雜問題的程序分為若干個程序模塊,每個模塊完成一項(xiàng)特定功能;其中有一個主模塊

31、和若干個子模塊,主模塊控制各個子模塊來實(shí)現(xiàn)整個程序的功能。,自頂向下,逐步細(xì)化,2020/9/20,64,程序設(shè)計(jì)的基本方法,面向?qū)ο蟮某绦蛟O(shè)計(jì),面向?qū)ο蟮某绦蛟O(shè)計(jì)是一種新的程序設(shè)計(jì)范型。它將一些新的理念和結(jié)構(gòu)化程序設(shè)計(jì)中好的思想相融合,提供了一種全新的程序設(shè)計(jì)方法。,2020/9/20,65,4.1 算法及其表示方法,一、算法的概念 算法解決某一問題所采取的方法和步驟。 計(jì)算機(jī)算法計(jì)算機(jī)能夠執(zhí)行的算法。 計(jì)算機(jī)算法的特征: 有窮性操作步驟是有限的。 確定性方法步驟是明確的。 有效性方法是正確的,步驟是完整的。 必須有輸入和輸出。(取得必要的信息,給出正確的結(jié)果。),2020/9/20,66,

32、4.1 算法及其表示方法,Fortran是結(jié)構(gòu)化程序設(shè)計(jì)語言,每個程序單位可由三種基本結(jié)構(gòu)組成: 順序結(jié)構(gòu) 分支選擇結(jié)構(gòu) 循環(huán)結(jié)構(gòu) 實(shí)踐證明,任何復(fù)雜的問題都可以用這三種基本結(jié)構(gòu)來描述。,2020/9/20,67,4.1 算法及其表示方法,二、算法的表示 用NS流程圖表示。(由幾種功能框組合而成) 矩形框用于表示順序結(jié)構(gòu)。 如:若先執(zhí)行語句A,再執(zhí)行語句B。,A,B,2020/9/20,68,4.1 算法及其表示方法,例:若a=1.5,b=4.5,求a+b的平方。 畫NS圖: 編程: A=1.5 B=4.5 C=(a+b)*2 Print *, c end,1.5a,4.5b,(a+b)2c,

33、打印 c,結(jié)束,2020/9/20,69,4.1 算法及其表示方法,三角框用于表示分支選擇結(jié)構(gòu)。 如:若P為條件,當(dāng)P成立執(zhí)行語句A,否則執(zhí)行語句B。,2020/9/20,70,4.1 算法及其表示方法,L形框用于表示循環(huán)結(jié)構(gòu)。 當(dāng)型循環(huán)(P為條件,A循環(huán)體) 如:若條件P成立,則執(zhí)行循環(huán)體A,否則跳出循環(huán)體。,2020/9/20,71,4.1 算法及其表示方法,直到型循環(huán)(P為條件,A循環(huán)體) 如:首先執(zhí)行循環(huán)體A,若條件P不成立繼續(xù)執(zhí)行循環(huán)體A,直到條件P成立為止。,2020/9/20,72,4.2 關(guān)系表達(dá)式,關(guān)系表達(dá)式是構(gòu)成選擇結(jié)構(gòu)判斷條件的基本式子。它也是一種最簡單的邏輯表達(dá)式。 一

34、、關(guān)系運(yùn)算符(P80 表4-1) .gt. (大于) .ge. (大于等于) .eq. (等于) .lt. (小于) .le. (小于等于) .ne. (不等于),2020/9/20,73,4.2 關(guān)系表達(dá)式,二、關(guān)系表達(dá)式的一般形式 算術(shù)量關(guān)系運(yùn)算符算術(shù)量 即: 關(guān)系表達(dá)式是由關(guān)系運(yùn)算符將兩個算術(shù)量連接起來的式子。 關(guān)系表達(dá)式的運(yùn)算元素是算術(shù)量,結(jié)果是邏輯量:真(.True.)或假(.False.)。,2020/9/20,74,4.2 關(guān)系表達(dá)式,有了關(guān)系表達(dá)式,我們就可以將: 數(shù)學(xué)關(guān)系式 Fortran關(guān)系表達(dá)式 例: x+y15.4 x+y.gt.15.4 a+ba-b a+b.ne.a

35、-b ex2.17 exp(x).ge.2.17,2020/9/20,75,4.2 關(guān)系表達(dá)式,注意: 算術(shù)運(yùn)算優(yōu)先于關(guān)系運(yùn)算。 如:a+b.ne.a-b等同于(a+b).ne.(a-b) 實(shí)數(shù)運(yùn)算誤差對關(guān)系表達(dá)式的影響 如:1.0/3.0*3.0.EQ.1.0 值為.false. 1.0/3.0*3.0=0.9999999 對于 a.eq.b abs(a-b).lt.1E-6 c.ne.d abs(c-d).gt.1E-6,2020/9/20,76,4.3 邏輯表達(dá)式,關(guān)系表達(dá)式只能表達(dá)簡單的關(guān)系,如: 5x10 就不能用關(guān)系表達(dá)式表達(dá),此時(shí)要用邏輯表達(dá)式。,2020/9/20,77,4.3

36、 邏輯表達(dá)式,一、邏輯表達(dá)式的一般形式 邏輯量邏輯運(yùn)算符邏輯量 即: 邏輯表達(dá)式是由邏輯運(yùn)算符將兩個邏輯量連接起來的式子。 邏輯表達(dá)式的運(yùn)算元素是邏輯量,結(jié)果也是邏輯量:真(.True.)或假(.False.)。 邏輯量包括邏輯常量、邏輯變量和關(guān)系表達(dá)式。,2020/9/20,78,4.3 邏輯表達(dá)式,二、邏輯常量 兩個:.true.(真).false.(假) 三、邏輯變量 用于存放邏輯常量的變量。 邏輯變量可以通過賦值語句來接受邏輯常量的值,但在使用前,要進(jìn)行類型說明。 例: logical a, b a=.true. b=.false.,2020/9/20,79,4.3 邏輯表達(dá)式,四、邏

37、輯運(yùn)算符 .and. (邏輯與) .or. (邏輯或) .not. (邏輯非) .eqv. (邏輯等(同或) .neqv.(邏輯不等(異或),2020/9/20,80,4.3 邏輯表達(dá)式,五、邏輯運(yùn)算符的運(yùn)算規(guī)則(P83 表4.3) 若a,b為兩個邏輯量,則: a.and.b(當(dāng)a、b同時(shí)為真時(shí),為真。) a.or.b (當(dāng)a、b中任意一個為真或同時(shí)為真時(shí),為真。) .not.a (當(dāng)a為真,其值為假;當(dāng)a為假,其值真。) a.eqv.b(當(dāng)a、b為同一邏輯常量時(shí),為真。) a.neqv.b(當(dāng)a、b不為同一邏輯常量時(shí),為真。),2020/9/20,81,4.3 邏輯表達(dá)式,六、邏輯表達(dá)式的運(yùn)

38、算次序(P84 表4.5) 運(yùn)算次序?yàn)椋?括號算術(shù)運(yùn)算關(guān)系運(yùn)算邏輯運(yùn)算 而邏輯運(yùn)算: .not.and.or.eqv.,.neqv.,2020/9/20,82,4.3 邏輯表達(dá)式,例1:寫出下列條件的邏輯表達(dá)式。 5k10 k.ge.5.and.k.le.10 f3g或f5t abs(f).le.3*g.or.abs(f).eq.5*t 1a8并且1b8 (a.ge.1.and.a.le.8).and.(b.ge.1.and.b.le.8),2020/9/20,83,4.3 邏輯表達(dá)式,例2:若a=2.5,b=7.5,c=5.0,d=6.0,求下列邏輯表達(dá)式的值。 (a.lt.b).and.(

39、b.lt.c) t f f,2020/9/20,84,4.3 邏輯表達(dá)式,例2:若a=2.5,b=7.5,c=5.0,d=6.0,求下列邏輯表達(dá)式的值。 c/2.0+d.lt.a.and.not.true.or.c.le.d 8.5 F T F . F . T,2020/9/20,85,4.4 用塊 if 實(shí)現(xiàn)選擇結(jié)構(gòu),有以下三種典型的塊if選擇結(jié)構(gòu): if (條件) then (塊if語句) 塊 (then塊) endif (endif語句),2020/9/20,86,4.4 用塊 if 實(shí)現(xiàn)選擇結(jié)構(gòu), if (條件) then 塊1 (then塊) else 塊2 (else塊) endi

40、f,2020/9/20,87,4.4 用塊 if 實(shí)現(xiàn)選擇結(jié)構(gòu),例: 2X3 (X2) Y X5 (X2) 編程如下: read(*,*) x if (x.le.2) then y=2*x+3 else y=x+5 endif write(*,*)x=,x,y=,y end,2020/9/20,88,4.4 用塊 if 實(shí)現(xiàn)選擇結(jié)構(gòu), if (條件1) then 塊1 else if (條件2) then 塊2 (else if塊) else if (條件n) then 塊n else 塊(n+1) endif,2020/9/20,89,4.4 用塊 if 實(shí)現(xiàn)選擇結(jié)構(gòu),說明: 每個塊if中可

41、以完整地包含一個(或多個)塊if結(jié)構(gòu),即構(gòu)成塊if 的嵌套結(jié)構(gòu)。如: if (條件1) then if (條件1) then 塊1 if (條件2) then else 塊2 if (條件2) then endif 塊2 else endif 塊1 endif endif,2020/9/20,90,4.4 用塊 if 實(shí)現(xiàn)選擇結(jié)構(gòu),一個塊if 語句必須和一個endif語句相對應(yīng)。 塊if 中的“then塊”、“else塊”和“else if塊”可為空塊。,2020/9/20,91,4.4 用塊 if 實(shí)現(xiàn)選擇結(jié)構(gòu),例1:求一元二次方程ax2+bx+c=0的根。 (當(dāng)b2-4ac0時(shí)有兩個實(shí)根,

42、b2-4ac0時(shí)有兩個復(fù)根。),2020/9/20,92,4.4 用塊 if 實(shí)現(xiàn)選擇結(jié)構(gòu),print*,input a,b,c: read*,a,b,c f=-b/(2.0*a) d=b*2-4.0*a*c g=sqrt(-d)/(2.0*a) if (d.ge.0.0) then print*,x1=,f,+i,g e=sqrt(d) print*,x2=,f,-i,g x1=(-b+e)/(2.0*a) endif x2=(-b-e)/(2.0*a) end print*,x1=,x1 print*,x2=,x2 else,2020/9/20,93,4.4 用塊 if 實(shí)現(xiàn)選擇結(jié)構(gòu),例2

43、:求下列函數(shù)值。 0 (x-10) 2x+20 (-10 x0) y= 20 (0 x20) 30-0.5x (20 x40) 50-x (40 x50) 0 (x50),2020/9/20,94,4.4 用塊 if 實(shí)現(xiàn)選擇結(jié)構(gòu),輸入x,true x-10 false,true x0 false,true x20 false,true x40 false,true x50 false,y=50-x y=0,打印y,y0,y=20,y=30-0.5x,y=2x+20,2020/9/20,95,4.4 用塊 if 實(shí)現(xiàn)選擇結(jié)構(gòu),源程序一: read*,x if (x.lt.50.0) then

44、if (x.lt.-10.0) then y=50.0-x y=0.0 else else y=0.0 if (x.lt.0.0) then endif y=2.0*x+20.0 endif else endif if (x.lt.20.0) then endif y=20.0 endif else print*,y=,y if (x.lt.40.0) then end y=30.0-0.5*x else,2020/9/20,96,4.4 用塊 if 實(shí)現(xiàn)選擇結(jié)構(gòu),源程序二: read*,x print*,y=,y if (x.lt.-10.0) then end y=0.0 else if

45、(x.lt.0.0) then y=2.0*x+20.0 else if (x.lt.20.0) then y=20.0 else if (x.lt.40.0) then y=30.0-0.5*x else if (x.lt.50.0) then y=50.0-x else y=0.0 endif,2020/9/20,97,4.5 邏輯 if 語句,邏輯if語句也是一種選擇結(jié)構(gòu),但與塊if 不同,主要表現(xiàn)在: 只用一行表示一個選擇結(jié)構(gòu); 僅當(dāng)條件成立時(shí)執(zhí)行,并且只執(zhí)行一條語句。 邏輯if語句的一般形式: If條件語句 例:if (n.le.100) n=n+1,2020/9/20,98,4.5

46、 邏輯 if 語句,例: 2X3 (X2) Y X5 (X2) 編程如下: read(*,*) x read(*,*)x if (x.le.2) then if(x.le.2) y=2*x+3 y=2*x+3 if(x.gt.2) y=x+5 else write(*,*)y=,y y=x+5 end endif write(*,*)y=,y end,2020/9/20,99,第五章 循環(huán)結(jié)構(gòu)的實(shí)現(xiàn),2020/9/20,100,第五章 循環(huán)結(jié)構(gòu)的實(shí)現(xiàn),所謂循環(huán),是指在程序執(zhí)行過程中需要重復(fù)執(zhí)行的程序段。 在實(shí)際問題中,我們經(jīng)常遇到循環(huán),如: 求 n,n!, 無條件循環(huán) GOTO 循環(huán)結(jié)構(gòu) 直到

47、型循環(huán) 條件循環(huán) 當(dāng)型循環(huán) 計(jì)數(shù)型循環(huán),2020/9/20,101,5.1 用goto語句實(shí)現(xiàn)循環(huán),goto語句的一般形式: goto 其中:s1語句標(biāo)號。 功能:程序執(zhí)行到此語句時(shí),無條件的轉(zhuǎn)向標(biāo)號為s1的語句去執(zhí)行。,例:求110的累加和。 編寫程序段: integer x,sum x=0.0 sum=0.0 10 x=x+1 sum=sum+x goto 10,2020/9/20,102,5.1 用goto語句實(shí)現(xiàn)循環(huán),如果我們把以上goto語句作為邏輯if語句中的執(zhí)行語句,則就可以實(shí)現(xiàn)有條件的循環(huán)。即: integer x,sum 求110的累加和 x=0.0 sum=0.0 10 x

48、=x+1 sum=sum+x if(x.lt.10)goto 10 print*,sum end,2020/9/20,103,5.2 當(dāng)型循環(huán)的實(shí)現(xiàn),一、用塊if和goto語句實(shí)現(xiàn)循環(huán) 一般形式: s1 if (條件) then 標(biāo)號 塊 goto s1 endif,所謂當(dāng)型循環(huán),是指執(zhí)行循環(huán)體要依據(jù)事先給定的條件。當(dāng)條件成立時(shí)執(zhí)行循環(huán),否則就不執(zhí)行循環(huán)。,2020/9/20,104,5.2 當(dāng)型循環(huán)的實(shí)現(xiàn),編程如下: read*,n m=1 i=1 10 if (i.le.n) then m=m*i i=i+1 goto 10 endif print*,m end,例:求n!。,2020/9

49、/20,105,5.2 當(dāng)型循環(huán)的實(shí)現(xiàn),二、用do while語句實(shí)現(xiàn)當(dāng)型循環(huán) 一般形式 do s1, while (條件) 循環(huán)體 s1 ,2020/9/20,106,5.2 當(dāng)型循環(huán)的實(shí)現(xiàn),例:求n!。 編程如下: read*,n m=1 i=1 do 10 while (i.le.n) m=m*i i=i+1 10 continue print*,m end,2020/9/20,107,5.3 直到型循環(huán)的實(shí)現(xiàn),一、用邏輯if語句實(shí)現(xiàn)直到型循環(huán) 一般形式 s1 循環(huán)體 if (條件) goto s1,所謂直到型循環(huán),是指先執(zhí)行循環(huán)體,再判斷條件。如果條件為“假”(真),繼續(xù)執(zhí)行循環(huán),直到

50、條件為“真”(假)時(shí)終止循環(huán)。,2020/9/20,108,5.3 直到型循環(huán)的實(shí)現(xiàn),例1:求n!。 編程如下: read*,n m=1 i=1 10 continue m=m*i i=i+1 if (i.le.n) goto 10 print*,m end,2020/9/20,109,5.3 直到型循環(huán)的實(shí)現(xiàn),編程如下: integer sign s=1.0 d=2.0 sign=1 10 sign=(-1)*sign t=sign/d s=s+t d=d+1 if (d.le.100.0) goto 10 print*, s end,例2:求 的值。,2020/9/20,110,當(dāng)型與直到

51、型循環(huán)的比較,當(dāng)型循環(huán) 直到型循環(huán) 不同:先判斷條件 先執(zhí)行循環(huán)體 再執(zhí)行循環(huán)體 再判斷條件 (循環(huán)體至少被 執(zhí)行一次),循環(huán)結(jié)構(gòu)關(guān)鍵:條件判斷 改變條件的語句,2020/9/20,111,5.4 用do語句實(shí)現(xiàn)循環(huán),當(dāng)循環(huán)的初值、終值和循環(huán)次數(shù)都已知時(shí),可用do語句實(shí)現(xiàn)循環(huán)。 用do語句實(shí)現(xiàn)的循環(huán)稱為“do循環(huán)”。do循環(huán)是由一個do語句和循環(huán)體組成。,2020/9/20,112,5.4 用do語句實(shí)現(xiàn)循環(huán),一、一般形式 do s, v=e1, e2 ,e3 循環(huán)體 s 說明: s循環(huán)體終端語句的標(biāo)號 v循環(huán)控制變量(do變量),可為整型、實(shí)型或雙精度,2020/9/20,113,5.4 用

52、do語句實(shí)現(xiàn)循環(huán),一、一般形式 do s, v=e1, e2 ,e3 循環(huán)體 s 說明: e1,e2,e3是整型、實(shí)型或雙精度表達(dá)式 e1循環(huán)變量初值 e2循環(huán)變量終值 e3循環(huán)變量增量(步長,默認(rèn)值:1) 當(dāng)v為整型變量,e3=1時(shí),e3可忽略,例:DO 10,I=1,10,2 DO 100,N=1,5,2020/9/20,114,do循環(huán)執(zhí)行過程 P103 圖5.8,2020/9/20,115,r=MAX(INT(e2-e1+e3)/e3),0),v v+e3,執(zhí)行過程 P103 圖5.7,并將其轉(zhuǎn)換為循環(huán)變量的類型,2020/9/20,116,5.4 用do語句實(shí)現(xiàn)循環(huán),例如:求110的

53、累加和。 integer x,sum sum=0 DO 10,x=1,10 sum=sum+x x=x+1 10 continue print*,sum end,integer x,sum x=0.0 sum=0 10 if(x.le.10) then x=x+1 sum=sum+x goto 10 endif print*,sum end,2020/9/20,117,5.4 用do語句實(shí)現(xiàn)循環(huán),二、執(zhí)行過程(分四種情形) 當(dāng)e2e1且e30 : 當(dāng)e2e1且e30 :,2020/9/20,118,5.4 用do語句實(shí)現(xiàn)循環(huán),當(dāng)e20 : 當(dāng)e2e1且e30 :,2020/9/20,119,5

54、.4 用do語句實(shí)現(xiàn)循環(huán),編程如下: do 10 i=1, 30 read*, x 10 if (x.ge.60) print*, i, x end,循環(huán)體,例1:從鍵盤輸入30個學(xué)生的單科成績,并將其中及格以上的學(xué)生序號和成績打印出來。,2020/9/20,120,5.4 用do語句實(shí)現(xiàn)循環(huán),例2:打印正弦sinx的值。(間隔0.1o,從0o360o) 編程如下: do 100 i=0, 3600 x=i/10.0 y=sin(x*3.14159/180) 100 print*, x=,x, y=, y end,2020/9/20,121,5.4 用do語句實(shí)現(xiàn)循環(huán),說明: DO循環(huán)是當(dāng)型循

55、環(huán) 可用e1, e2, e3的值求出循環(huán)次數(shù)。 計(jì)算公式:r=max(int(e2-e1+e3)/e3),0) e30 則運(yùn)行時(shí)出錯(被零除) 例:do 10,i1.2,6.6,0.2 r=max(int(6-1+0/0),0)(因?yàn)檠h(huán)變量I是整型) e1e2且e30,則循環(huán)次數(shù)為0 由于實(shí)數(shù)在內(nèi)存中存儲的誤差,v, e1, e2, e3盡可能用整型量。,2020/9/20,122,5.4 用do語句實(shí)現(xiàn)循環(huán),說明: e1,e2,e3的值在do循環(huán)體內(nèi)不會改變,即使給表達(dá)式e1,e2,e3中的變量賦值也不影響循環(huán)次數(shù) 例: m=10 do 10,i=1,m,3 m=100+m print*,i,m 10 continue end r=(10-1+3)/3=4,2020/9/20,123,5.4 用do語句實(shí)現(xiàn)循環(huán),說明: 循環(huán)終端語句必須是可執(zhí)行語句(但除goto, 塊if,else,elseif,endif,end,stop和return語句外)。 繼續(xù)語句(continue語句) 循環(huán)終端語句必須是可執(zhí)行語句。那么,這種作為循環(huán)終端語句的語句具有雙重作用:一是作為循環(huán)終端的標(biāo)志,二是要完成自身的功能。因此影響了程序的可讀性。 Fortran用一個專門的語句作為do循環(huán)的終端語句,即continue語句,它本身不進(jìn)行任何機(jī)器操作。,2020

溫馨提示

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

評論

0/150

提交評論