摘要:循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計中的三種基本結(jié)構(gòu)之一,也是程序設(shè)計的基礎(chǔ)。但是,對于初學者來說,循環(huán)結(jié)構(gòu)與人類日常的思維習慣不同,較難掌握。本文通過精講for循環(huán),推導出while、do-while循環(huán),該方法在日常授課中取得良好的效果。
關(guān)鍵詞:C語言;結(jié)構(gòu)化程序設(shè)計;循環(huán)結(jié)構(gòu);計算機課教學方法
循環(huán)語句是C語言程序設(shè)計課中的重點知識,是編輯程序的關(guān)鍵。筆者根據(jù)多年程序設(shè)計課程的教學實踐,針對循環(huán)語句的特點,通過提問式、啟發(fā)式教學方法,將問題層層剖析、層層深入,用簡單淺顯的語句講解循環(huán)語句,特別是在如何從for語句變形為while語句這一知識點的過渡方面體會深刻、總結(jié)獨特。該教學方法能夠啟發(fā)學生動用自己的思維,激發(fā)學生的潛能,并使其主動探索,該方法及選用的一連串的例子能夠引導學生自己去發(fā)現(xiàn)學習的樂趣。
1巧妙復習,引入正題
要使學生輕松容易地理解和掌握C語言中的循環(huán)結(jié)構(gòu)程序設(shè)計方法和技巧,教師必須在教學的所有環(huán)節(jié)上都進行認真研究和精心設(shè)計[1]。在循環(huán)結(jié)構(gòu)的第一節(jié)課,我們可以連續(xù)拋出幾個問題讓學生思考。“例如,問題1:打印一行十個星號,如何實現(xiàn)?問題2:打印兩行十個星號,如何實現(xiàn)?問題3:打印10行十個星號如何實現(xiàn)?問題4:打印100行十個星號如何實現(xiàn)?”對于前3個問題,學生都能快速解決,而第4個問題,學生如果還用以前的方法,語句至少需要100條。此時,如果教師指導學生用for循環(huán)實現(xiàn)的語句,同學們就可得到用3條語句代替這100 條語句的直觀印象。這樣做既能克服傳統(tǒng)復習枯燥乏味的缺點,也能抓住學生的好奇心,還能激發(fā)學生對新問題的求知欲。
2內(nèi)容講解過程
2.1for語句
在三種循環(huán)語句中,教師應(yīng)該先講哪個呢?筆者認為應(yīng)該先講for語句,因為for語句完全可以變形為while語句,while語句又能變形為do-while語句。所以當學生深刻理解了for語句后,自然能理解和掌握其他語句。for語句是循環(huán)控制結(jié)構(gòu)中使用最廣泛的一種循環(huán)控制語句,特別適合已知循環(huán)次數(shù)的情況。第一次講解循環(huán)實例要通俗易懂,力求循序漸進。如求1+2+3+…+100的值,并將其結(jié)果放在變量sum中[2]。引導數(shù)生用依次相加的方法求和,推導過程如以下代碼所示。
sum=0;
sum=sum+1;
sum=sum+2;
sum=sum+3;
……
sum=sum+100;
從這個推導過程中找出規(guī)律sum=sum+i,i的初值i=1,i的范圍i<=100,i每次變化步長。得出語句:for(i=1;i<=100;i++) sum=sum+i;從例子中引出for語句的一般形式。
2.1.1for語句的一般形式
for(表達式1;表達式2;表達式3)循環(huán)體語句。
for語句從結(jié)構(gòu)上很好地體現(xiàn)了循環(huán)控制應(yīng)注意的三個問題:1)循環(huán)的初始條件;2)循環(huán)條件;3)循環(huán)的步長[3]。
接著講解for語句中表達式的功能及常見形式。
表達式1:設(shè)計循環(huán)的初始條件,常為賦值表達式,給循環(huán)的控制變量賦初值;
表達式2:確定循環(huán)的條件,該表達式的值為邏輯量真或假,一般為關(guān)系表達式或邏輯表達式;
表達式3:循環(huán)的步長,一般為賦值表達式、自加或自減表達式。
語句:循環(huán)體,當有多條語句時,必須使用復合語句。
所以for語句的一般形式又可以變?yōu)椋?br/> for(賦值表達式;關(guān)系表達式;自加或自減表達式)循環(huán)體語句。
有了這種對表達式功能的認識,才能有此表達式確定的形式,這種形式的確定為下一步講解如何將for語句轉(zhuǎn)變成while語句做了最好的鋪墊。
2.1.2for循環(huán)的執(zhí)行過程
首先計算表達式1,然后計算表達式2,若表達式2的值為真,則執(zhí)行循環(huán)體;否則,退出for循環(huán),執(zhí)行for循環(huán)外的語句。如果執(zhí)行了循環(huán)體,則循環(huán)體每執(zhí)行一次,都計算表達式3,然后重新計算表達式2,依此循環(huán),直至表達式2的邏輯量值為假,退出循環(huán)。流程圖如圖1所示。
此處可以詳細講解剛才的實例,程序段如下所示。
for (i = 1; i <= 100; i++)
sum = sum + i;
即i=1;1<=100為真,sum=sum+1;前1項的和,執(zhí)行后i=2;
i=2;2<=100為真,sum=sum+2;前2項的和,執(zhí)行后i=3;
i=3;3<=100為真,sum=sum+3;前3項的和,執(zhí)行后i=4;
…
i=100;100<=100為真,sum=sum+100;前100項的和,執(zhí)行后i=101;
i=101;101<=100為假,循環(huán)終止。此時sum中的值即為所求前100項的和。
通過例子得出結(jié)論之后,教師要不失時機地再次設(shè)疑。在此處,教師可以讓學生思考和解決難度相同的問題,并由他們自己做出正確答案,以加深對循環(huán)語句的理解和認識。平行問題如下所示。
問題1:1-100內(nèi)所的奇數(shù)/偶數(shù)之和?
問題2:1-100內(nèi)所有為5倍數(shù)的數(shù)值之和?
問題3: 之和?
對于上述問題,教師只要稍加點撥,或經(jīng)學生互相討論,大多數(shù)同學都可以從表達式條件對執(zhí)行過程影響這一角度加以理解,并順利得出正確的程序。
這些問題解決之后,教師可以逐步加深問題的難度,提高問題如下所示。
問題4:鍵盤輸入10個學生的成績,輸出各成績和平均成績。
問題5:在兩行上分別按順序和逆序輸出26個英文大寫字母。
問題6:輸出斐波納契(Fibonacci)級數(shù)的前30項。
上述例子,可以使學生由感性認識上升到理性認識,在認識上產(chǎn)生了質(zhì)的飛躍。
2.1.3for語句的幾種格式
for語句的三個表達式都是可以省略的,但分號“;”絕對不能省略。還是以剛才的例子分別講解表達式1、表達式2和表達式3省略的情況。
1)for(;表達式2;表達式3) 循環(huán)體語句。
for語句執(zhí)行過程的第一步是執(zhí)行表達式1,我們可以將表達式1放到for循環(huán)的前面,這就形成了省略表達式1的情況。使用條件是:循環(huán)控制變量的初值是執(zhí)行在循環(huán)體前已經(jīng)賦值,如下面代碼:
i = 1;
for (;i<=100;i++)
sum = sum + i;
可以清楚地看到,在執(zhí)行循環(huán)前,循環(huán)控制變量的初值已經(jīng)被事先賦值了。執(zhí)行時,跳過求解“表達式1”這一步,其他的執(zhí)行步驟不變。
2)for(表達式1;;表達式3) 循環(huán)體語句。
表達式2省略時,循環(huán)條件默認為真,此時,循環(huán)體中一定要有一條語句能夠跑出循環(huán),否則就是一個死循環(huán)。為了以后避免出現(xiàn)死循環(huán),可以演示死循環(huán)的執(zhí)行過程,給學生留下深刻的印象。
3)for(;表達式2;) 循環(huán)體語句。
表達式3也可以省略,根據(jù)它的執(zhí)行順序可知,它是在執(zhí)行循環(huán)體語句后面執(zhí)行的,那么我們可以把“表達式3”放到循環(huán)體中所有語句的最后面,以保證循環(huán)能正常結(jié)束。如以上代碼可以變?yōu)槿缦滦问健?br/> i = 1;
for (; i <= 100;)
?。鹲um = sum + i;i++;}
特別要注意的是,如果循環(huán)體有多條語句,要用一對大括號括起所有語句,構(gòu)成復合語句。
這種形式就是也while 語句最為接近的形式。也可以從這里推導出while語句。
表達式1;
while(表達式2)
?。h(huán)體;表達式3;}
代碼形式變?yōu)椋?br/>
i=1;
while (i <= 10)
{sum = sum + i;i++;}
這時可以直觀地看出for語句與while語句的聯(lián)系。也可以說如果表達式1,表達式2,表達式3完全相同的話,while語句完全等同于for語句。
2.2while語句
有些問題用for語句不方便或解決不了時,可以用while語句。如問題:從鍵盤輸入若干個非0數(shù)據(jù),求它們的和?用0結(jié)束循環(huán)的執(zhí)行[2]。
while語句是當型循環(huán)語句,一般形式為:
while(表達式)語句;
其中while為語句的關(guān)鍵詞,表達式為循環(huán)條件,語句部分一般包括兩部分:循環(huán)體和步長,所以一般為多條語句構(gòu)成,應(yīng)使用復合語句,以符合語法規(guī)范的要求。
while語句的傳統(tǒng)流程圖如圖2所示,其特點是先判斷,后執(zhí)行,若條件不成立,有可能一次也不執(zhí)行。
在整個循環(huán)中,初始條件只在循環(huán)開始時執(zhí)行一次,以后進行的是循環(huán)條件、循環(huán)體和步長之間的循環(huán),一般初始條件以變量初始化或變量賦值語句的形式在循環(huán)語句之前已經(jīng)實現(xiàn),所以在while語句中沒有這一條件的體現(xiàn)。
在講解while語句時,教師可以將講解for語句的例子用while語句來實現(xiàn)一遍。從問題的求解中讓學生自己總結(jié)出兩者之間的區(qū)別。
2.3do-while語句
do-while和while很相似:while 先判斷表達式的值,后執(zhí)行循環(huán)體;do-while先執(zhí)行循環(huán)體,再判斷表達式[3]。它的一般形式為:
do
循環(huán)體
while(表達式);
其中語句通常為復合語句,基本組成同while語句。
do-while語句的流程圖如圖3所示,其基本特點是:先執(zhí)行后判斷,因此,循環(huán)體至少被執(zhí)行一次。
可以用do-while語句實現(xiàn)前一個例子,比較它們的異同。
3結(jié)語
“C語言程序設(shè)計”課程中循環(huán)結(jié)構(gòu)是重點也是難點,如何在課堂上激發(fā)學生學習的興趣,培養(yǎng)學生發(fā)現(xiàn)問題和解決問題的能力,充分發(fā)揮學生的潛能,這是每一位教師必須面對的問題。只有教師采用秩序漸近的教學方法,學生才能掌握規(guī)律、活學活用、舉一反三。在課堂上,充分發(fā)揮學生的主體作用和教師的主導作用,采用啟發(fā)式,并遵循循序漸進的教學原則,引導學生不斷設(shè)疑、析疑、解疑??傊?,教學是一個需要持續(xù)改進和完善的過程,我們將不斷總結(jié)課程教學的經(jīng)驗,使C語言教學邁向新的臺階。
參考文獻:
[1]