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