資源描述:
《循環(huán)結(jié)構(gòu)的Fortran程序設(shè)計(jì)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、2021/9/21第四講循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)在程序設(shè)計(jì)中廣泛使用,是一種非常重要的程序結(jié)構(gòu)。其基本思想是重復(fù),即重復(fù)執(zhí)行某些語(yǔ)句、以完成大量的計(jì)算要求。但是,循環(huán)不是簡(jiǎn)單的重復(fù),因?yàn)楸M管每次都執(zhí)行相同的語(yǔ)句,但是在循環(huán)過(guò)程中變量在變化,而且完成了循環(huán)次數(shù)或在一定的條件下能退出循環(huán)。本講介紹Fortran90實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的2種方法:1、do循環(huán)結(jié)構(gòu);2、dowhile循環(huán)結(jié)構(gòu)。循環(huán)次數(shù)事先可以確定下來(lái),用do語(yǔ)句實(shí)現(xiàn)循環(huán),非常方便。比如,當(dāng)x=1、2、3、…、10時(shí),分別計(jì)算lnx和sinx的值,用do循環(huán)實(shí)現(xiàn)的程序如下:2021/9/22§1用d
2、o語(yǔ)句實(shí)現(xiàn)循環(huán)IntegerxDox=1,10,1Print*,x,log(x*1.0),sin(x*1.)EnddoEnd2021/9/23一、do循環(huán)的一般格式doi=e1,e2,e3(do語(yǔ)句)循環(huán)體(執(zhí)行的操作)enddo(結(jié)束語(yǔ)句)其中:(1)i代表循環(huán)變量(可為整型或?qū)嵭停唬?)e1,e2[,e3]稱為參數(shù)表達(dá)式,分別為循環(huán)變量的初值、終值和步長(zhǎng);(3)循環(huán)體是循環(huán)過(guò)程被重復(fù)執(zhí)行的語(yǔ)句組;(4)enddo是循環(huán)結(jié)束的終端語(yǔ)句,其與do語(yǔ)句配合使用。比如,計(jì)算5!Integerm,nm=1Don=1,5,1m=m*nEnddoPrint*
3、,mend2021/9/24說(shuō)明:(1)步長(zhǎng)為1時(shí),表達(dá)式e3可以省略。比如“doi=1,10,1”與“doi=1,10”相同。(3)參數(shù)表達(dá)式“i=e1,e2,e3”表示循環(huán)次數(shù)為:r=max(int((e2-e1+e3)/e3),0)比如:doi=10,1,-2的循環(huán)次數(shù)r=5,而doi=10,1,2的r=0(即不循環(huán)),注意:1、步長(zhǎng)不能為0;2、循環(huán)次數(shù)不能為0。(2)循環(huán)變量與參數(shù)表達(dá)式數(shù)據(jù)類型不一致時(shí),其處理方法與賦值語(yǔ)句相同,即先計(jì)算參數(shù)表達(dá)式、并把結(jié)果轉(zhuǎn)換成循環(huán)變量類型,然后進(jìn)行處理。比如,“doi=1.3,5.9,2.6”相當(dāng)于“d
4、oi=1,5,2”IntegeraDoa=1.3,5.9,2.6Print*,aEnddoEnd輸出為:1352021/9/25二、do循環(huán)的執(zhí)行過(guò)程Do循環(huán)的執(zhí)行過(guò)程可示意為右圖,說(shuō)明如下:計(jì)算e1,e2,e3的值e1→i計(jì)算循環(huán)次數(shù)rr=0?執(zhí)行循環(huán)體i+e3→ir-1→renddo下面的語(yǔ)句是否(1)循環(huán)體指do語(yǔ)句和enddo語(yǔ)句之間的語(yǔ)句,不包括do語(yǔ)句,因此do語(yǔ)句在循環(huán)過(guò)程中只執(zhí)行一次。如果循環(huán)參數(shù)表達(dá)式中含變量,那么即使在循環(huán)體中改變變量的值,循環(huán)參數(shù)并不改變。比如:Integera,b,c,Ia=1;b=7;c=2Doi=a,b,c
5、+1a=2;b=b+a;c=c*iPrint*,i,a,b,cEnddoEnd輸出為:129242118721356進(jìn)入do循環(huán)后,首先計(jì)算出循環(huán)變量i的初值1、終值7、步長(zhǎng)3(即執(zhí)行do語(yǔ)句),盡管在循環(huán)體中改變了變量a、b、c的值,但是循環(huán)變量的初值、終值、步長(zhǎng)不再變化。2021/9/26(2)由于在循環(huán)過(guò)程中,循環(huán)變量會(huì)自動(dòng)按循環(huán)要求變化,因此不能在循環(huán)體內(nèi)給循環(huán)變量進(jìn)行賦值。IntegeriDoi=1,5,2i=i+1Print*,iEnddoEndErrorfor3598:assignmenttoDovariableidetectedbet
6、weeniand=(3)由于每循環(huán)一次循環(huán)變量自動(dòng)增加一個(gè)步長(zhǎng)的值,因此退出循環(huán)后循環(huán)變量的值,比最后一次循環(huán)時(shí)循環(huán)變量的值多1個(gè)步長(zhǎng)。Integeri,mDoi=1,10,2m=iEnddoPrint*,i,mEnd輸出為:119三、do循環(huán)舉例例1:輸入x、n,計(jì)算輸出:分析:累加項(xiàng)可表示為遞推Fi=Fi-1*x/i,用賦值語(yǔ)句F=F*x/i來(lái)實(shí)現(xiàn)。重復(fù)加是循環(huán)操作,程序?yàn)椋?021/9/27Integern,iRealx,F,yRead*,x,nF=1.0Y=1.0Doi=1,nF=F*x/iY=Y+FEnddoPrint*,’x=’,x,’n
7、=’,nWrite(*,*)’y=’,yEnd從鍵盤輸入:3,3↙輸出為:x=3.0n=3y=13.02021/9/28例2:輸入一個(gè)整數(shù),判斷并輸出是否為完數(shù)(除自身外所有因子之和等于本身的數(shù)),比如6=1+2+3,所以6是完數(shù)。分析:因?yàn)檎乙粋€(gè)整數(shù)的因子及求它們的和可以用循環(huán)來(lái)實(shí)現(xiàn),而用選擇結(jié)構(gòu)可進(jìn)行判斷與輸出其是否為完數(shù),程序?yàn)椋篒ntegerm,i,sumRead*,mSum=0Doi=1,m/2!求除本身之外的因子及之和If(mod(m,i).eq.0)sum=sum+iEnddoif(m.eq.sum)thenWrite(*,*)m,”是
8、完數(shù)”ElsePrint*,m,’不是完數(shù)’Endifend2021/9/29例3:找出3位整數(shù)中全部的水仙