FORTRAN90第三章循環(huán)結構程序設計_第1頁
FORTRAN90第三章循環(huán)結構程序設計_第2頁
FORTRAN90第三章循環(huán)結構程序設計_第3頁
FORTRAN90第三章循環(huán)結構程序設計_第4頁
FORTRAN90第三章循環(huán)結構程序設計_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 3.1 有循環(huán)變量的有循環(huán)變量的do循環(huán)結構循環(huán)結構3 循環(huán)結構程序設計循環(huán)結構程序設計 3.2 重復重復dodo循環(huán)結構循環(huán)結構 3.3 do_while控制的循環(huán)結構控制的循環(huán)結構 3.4 循環(huán)的嵌套循環(huán)的嵌套 3.5 循環(huán)結構程序設計舉例循環(huán)結構程序設計舉例3.13.1有循環(huán)變量的有循環(huán)變量的do循環(huán)結構循環(huán)結構重復執(zhí)行一組操作稱為循環(huán)。算法中構成重復執(zhí)行一組操作稱為循環(huán)。算法中構成循環(huán)的結構稱為循環(huán)結構循環(huán)的結構稱為循環(huán)結構 。在在fortranfortran中中, ,實現循環(huán)結構的最直接方實現循環(huán)結構的最直接方法就是用法就是用gotogoto語句語句, ,但這種方法不符合結但這種方

2、法不符合結構化程序設計的思想構化程序設計的思想, ,并不值得提倡。并不值得提倡。fortran 90fortran 90一般有兩種方法實現循環(huán)一般有兩種方法實現循環(huán)控制控制:do_enddo:do_enddo語句和語句和do do while_enddowhile_enddo語句。語句。格式格式: :do do 循環(huán)變量循環(huán)變量v= e1,e2,e3v= e1,e2,e3 循環(huán)體循環(huán)體statementsstatements enddo enddo功能功能: :對于變量對于變量v v的值從初值的值從初值e1e1按增量按增量e3e3增增加到終值加到終值e2,e2,反復執(zhí)行反復執(zhí)行循環(huán)體循環(huán)體。e

3、1,e2,e3e1,e2,e3都是都是算術表達式算術表達式,e3,e3的缺省值為的缺省值為1 1。循環(huán)變量。循環(huán)變量v v是代是代數量數量( (整型整型/ /實型實型) )。例例: do i=10,2,-2: do i=10,2,-2 print print * *,i,i,i,i* *i i enddo enddo循環(huán)次數循環(huán)次數r=int(e2-e1+e3)/e3),r=int(e2-e1+e3)/e3),如果初始值如果初始值表達式表達式e1,e1,終止值表達式終止值表達式e2,e2,增量表達式增量表達式e3e3中有中有實型表達式實型表達式, ,循環(huán)就可能少做一次。循環(huán)次數循環(huán)就可能少做一

4、次。循環(huán)次數至少為零。至少為零。例例: :e3 = 0.1e3 = 0.1do x = 0,50do x = 0,50.1,e3,e3 print print * *,x,x enddo enddo 0.1 0.1不能精確表示不能精確表示,50.1/0.1,50.1/0.1得到得到500.9500.9幾幾, ,被被int()int()直接截斷直接截斷, ,循環(huán)次數循環(huán)次數=500=500。返回最好用整型變量來控制循環(huán)最好用整型變量來控制循環(huán), ,以避免少做以避免少做一次的問題。一次的問題。例例: :x = 0x = 0do k = 0,500do k = 0,500 print print *

5、 *,x x = x+0.1,x x = x+0.1enddoenddo end end do do 循環(huán)執(zhí)行過程循環(huán)執(zhí)行過程s1: s1: 求表達式求表達式e1,e2,e3e1,e2,e3的值的值, ,編譯系統分別用編譯系統分別用三個與循環(huán)變量三個與循環(huán)變量v v相同類型的臨時變量相同類型的臨時變量( (不妨不妨記為記為v1,v2,v3)v1,v2,v3)來存放其值。來存放其值。s2:s2:循環(huán)變量循環(huán)變量v=v1v=v1s3: s3: 計算循環(huán)次數計算循環(huán)次數r=int(v2-v1+v3)/v3)r=int(v2-v1+v3)/v3)s4: s4: 若若r 0,r 0,則轉則轉s9s9s5

6、: s5: 執(zhí)行循環(huán)體執(zhí)行循環(huán)體s6: s6: 循環(huán)變量循環(huán)變量v v增加增量增加增量v3v3s7: s7: 循環(huán)次數循環(huán)次數r r減減1 1s8:s8:轉轉s4s4s9:s9:循環(huán)終端語句后第一條可執(zhí)行語句。循環(huán)終端語句后第一條可執(zhí)行語句。注意注意:(1)循環(huán)變量的值在循環(huán)體中可以引用循環(huán)變量的值在循環(huán)體中可以引用,不能被重不能被重新賦值新賦值.例例:do i=1,20j=i*iprint*,i,jend是可以的是可以的.而而do i=1,20i=i*iprint*,iend非法非法.(2)e1,e2,e3的類型與的類型與v的類型可以相同的類型可以相同,也可以也可以不同不同,當類型不同時當類

7、型不同時,系統自動將系統自動將e1,e2,e3的類型的類型轉換成轉換成v的類型的類型.例例: do i=2,5,1的循環(huán)次數為的循環(huán)次數為4.do x=2.2,5.4,1.1的循環(huán)次數為的循環(huán)次數為3.do i=2.2,5.4,1.1的循環(huán)次數為的循環(huán)次數為4.(3)正常出口正常出口:從循環(huán)的從循環(huán)的enddo語句脫離循環(huán)的語句脫離循環(huán)的稱為正常出口稱為正常出口,否則稱為非正常出口否則稱為非正常出口.脫離循環(huán)脫離循環(huán)后循環(huán)變量保留脫離時的值后循環(huán)變量保留脫離時的值.例例:do i=1,5j=i*iend doprint*,i,jenddo i=1,5if(i3)goto100j=i*iend

8、do100 print*,i,jend輸出輸出6,25輸出輸出 4,9dodo循環(huán)結構命名方式與塊循環(huán)結構命名方式與塊ifif結構相仿結構相仿: :dodo循環(huán)結構名循環(huán)結構名: : do do 循環(huán)變量循環(huán)變量v= e1,e2,e3v= e1,e2,e3 循環(huán)體循環(huán)體statementsstatementsenddoenddo循環(huán)結構名循環(huán)結構名 dodo循環(huán)結構的命名循環(huán)結構的命名例例: :計算計算n! n!dodo循環(huán)的例題循環(huán)的例題read(read(* *, ,* *) n) nf = 1f = 1do i = 2,n do i = 2,n f = f f = f* *i i end

9、o endo write( write(* *, ,* *) n,f) n,f end end例例: :前前n n個自然數之和個自然數之和 read( read(* *, ,* *) n) ns = 0s = 0do i = 1,n do i = 1,n s = s+i s = s+i enddo enddo write( write(* *, ,* *) n,s) n,s end end例例: :輸入輸入100100個數個數, ,求其中正數的個數及其平求其中正數的個數及其平均值。均值。s = 0;n = 0s = 0;n = 0do k = 1,100do k = 1,100 read( r

10、ead(* *, ,* *) a) a if(a0) then if(a0) then n = n+1 n = n+1 s = s+a s = s+a end if end ifenddoenddoif(n0) print if(n0) print * *, n,s/n, n,s/nendend例例:求求fibonacci數列:數列:1,1,2,3,5,8,的前的前40個數個數. 1 1 2 3 5 8 13 f1 +f2= f f1 +f2 = f f1 + f2 = f程序為程序為:f1=1;f2=1print*,f1,f2do i=3,40f=f1+f2print*,ff1=f2f2=f

11、end doenddo i=1,19f1=f1+f2f2=f1+f2end do3.2.1中斷語句中斷語句(exit,cycle)3.2 重復重復dodo循環(huán)結構循環(huán)結構exitexit語句強制退出循環(huán)語句強制退出循環(huán), ,格式為格式為: :exit doexit do循環(huán)結構名循環(huán)結構名 可用可用ifif語句結合語句結合exitexit語句有條件地中斷循環(huán)。語句有條件地中斷循環(huán)。例如:輸入一組整數(個數小于例如:輸入一組整數(個數小于100),求這),求這組數的偶數個數和偶數之和。當某數大于組數的偶數個數和偶數之和。當某數大于9000時程序結束。程序為:時程序結束。程序為:integer:i

12、,k,n=0,s=0exam1:do i=1,100read*,k if(k9000)exit exam1 if(mod(k,2)=0)thenn=n+1s=s+k;endifenddo exam1print*,n=,n,s=,sendcyclecycle語句使循環(huán)體中在它后面的語句不被執(zhí)語句使循環(huán)體中在它后面的語句不被執(zhí)行行, ,而重新執(zhí)行下一輪循環(huán)而重新執(zhí)行下一輪循環(huán), ,格式為格式為: :cycle docycle do循環(huán)結構名循環(huán)結構名 可用可用ifif語句結合語句結合cyclecycle語句有條件地轉移循環(huán)。語句有條件地轉移循環(huán)。說明:說明:(1) cyclecycle語句的執(zhí)行將

13、改變循環(huán)體的執(zhí)語句的執(zhí)行將改變循環(huán)體的執(zhí)行順序,并不終止循環(huán)的執(zhí)行。行順序,并不終止循環(huán)的執(zhí)行。(2 2)當執(zhí)行)當執(zhí)行cyclecycle語句后,重新執(zhí)行下一語句后,重新執(zhí)行下一輪循環(huán)時,循環(huán)變量應增加一個步長。輪循環(huán)時,循環(huán)變量應增加一個步長。例如:輸入一組數據(例如:輸入一組數據(100100個),將大與個),將大與0 0的的數據打印出來。程序為:數據打印出來。程序為:implicit nonereal xinteger ido i=1,100read*,xif(x0)cycleprint*,xenddoend3.2.2 重復重復dodo循環(huán)結構循環(huán)結構一般形式一般形式: : do do

14、循環(huán)結構名循環(huán)結構名: do: do 循環(huán)體循環(huán)體statementsstatementsenddoenddo dodo循環(huán)結構名循環(huán)結構名 重復重復dodo循環(huán)結構循環(huán)結構一般來說是一個死循環(huán)一般來說是一個死循環(huán), ,必須必須在其循環(huán)體內用邏輯在其循環(huán)體內用邏輯ifif語句結合語句結合exitexit語句語句或或gotogoto語句等迫使循環(huán)中止。語句等迫使循環(huán)中止。例例:判斷整數判斷整數n是否素數是否素數integer n,aread*,na = 2doif(mod(n,a) = 0.or.an/2) exita = a+1enddoif(a0) do while(n0) m = 10m

15、= 10* *m+mod(n,10)m+mod(n,10)n = n/10n = n/10end doend doprint print * *, m, mendend例:輸入兩個正數例:輸入兩個正數m,n,求其最大公約數。,求其最大公約數。用輾轉相除法。程序為:用輾轉相除法。程序為:integer m,n,k,ysread*,m,nif(mn)thenk=m;m=n;n=kend ifys=mod(m,n)do while(ys/=0)m=n;n=ys;ys=mod(m,n)enddoprint*,nend n171513141 程序為:程序為:integer:n=1real:s=1.0,t

16、=1.0,pi=0.0do while(abs(t)=1e-5)t=s/n;pi=pi+t;s=-s;n=n+2enddoprint*,pi=,4*piend例:計算例:計算的近似值,精度要求第的近似值,精度要求第n項的值小于項的值小于10-5時結束。時結束。 do do循環(huán)是一種塊結構循環(huán)是一種塊結構, ,象塊象塊ifif那樣那樣, ,當它的當它的塊結構內部又出現塊結構內部又出現dodo循環(huán)時循環(huán)時, ,就構成了就構成了dodo循循環(huán)的嵌套環(huán)的嵌套。嵌套的層數理論上無限。嵌套的層數理論上無限。3.4 循環(huán)的嵌套循環(huán)的嵌套 循環(huán)與塊循環(huán)與塊ifif還可相互嵌套還可相互嵌套, ,構成復雜的程構成

17、復雜的程序結構。序結構。 內外層循環(huán)不能用相同的循環(huán)變量名。內外層循環(huán)不能用相同的循環(huán)變量名。 do do循環(huán)、塊循環(huán)、塊ifif和和casecase結構都是塊結構結構都是塊結構, ,無無論怎樣嵌套論怎樣嵌套, ,都必須保證塊的完整性。不允都必須保證塊的完整性。不允許交叉嵌套許交叉嵌套, ,也不允許從塊外轉到塊內也不允許從塊外轉到塊內, ,但可但可以從塊內轉出。以從塊內轉出。 嵌套循環(huán)的執(zhí)行順序當然是由最外層循環(huán)嵌套循環(huán)的執(zhí)行順序當然是由最外層循環(huán)開始開始, ,逐層推進逐層推進, ,這是不言而喻的。事實上這是不言而喻的。事實上, ,塊塊結構結構( (例如塊例如塊if) if) 嵌套的執(zhí)行順序都

18、是由最外嵌套的執(zhí)行順序都是由最外層開始層開始, ,逐層推進。只要把較內部的塊結構逐層推進。只要把較內部的塊結構理解為包含它的上一層塊結構的一個執(zhí)行步理解為包含它的上一層塊結構的一個執(zhí)行步驟驟, ,就能夠很好地理解塊結構的嵌套及其執(zhí)就能夠很好地理解塊結構的嵌套及其執(zhí)行順序。行順序。3.5 循環(huán)結構程序設計舉例循環(huán)結構程序設計舉例例例: :求前求前n n個自然數的階乘的和個自然數的階乘的和read *, nsum = 1;f = 1do k = 2,n f = f*k sum = sum+fenddowrite(*,*) n,sumend例例:“:“百雞問題百雞問題”: :公雞公雞5 5元元/ /

19、只只, ,母雞母雞3 3元元/ /只只, , 小小雞雞3 3只只/ /元元,100,100元如何買元如何買100100只雞?只雞?設買公雞設買公雞x x只只, ,母雞母雞y y只只, ,小雞小雞z z只只, ,有有: :x+y+z=100 x+y+z=100且且5x+3y+z/3=100, 5x+3y+z/3=100, integer x,y,zinteger x,y,zdo x = 0,19do x = 0,19 do y=0,33 do y=0,33 z=100-x-y z=100-x-y if(15 if(15* *x+9x+9* *y+z=300) print y+z=300) pri

20、nt * *, x,y,z, x,y,zenddoenddoenddoenddoendend例例: :求正整數求正整數mm與與n n的最大公約數的最大公約數integer m,nread(*,*) m,ndo while(m/=n) if(mn) then m=m-n elsen=n-m end ifend do;print *, mend例例:輸入輸入30個學生的三門考試成績個學生的三門考試成績,計算每個學生的計算每個學生的平均成績平均成績,并把大于并把大于85分的平均成績打印出來分的平均成績打印出來.implicit noneinteger i,j real sum, ave,scored

21、o i=1,30sum=0do j=1,3 read*,score sum=sum+scoreenddoave=sum/3.0if(ave=85)print*,aveenddoend例:求例:求3!+6!+9!求求i階乘的程序段為階乘的程序段為t=1.0do j=1,i t=t*jend do求出的求出的t值加到值加到s上上s=s+ti的取值為的取值為3,6,9可可用用do循環(huán)循環(huán)do i=3,9,3enddo說明部分為說明部分為implicit nonereal :s=0.0,tinteger i,j輸出為輸出為print*,s=,send程序舉例選擇結構和循環(huán)結構部分例1:求下列函數值:其它,0105,4150,211,05,)1(1xxxxxxxy=程序為:read*,xif(x-5).or.(x= =-1)then y=0.0else if(x0)then y=1.0/(x+1.0)else if(x5.0)then y=1.0/(x+2.0)else if(x0.0.and.x/=1.0)then z=10.0else if(x*y=1e-4) f=-ft=f/(k*(k+1)sum=sum+tk=k+1enddoprint*,sumend該程序把剛小于10-4這項也加到sum中例6:求滿足:2000222232

溫馨提示

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

評論

0/150

提交評論