林澤堅
(安溪陳利職業(yè)中專學校,福建 安溪 362400)
循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設計的三種基本編程結(jié)構(gòu)的一個重要組成部分,是計算機解題的一個重要特征。在許多問題中需要用到循環(huán),幾乎所有實用的程序都包含循環(huán)。因此,掌握循環(huán)結(jié)構(gòu)的概念及應用是程序設計的最基本要求。在循環(huán)算法中,迭代是一類具有代表性的基本應用,也是學習程序設計語言的重點和難點知識。
如何讓學生盡快掌握迭代循環(huán)算法呢?任何客觀事物都有其內(nèi)在的規(guī)律性,只要不斷地結(jié)合迭代學習的實際、掌握其規(guī)律、巧用各種科學良好的方法,就可以使得迭代學習起到事半功倍的效果。下面根據(jù)本人在教學中的一些經(jīng)驗,以VB程序設計語言為例,利用For語句和While語句實現(xiàn)迭代循環(huán)算法,談談自己的看法。
1.1 For語句
1.1.1 格式
For 循環(huán)變量=循環(huán)變量初值 To 循環(huán)變量終值 Step 步長循環(huán)體
Next 循環(huán)變量
1.1.2 執(zhí)行過程
①將循環(huán)變量=循環(huán)變量初值;
②將循環(huán)變量的值與循環(huán)變量終值比較(步長為正值使用<=;步長為負值使用>=),如比較結(jié)果為真,則執(zhí)行,否則循環(huán)結(jié)束;
③執(zhí)行循環(huán)體;
④循環(huán)變量增值(即:循環(huán)變量=循環(huán)變量+步長);
⑤返回執(zhí)行②。
1.2 While 語句
1.2.1 格式
Do While <條件表達式>循環(huán)體
Loop
1.2.2 執(zhí)行過程
①計算〈條件表達式〉的值,如果值為非0(稱條件滿足或條件為真),則執(zhí)行步驟②和③,否則結(jié)束循環(huán),接著執(zhí)行Loop后的語句;
②執(zhí)行循環(huán)體;
③返回執(zhí)行步驟①。
迭代是一個不斷用新值取代變量的舊值,或由舊值遞推出變量的新值的過程。它與下列因素有關(guān):①變量初值;②迭代公式;③迭代次數(shù)。
2.1 如何確定迭代變量的初值呢?
在迭代變量使用的過程中,一般可分為兩種類型:
2.1.1 第一種類型的迭代變量是存放變化規(guī)律的每一項(或其中的一部分)的值;
方法一:把有規(guī)律變化第一項(或其中的一部分)賦值給迭代變量。
例1:S=1+21+22+……+263(說明:此例中把數(shù)值1稱為第一項,數(shù)值21稱為第二項……,數(shù)值263稱為第64項。變化規(guī)律是:后一項的值是前一項的值的兩倍或指數(shù)部分從0至63依次變量。以下例子類同)。
分析:上述求和式子也可寫成S=20+21+22+……+263,設迭代變量為N,則初值為N=1(第一項)或N=0(其中的一部分)。
方法二:也可把有變化規(guī)律的第一項的值結(jié)合迭代公式求得迭代變量的初值。
例 2:S=1+21+22+……+263
分析:設迭代變量為N,根據(jù)變化規(guī)律可知迭代公式為N=N*2;第一項的值為1;然后把第一項的值代入迭代公式左邊的變量N,則得到式子1=N*2,求得迭代變量的初值為N=1/2。
方法三:結(jié)合題目的已知條件對迭代變量賦初值。
例 3:求斐波那契(Fibonaccii)1,1,2,3,5,8,13……數(shù)列前 20 項之和。
分析:斐波那契數(shù)列的規(guī)律是:數(shù)列中第一和第二個數(shù)是1,第三個數(shù)起,該數(shù)是其前面2個數(shù)之和。設變量F1,F(xiàn)2,F(xiàn)3表示數(shù)列中連續(xù)的3個數(shù),則依題目可知F1,F(xiàn)2的初值為:F1=1,F(xiàn)2=1,F(xiàn)3的值根據(jù)F1,F(xiàn)2求得,所以F3不必賦初值。
2.1.2 第二種類型的迭代變量是存放計算結(jié)果的,其初值的確定方法有:
方法一:若式子中每一項都是有變化規(guī)律的,且是累加求和,則一般情況下初值為0。
例 4:S=1+21+22+……+263
分析:題目中變量S為存放累加求和結(jié)果,且式子中每一項都是有變化規(guī)律的,所以其初值為S=0。
方法二:若式子中每一項都是有變化規(guī)律的,且是求積,則一般情況下初值為1。
例 5:P=1×2×3×……N
分析:題目中變量P為存放求積結(jié)果,且式子中每一項都是有變化規(guī)律的,所以其初值為P=1。
方法三:若式子中不是每一項都是有變化規(guī)律的,則一般情況下把沒有變化規(guī)律的項的值作為存放結(jié)果的迭代變量的初值。
例6:E=1+1/1!+1/2!+1/3!……+1/N!
分析:題目中變量E為存放累加求和結(jié)果,式子中第一項的值為1是沒有變化規(guī)律的,所以其初值為E=1。
2.2 如何確定迭代公式呢?
例7:S=1+2+3+……+100,設迭代變量為N(第一種類型)和 S(第二種類型),變化規(guī)律為后一項的值為前一項的值加1,則迭代公式為N=N+1和 S=S+N。
例8:求 S=1+21+22+……+263
分析一:設迭代變量為N(第一種類型)和S(第二種類型),變化規(guī)律為每項中的指數(shù)部分從0到63依次變化,則迭代公式為N=N+1和S=S+2^N。
分析二:設迭代變量為N(第一種類型)和S(第二種類型),變化規(guī)律為后一項的值是前一項的值的2倍,則迭代公式為N=N*2和S=S+N。
例9:求從鍵盤輸入10個數(shù)的和。
分析:依題意可建立數(shù)學模型為:S=X1+X2+……+X10(X1,X2,……X10十個數(shù)的值由鍵盤輸入),則輸入語句為X=InputBox。只要讓語句X=InputBox執(zhí)行10次,就可從鍵盤輸入得到10個數(shù)的值,每次輸入后,變量X原有的值都會被剛輸入的值取代,所以迭代公式為X=InputBox;設結(jié)果的值存放在變量S中,則迭代公式為S=S+X。
例 10:求斐波那契(Fibonaccii)1,1,2,3,5,8,13……數(shù)列前 20 項之和。
分析:斐波那契數(shù)列的規(guī)律是:數(shù)列中第一和第二個數(shù)是1,第三個數(shù)起,該數(shù)是其前面2個數(shù)之和。設變量F1,F(xiàn)2,F(xiàn)3表示數(shù)列中連續(xù)的3個數(shù),則迭代公式為:F3=F1+F2、F1=F2、F2=F3;設結(jié)果的值存放在變量S中,則迭代公式為S=S+F3。
2.3 如何確定迭代次數(shù)呢?
2.3.1 使用 For語句
通過For語句的格式和執(zhí)行過程,我們可以知道For語句適用于循環(huán)體循環(huán)次數(shù)已知的問題。在解決這類問題時需要確定循環(huán)變量的初值、循環(huán)變量終值、步長和循環(huán)體。循環(huán)體包含了迭代公式,循環(huán)變量初值、循環(huán)變量終值、步長決定了循環(huán)體的執(zhí)行次數(shù),也就決定了迭代公式的迭代次數(shù)。在使用For語句編程過程中,如何確定循環(huán)變量初值、循環(huán)變量終值和步長呢?
方法一:把變化規(guī)律的第一項和最后一項(或當中的一部分)作為循環(huán)變量的初值和終值,再根據(jù)變化規(guī)律確定步長。
例 11:求 S=1+3+5+……+99。
分析一:設循環(huán)變量為I,初值和終值為1和99,步長為2。
分析二:數(shù)學模型可以寫成S=1×2-1+2×2-1+3×2-1+……+50×2-1,設循環(huán)變量為 I,則其初值和終值為1和50,步長為1。
方法二:把變化規(guī)律的項的總項數(shù)作為循環(huán)變量的初值和終值。(說明:假設總項數(shù)為10,循環(huán)變量的初值和終值可以為1和10或2和11或根據(jù)實際需要加以設定,步長為1。)
例 12:求 S=1+3+5+……+99。
分析:總項數(shù)為50,設循環(huán)變量為I,則其初值和終值為1和50,步長為1。
例13:從鍵盤輸入10個數(shù),求它們的和。
分析:從題目可知處理的數(shù)據(jù)項為10個,可以把它作為總項數(shù),設循環(huán)變量為 I,則其初值和終值為1和10,步長為1。
2.3.2 使用While語句
通過WHILE語句的格式和執(zhí)行過程可知,在使用WHILE語句解決迭代次數(shù)問題是通過〈條件表達式〉的結(jié)果來確定循環(huán)體的執(zhí)行數(shù)次。如何確定條件表達式呢?
方法一:設置一個循環(huán)次數(shù)控制變量,把第一項賦值給循環(huán)變量作為初值,后讓循環(huán)變量與最后一項進行比較建立條件表達式。
例 14:求 S=1+3+5+……+99。
分析:設置循環(huán)變量I,初值為1,則條件表達式為I<=99,循環(huán)控制變量的值改變的式子為I=I+2。
方法二:設置一個循環(huán)次數(shù)控制變量,并賦初值,后與總項數(shù)建立條件表達式,并且在循環(huán)體內(nèi)改變循環(huán)次數(shù)控制變量的值。
例 15:求 S=1+21+22+……+263。
分析:設置循環(huán)控制變量為I,初值為1(或0),總項數(shù)為64,則條件表達式為I<=64(或I<=63),循環(huán)控制變量的值改變的式子為I=I+1。
方法三;分析題目中的已知條件,把它作為條件表達式。
例:從鍵盤輸入若干個數(shù)直到輸入0為止,求它們的和。
分析;假設輸入的數(shù)存放在變量X中,則條件表達式為X<>0。
例16:求M,N兩個整數(shù)的最大公約數(shù)。
分析:求兩個整數(shù)的最大公約數(shù)的算法為:
①求M,N兩個整數(shù)相除的余數(shù)(設存放在變量R);
②若R不等于0,把N的值送給M,把R的值送給N,再求M,N相除的余數(shù)R;
③重復步驟②直到R等于0為止。
從上面的分析可知條件表達式為R<>0。
3.1 一般情況下,如果循環(huán)次已知,用For語句來實現(xiàn),程序結(jié)構(gòu)顯得緊湊而清晰
3.2 在前面所舉的例子中,同一題目所用有迭代變量有不同的初值,所用的迭代公式也有多種公式
初值不同,選用的迭代公式也可能不同,迭代次數(shù)也不同,循環(huán)體內(nèi)的語句順序也不同。因此在編寫迭代算法程序時,應處理好迭代變量初值、迭代公式和迭代次數(shù)之間的關(guān)系。
3.3 對于同一個問題,不同的學生考慮問題的角度不同,思維的方式不同,采用的解題方法也不相同
因此,教師在教學過程中,應培養(yǎng)學生從不同的角度觀察、分析、解決問題的能力,培養(yǎng)學生的創(chuàng)造性思維,發(fā)揮學生學習的積極主動性和學習興趣。
3.4 還應要求學生對一些常用算法要加以理解和熟記
總之,在迭代法教學中,只要我們能認真教研教材,分析解決問題的方法,總結(jié)迭代法的編程規(guī)律,就會使問題化難為易,從而使學生能盡快掌握迭代法編程這一重點、難點。
[1]賈長云,朱香衛(wèi).可視化編程應用:VISUAL BASIC[M].3版.高等教育出版社,2012.
[2]譚浩強,張基溫,唐永炎.C語言程序設計教程[M].2版.高等教育出版社,1992.