第三章循環(huán)程序_第1頁
第三章循環(huán)程序_第2頁
第三章循環(huán)程序_第3頁
第三章循環(huán)程序_第4頁
第三章循環(huán)程序_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三章循環(huán)程序在編程中經(jīng)常遇到需要多次規(guī)律相同的重復(fù)處理,這就是循環(huán)問題。Turbo Pascal采用不同的循環(huán)方式來實(shí)現(xiàn),常用的環(huán)循有三種: for、repeat、while. 第一節(jié)for 循環(huán)for循環(huán)是一種自動計數(shù)型循環(huán)。例3.1 試打印出120的自然數(shù)。解: 用a代表120各數(shù),同時也用a兼作計數(shù),以控制循環(huán)次數(shù); 讓a從1開始; 輸出a; a自動計數(shù)(加1),如果未超越所規(guī)定的循環(huán)范圍則重復(fù)步驟,否則結(jié)束循環(huán)。Pascal程序:Program Exam12;Var a: byte;Begin for a:=1 to 20 do Writeln (a); ReadlnEnd. 程序中

2、 for a:=1 to 20 do Writeln (a); 是for循環(huán)語句。for 循環(huán)語句有兩種格式:(1) for循環(huán)變量:=初值 To 終值 do 語句; (2) for循環(huán)變量:=初值downto 終值 do 語句;第(1)種格式的初值小于等于終值,循環(huán)變量值按自動加1遞增變化;第(2)種格式的初值大于或等于終值,循環(huán)變量值按自動減1遞減變化。for 循環(huán)是 (以遞增1或以遞減1) 計數(shù)型循環(huán)。比如: 若將例3.1程序改為倒計數(shù)(遞減)循環(huán),則輸出201的自然數(shù)數(shù):Program Exam31;Var a: byte;Begin for a:=20 downto 1 doWrit

3、eln(a) ; ReadlnEnd.例3.2打印出30至60的偶數(shù)。解:方法一: = 1 * GB3 設(shè)a表示30至60的所有的數(shù),可用for循環(huán)列出; = 2 * GB3 用式子a mod 2=0篩選出其中的偶數(shù)并輸出。Pascal程序:Program ex32;Var a : integer;Begin For a := 30 to 60 do If (a mod 2=0) then writeln(a); Readln;End.在這個程序中,for循環(huán)后的循環(huán)語句是一個條件分支語句。 方法二:我們知道,在式子a=2*n中,若n取自然數(shù)1、2、3、,時,則a依次得到偶數(shù)2、4、6、。因此

4、要想得到30至60的偶數(shù),就可以讓上面式子中的n取15至30的自然數(shù)就可以了。所以本題還可以按以下步驟處理: = 1 * GB3 設(shè)n表示15至30的所有自然數(shù),可用for循環(huán)列出; = 2 * GB3 用式子a := 2*n求出其中的偶數(shù); = 3 * GB3 將結(jié)果輸出至屏幕。Pascal程序:Program ex32;Begin For n := 15 to 30 do Begin a := 2*n; Writeln(a);End; Readln;End. 例3.3自然數(shù)求和:編一個程序,求從1至100的自然數(shù)的和。解: 令S0; 令a表示1至100的自然數(shù),用循環(huán)列出; 將這些自然數(shù)用

5、公式S:=S+a 逐一累加到S中去; = 4 * GB3 循環(huán)結(jié)束后,S即為1至100的自然數(shù)的和,輸出即可。Pascal程序:Program ex33;var s,a : integer;Begin S := 0; For a := 1 to 100 do S := S+a; Writeln(S=,S); Readln;End. 例3.4一個兩位數(shù)x,將它的個位數(shù)字與十位數(shù)字對調(diào)后得到一個新數(shù)y,此時y恰好比x大36,請編程求出所有這樣的兩位數(shù)。解: 用for循環(huán)列舉出所有的兩位數(shù),x為循環(huán)變量; 用公式a:= x div 10分離出x的十位數(shù)字; 用公式b:= x mod 10分離出x的個

6、位數(shù)字; 用公式y(tǒng):= b*10+a合成新數(shù)y; = 5 * GB3 用式子y-x=36篩選出符合條件的數(shù)x并輸出。Pascal程序:Program ex34;Begin For x := 10 to 99 do Begin a := x div 10; b := x mod 10; y := b*10+a; if y-x=36 then writeln(x);End;Readln;End. 例3.5 把整數(shù)3025從中剪開分為30和25兩個數(shù),此時再將這兩數(shù)之和平方,(30+25)2=3025計算結(jié)果又等于原數(shù)。求所有符合這樣條件的四位數(shù)。解:設(shè)符合條件的四位數(shù)為N,它應(yīng)當(dāng)是一個完全平方數(shù),

7、用(a*a)表示。 為了確保N=(a*a)在四位數(shù)(10009999)范圍內(nèi),可確定a在3299循環(huán); 計算N=a*a;將四位數(shù)N拆分為兩個數(shù)n1和n2; 若滿足條件(n1+n2)*(n1+n2)N 就輸出 N 。Pascal程序:Program Exam35;Var N,a, x,n1,n2: Integer;Begin for a:=32 to 99 do begin N:=a*a; n1:= N div 100; 拆取四位數(shù)的前兩位數(shù) n2:= N-n1*100; 拆取四位數(shù)的后兩位數(shù) X:=n1+n2; if x*x=N then writeln (N); end; ReadlnEnd

8、. 例3.6用“*”號打印出如下的長方形圖案。* * * *解: 上面給出的圖例共有4行,我們可以用一個循環(huán)控制行的變化; 在每行中又有9列,我們可以在前面控制行的循環(huán)中再套一個循環(huán)來控制列的變化。Pascal程序:Program ex36;Begin For a := 1 to 4 do 外循環(huán)控制行的變化 Begin For b := 1 to 9 do 內(nèi)循環(huán)控制列的變化 write(*); Writeln; 輸出一行的“*”后換行End;Readln;End.程序中的循環(huán)對于a的每個值都包含著一個b=(19)次的內(nèi)循環(huán)。外循環(huán)for a 將內(nèi)循環(huán)for b包含在里面,稱為for循環(huán)的嵌

9、套。嵌套形式如: for a:=n1 to n2 do for b:=m1 to m2 do 循環(huán)體語句; 例3.7 打印出九九乘法表:解:設(shè)a為被乘數(shù),范圍為19;b為乘數(shù),范圍為1a;乘式為a*b=(a,b的乘積),則 a=1: b=1a 1*1=1 a=2: b=1a 2*1=2 2*2=4 a=3: b=1a 3*1=3 3*2=6 3*3=9 a=4: b=1a 4*1=4 4*2=8 4*3=13 4*4=16 : : a=9 b=1a 9*1=9 9*2=18 9*9=81從上面分解的橫行中看到共有9行,這里的“行”數(shù)變化與a的變化從19相同,可用a控制“行”的循環(huán);每“行”里面

10、相乘的次數(shù)與b的范圍相關(guān),由b控制每“行”里面的“內(nèi)部”循環(huán);內(nèi)循環(huán)被包含在最里層,執(zhí)行完每“行”的內(nèi)部循環(huán),就到下一“行”去執(zhí)行新“行”里面的循環(huán),每“行”都擁有形式相同的( b=1a )內(nèi)循環(huán)。即每到一“行”都要執(zhí)行該“行”的內(nèi)循環(huán)。這里所指的“行”可以理解成抽象的行,不一定是實(shí)際上具體對應(yīng)的行,可以是一個處理“塊”。Pascal程序:Program Exam37;Var a,b: byte;Begin for a:=1 to 9 do 外循環(huán) begin for b:=1 to a do 內(nèi)循環(huán) write(a,* ,b,= ,a*b, :3); writeln end; ReadlnE

11、nd. 根據(jù)這種格式還可以實(shí)現(xiàn)多層循環(huán)嵌套,例如: for a:=n1 to n2 do for b:=m1 to m2 do for c:=k1 to k2 do 循環(huán)體語句; 例3.8從七張撲克牌中任取三張,有幾種組合方法?請編程輸出所有組合形式。解:設(shè)每次取出三張分別為a,b,c。用三重循環(huán)分別從17的范圍里取值;為了排除取到重號,用(a-b)*(b-c)*(a-c) < >0進(jìn)行判斷。Pascal程序:program Exam38;const n=7;var a,b,c,t: integer;Begin t:=0; for a:=1 to n do for b:=1 to

12、n do for c:=1 to n do if (a-b) * (b-c) * (a-c) < >0 then Begin inc (t); writeln (a:3, b:3, c:3) End; writeln ( total:, t :5); readln End. 例3.9 數(shù)學(xué)上把除了1和它本身,沒有別的數(shù)能夠整除它的自然數(shù)叫做素數(shù)(或質(zhì)數(shù))?,F(xiàn)在由鍵盤輸入一個自然數(shù)N,編程判斷N是否是素數(shù),是則輸出“Yes”,否則輸出“No”。解:根據(jù)定義,對于給定的自然數(shù)N,只需判斷除1和它本身外,還有沒有第三個自然數(shù)即可。 令K從1循環(huán)至N; 根據(jù)N mod K是否為0可統(tǒng)計K的

13、約數(shù)的個數(shù); 若N的約數(shù)的個數(shù)超過2個,則判定N不是素數(shù)。Pascal程序:Program Exam39;Var n,m,k,t: integer;Begin write(N=); ReadLn(N);t:=0; for k:=1 to N do 外循環(huán) if N mod k=0 then t := t+1; 如果N是奇數(shù) if t>2 then writeln(No) else writeln(Yes); Readln;End.程序中的變量yse為布爾(或邏輯)類型(Boolean)。布爾值只有兩個: True(真) False(假) 布爾值與條件判斷結(jié)果為真(條件成立)或?yàn)榧?條件不

14、成立)的作用相同,常用于條件語句和循環(huán)語句中。上面程序中用 if yes and (t mod 7=0) then writeln;實(shí)現(xiàn)每行打印七個素數(shù)換行,程序中布爾變量yes為真,在邏輯上表示是素數(shù);關(guān)系式(t mod 7=0) 的值為真時,表示該行輸出素數(shù)巳是個;用and將這兩個“條件”連起來是作一種布爾(邏輯)運(yùn)算。Pascal 共有四種邏輯運(yùn)算符: and (與) 兩條件都為True時,其結(jié)果值為True;否則為False; or (或) 兩條件中只要有一個為True ;其結(jié)果值為True;否則為False; xor (異或) 兩條件的邏輯值不相同時,其結(jié)果值為True;否則為Fal

15、se; not (非) 條件為True時,其結(jié)果值為False;否則為True;(取反) 習(xí)題3.1:1.打印出1至20的平方數(shù)表。2.打印出100至200之間的奇數(shù)。3. 雞兔同籠(用for循環(huán)程序完成)4.一輛快車和一輛慢車開往同一地點(diǎn),快車票價為18元,慢車票價為13. 5元,共售出400張,共計5940元,求快車票和慢車票各多少張?.5.求出能被5整除的所有四位數(shù)的和。6.在下面式子中的二個內(nèi)填入一個合適的同樣的數(shù)字,使等式成立。3*6528=3*82567.有一個三位數(shù),它的各位數(shù)字之和的11倍恰好等于它自身,請編程求出這個三位數(shù)。8.在自然數(shù)中,如果一個三位數(shù)等于自身各位數(shù)字之立方

16、和,則這個三位數(shù)就稱為是水仙花數(shù)。如:153=13+53+33,所以153是一個水仙花數(shù)。求所有的水仙花數(shù)。9.編程序打印出下列圖案:平行四邊形 等腰三解形菱形* * * * * * * * * * * * * *10.編程打印出如下圖案: 1 222 33333 4444444 55555555511.有三種明信片:第一種每套一張,售價2元;第二種每套一張,售價4元; 第三種每套9張,售價2元?,F(xiàn)用100元錢要買100張明信片,要求每種明信片至少要買一套,問三種明信片應(yīng)各買幾套?請輸出全部購買方案。12.某人想把一元錢換成伍分、貳分、壹分這樣的零錢, 在這三種零錢中每種零錢都至少各有一個的情

17、況下,共有多少種兌換方案。并打出這些方案。13.14. 輸出100 以內(nèi)的全部素數(shù),要求每行顯示5 個。15.A、B兩個自然數(shù)的和、差、積、商四個數(shù)加起來等于243,求A、B兩數(shù)。16.百錢買百雞:今有錢100元,要買100只雞,公雞3元一只,母雞1元一只,小雞1元3只,若公雞、母雞和小雞都至少要買1只,請編程求出恰好用完100元錢的所有的買雞方案。第二節(jié)repeat 循環(huán)Repeat循環(huán)是直到型循環(huán)。試將上一節(jié)的例3.1(打印出120的平方數(shù)表)程序改為 repeat 循環(huán): Program Exam31_1; Var a: byte; Begin a:=1; writeln ( '

18、 a ' : 8 , ' a*a ' : 8 ) ; repeat writeln ( a :8,a*a : 8); inc(a); 改變a的值 Until a20; Readln Emd. 程序中的Repeat循環(huán)格式為: repeat 循環(huán)體語句; until 條件表達(dá)式; 直到條件為真 Repeat循環(huán)首先執(zhí)行由Repeat和Until括起來的循環(huán)體語句,然后檢查Until后面的條件表達(dá)式:如果表達(dá)式結(jié)果為假,則繼續(xù)執(zhí)行循環(huán)體,接著繼續(xù)檢查Until后面的條件表達(dá)式,如此反復(fù)執(zhí)行直到這個表達(dá)式結(jié)果為真時結(jié)束循環(huán)。Repeat循環(huán)體語句必須有能改變Until后面條件

19、表達(dá)式值的語句,并最終使這個條件表達(dá)式的值為真,使循環(huán)自動結(jié)束。程序中inc (a) 指令相當(dāng)于a : =a+1,常用的同類指令格式如下: (1) inc(x) 等同 x:=x+1; (2) inc(x, n) 等同 x:=x+n; (3) dec(x) 等同 x:=x1; (4) dec(x,n) 等同 x:=xn; 例3.10求兩個自然數(shù)M和N的最大公約數(shù)。解:若自然數(shù)a既是M和約數(shù),又是N的約數(shù),則稱a為M和N的公約數(shù),其中最大的稱為最大公約數(shù)。為了求得最大公約數(shù),可以從最大可能的數(shù)(如M或N)向下尋找,找到的第一個公約數(shù)即是最大公約數(shù)。Pascal程序:Program ex310;Be

20、gin a := N+1; Repeat a := a-1; Until (M mod a=0) and (N mod a=0); writeln(a); Readln;End. 例3.11校體操隊(duì)到操場集合,排成每行2人,最后多出1人;排成每行3人,也多出1人;分別按每行排4,5,6人,都多出1人;當(dāng)排成每行7人時,正好不多。求校體操隊(duì)至少是多少人?解:設(shè)校體操隊(duì)為X人,根據(jù)題意X應(yīng)是7的倍數(shù),因此X的初值為7,以后用inc(x,7)改變X值; 為了控制循環(huán), 用邏輯變量yes為真(True) 使循環(huán)結(jié)束; 如果諸條件中有一個不滿足, yes 的值就會為假(false),就繼續(xù)循環(huán)。Pasc

21、al程序:program Exam311;var x: word; 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;

22、直到y(tǒng)es的值為真 writeln('All =', x) ; readlnend. 程序中對每個X值,都先給Yes 賦真值,只有在循環(huán)體各句對X進(jìn)行判斷時,都得到“通過”(此處不賦假值)才能保持真值。 例3.12從鍵盤輸入一個整數(shù)X(X不超過10000),若X的各位數(shù)字之和為7的倍數(shù),則打印“Yes”,否則中打印“No”。解:本題考察的是數(shù)字分離的方法,由于X的位數(shù)不定,所以以往的解法不能奏效,這是介紹一種取余求商法。(1)用X mod 10分離出X的個位數(shù)字;(2)用X div 10將剛分離的個數(shù)數(shù)字刪除,并將結(jié)果送回給X;(3)重復(fù)(1)(2)直到X0。Pascal程序:

23、Program ex12;var x,a,s : integer;begin s := 0; repeat a := x mod 10; x := x div 10; s := s+a; until x=0; if s mod 7=0 then writeln(Yes) else writeln(No); Readln;end; 例3.13求1992個1992的乘積的末兩位數(shù)是多少?解:積的個位與十位數(shù)只與被乘數(shù)與乘數(shù)的個位與十位數(shù)字有關(guān),所以本題相當(dāng)于求1992個92相乘,而且本次的乘積主下一次相乘的被乘數(shù),因此也只需取末兩位參與運(yùn)算就可以了。Pascal程序:Program ex313;v

24、ar a,t : integer;Begin a := 1; t := 0; repeat t := t+1; a := (a*92) mod 100; until t=1992; writeln(a); Readln;End. 例3.14尼科徹斯定理:將任何一個正整數(shù)的立方寫成一組相鄰奇數(shù)之和。 如: 33=7+9+11=27 43=13+15+17+19=64解:從舉例中發(fā)現(xiàn): (1) n3正好等于n個奇數(shù)之和; (2) n個奇數(shù)中的最小奇數(shù)是從1開始的奇數(shù)序列中的第m個奇數(shù),與 n 的關(guān)系為: m=n (n1) / 2+1。 (3) 奇數(shù)序列中第m個奇數(shù)的值為x,且 x= 2m1,比如:

25、 n=3時,m=3(3-1)/2+1=4,即3個奇數(shù)中最小的奇數(shù)是奇數(shù)序列中的第4個,它的值為x=(2m-1)=7, 所以:33=7+9+11。 (4) 從最小的奇數(shù)值x開始,逐個遞增2,連續(xù)n個,用t從1開始計數(shù),直到t=n為止。Pascal程序:Program Exam35;Var n,m,x,t,s : integer;Begin write(input n:); readln(n); 輸入N m:=(n*(n-1) div 2)+1; 找到第m個奇數(shù) x:=2*m-1; t:=1; 算出第m個奇數(shù)的值x,是所求的第一個 write(n*,n,*,n,=,x);輸出第一個 s:=x; 用

26、S計算和 if n1 then Repeat inc(x,2); 計算下一個奇數(shù) write (+ ,x) ; 加上下一個奇數(shù) inc (t ); inc (s,x); 計個數(shù)并累加和 Until t=n; 直到n個 Writeln (= ,s ) ; ReadlnEnd. 例3.15猜價格:中央電視臺的“幸運(yùn)52”欄目深受觀眾喜愛,其中的“猜商品價格”的節(jié)目更是膾炙人口,現(xiàn)在請你編一個程序模擬這一游戲:由計算機(jī)隨機(jī)產(chǎn)生200至5000之間的一個整數(shù),作為某件商品的價格,然后由你去猜是多少,若你猜的數(shù)大了,則計算機(jī)輸出提示“Gao”,若你猜的數(shù)小了,則計算機(jī)輸出提示“Di”,然后你根據(jù)提示繼續(xù)

27、猜,直到你猜對了,計算機(jī)會提示“Ok”,并統(tǒng)計你猜的總次數(shù)。解:本題的游戲規(guī)則大家都清楚,要完成程序,必須把處理步驟理清:(1)用隨機(jī)函數(shù)Random產(chǎn)生200至5000之間的一個整數(shù)X; (2)你猜一個數(shù)A; (3)若AX,則輸出“Gao”;(4)若AX,則輸出“Di”;(5)若AX則輸出“Ok”;(6)重復(fù)(2)(3)(4)(5)直到A=X。 Pascal程序: Program ex315; Var t,X,a : integer; BeginRandomize;X := Random(4800)+200;t := 0;Repeat t := t+1;write(,t, Qing cai

28、yi ge zheng shu : );readln(a);if a>x then writeln(Gao);if a<x then writeln(Di);if a=x then writeln(Ok);Until A=X;Readln;End. 習(xí)題3.21.求兩個自然數(shù)M和N的最小公倍數(shù)。(如果求三個或更多個數(shù)的最小公倍數(shù)呢?應(yīng)如何解決)2.小會議室里有幾條相同的長凳,有若干人參加開會。如果每條凳子坐6人,結(jié)果有一條凳子只坐有3人;如果每條凳子坐5人,就有4人不得不站著。求會議室里有多少人開會,有多少條長凳?3.某動物飼養(yǎng)中心用1700元??钯徺I小狗(每只31元)和小貓(每只

29、21元)兩種小動物。要求專款專用,正好用完, 應(yīng)當(dāng)如何購買?請輸出所有方案。4.某整數(shù)X加上100就成為一個完全平方數(shù),如果讓X加上168 就成為另一個完全平方數(shù)。求X?5.某次同學(xué)聚會,老同學(xué)見面?zhèn)€個喜氣洋洋,互相握手問好。參加此次聚會者每人都與老同學(xué)握了一次手,共握903次,試求參加聚會的人數(shù)?6.用自然數(shù)300,262,205,167分別除以某整數(shù)A,所得到的余數(shù)均相同。求出整數(shù)以及相除的余數(shù)?7.1600年前我國的一部經(jīng)典數(shù)學(xué)著作中有題:“今有物,不知其數(shù),三三數(shù)之,剩二;五五數(shù)之,剩三;七七數(shù)之,剩二,問物幾何?!鼻笞钚〗狻?.編程求出所有不超過1000的數(shù)中,含有數(shù)字3的自然數(shù),并

30、統(tǒng)計總數(shù)。9.阿姆斯特朗數(shù):如果一個正整數(shù)等于其各個數(shù)字的立方和,則該數(shù)稱為阿姆斯特朗數(shù)(也稱自戀數(shù)),如407430373,試編程求出1000以內(nèi)的所有阿姆斯特朗數(shù)。第三節(jié)While 循環(huán)While循環(huán)是當(dāng)型循環(huán)。例3.8 前面第一章例1.2的雞兔同籠,頭30,腳90, 求雞兔各幾只?在此用下面方法編程求解。解: 設(shè)雞為J只,兔為T只。已知頭為H, 腳為F。 讓雞的只數(shù)逐次加1進(jìn)行遞推計算,初始時J=0; 計算兔的只數(shù)T=H-J; 當(dāng)總腳數(shù)(4*T+2*J) < > F就做 (J=J+1,T=H-J); 當(dāng)4*T+2*J=F時,說明所推算的J和T是正確的,應(yīng)結(jié)束循環(huán),并輸出T,

31、J。Pascal程序:Program Exam38;Const H=30; F=90;Var J,T : integer;Begin J:=0; T:=HJ; 初始時讓J從0開始計算 While 4*T+2*JF do 當(dāng)條件為真就做do后面的循環(huán)體 begin inc(J); 遞推改變J值 T:=HJ 計算兔的只數(shù) end;Writeln('T=',T,' ':6, 'J=', J ) ; ReadlnEnd.程序中采用While當(dāng)型循環(huán),While循環(huán)語句的格式為: While 條件式 do 語句;其中do后面的“語句”是被重復(fù)執(zhí)行的,稱為循

32、環(huán)體;若循環(huán)體是多個語句, 必須用begin-end包起來成為復(fù)合語句。While循環(huán)首先判斷條件式,當(dāng)條件式的值為真就執(zhí)行do 后面的語句(循環(huán)體)。While的循環(huán)體內(nèi)也必須包含能改變控制變量取值語句, 影響條件式的值, 最終使條件式為false (假), 才能結(jié)束循環(huán)。 例3.9 輸入任一的自然數(shù)A, B, 求A , B的最小公倍數(shù)。解:這里采用適合計算機(jī)查找的方法: 設(shè)D是它們的最小公倍數(shù)。先找出A, B當(dāng)中的較大者并存放在A中, 將較小者存放在B中, 讓D=A, 當(dāng)D能夠整除B時, 則D是所求的最小公倍數(shù);當(dāng)D不能整除B,就逐次地讓D增加A。例如:A=18, B=12, 步驟如下:

33、讓D=A (D=18) 當(dāng)(D mod B)0 為真時 ( D不能整除B ) 就做 D=D+A, 重復(fù); 當(dāng)(D mod B)0 為假時結(jié)束循環(huán),并輸出D。Pascal程序:program Exam39;var a,b,d,t : word;begin write('input a,b: '); readln(a , b); if a<b thenbegin t:=a; a:=b; b:=t end; d:=a; while d mod b < >0 do 當(dāng)條件為真時就做do后面的語句 inc(d,a); writeln('', a, 

34、9; , ' , b, '=', d) ; readlnEnd.Pascal語言的三種基本循環(huán)方式, for循環(huán)對循環(huán)范圍有明確規(guī)定, 且循環(huán)變量只能是遞增加1或遞減1自動計數(shù)控制; 而repeat-until循環(huán)和while-do循環(huán)比較靈活, 只要對條件表達(dá)式的值能控制滿足一定要求就能組成循環(huán), 但在循環(huán)體中必須有改變循環(huán)變量值的語句, 使條件判斷(邏輯值)最終為True或flase, 讓循環(huán)能夠終止。 例3.10求自然數(shù)A, B的最大公約數(shù)。解:采用如下方法步驟: (1)求A除以B的余數(shù); (2)當(dāng)余數(shù)0就做n=a; a=b; b=n mod b, 重復(fù)(1)和(

35、2); (3)當(dāng)余數(shù)=0就結(jié)束循環(huán),并輸出b值。比如a=18, b=12時,處理步驟為: (1) = ,得余數(shù)為6; (2) 此余數(shù)不為零 ,讓a = 12, b = 6; (3) 重復(fù) = , 得余數(shù)為0; (4) 結(jié)束循環(huán),輸出6(余數(shù)為零時的b值即是所求的最大公約數(shù))。此方法稱為輾轉(zhuǎn)相除法求最大公約數(shù)。Pascal程序:program Exam310;var a,b, n : word;begin write('input a,b: '); readln (a,b); write('(', a, ' , ' , b, ')='

36、; ) ; while a mod b < > 0 do begin n:=a; a:=b; b:=n mod b; end; writeln(b); readlnEnd.例3.11將一根長為369cm的鋼管截成長為69cm和39cm兩種規(guī)格的短料。在這兩種規(guī)格的短料至少各截一根的前提下, 如何截才能余料最少。解:設(shè)兩種規(guī)格的短料分別為: 規(guī)格為69cm的x根,可在1至(369-39)/69范圍循環(huán)取值; 規(guī)格為39cm的y根,用y = (369-69*X)/39)計算; 余料R=369-69*X-39*Y。設(shè)最小余料的初始值min=369;在X循環(huán)范圍內(nèi),每一個X值都計算出對應(yīng)的

37、Y和R;如果Rmin, 就將R存入min, x存入n, y存入m,記錄余料最小時的x和y ;重復(fù)步驟,當(dāng)x值超出 ((36939)/ 69) 時結(jié)束循環(huán)。Pascal程序:program exam311;var x,y,r,min,n,m,a: integer;begin min:=369; a:=(369-39) div 69; x:=1; while x<=a do begin y:=(369-69*x) div 39; r:=369-69*x-39*y; if r<min then begin min:=r; n:=x; m:=y end; inc(x); end;write

38、ln('min=', min, ' x=', n, ' y=', m) ; readlnend.在有些情況中, 三種循環(huán)方法可以互相換用。例3.12甲、乙、丙三人都是業(yè)余射擊愛好者, 在一次練習(xí)中他們槍槍中靶: 甲射了八發(fā)子彈,取得225環(huán)成績,乙射了七發(fā),也取得225環(huán);丙只射了六發(fā),同樣取得225環(huán)。下面是成績表,請編程完成下表中空項(xiàng)的填數(shù)。 射子彈數(shù)中50環(huán)有幾發(fā)中35環(huán)有幾發(fā)中25環(huán)有幾發(fā)成績(環(huán))甲8 225乙7 225丙6 225解:設(shè)N為發(fā)射子彈數(shù), 只有8, 7, 6三個數(shù)字, 正好又可用來代表甲、乙、丙; 設(shè)A為中50環(huán)的子彈數(shù)

39、, 最小為0, 最大為(225 div 50=4); B為中35環(huán)的子彈數(shù), 最小為0, 最大為(225 div 35=6); C為中25環(huán)的子彈數(shù), C=N-A-B, 但必須C0才可能正確; 先讓N=8, A取值(04), B取值 (06)用循環(huán)逐個選定, 在C0的情況下若能滿足條件A*50+B*35+C*25=225就能確定一組填數(shù)。然后選N的下一數(shù)值,重復(fù)同樣的過程。Pascal程序:program exam312;var a,b,c,n,s : integer;begin writeln('n':3, 'a':3, 'b':3, 'c':3, 's':5) ; n:=8; while n<

溫馨提示

  • 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

提交評論