王修湯
同學(xué)們?cè)趯W(xué)習(xí)中經(jīng)常會(huì)遇到有規(guī)律的重復(fù)計(jì)算,或在生活中對(duì)某個(gè)事件進(jìn)行重復(fù)操作,這時(shí)候我們就要用循環(huán)語(yǔ)句來(lái)表示算法.那么循環(huán)語(yǔ)句的含義是什么?義如何書寫呢?
一、解讀
先看一個(gè)簡(jiǎn)單的例子:
例1 寫出求1+3+5+…+99所得結(jié)果的一個(gè)偽代碼.分析 由于是重復(fù)相加,并且數(shù)字1,3,5,…,99是有規(guī)律的一列數(shù),逐漸循環(huán)遞增,每次增幅為2,所以可以用For循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)計(jì)算.
第一步:選擇一個(gè)變量S表示和,并賦給初值0;
第二步:開(kāi)始進(jìn)入For循環(huán)語(yǔ)句,首先設(shè),為循環(huán)變量,分別設(shè)定其初值、步長(zhǎng)、終值.這里初值為1,步長(zhǎng)為2(步長(zhǎng)是指循環(huán)變起始的個(gè)體編號(hào)m,然后按照逐次加k的原則確定后續(xù)要抽的編號(hào),當(dāng)N能被n整除時(shí),取k=N/n;當(dāng)N除以n的余數(shù)為r時(shí),取k=(N-r)/n;④抽樣,將編號(hào)為m,m+k,m+2k,...,(n-1)k2k,…,m+(n-l)k的個(gè)體抽出.
簡(jiǎn)單隨機(jī)抽樣、分層抽樣、系統(tǒng)抽樣是最常見(jiàn)的三種抽樣方法.當(dāng)總體中個(gè)體個(gè)數(shù)量,每次增加的值.若步長(zhǎng)為1,可以省略不寫,若為其他值,則不可省略),終值為99;
第三步:寫循環(huán)表達(dá)式S←S+I(也稱循環(huán)體);
第四步:用“End For“控制其是否開(kāi)始一次新的循環(huán);
第五步:輸出結(jié)果.
其算法的偽代碼如下:
第三步循環(huán)體“S←S+I”的理解如下:
當(dāng)I=l時(shí),S←S+I是S←S+l,并把O+l賦值給S,第一次循環(huán)結(jié)束時(shí)S為1,此時(shí)S記錄了第一個(gè)數(shù)的值,遇到“End”開(kāi)始第二次循環(huán);
當(dāng)I←3時(shí),S—S+I是S←S+3,并把較少時(shí)采用簡(jiǎn)單隨機(jī)抽樣,它是其他兩種抽樣的基礎(chǔ);當(dāng)總體中個(gè)體個(gè)數(shù)較多時(shí)采用系統(tǒng)抽樣,需要將樣本分成均勻的幾部分,在第一部分中采用簡(jiǎn)單隨機(jī)抽樣,當(dāng)總體由差異明顯的幾部分組成時(shí)采用分層抽樣,而各層中通常采用簡(jiǎn)單隨機(jī)抽樣或系統(tǒng)抽樣.三種抽樣方法都保證了每個(gè)個(gè)體被抽取到的可能性相等,1+3賦值給S,第二次循環(huán)結(jié)束時(shí)S為1+3-4,此時(shí)S記錄了前兩個(gè)數(shù)的和,遇到“End”開(kāi)始第三次循環(huán);
當(dāng),一5時(shí),S←S+I是S←5+5,并把(1+3)+5賦值給S,第三次循環(huán)結(jié)束S為1+3+5=9,此時(shí)S記錄的是前三個(gè)數(shù)的和,遇到“End”開(kāi)始第四次循環(huán);
直到1= 99時(shí)才真正“End”,此時(shí)退出循環(huán),輸出結(jié)果,
這個(gè)算法我們還可以用While語(yǔ)句格式書寫如下:
這時(shí)循環(huán)體為“S←S+/,I←/+2”,每次開(kāi)始執(zhí)行循環(huán)體前,都要判斷表達(dá)式“I<101”是否為真.如果表達(dá)式為真,則執(zhí)行循環(huán)體部分,這樣重復(fù)執(zhí)行,一直到表達(dá)式“I<101”為假時(shí),就跳過(guò)循環(huán)體部分,結(jié)束循環(huán),輸出結(jié)果.
二、識(shí)別
For循環(huán)語(yǔ)句和While循環(huán)語(yǔ)句是算法中兩類重要的模型,初次學(xué)習(xí)有時(shí)會(huì)混淆這兩種語(yǔ)句,下面我們通過(guò)實(shí)例再來(lái)識(shí)別一下這兩種模型.
例2 把一個(gè)數(shù)S乘以2,再加上1,稱為一次操作,試用循環(huán)語(yǔ)句寫出以下算法.
(1)當(dāng)S=l時(shí),求把S經(jīng)過(guò)100次操作后所得的數(shù);
(2)當(dāng)S=l時(shí),求把S經(jīng)過(guò)77次操作后所得數(shù)大于2100的最小自然數(shù)n.第(1)題是已經(jīng)知道了要經(jīng)過(guò)100次操作,相當(dāng)于知道了終值是100,所以我們用For循環(huán)語(yǔ)句來(lái)書寫.
第(2)題是要求運(yùn)算結(jié)果要大于2100,但不知道要操作多少次,故選擇While循環(huán)語(yǔ)句比較合適.
三、運(yùn)用
初次學(xué)習(xí)For循環(huán)語(yǔ)句和While循環(huán)語(yǔ)句,一定還會(huì)出現(xiàn)各種各樣的錯(cuò)誤,尤其是給初值賦值時(shí),有時(shí)會(huì)搞錯(cuò)了初始值,或者在設(shè)計(jì)循環(huán)體時(shí),顛倒了執(zhí)行順序.例3 分別用While語(yǔ)句和For語(yǔ)句給出求1+1/2+1/3+…+1/100的值的算法.
錯(cuò)解While語(yǔ)句和For語(yǔ)句分別如下:
錯(cuò)因剖析 在While語(yǔ)句程序里面I←1,S←1,控制循環(huán)的條件為,I≤100,按此算法最后結(jié)果應(yīng)為1+1+1/2+1/3…+1/100,而不是題目要求的1+1/2+1/3+…+1/100,改正的方法是將S←1改為s←0;在For語(yǔ)句里S←1,I的終值是100,按此算法最后結(jié)果是1+1/2+1/3+…+1/100+1/101,也不是題目要求的1+1/2+1/3+…+1/100,改正的方法是將,的終值改為99.
正解 While語(yǔ)句和For語(yǔ)句分別如下:
評(píng)注 一個(gè)程序編寫完成之后,最好在草稿紙上試“運(yùn)行”一下,看編寫的程序是否滿足題意,不行,就要找出問(wèn)題所在,然后進(jìn)行調(diào)整修改.endprint