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