王進(jìn)
算法的三種基本結(jié)構(gòu)——順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中,循環(huán)結(jié)構(gòu)相對(duì)其他兩種結(jié)構(gòu)而言,較難理解和掌握,以致不少同學(xué)常被循環(huán)轉(zhuǎn)得頭暈?zāi)垦#?/p>
循環(huán)結(jié)構(gòu)有兩種基本形式,一種是直到型循環(huán)(圖1),另一種是當(dāng)型循環(huán)(圖2).
這兩種結(jié)構(gòu)的邏輯順序不同,直到型循環(huán)是先執(zhí)行再判斷,不滿足條件時(shí)執(zhí)行循環(huán)體,滿足條件時(shí)結(jié)束循環(huán);當(dāng)型結(jié)構(gòu)是先判斷再執(zhí)行,滿足條件時(shí)執(zhí)行循環(huán)體,不滿足條件時(shí)結(jié)束循環(huán).
兩種結(jié)構(gòu)可以相互轉(zhuǎn)換,滿足同樣的意義.與兩種結(jié)構(gòu)相對(duì)應(yīng)的偽代碼有Do語(yǔ)句和While語(yǔ)句.
我們用循環(huán)結(jié)構(gòu)及其偽代碼解決問(wèn)題時(shí),主要涉及初始值、判斷條件、循環(huán)體和終點(diǎn)值的設(shè)置,由于循環(huán)結(jié)構(gòu)及其偽代碼涉及的因素較多,同學(xué)們常常因判斷和理解不到位,而導(dǎo)致一些錯(cuò)誤.本文幫你厘清循環(huán)結(jié)構(gòu)易出錯(cuò)的關(guān)鍵環(huán)節(jié)——初值、判斷條件、循環(huán)體及終點(diǎn)值,讓你神清氣爽地面對(duì)循環(huán),面不改色頭不暈!
一、設(shè)置初始值不可急于求成
例1 設(shè)計(jì)一個(gè)算法,計(jì)算2+4+6+8+…+98+100的值.
剖析 這是一個(gè)直到型循環(huán)結(jié)構(gòu).有的同學(xué)只顧前兩個(gè)值2和4,而不注意循環(huán)體執(zhí)行帶來(lái)的變化.按照前一個(gè)流程圖執(zhí)行出來(lái)的結(jié)果是2+6+8+…+100.錯(cuò)誤的原因是I的初始值是4,而循環(huán)體中先執(zhí)行了I=I+2,使得I的值變?yōu)榱?,而致最終結(jié)果少加了4.簡(jiǎn)潔的修改可把初始值改為I=2即完成解答.
二、循環(huán)體內(nèi)的執(zhí)行先后有別
例2 設(shè)計(jì)一個(gè)算法,計(jì)算1×2×3×4×…×98×99的值.
剖析 這是一個(gè)當(dāng)型循環(huán)結(jié)構(gòu).按照前一個(gè)流程圖執(zhí)行出來(lái)的結(jié)果是1×3×4×5×…×100.錯(cuò)因是循環(huán)體中按照箭頭方向先執(zhí)行了I=I+l,使得I的值變?yōu)榱?,再執(zhí)行T=T×I,而致最終結(jié)果少乘了2,多乘了100.把T=T×I與I=I+l的順序顛倒一下即可得到正確的算法,算法是對(duì)一類(lèi)問(wèn)題機(jī)械的、統(tǒng)一的解決方法,其步驟的順序不可隨意顛倒.
三、判斷條件要首尾兼顧
例3 寫(xiě)出一個(gè)計(jì)算10個(gè)數(shù)的平均數(shù)的偽代碼.
分析 先利用循環(huán)結(jié)構(gòu)計(jì)算10個(gè)數(shù)的和S,再計(jì)算10個(gè)數(shù)的平均數(shù).句,先判斷后執(zhí)行.當(dāng)I=l時(shí),累加輸入的第1個(gè)數(shù),當(dāng)I=2時(shí),累加輸入的第2個(gè)數(shù),當(dāng)I=3時(shí),累加輸入的第3個(gè)數(shù)……以此類(lèi)推,當(dāng)I=9時(shí),累加輸入的第9個(gè)數(shù)的和,而當(dāng)I=10時(shí),卻不符合判斷的條件而結(jié)束循環(huán),即第10個(gè)數(shù)沒(méi)有算人S,出錯(cuò)!簡(jiǎn)潔的修改方式可把I<10改為I 四、循環(huán)體內(nèi)的賦值需各司其職 例4 寫(xiě)出一個(gè)計(jì)算1/1×3+1/3×5+1/5×7+…+1/99×101而的偽代碼. 剖析 這是直到型結(jié)構(gòu)的Do循環(huán)語(yǔ)句.同學(xué)們常因?qū)ψ兞縎和變量I的認(rèn)識(shí)不清,導(dǎo)致兩者的賦值顛倒,從而出現(xiàn)與所求問(wèn)題相差很大的結(jié)果,一般在循環(huán)結(jié)構(gòu)中有兩個(gè)變量,一個(gè)是變量S,用來(lái)貯存累加或累乘的結(jié)果;另一個(gè)是變量I,用來(lái)控制循環(huán)的次數(shù)和在S的基礎(chǔ)上構(gòu)建累加或累乘的變量形式, 在高考當(dāng)中,命題者常常以循環(huán)結(jié)構(gòu)為載體考查算法的相關(guān)內(nèi)容.作為初學(xué)者,我們要認(rèn)清循環(huán)結(jié)構(gòu)的各種表達(dá)方式,比如直到型循環(huán)和當(dāng)型循環(huán),While語(yǔ)句和Do語(yǔ)句,理解它的每一個(gè)環(huán)節(jié),把握算法是對(duì)一類(lèi)問(wèn)題機(jī)械的、統(tǒng)一的解決方法這一核心觀念,按部就班地檢驗(yàn)它的初值、判斷條件、循環(huán)體及終點(diǎn)值,逐步調(diào)整,這樣我們才能夠以不變應(yīng)萬(wàn)變,不被循環(huán)轉(zhuǎn)昏了頭!