循環(huán)結(jié)構(gòu)程序設(shè)計_第1頁
循環(huán)結(jié)構(gòu)程序設(shè)計_第2頁
循環(huán)結(jié)構(gòu)程序設(shè)計_第3頁
循環(huán)結(jié)構(gòu)程序設(shè)計_第4頁
循環(huán)結(jié)構(gòu)程序設(shè)計_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章循環(huán)結(jié)構(gòu)程序設(shè)計第3章循環(huán)結(jié)構(gòu)程序設(shè)計第1節(jié)For循環(huán)程序?qū)嵗締栴}描繪】計算一副撲克牌的點數(shù),此中牌A為1點,牌J、Q、K分別為11、12、13點,大、小王不算點?!締栴}剖析】依據(jù)題意,要計算一副撲克牌的點數(shù),能夠先求出一栽花色牌的點數(shù)和,再乘以4即可。進(jìn)一步剖析,求一栽花色牌的點數(shù)和,即是求113的連續(xù)自然數(shù)之和。我們用S表示所求數(shù)的和,用T表示加數(shù),這樣能夠讓T從1變化到13,每次讓T不停加入到S中,就能夠求出S的值,最后乘以4即可?!舅惴ㄔO(shè)計】自然語言置初值,即S=0,T=1;使S=S+T,所求出的和仍放入S中;使T增添1,即T=T+1;假如T小于等于13,轉(zhuǎn)第二步,不然轉(zhuǎn)第五步

2、;輸出計算結(jié)果。程序流程圖和結(jié)構(gòu)化流程(N-S)圖S:=0,T:=1TNSS+T,T=T+1輸出S的值【程序設(shè)計】程序清單programex3_1;25Pascal編程入門vars,t:integer;begins:=0;S置初值為0fort:=1to13doFor循環(huán)語句s:=s+t;writeln(total:,s*4);end.運轉(zhuǎn)示例total:364【知識拓展】1在程序辦理過程中,常常需要對某一條或一組語句重復(fù)履行多次,以最后達(dá)成某項任務(wù),這就是循環(huán)。關(guān)于重復(fù)次數(shù)已知,而不依靠循環(huán)中語句的結(jié)果,常用計數(shù)循環(huán)(for/to/do語句)。2for循環(huán)語句格式:格式一:for控制變量:=初

3、值to終值do循環(huán)體語句;格式二:for控制變量:=初值downto終值do循環(huán)體語句;此中for、to、downto、do為保存字,do后邊的語句稱為循環(huán)體。此中循環(huán)控制變量能夠是整型、字符或布爾型,但不可以為實型。一般地,能夠是次序種類數(shù)據(jù)。初值、終值表達(dá)式往常要與控制變量的種類相同。在for語句中假如使用的是to,稱為遞加型計數(shù)循環(huán)語句,假如使用的是downto,稱為遞減型計數(shù)循環(huán)語句。3For語句的履行過程:先將初值表達(dá)式的值計算出來并賦給循環(huán)控制變量。判斷循環(huán)控制變量的值能否已“超出”終值(關(guān)于遞加型循環(huán)來說,“超出”是指“大于”;對遞減型循環(huán)來說,“超出”是指“小于”)。如已超出,

4、則跳到步驟。假如未超出終值,則履行do后邊的語句(稱為循環(huán)體)。循環(huán)變量遞加(或遞減)。返回履行步驟。循環(huán)結(jié)束,履行for循環(huán)下邊的一個語句4使用For語句的的注意事項:循環(huán)控制變量一定為次序種類。比如,能夠是整型、字符型、布爾型,不可以為實型,如:fori=3.5to8.5dowrite(i)是錯誤的。循環(huán)控制變量的值遞加或遞減的規(guī)律是:假如遞加型循環(huán),則按Succ函數(shù)規(guī)律變26第3章循環(huán)結(jié)構(gòu)程序設(shè)計化;假如遞減型循環(huán),則按Pred函數(shù)規(guī)律變化。比如:fork:=atozdowrite(k)將按次序打印出26個小寫英文字母“abcdz”。循環(huán)體能夠是一條基本語句,也能夠是一條復(fù)合語句。比如:

5、forj:=1tondobeginreadln(x);wreteln(x+1)end;循環(huán)語句的范圍直到end才結(jié)束。循環(huán)控制變量不得在循環(huán)體內(nèi)再被賦值。比如:forx;=1to10dobeginx:=2*z+1;end;是錯誤的。循環(huán)控制變量的初值和終值一經(jīng)確立,循環(huán)次數(shù)就確立不變了。循環(huán)的次數(shù)可用以下公式計算:0若初值終值遞加型循環(huán)的循環(huán)次數(shù)=Ord(終值)-Ord(初值)+1若初值終值0若初值終值遞減型循環(huán)的循環(huán)次數(shù)=Ord(初值)-(終值)+1若初值終值【同步練習(xí)】1宰相的麥子:相傳古印度宰相達(dá)依爾,是國際象棋的發(fā)明者。有一次,國王因為他的貢獻(xiàn)要獎賞他,問他想要什么。達(dá)依爾說:“只需在

6、國際象棋棋盤上(共64格)擺上這么些麥子就行了:第一格一粒,第二格兩粒,后邊一格的麥子老是前一格麥子數(shù)的兩倍,擺滿整個棋盤,我就感恩不盡了。”國王一想,這還不簡單。于是令人扛來一袋麥子,可很快用完了,又扛來一袋,很快用完了國王很奇異,請你幫國王計算一下,要多少麥子。(1立方米的麥子約為1.42108粒)問題剖析:關(guān)于編程類問題的描繪,要特別注意正確、全面地理解題意,要學(xué)會從描繪性語言中抽象出詳細(xì)的數(shù)據(jù),并成立數(shù)學(xué)模型。在此題中依據(jù)“國際象棋棋盤上共有64格,第一格一27Pascal編程入門粒,第二格兩粒,后邊一格的麥子老是前一格麥子數(shù)的兩倍”的題意,我們能夠成立數(shù)學(xué)模型:第一格為20,第二格為

7、21,第三格為22,第64格為263,設(shè)64格中應(yīng)放麥子數(shù)為S,則可用下邊的公式表示:S=20+21+22+23+2631立方米的麥子約為1.42108粒,那么S粒麥子的體積T為:T=S/(1.42108)立方米。這樣我們將問題轉(zhuǎn)變?yōu)橐话銛?shù)學(xué)模型,再依據(jù)數(shù)學(xué)模型寫出算法設(shè)計,再寫出詳細(xì)程序就水道渠成。程序清單programp3_1_2(input,output);varn,s,t:integerbegins:=0;forn:=0to63dos:=s+2n;t:=s/(1.42*108)writeln(s=,s,)writeln(t=,t);end.運轉(zhuǎn)示例S=1.84467441E+19T=1

8、.29906648E+112閱讀下邊的程序,說明該程序的作用。程序清單programp3_1_3(input,output);vara,b,c:integer此處integer表示整型數(shù)據(jù)begingwriteln(請隨意輸入一個數(shù):);readln(b);forc:=1to5dobeginread(a);ifabthenb:=a;28第3章循環(huán)結(jié)構(gòu)程序設(shè)計end;writeln(最后的值是:,b:5);end.運轉(zhuǎn)示例請隨意輸入一個數(shù):64713811最后的值是:13第2節(jié)當(dāng)循環(huán)程序?qū)嵗締栴}描繪】農(nóng)場主的估算報告放暑期學(xué)校組織夏令營到達(dá)一個農(nóng)場,農(nóng)場主熱忱的招待了他們。在觀光時,同學(xué)們發(fā)此

9、刻農(nóng)場的左上角圈出了一塊地方,這兒陽光充分,通風(fēng)也不錯,但卻什么也沒有,感覺很奇異。農(nóng)場主告訴大家因為農(nóng)場四周由很多小朋友因沒錢交學(xué)費而綴學(xué),所以決定引進(jìn)品種不錯的雌雄一對小白兔,在這飼養(yǎng)。小白兔需經(jīng)過一個月才能長大,長大后每個月都生雌雄一對小白兔。想等小白兔生殖到1000對的時候,在散發(fā)給四周貧窮的人,希望能幫助他們從頭進(jìn)入講堂。現(xiàn)正在寫一份估算報告,此中估計所需時間卻卻沒算出來。同學(xué)們此刻就讓我們來幫助這位好意的農(nóng)場主算出時間?!締栴}剖析】這問題從表面來看好象沒有什么規(guī)律,不如設(shè)計一張表格來計算一下。月份123456兔子數(shù)(對)12481632因為第一個月小白兔沒長大,所以兔子數(shù)是1對。到

10、了第二個月小白兔長大了,生了一對小白兔,兔子數(shù)是2對。第三個月小白兔也長大了,大白兔是2對,它們都生了一對小白兔,兔子數(shù)是4對。依此類推,發(fā)現(xiàn)除了第一個月,其余都是:前一個月的兔子數(shù)2=本月兔子數(shù)。我們發(fā)現(xiàn)這又是一個循環(huán),直到兔子數(shù)為1000對的時候結(jié)束。但是用for語句明顯不可以,因為我們不知道循環(huán)的次數(shù)。下邊我們用當(dāng)型循環(huán)(while/do語句)來編寫程序。農(nóng)場主的估算能夠描繪以下:月份:=1;兔子數(shù):=1;預(yù)約義第一個月的兔子數(shù)是1對while兔子數(shù)1000do當(dāng)兔子數(shù)小于1000對時進(jìn)入循環(huán)begin29Pascal編程入門月份:=月份+1;兔子數(shù):=兔子數(shù)*2;end;【程序設(shè)計】程

11、序清單programp4-1(input,output);varmonth,rabbit:integer;beginmonth:=1;rabbit:=1;whilerabbit0DOBEGINWriteln(k);k:=k-1END;此中(1)WHIlE和DO是PASCAL保存重點字,是WHILE循環(huán)語句的構(gòu)成部分。保存重點字DO后邊的“語法”只好是一條語句,稱為“循環(huán)體”;假如循環(huán)體中需要包括多個語句則應(yīng)當(dāng)如上例所示,采納一條復(fù)合語句。2WHILE循環(huán)的履行功能當(dāng)履行到WHILE語句時求出布爾表達(dá)式的值30第3章循環(huán)結(jié)構(gòu)程序設(shè)計(2)若布爾表達(dá)式的值為真,則履行循環(huán)體內(nèi)的語句;若為“假”,履

12、行步驟4重復(fù)步驟1和2循環(huán)結(jié)束,履行循環(huán)后邊的語句。3本例While循環(huán)的結(jié)構(gòu)化流程圖以下:While布爾表達(dá)式循環(huán)體語句【同步練習(xí)】1周末小明碰到一個風(fēng)趣的題目:找出四位整數(shù)abcd中知足下述關(guān)系的數(shù):(ab+cd)(ab+cd)=abcd請你幫小明編寫一個程序,找出知足條件的所有的數(shù)。問題剖析:這道題屬于搜尋問題,因為是四位整數(shù),不難看出范圍是從10009999,所求的數(shù)終究在哪里,沒法確立,只有在這個范圍內(nèi)從小到大一個一個進(jìn)行搜尋,對每一個數(shù)看它的高兩位數(shù)與低兩位數(shù)和的平方能否與該數(shù)相等。ab和cd兩個數(shù)能夠在abcd中將高兩位與低兩位分別開來。我們能夠這樣考慮,將abcd整除100,可

13、獲得高兩位ab。如:abcd=1234,1234div100=12。有了ab,也便可用下邊的式子把低兩位cd分別出來:abcdab100=abcdab00=cd如:123412100=12341200=34同學(xué)們認(rèn)真想一想,在求解的過程中,條件都是相同的,不過abcd這個數(shù)不同。實質(zhì)上是在頻頻做同一個步驟。下邊我們用當(dāng)型循環(huán)來解這道題。31Pascal編程入門程序清單Programxuhuan(input,output);Vari,m,n,k:integer;BeginI:=1000;給I賦值,即abcd假定一個數(shù);WhileI=9999do判斷I(即abcd)的值能否高出范圍,;假如超出則不

14、履行循環(huán)Begin體中的語句,結(jié)束循環(huán);M:=Idiv100;分別出ab和cd兩個數(shù),假如切合條件,就寫出來;N:=I-m*100;K:=(m+n)*(m+n);Ifk=IthenWriteln(切合條件的四位整數(shù)是:,I);I:=I+1I的值加1;End;End.運轉(zhuǎn)示例切合條件的四位整數(shù)是:2025切合條件的四位整數(shù)是:3025切合條件的四位整數(shù)是:98012從n個數(shù)中精選出最大的數(shù)。問題剖析:此題能夠借助于古代比武的“打擂臺”來比喻:先有隨意一人站在擂臺上,而后第二個人上來與它比武,勝者留在臺上,這樣頻頻進(jìn)行下去,直到第n個人比完為止(要注意:一共比n-1次),這樣最后留在臺上的人必定是

15、最強(qiáng)者。設(shè)計算法:從n個數(shù)中任選一數(shù)放在變量X中,并設(shè)一計數(shù)器m=0(這里變量X就是比武的擂臺,m=0表示還沒有進(jìn)行比較);32第3章循環(huán)結(jié)構(gòu)程序設(shè)計將下一個數(shù)與X中的數(shù)進(jìn)行比較;使m的值加1(計一次數(shù));若m的值小于(n-1),則從頭進(jìn)行第步,不然履行下一步;輸出此時X的值,即為n個數(shù)中的最大者;結(jié)束。程序清單PROGRAM323(input,output);VARn,x,m,y:integer;BEGINwrite(輸入共需參加比較的總數(shù):);readln(n);write(先將n個數(shù)的第一個數(shù)輸入給變量x);readln(x);m:=0;whilem=ythenx:=y;m:=m+1;E

16、ND;write(n,個數(shù)中最大的是:,x);END.運轉(zhuǎn)示例輸入共需參加比較的總數(shù):3先將n個數(shù)的第一個數(shù)輸入給變量x:1輸入一個其余參加比較的數(shù)2輸入一個其余參加比較的數(shù)103個數(shù)中最大的是:10第3節(jié)直到循環(huán)程序?qū)嵗?3Pascal編程入門【問題描繪】小明和小強(qiáng)是好朋友,他倆都喜歡數(shù)學(xué),一個周末的下午他們進(jìn)行了一場競賽,題目是這樣的:隨意給出兩個正整數(shù)M和N,求出M和N的最大條約數(shù),看誰算的又快又準(zhǔn)。請你用計算機(jī)編寫一程序幫助他倆又快又準(zhǔn)的計算出M和N的最大條約數(shù)?!締栴}剖析】設(shè)用M作為被除數(shù),N作為除數(shù),R作為余數(shù)。這樣我們就能夠用展轉(zhuǎn)相除法求出M和N的最大條約數(shù),展轉(zhuǎn)相除法的詳細(xì)算法

17、以下:第1步:輸入M和N的值;第2步:求出M除以N所得的余數(shù)R;第3步:將N的值賦給M,R的值賦給N;第4步:若R=0,則M為所求得的最大條約數(shù),轉(zhuǎn)第5步,不然轉(zhuǎn)第1步;第5步:輸出最大條約數(shù)M的值。依據(jù)上述算法,我們能夠用結(jié)構(gòu)化流程(N-S)圖表示該算法:輸入M和N的值RM除以N的余數(shù)MN,NRR=0輸出M的數(shù)值【程序設(shè)計】程序清單Programp3_3_1(input,output);varm,n,r:real;beginwrite(輸入兩個正整數(shù):);readln(m,n);ifnmthenbeginr:=n;n:=m;m:=r;end;repeat34第3章循環(huán)結(jié)構(gòu)程序設(shè)計r:=mmo

18、dn;m:=n;n:=r;untilr=0;writeln(m,和,n,最大條約數(shù)是:,m)end.運轉(zhuǎn)示例輸入兩個正整數(shù):11277112和77最大條約數(shù)是:7輸入兩個正整數(shù):123412和34最大條約數(shù)是:2【知識拓展】1在程序設(shè)計中,假如需要在履行了某操作過程以后,再依據(jù)某一指定條件判斷是否重復(fù)履行,應(yīng)采納直到循環(huán)語句,即repeat-until語句實現(xiàn)循環(huán)。此語句的含義是:“重復(fù)履行循環(huán)體,直到指定條件為真時為止”。2Repeat-until語句格式:repeatuntil它的N-S圖以下列圖所示。循環(huán)體語句until布爾表達(dá)式此中repeat和until為保存字。3它的履行過程:履行

19、循環(huán)體;計算布爾表達(dá)式的值,若為false則返回,不然,退出循環(huán)體履行下一語句。4它的特色是:先履行(循環(huán)體),后判斷(布爾表達(dá)式)。repeat-until是一個整體,它是一個語句(結(jié)構(gòu)型語句),在這個句中能夠包括若干個語句,不要誤以為repeat是一個語句,until是一個語句;5Repeat語句與while語句都能夠?qū)崿F(xiàn)循環(huán)結(jié)構(gòu),且能夠互相轉(zhuǎn)變,但有四點不同:Repeat語句While語句先履行語句,后判斷條件。先判斷后履行語句。指定語句能夠是多條語句,無需用指定語句只好是一條語句或一條復(fù)合語begin和end。句。35Pascal編程入門當(dāng)條件不可即刻重復(fù)履行。當(dāng)條件成即刻重復(fù)履行。不

20、論條件能否成立,總要履行一次指當(dāng)條件一開始就不可即刻,則不履行循環(huán)定語句序列。中的指定語句?!就骄毩?xí)】1利用格里高公式求。=1-1+1-1+,直到最后一項的值小于10-6為止。4357問題剖析:解此題的重點就是求右側(cè)數(shù)值序列的和,序列有明顯的特色:分母是從1開始的奇數(shù),加、減號輪番出現(xiàn),所以,我們能夠用n=n+2表示序列數(shù)值的變化,用f=-f來設(shè)置它們各項的符號位。畫出程序的N-S圖。程序清單programex2_34;varf:integer;n,t,pai:real;beginpai:=0;t:=1;n:=1.0;f:=1;repeatpai:=pai+1;n:=n+2.0;f:=-f;

21、t:=f/nuntilabs(t)1e-6;pai:=pai*4;writln(pai=,pai:10:8);readlnend.pai:=0;t:=1;n:=1;f:=1pai:=pai+tn:=n+2.0f:=-ft:=f/nuntilabs(t)maxTHENmax:=aELSEIFa=9avg:=s/i;writeln(最大值是:,max,最小值是:,min);writeln(10個數(shù)和是:,s,10個數(shù)均勻值是:,avg:5:1);END.運轉(zhuǎn)示例最大值是:10最小值是:110個數(shù)和是:5510個數(shù)均勻值是:5.5第4節(jié)多重循環(huán)程序?qū)嵗締栴}描繪】一個炊事員上街采買,用500元錢買了

22、90只雞,此中母雞一只15元,公雞一只10元,小雞一只5元,正好把錢買完。問母雞、公雞、小雞各買多少只?【問題剖析】設(shè)母雞I只,公雞J只,小雞為k只,我們可列方程組:I+J+K=9015I+10J+5K=500明顯這是一個不定方程組,一般狀況下有多解。由方程可得I和J、K的取值范圍:0I90,0J90,0K90我們用窮舉法在范圍內(nèi)搜尋求解?!境绦蛟O(shè)計】程序清單programex3_4_1;vari,j,k:integer;beginfori:=0to90doforj:=0to90dofork:=0to90doif(i+j+k=90)AND(15*i+10*j+5*k=500)thenwrite

23、ln(i:5,j:5,k:5);end;38第3章循環(huán)結(jié)構(gòu)程序設(shè)計運轉(zhuǎn)示例0108018812682348342845085【知識拓展】1以上的程序是一個三重的for循環(huán)嵌套。循環(huán)體由PASCAL語句構(gòu)成,自然也能夠包含F(xiàn)OR語句,這就構(gòu)成了循環(huán)的嵌套,形成多重循環(huán)。2為了減少無用的循環(huán)次數(shù),我們進(jìn)一步研究題目,剖析后,能夠?qū)⒀h(huán)次數(shù)減小,這里I的值能夠是0到33(因為假如500元錢所有用來買母雞,最多能夠買500/15只),相同J的值能夠從0到50。知道I和J的值,又可求出K的值為90-I-J,這樣又可減少循環(huán)嵌套的層數(shù)。以上的程序能夠優(yōu)化為:programrex4_6;vari,j,k:i

24、nteger;beginfori:=0to33doforj:=0to50dobegink:=90-i-j;if15*i+10*j+5*k=500thenwriteln(i:5,j:5,k:5);end;end.優(yōu)化后的程序運轉(zhuǎn)速度會大大提升。在此后設(shè)計程序時,同學(xué)們不單要注意怎樣解題,還要盡量使程序優(yōu)化,提升運轉(zhuǎn)速度?!就骄毩?xí)】1試編寫能夠打印輸出以下列圖形的程序:#39Pascal編程入門問題剖析:這道題屬于打印平面圖形問題。程序的設(shè)計以下:由兩個并列循環(huán)外加一個嵌套循環(huán)構(gòu)成的。各環(huán)的作用為:1。外層循環(huán)控制打印的行數(shù),此倒三角形共需8行,故外層循環(huán)的設(shè)置為遞減型循環(huán)。嵌套在外環(huán)內(nèi)的第一個

25、并列循環(huán)為空格輸出,依據(jù)圖形變化控制輸出不同數(shù)目的空格。3外環(huán)內(nèi)第二個并列循環(huán)為控制三角形每行中“#”號的個數(shù)。程序清單programex2_36;vari,j,k:integer;bginfori:=8downto1dobeginforj:=1to8idowrite();fork:=2*i-1downto1dowriteln;end;readlnend.2求s=1!+2!+3!+10!的值。問題剖析:這個問題是求10自然數(shù)的階乘之和,能夠用for循環(huán)來實現(xiàn),經(jīng)過10次的循環(huán)可求出1!,2!,10!,并同時累加起來,可求得S的值。而求T=N!,又能夠用一個for循環(huán)來實現(xiàn),40第3章循環(huán)結(jié)構(gòu)程序設(shè)計構(gòu)成了二重循環(huán)。程序清單programex4_5;vart,s:real;i,j,n:integer;beginS:=0;forn:=1to10dobegint:=1;forj:=1tondot:=t*j;S:=S+t;end;writeln(s=,s:0:0);end.3333求100999中的水仙花數(shù)。(若三位數(shù)ABC,ABC=A+B+C,則稱ABC為水仙花數(shù)。比如153,13+53+33=1+125+27=153,則153是水仙花數(shù)。)問題剖析:依據(jù)

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論