版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章第3節(jié)循環(huán)結(jié)構(gòu)的程序設(shè)計For循環(huán)PascalFOR循環(huán)、當循環(huán)和直到循環(huán)。通常將一組重復(fù)執(zhí)行的語句是由循環(huán)體及重復(fù)終止條件兩部分組成。一、計數(shù)循環(huán)(for/to/do)語句的一般格式for<控制變量>:=<表達式1>to<表達式2>do<語句>;for<控制變量>:=<表達式1>downto<表達式2>do<語句>;for、to、downtodoPascal12的值也稱為初值和終值。二、For語句執(zhí)行過程①先將初值賦給左邊的變量(稱為循環(huán)控制變量);②判斷循環(huán)控制變量的值是否已"超過"終值,如已超過,則跳到步驟⑥;③如果末超過終值,則執(zhí)行do后面的那個語句(稱為循環(huán)體);④循環(huán)變量遞增(對to)或遞減(對downto)1;⑤返回步驟②;⑥循環(huán)結(jié)束,執(zhí)行for循環(huán)下面的一個語句。三、說明①循環(huán)控制變量必須是順序類型,初值和終值可以是常量、變量、表達式,②循環(huán)控制變量的值遞增或遞減的規(guī)律是:選用to則為遞增;選用downto則遞減。③所謂循環(huán)控制變量的值"超過"終值,對遞增型循環(huán),"超過"指大于,對遞減型循環(huán),"超過"指小于。④循環(huán)體可以是一個基本語句,也可以是一個復(fù)合語句。要在循環(huán)體中隨意修改控制變量的值。0。⑦循環(huán)次數(shù)等于│終值-初值│+1或│ord(初值)-ord(終值)│+1。四、應(yīng)用舉例例1.計算1+2+3+…+100的值。分析:我們用累加方法,初值為1,終值為100,循環(huán)100次每次將循環(huán)控制變量i的值迭加加入一個變量S中,循環(huán)結(jié)束后此變量中就為所求值。程序如下:program p4_22;vari,s:integer;begins:=0;
fori:=1to100dos=s+i;end.思考:s=2+4+6+…+100S=1+1/2+1/3+1/4+…+1/100S=12+22+32+…+1002例2.輸入一個自然數(shù)x,求這個自然數(shù)的所有約數(shù)之和S。xyxmody=01x進行循環(huán)判定。程序如下:programp4_23;varx,y,s:integer;beginwrite('Enterx=');readln(x);s:=0;fory:=1toxdoifxmody=0thens:=s+y;writeln(‘x=’,x,‘s=’,s);end.例3 編程找出四位整數(shù)abcd中滿足下述關(guān)系的數(shù)(ab+c)Programp4_24;Vari,m,n,k:integer;beginfori:=1000to9999dobeginm:=idiv100;n:=imod100;k:=(m+n)*(m+n);if k=ithenwriteln(i)end;end.以上方法叫“枚舉法WHILE循環(huán)一、WHILE循環(huán)forwhilerepeat語句實現(xiàn)循環(huán)要更方便。while語句的形式為:while<布爾表達式>do<語句>;truedo二、while語句的執(zhí)行過程為:①判斷布爾表達式的值,如果其值為真,執(zhí)行步驟2,否則執(zhí)行步驟4;②執(zhí)行循環(huán)體語句(do后面的語句);③返回步驟1;④結(jié)束循環(huán),執(zhí)行while的下一個語句。whiledodo后面的語句循環(huán)體)。三、舉例1s=1+1/2+1/3+…+1/n10n的值。s10"sn-1項的和小于或等于10,而加上了第n項后s的值大于10。從數(shù)學(xué)角度,我們很難計算這個n的值。故從第一項開始,當s的值小于或等于10時,就繼續(xù)將下一項值累加起來。當s10n程序如下:vars:real;n:integer;{n表示項數(shù)}begins:=;n:=0;whiles<=10do{當s的值還未超過10時}beginn:=n+1;{項數(shù)加1}s:=s+1/n;{s}end;writlen('n=',n);{輸出結(jié)果}end.2mn的最大公約數(shù)。的算法:分別用m,n,r表示被除數(shù)、除數(shù)、余數(shù)。①求m/n的余數(shù)r.②若r=0,則n為最大公約數(shù).若r≠0,執(zhí)行第③步.③將n的值放在m中,將r的值放在n中.④返回重新執(zhí)行第①步。程序如下:programex4_4;varm,n,a,b,r:integer;beginwrite('Inputm,n:');readln(m,n);a:=m;b:=n;r:=amodb;whiler<>0dobegina:=b;b:=r;r:=amodb;end;writeln('Thegreatestcommondivideis:',b:8);end.例3求輸入的一個整數(shù)的各位數(shù)之和。例4求兩個自然數(shù)m,n的最小公倍數(shù)。REPEAT循環(huán)一、直到循環(huán)(REPEAT-until語句)while語句可以實現(xiàn)"當型循環(huán)"repeat-until"直到型循環(huán)"repeat-until"。直到循環(huán)語句的一般形式:Repeat<1>;:<n>;until<布爾表達式>;RepeatuntilPascal保留字,repeatuntil之間的所有語句稱為循環(huán)體。說明:①repeat次循環(huán)體。②repeat-until是一個整體,它是一個(構(gòu)造型)語句,不要誤認為repeat是一個語句,until是另一個語句。③repeatbeginend把它們包起來,repeatuntilbeginend的作用。whilerepeat循環(huán)是可以相互轉(zhuǎn)化的。2repeat-until循環(huán)實現(xiàn)如下:varm,n,a,b,r:integer;beginwrite('Inputm,n=');readln(m,n);a:=m;b:=n;repeatr:=amodb;a:=b;b:=r;untilr=0;writeln('Thegreatestcommondivideis',a);end.三種循環(huán)結(jié)構(gòu)的比較:一般說來,用forforforforwhile循環(huán)和repeat-until循環(huán),而且while循環(huán)和repeat-untilfor循whilerepeat-untilfor循環(huán)用于有確whilerepeat-until循環(huán)用于未確定循環(huán)次數(shù)的循環(huán)。WHILE語句和REPEAT語句的區(qū)別:WHILE語句先判斷后后執(zhí)行語句指定語句只能是一條語句或復(fù)合語句當條件成立時重復(fù)執(zhí)行
REPEAT語句先擇行語句,后判斷條件beginend當條件不成立時重復(fù)執(zhí)行當條件一開始就不成立時則不執(zhí)行循無論條件是否成立總要執(zhí)行一次循環(huán)體 體多重循環(huán)結(jié)構(gòu)當一個循環(huán)的循環(huán)體中又包含循環(huán)結(jié)構(gòu)程序時,我們就稱之為循環(huán)嵌套。一、循環(huán)結(jié)構(gòu)程序設(shè)計11!+2!+…+10!的值。分析:這個問題是求10自然數(shù)的階乘之和,可以用for循環(huán)來實現(xiàn)。程序結(jié)構(gòu)如下:forn:=1to10dobegin①N!的值tN!end顯然,101!,2!…,10!,并同時累加起來,S的值。T=N!,for循環(huán)來實現(xiàn):t=1;forj:=1tondot:=t*j;因此,整個程序為: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.forn!(n-1)!n1再累乘到n。程序可改為:programex4_5;vart,s:real;i,j,n:integer;beginS:=0;t:=1;forn:=1to10dobegint:=t*n;end;writeln('s=',s:0:0);end.1+2+…+10=55101!+2?。?000!,則兩個程序的效率區(qū)別更明顯。例2 求100~999中的水仙花數(shù)若三位數(shù)abc,abc=a3+b3+c3,則稱abc為水仙花數(shù)。如153,13+53十33=1+125+27=153,則153是水仙花數(shù)。根據(jù)題意采用三重循環(huán)求解,由于循環(huán)次數(shù)一定,用for循環(huán)最為簡單。programp4_31;vara,b,C:integer;beginfora:=1to9doforb:=0 to9doforc:=0 to 9doif a*a*a+b*b*b+c*c*c=a*100+b*10+cthenwrite(a*100+b*10+c:6);readlnend.運行結(jié)果:153 370 371 407同時也可以采用一個for循環(huán)來求解,程序如下:programp4_31_1;varm,a,b,c:integer;beginform:=100to999dobegina:=mdiv100;b:=(mmod100)div10;c:=cmod10;if a*a*a+b*b*b+c*c*c=m thenend;readlnend.表面上看好像優(yōu)于三重循環(huán),實際上卻比上面的程序效率低。例3一個炊事員上街采購,用500元錢買了90只雞,其中母雞一只15元,公雞一只10元,小雞一只5元,正好把錢買完。問母雞、公雞、小雞各買多少只?I只,J只,90-I-J只,15*I10*J+(90-I-J)*5=500,i,j值,看I033,J050。源程序如下:programrex4_6;vari,j,k:integer;beginfori:=0to33doforj:=0to50dobegink:=90-i-j;if15*i+10*j+5*k=500thenwriteln(i:5,j:5,k:5);end;end.例4四個學(xué)生上地理課時,回答我國四大淡水湖大小時這樣說。甲說:“最大洞庭湖,最小洪澤湖,鄱陽湖第三”;乙說:“最大洪澤湖,最小洞庭湖,鄱陽湖第二,太湖第三”;丙說:“最小洪澤湖,洞庭湖第三”;丁說:“最大鄱陽湖,最小太湖,洪澤湖第二,洞庭湖第三”。其中每個學(xué)生僅答對一個,請編程確定湖的大小。1~4里的一個整數(shù),這個整數(shù)就代表它們各自的大小,用一個四重循環(huán),for循環(huán)。程序的編碼如下:programp4_33;vardong,hong,bo,tai:integer;beginfordong:=1to4doforhong:=1to4doif hong<>dong thenforbo:=1to4if(hong<>bo)and(bo<>dong)thenbegintai:=10--dong--hong—bO;if(ord(dong=1)+ord(hong=4)+ord(bo=3)=1)and(ord(hong=1)+ord(dong=4)+ord(bo=2)+ord(tai=3)=1)and(ord(dong=3)+ord(hong=4)=1)and(ord(bo=1)+ord(tai=4)+ord(hong=2)+ord(dong=3)=1)thentai);end;readlnend.運行結(jié)果:dong:2hong:4bo:1tai:3關(guān)于goto語句goto語句的格式如下:goto標號gotogoto語句時,程序?qū)⒉焕^續(xù)執(zhí)行下一條語句,部分中第一個出現(xiàn),格式如下:label標號1,標號2,....;19999goto語句時應(yīng)注意以下幾點:goto語句只能從一個語句結(jié)構(gòu)中轉(zhuǎn)出來,而不允許從外部轉(zhuǎn)進去;goto語句必須先說明標號。gotogoto語句后,程序的goto語句后,程序就goto語句是結(jié)構(gòu)化程序設(shè)計不推薦使goto語句,程序執(zhí)行的路線可能會變得十分復(fù)雜。在編程時應(yīng)盡量避免用goto語句,從理論上來說Pascal程序完全可以不用goto語句。4_343~100之間的所有質(zhì)數(shù)。programp4_34(input,output);label10;var n,i:integer;beginforn:=3to100dobeginfori:=2 to n-1 beginif nmodi=0 thengotoend;writeln(n);10:endend.對于這個例子,就完全可以去掉gotof賦值為假,如果循環(huán)結(jié)束后標志沒有改n一定是質(zhì)數(shù),將其輸出后繼續(xù)循環(huán),判斷下一個數(shù)。修改后的程序如下:var n,i:integer;f:boolean;beginforn:=3to100dobeginf:=true;fori:=2to n—l beginif nmodi=0then end;if f=truethen writeln(n)endend.綜合應(yīng)用例1、求100-200之間的所有素數(shù)。100-200i2i的第一個約ii為素數(shù)。源程序如下:vari:integer;x:integer;beginfori:=100to200dobeginx:=2;while(x<=trunc(sqrt(i)))and(imodx<>0)dobeginx:=x+1;end;ifx>trunc(sqrt(i))thenwrite(i:8);end;end.例2 某班共有50名學(xué)生已知他們的期中考試的數(shù)學(xué)成績現(xiàn)需要統(tǒng)計100分、90~99分80~89分70~79分60~69分與不及格各成績檔有多少人。programp4_35(input,output);vari,x1,x2,x3,x4,x5,x6:integer;a:real;beginxl:=0;x2:=0;x3:=0;x4:=0;x5:=0;x6:=0;forto50dobeginreadln(a);casetrunc(10) 10:x1:=xl+1;9:x2:=x2+1;8:x3:=x3+1;7:x4:=x4+1;6:x5:=x5+1;0,1,2,3,4,5:x6:=x6+1;endend;writeln(‘100:’,x1);writeln(‘90~99:’,x2);writeln(‘80~89:’,x3);writeln(‘70~79:’,x4);writeln(‘60~69:’,x5);writeln(‘0~59:’,x6)end.例3 用5元錢買100只紐扣其中金屬紐扣每只5角有機玻璃紐扣每只1角小、撳扣1分錢買3個,編程求出各種紐扣各買了多少只var beginforx:
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度安置住房產(chǎn)權(quán)分割買賣合同3篇
- 2025年度智能電網(wǎng)建設(shè)與運營承包合同含新能源并網(wǎng)與電力調(diào)度4篇
- 2025年度特種貨車承包運營合同4篇
- 2025年度?;奋囕v物流運輸合同4篇
- 2025年度幼兒園教室窗簾安全性與環(huán)保性檢測合同4篇
- 2025年度智能化城市景觀承包設(shè)計工程合同4篇
- 2024試讀生權(quán)益保障合同:學(xué)生試用條款明細版B版
- 2025年度智能充電樁設(shè)備集成采購合同4篇
- 2025年度二零二五年度竹林資源承包與生態(tài)旅游開發(fā)合同3篇
- 2025年度儲藏室租賃與貨物出入庫管理服務(wù)協(xié)議3篇
- 2019級水電站動力設(shè)備專業(yè)三年制人才培養(yǎng)方案
- 室內(nèi)裝飾裝修施工組織設(shè)計方案
- 洗浴中心活動方案
- 送電線路工程施工流程及組織措施
- 肝素誘導(dǎo)的血小板減少癥培訓(xùn)課件
- 韓國文化特征課件
- 抖音認證承諾函
- 清潔劑知識培訓(xùn)課件
- 新技術(shù)知識及軍事應(yīng)用教案
- 高等數(shù)學(xué)(第二版)
- 肺炎喘嗽的中醫(yī)護理常規(guī)
評論
0/150
提交評論