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