李鵬



算法中主要涉及三種基本邏輯結構:順序結構、選擇結構和循環結構,其中循環結構是這三者中最重要的一種結構.很多同學對循環結構中變量的變化情況的掌握存在比較大的困難,具體表現在隨著循環次數的增加,對某些變量的變化情況逐漸變得模糊、混淆,進而對循環的起點條件、循環次數、循環終止條件、最終結果、循環功能等無法準確把握.
如何才能突破循環結構問題的難點呢?建議同學們利用列舉法,通過列舉去追蹤循環結構中的變量,明確各個變量在進入循環體后的值,觀察和歸納出變量在退出循環時應輸出的值,進而得到問題的答案.本文將針對不同的題型,通過列表法追蹤變量的變化,來揭示列表法對解決循環結構問題的作用.
一、求輸出結果
例1 執行如圖1所示的偽代碼,輸出的值為
解 偽代碼的程序語句執行中的數據變化如表1所示,當S<20時可執行循環體,當S≥20時退出循環,此時輸出i=11.
點評 本題主要考查“當型”循環語句,通過對程序語言的讀取,再根據所給循環結構,判斷出S≥20時的輸出結果.由程序運行過程看,這是一個累加的問題.解題時,可通過對條件S<20的判斷,逐步演算S的結果,通過判斷,可知該程序演算過程需運行5次,i的值變為11,此時程序不再進入循環體,繼而輸出.
總結 ①無論是“直到型”還是“當型”循環結構,列表時均以判斷框或判斷語句作為計算每一組變量值的起始;
②列表時,表中的變量白左至有的順序應與循環體中各變量發生變化的先后順序保持一致,便于明確每個變量的當前值是哪次循環得到的.例2 執行圖2的程序框圖,如果輸入的x=0,y=l,n=l,則輸出x,y的值滿足(
)A.y=2x
B.V=3xC.V=4x
D.V=5x
解 由表2可得,當x=3/2,y=6時,程序框圖退出循環,故滿足y=4x的關系式,選C.
點評 本題的循環結構中,循環體看起來好像被判斷框分成了兩部分:x,y在判斷框前開始第一次變化,而n在判斷框后才開始第一次變化.當抓住了“判斷框作為計算每一組變量值的起始”這個關鍵點,第一組變量的值就不難確定為n=2,x=1/2,y=2”,而不是“x=0,y=1,n=2”;同時也不難確定,列表中變量的先后順序是”在前,而x,y在后.
二、求循環初值
例3 某算法流程圖如圖3所示,該程序運行后,若輸出的x=15,則實數a等于
解 如表3所示,第一次循環x=2a+1,n=2,第二次循環x=4a+3,n=3,第三次循環x=8a+7,n=4>3,結束循環輸出x=8a+7=15,a=1.
點評 本題根據判斷框內的條件,通過列表法列舉出循環結束時所輸出的x,再令其結果8a+7=15,解出所求的a的值.特別注意,如果列舉時次數過多,可以采用部分列舉,再尋求規律,進而歸納出結果.
例4程序的框圖如圖4,如果上述程序運行的結果為S=132,那么判斷框中橫線上應填入的數字是
解 由流程圖可知,此程序目的是求幾個數的連乘積,第一次乘入的數是12,以后所乘的數依次減少1,由于132=11×12,如表所示,可知一共循環兩次,當k=11時,要滿足循環條件,而當k=10時退出循環,故判斷框中可填k≤10.
點評 本題要求寫出循環條件,只要用列表法得到與輸出的S值對應的k值,判斷框內的條件便可確定.
四、求循環次數
例5 如圖5所示的程序框圖中循環體執行的次數是______.
解 如流程圖所示,首先執行循環體,再進行條件判斷.根據列表不難發現,最后一次執行循環體是當“i=98+2 =100”時,然后退出循環并輸出S,所以循環體執行次數為49次.
點評 本題是根據循環結構求循環體執行次數的問題,一般來說此類題型中流程圖循環體執行次數比較多,可以通過列表法分析得到計數變量i和求和變量S的變化規律,再判斷循環體執行的次數.
含循環結構的流程圖、偽代碼問題是算法學習中的重點和難點,將其表格化進行列舉,尋找規律,是一個簡單、有效的方法.對循環結構本質的理解始終是解決這類問題的基礎,列表法用來追蹤循環語句中的變量,記錄其變化情況.列表不僅條理清晰、易于觀察,而且可以幫助同學們更容易理解循環結構,化繁為簡.endprint