【正文】
構(gòu) 第一節(jié) 循環(huán)語(yǔ)句( FOR語(yǔ)句) 第二節(jié) 當(dāng)語(yǔ)句( WHILE語(yǔ)句) 第三節(jié) 直到循環(huán)( REPEAT語(yǔ)句) 第四節(jié) 多重循環(huán)結(jié)構(gòu) 在實(shí)際應(yīng)用中,會(huì)經(jīng)常遇到許多有規(guī)律性的重復(fù)運(yùn)算,這就需要掌握本章所介紹的循環(huán)結(jié)構(gòu)程序設(shè)計(jì)。 ④ 循環(huán)變量的初值和終值一經(jīng)確定,循環(huán)次數(shù)就確定了。 begin s := 0。 do write(k)。 例 已知一對(duì)兔子,每個(gè)月可以生一對(duì)小兔,而小兔經(jīng)過(guò)一個(gè)月生長(zhǎng)后也可每月生一對(duì)小兔。 b := x mod 10。 s : =0。 while語(yǔ)句的特點(diǎn)是:先判斷,后執(zhí)行 。 //輸出結(jié)果 end. 例 求兩個(gè)正整數(shù) m和 n的最大公約數(shù)。 end。 f : =f。 until 布爾表達(dá)式 。 end. 例 校體操隊(duì)到操場(chǎng)集合 ,排成每行 2人 ,最后多出 1人 。 until yes。 f : =f。 第四節(jié) 多重循環(huán)結(jié)構(gòu) 當(dāng)一個(gè)循環(huán)的循環(huán)體中又包含循環(huán)結(jié)構(gòu)程序時(shí),我們就稱之為循環(huán)嵌套。 程序可改為: program ex4_17。 源程序如下: programr ex4_18。 begin for m : =100 to 999 do begin a : =m div 100。 if xtrunc(sqrt(i)) then write(i:8)。各環(huán)的作用如下: ( 1)外層環(huán)控制打印的行數(shù),此倒三角形共 8行,故外環(huán)的設(shè)置為遞減型循環(huán)。 //p從 1開始枚舉 repeat p : =p+1。問(wèn)有哪幾種換法? 百雞問(wèn)題:一只公雞值 5元,一只母雞值 3元,而 1元可買 3只小雞。將 4100中的所有偶數(shù)分別用兩個(gè)素?cái)?shù)之和表示。)。 var n,p,q,j : integer。)。 var i,x :integer。 begin for a : =1 to 9 do for b : =0 to 9 do for c : =0 to 9 do if a*a*a+b*b*b+c*c*c=a*100+b*10+c then write(a*100+b*10+c : 6)。 例 一個(gè)炊事員上街采購(gòu) ,用 500元錢買了 90只雞 , 其中母雞一只 15元 ,公雞一只 10元 ,小雞一只 5元 ,正好把錢買完。 //累加 n! end。 用輾轉(zhuǎn)相除法求兩個(gè)自然數(shù)的最大公約數(shù)。 n : =1。 if x mod 3 1 then yes:=false。 m: =n。 雞兔同籠 ,頭 30,腳 90, 求雞兔各幾只? 第三節(jié) 直到循環(huán)( REPEAT語(yǔ)句) 用 while語(yǔ)句可以實(shí)現(xiàn)“當(dāng)型循環(huán)”,用 repeatuntil 語(yǔ)句可以實(shí)現(xiàn)“直到型循環(huán)”。 n : =1。 r:=a mod b。 //將下一項(xiàng)值累加到 s end。 ③ 返回步驟 1。 Program ex4_9。 【 分析 】 ① 用 for循環(huán)列舉出所有的兩位數(shù), x為循環(huán)變量; ② 用公式 a:= x div 10分離出 x的十位數(shù)字; ③ 用公式 b:= x mod 10分離出 x的個(gè)位數(shù)字; ④ 用公式 y:= b*10+a合成新數(shù) y; ⑤ 用式子 yx=36篩選出符合條件的數(shù) x并輸出。也就是說(shuō),從 1!可以推出 2!,從 2!可以推出 3!,從 3!可以推出 4!,以此類推。 for k : =39。 end. 例 編程計(jì)算 1到 100的累加和: s=1+2+3+…+100 。 說(shuō)明 ① 循環(huán)變量必須是順序類型。重復(fù)語(yǔ)句是由循環(huán)體及重復(fù)終止條件兩部分組成。 end。 程序如下: Program ex4_3。 s := 1。 lastx : =2。 end. 例 把整數(shù) 3025從中剪開分為 30和 25兩個(gè)數(shù),此時(shí)再將這兩數(shù)之和平方, (30+25)2=3025計(jì)算結(jié)果又等于原數(shù)。 求 10個(gè)數(shù)中的最大值和最小值。當(dāng) s的值超過(guò) 10時(shí),最后一項(xiàng)的項(xiàng)數(shù)即為要求的 n。 Var m,n,a,b,r:integer。 π/4=11/3+1/51/7+… ,直到最后一項(xiàng)的值小于106為止。 end. 運(yùn)行程序會(huì)發(fā)現(xiàn)沒(méi)有結(jié)果,為什么?因?yàn)椴紶柋磉_(dá)式 abs(t)=1e6,即 1/n=1e6,而程序的說(shuō)明部分 n是整型數(shù),它的范圍是 32768~ 32767,條件永遠(yuǎn)成立,所以形成死循環(huán),從而沒(méi)有運(yùn)行結(jié)果。 while循環(huán)和 repeat循環(huán)是可以相互轉(zhuǎn)化的。 Program ex4_14。 例 利用格里高公式求 π。 end. 運(yùn)行結(jié)果: 以上我們已介紹了三種循環(huán)語(yǔ)句。而求 T=N!,又可以用一個(gè) for循環(huán)來(lái)實(shí)現(xiàn) :因此 ,整個(gè)程序?yàn)?: program ex4_17。 for n:=1 to 10 do begin t:=t*n。 end. 例 求 100- 999中的水仙花數(shù)。 end。 39。 【 分析 】 哥德巴赫猜想是一個(gè)古老而著名的數(shù)學(xué)難題,它的理論證明很麻煩,迄今未得出最后證明。 //查看當(dāng)前的 q是不是素?cái)?shù) for j : =2 to trunc (sqrt(q)) do if q mod j=0 then flagq : =false。 有一堆 100多個(gè)的零件,若三個(gè)三個(gè)數(shù),剩二個(gè);若五個(gè)五個(gè)數(shù),剩三個(gè);若七個(gè)七個(gè)數(shù),剩五個(gè)。所謂的角谷猜想是:“對(duì)于任意大于 1的自然數(shù) n,若 n為奇數(shù),則將 n變?yōu)?3*n+1,否則將 n變?yōu)?n的一半。 //直到所枚舉的 p、 q是素?cái)?shù)為止 writeln(p,39。這里只對(duì)有限范圍內(nèi)的數(shù)用計(jì)算機(jī)加以驗(yàn)證,不算嚴(yán)格的證明。 //控制每行空格數(shù)目 ,這個(gè)循環(huán)可以寫成: write(39。 【 分析 】 我們可對(duì) 100- 200之間的每一整數(shù)進(jìn)行判斷,判斷它是否為素?cái)?shù),是則輸出。例如 153,13+53+33=1+125+27=153,則 153是水仙花數(shù)。 //累加 n! end。 i,j,n:integer。只在無(wú)法使用 for循環(huán)時(shí)才用 while循環(huán)和 repeatuntil循環(huán), 而且 while 循環(huán)和repeatuntil循環(huán)是可以互相轉(zhuǎn)化的,具體用哪個(gè),還要看個(gè)人喜好,但他們也存在細(xì)微區(qū)別,那就是 while語(yǔ)句的循環(huán)體有可能一次都不會(huì)被執(zhí)行,而 repeat語(yǔ)句中循環(huán)體至少執(zhí)行一次。