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