




已閱讀5頁(yè),還剩15頁(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)介
while循環(huán)和 repeat-until循環(huán),主講人:山成虎,1. while循環(huán),2. repeat-until循環(huán),3.多重循環(huán)結(jié)構(gòu),對(duì)于for循環(huán)有時(shí)也稱為計(jì)數(shù)循環(huán),當(dāng)循環(huán)次數(shù)未知,只能根據(jù)某一條件來(lái)決定是否進(jìn)行循環(huán)時(shí),用while 語(yǔ)句或repeat語(yǔ)句實(shí)現(xiàn)循環(huán)要更方便。,1. while循環(huán),1.1while語(yǔ)句的形式為: while do ;,其意義為:當(dāng)布爾表達(dá)式的值為true時(shí),執(zhí)行do后面的語(yǔ)句。,1.2 while語(yǔ)句的執(zhí)行過(guò)程為: 判斷布爾表達(dá)式的值,如果其值為真,執(zhí)行步驟2,否則執(zhí)行步驟4; 執(zhí)行循環(huán)體語(yǔ)句(do后面的語(yǔ)句); 返回步驟1; 結(jié)束循環(huán),執(zhí)行while的下一個(gè)語(yǔ)句。,說(shuō)明:這里while和do為保留字,while語(yǔ)句的特點(diǎn)是先判斷,后執(zhí) 行。當(dāng)布爾表達(dá)式成立時(shí),重復(fù)執(zhí)行do后面的語(yǔ)句(循環(huán)體)。,例 1: 求s=1+2+99+100.,program xy; var i,sum:interger; begin i:=1; sum:=0; while i=100 do begin sum:=sum+i; i:=i+1; end; writeln(sum); end.,i=100,sum:=sum+i i:=i+1;,真(非0),假(0),1.3 舉例,下一條語(yǔ)句 (循環(huán)語(yǔ)句結(jié)束),例2 :求恰好使s=1+1/2+1/3+1/n的值大于10時(shí)n的值。,分析:“恰好使s的值大于10“意思是當(dāng)表達(dá)式s的前n-1項(xiàng)的和小于或等于10,而加上了第n項(xiàng)后s的值大于10。從數(shù)學(xué)角度,我們很難計(jì)算這個(gè)n的值。故從第一項(xiàng)開始,當(dāng)s的值小于或等于10時(shí),就繼續(xù)將下一項(xiàng)值累加起來(lái)。當(dāng)s的值超過(guò)10時(shí),最后一項(xiàng)的項(xiàng)數(shù)即為要求的n。,program xy; var s : real; n : integer;n表示項(xiàng)數(shù) begin s:=0.0;n:=0; while s=10 do當(dāng)s的值還未超過(guò)10時(shí) begin n:=n+1;項(xiàng)數(shù)加1 s:=s+1/n;將下一項(xiàng)值累加到s end; writlen(n);輸出結(jié)果 end.,例3:求兩個(gè)正整數(shù)m和n的最大公約數(shù)。,分析:求兩個(gè)正整數(shù)的最大公約數(shù)采用的輾轉(zhuǎn)相除法求解。以下是輾轉(zhuǎn)的算法: 分別用m,n,r表示被除數(shù)、除數(shù)、余數(shù)(一般mn)。 求m/n的余數(shù)r. 若r=0,則n為最大公約數(shù).若r0,執(zhí)行第步. 將n的值放在m中,將r的值放在n中. 返回重新執(zhí)行第步。,program xy; var m,n,a,b,r:integer; begin readln(m,n); a:=m;b:=n;r:=a mod b; while r0 do begin a:=b;b:=r; r:=a mod b; end; writeln(b:8); end.,求兩個(gè)正整數(shù)m和n的最小公 倍數(shù),可以用m*n div (m和n的 最大公約數(shù)).例如:6和4的最小公倍數(shù),可以用 6*4 div 2=12 .,例4:利用格里高公式求。/4=1-1/3+1/5-1/7+,直到最后一項(xiàng)的值小于10-6為止。,【分析】解本題的關(guān)鍵就是求右邊數(shù)值序列的和,序列有明顯的特點(diǎn):分母是從1開始的奇數(shù),加、減號(hào)輪流出現(xiàn),因此,我們可以用n=n+2表示序列數(shù)值的變化,用f=-f來(lái)設(shè)置它們知項(xiàng)的符號(hào)位。,program xy; var n,f : integer; t,pai : real; begin pai : =0; t : =1; n : =1;f : =1; while abs(t)=1e-6 do begin pai : =pai+t;n : =n+2;f : =-f; t : =f/n; end; pai : =pai*4; writeln(pai : 10 : 8); end.,運(yùn)行程序會(huì)發(fā)現(xiàn)沒(méi)有結(jié)果,為什么?因?yàn)椴紶柋磉_(dá)式abs(t)=1e-6,即1/n=1e-6,而程序的說(shuō)明部分n是整型數(shù),它的范圍是-3276832767,條件永遠(yuǎn)成立,所以形成死循環(huán),從而沒(méi)有運(yùn)行結(jié)果。while循環(huán)不需要用順序型數(shù)據(jù)來(lái)控制循環(huán)的次數(shù),改程序的說(shuō)明部分中的n為實(shí)型數(shù)或說(shuō)明為長(zhǎng)整型即可,請(qǐng)同學(xué)們自己修正,以后要對(duì)變量的取值范圍引起重視。,2. repeat-until循環(huán),用while語(yǔ)句可以實(shí)現(xiàn)“當(dāng)型循環(huán)“,用repeat-until 語(yǔ)句可以實(shí)現(xiàn)“直到型循環(huán)“。repeat-until語(yǔ)句的含義是:“重復(fù)執(zhí)行循環(huán),直到指定的條件為真時(shí)為止“。,2.1 repeat-until語(yǔ)句一般格式,repeat ; : ; until ;,其中repeat、until是Pascal保留字,repeat與until之間的所有語(yǔ)句稱 為循環(huán)體。,2.2 說(shuō)明,(1)repeat語(yǔ)句的特點(diǎn)是:先執(zhí)行循環(huán),后判斷結(jié)束條件,因而至少要執(zhí)行一次循環(huán)體。 (2)repeat-until是一個(gè)整體,它是一個(gè)(構(gòu)造型)語(yǔ)句,不要誤認(rèn)為repeat是一個(gè)語(yǔ)句, until是另一個(gè)語(yǔ)句。 (3)repeat語(yǔ)句在布爾表達(dá)式的值為真時(shí)不再執(zhí)行循環(huán)體,且循環(huán)體可以是若干個(gè)語(yǔ)句,不需用begin和end把它們包起來(lái), repeat 和until已經(jīng)起了begin和end的作用。while循環(huán)和repeat循環(huán)是可以相互轉(zhuǎn)化的。 (4)在repeat和until之間的語(yǔ)句構(gòu)成循環(huán)。在它們之間可以有任意多個(gè)語(yǔ)句,這一點(diǎn)和for,while循環(huán)不同, for,while循環(huán)體在語(yǔ)法上只允許一條語(yǔ)句。要想循環(huán)多條語(yǔ)句必須用復(fù)合語(yǔ)句。,2.3repeat-until語(yǔ)句的執(zhí)行過(guò)程,(1)遇到repeat語(yǔ)句后,即進(jìn)入循環(huán)體,順序執(zhí)行循環(huán)體內(nèi)的語(yǔ)句。 (2)遇到until語(yǔ)句后,求布爾表達(dá)式的值。若值為假,則返回步 驟1;若為“真”,執(zhí)行步驟3 (3)循環(huán)結(jié)束,執(zhí)行until后面的下一條語(yǔ)句。,例 5: 求s=1+2+99+100.,program xy; var i,sum:interger; begin i:=1; sum:=0; repeat sum:=sum+i; i:=i+1; until i100; writeln(sum); end.,i100,sum:=sum+i i:=i+1;,假(false),真(true),2.4舉例,下一條語(yǔ)句 (循環(huán)語(yǔ)句結(jié)束),例6 求兩個(gè)正整數(shù)m和n的最大公約數(shù)。 程序采用repeat-until循環(huán)實(shí)現(xiàn)。,program xy; var m,n,r : integer; begin readln(m,n); repeat /輾轉(zhuǎn)相除法 r : =m mod n; m: =n; n: =r; until r=0; writeln(m); end.,為什么用while語(yǔ)句結(jié)果是n, repeat until語(yǔ)句結(jié)果是m?,例7 校體操隊(duì)到操場(chǎng)集合,排成每行2人,最后多出1人;排成每行3人,也多出1人;分別按每行排4,5,6人,都多出1人;當(dāng)排成每行7人時(shí),正好不多。求校體操隊(duì)至少是多少人?,【分析】設(shè)校體操隊(duì)為X人,根據(jù)題意X應(yīng)是7的倍數(shù),因此X的初值為7,以后用inc(x,7)改變X值;為了控制循環(huán), 用邏輯變量yes為真(True) 使循環(huán)結(jié)束; 如果諸條件中有一個(gè)不滿足, yes 的值就會(huì)為假(false),就繼續(xù)循環(huán)。,program xy; var x: integer; yes : boolean; begin x:=0; repeat yes :=true; inc(x,7); if x mod 2 1 then yes:=false; if x mod 3 1 then yes:=false; if x mod 4 1 then yes:=false; if x mod 5 1 then yes:=false; if x mod 6 1 then yes:=false; until yes; /直到y(tǒng)es的值為真 writeln(All =, x) ; readln end.,程序中對(duì)每個(gè)X值,都先給Yes 賦真值,只有在循環(huán)體中,各句對(duì)X進(jìn)行判斷時(shí),都得到“通過(guò)”(此處不賦假值)才能保持真值。此處的yes相當(dāng)于一個(gè)標(biāo)志變量。,以上我們已介紹了三種循環(huán)語(yǔ)句。一般說(shuō)來(lái),用for 循環(huán)比較簡(jiǎn)明,只要能用for循環(huán),就盡量作用for循環(huán)。只在無(wú)法使用for循環(huán)時(shí)才用while循環(huán)和repeat-until循環(huán), 而且 while 循環(huán)和repeat-until循環(huán)是可以互相轉(zhuǎn)化的,具體用哪個(gè),還要看個(gè)人喜好,但他們也存在細(xì)微區(qū)別,while語(yǔ)句的循環(huán)體有可能一次都不會(huì)被執(zhí)行,而repeat語(yǔ)句中循環(huán)體至少執(zhí)行一次。for 循環(huán)在大多數(shù)場(chǎng)合也能用while和repeat-until循環(huán)來(lái)代替。一般for循環(huán)用于有確定次數(shù)循環(huán),而while和repeat-until循環(huán)用于未確定循環(huán)次數(shù)的循環(huán)。,當(dāng)一個(gè)循環(huán)的循環(huán)體中又包含循環(huán)結(jié)構(gòu)程序時(shí),我們就稱之為循環(huán)嵌套。 內(nèi)循環(huán)整個(gè)作為外循環(huán)的一條語(yǔ)句。,3. 多重循環(huán)結(jié)構(gòu),3.1 舉例,例8 求1!+2!+10!的值。,【分析】這個(gè)問(wèn)題是求10自然數(shù)的階乘之和,可以用for 循環(huán)來(lái)實(shí)現(xiàn)。程序結(jié)構(gòu)如下: for n:=1 to 10 do begin N!的值t 累加N!的值s end 顯然,通過(guò)10次的循環(huán)可求出1!,2!,10!,并同時(shí)累加起來(lái), 可求得S的值。而求T=N!,又可以用一個(gè)for循環(huán)來(lái)實(shí)現(xiàn): t=1; for j:=1 to n do t:=t*j;,整個(gè)程序?yàn)? Program xy; var t,s:longint; i,j,n:integer; begin s:=0; for n:=1 to 10 do begin t=1; for j:=1 to n do /求n! t:=t*j; s:=s+t; /累加n! end; writeln(s=,s:0:0); end.,以上的程序是一個(gè)二重的for循環(huán)嵌套。這是比較好想的方法,但實(shí)際上對(duì)于求n!,我們可以根據(jù)求出的(n-1)!乘上n即可得到,而無(wú)需重新從1再累乘到n。,程序可改為: program ex4_17; var t,s:longint; i,j,n:integer; begin s:=0;t:=1; for n:=1 to 10 do begin t:=t*n; /t為上一個(gè)數(shù)n-1的階乘值,再乘以n即為n! s:=s+t; /累加n! end; writeln(s=,s:0:0); end.,顯然第二個(gè)程序的效率要比第一個(gè) 高得多。第一程序要進(jìn)行1+2+ 10=55次循環(huán),而第二程序進(jìn)行10次 循環(huán)。如題目中求的是1!2! 1000!,則兩個(gè)程序的效率區(qū) 別更明顯。,例9 一個(gè)炊事員上街采購(gòu),用500元錢買了90只雞, 其中母雞一只15元,公雞一只10元,小雞一只5元,正好把錢買完。問(wèn)母雞、公雞、小雞各買多少只?,分析:設(shè)母雞I只,公雞J只,這里I的值可以是0到33,J的值可以0到50,則小雞為90-I-J只,則15*I+ 10* J+(90-I-J)*5=500,顯然一個(gè)方程求兩個(gè)未知數(shù)是不能直接求解。必須組合出所有可能的i,j值,看是否滿足條件。,programr xy; var i,j,k:integer; begin for i:=0 to 33 do /枚舉母雞的數(shù)量 for j:=0 to 50 do /枚舉公雞的數(shù)量 begin k:=90-i-j; if 15*i+10*j+5*k=500 then writeln(i:5,j:5,k:5); end; end.,例10 求100200之間的所有素?cái)?shù)。,分析:我們可對(duì)100200之間的每一整數(shù)進(jìn)行判斷,判斷它是否為素?cái)?shù),是則輸出。而對(duì)于任意整數(shù)i,根據(jù)素?cái)?shù)定義,我們從2開始,到 ,找i的第一個(gè)約數(shù)。若找到第一個(gè)約數(shù),則i必然不是素?cái)?shù)。否則i為素?cái)?shù)。,program xy; var i : integer; x : integer; begin for i:=100 to 200 do begin x:=2; while (x0)do begin x:=x+1; end; if xtrunc(sqrt(i) then write(i:8); end; end.,例11 試編寫能夠打印輸出如下圖形的程序: # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #,program xy; var i,j,k : integer; begin for i : =8 downto 1 do /
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 航天信息財(cái)務(wù)培訓(xùn)
- 綜合實(shí)踐課:水與健康
- 舞蹈培訓(xùn)匯報(bào)演出
- TTT培訓(xùn)師成長(zhǎng)特訓(xùn)營(yíng)
- 腫瘤放化療科出科培訓(xùn)大綱
- 客車操作培訓(xùn)課件
- 女士正裝培訓(xùn)
- 培訓(xùn)銷售流程
- 腫瘤患者飲食營(yíng)養(yǎng)護(hù)理
- 酒店前廳服務(wù)流程標(biāo)準(zhǔn)化管理
- 八年級(jí)英語(yǔ)下學(xué)期期末模擬卷(廣東卷)(原卷版)
- GB/T 45637-2025電動(dòng)牙刷性能測(cè)試方法
- 高考英語(yǔ)讀后續(xù)寫:三大主題語(yǔ)境結(jié)尾金句
- 直飲水施工合同協(xié)議
- 老年護(hù)理技能和知識(shí)培訓(xùn)
- 供應(yīng)商現(xiàn)場(chǎng)審核計(jì)劃管理制度
- 售電業(yè)務(wù)知識(shí)培訓(xùn)課件
- 預(yù)防病人走失
- 2025-2030中國(guó)抗體藥物結(jié)合物(ADC)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025-2030中國(guó)安全儀表系統(tǒng)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025年非高危行業(yè)生產(chǎn)經(jīng)營(yíng)單位主要負(fù)責(zé)人安全培訓(xùn)(復(fù)訓(xùn))考試題庫(kù)-下(判斷題)
評(píng)論
0/150
提交評(píng)論