趙衛績,劉井蓮,樊守芳
(綏化學院 計算機學院, 黑龍江 綏化 152061)
對于任何一種計算機程序設計語言來說,程序設計的基本結構不外乎三種,即順序結構、選擇結構、循環結構.而循環結構是三種程序設計結構中最復雜、最重要的結構,在后續的學習中,幾乎所有的程序都要用到循環結構,如果不會循環結構,無法繼續學習數組、指針和函數以及C++、Java等后續課程,更談不上參加國際大學生程序設計競賽ICPC.因此,循環教學應該是C語言教學的關鍵任務.目前,關于C語言循環結構的教學方法及相關教學研究得到了較多關注[1-4],并提出了很多好的教學方法.很多地方性本科院校合作辦學學生的C語言循環教學效果并不是很理想,很多學生不能靈活地進行循環程序設計.基于此,本文在深入研究C語言循環結構程序設計教學方法的基礎上,結合我校學生初學C語言學習情況,提出在C語言循環結構教學中引入實例教學法,使學生很快進入到C語言程序設計中來,為C語言中后續知識點的學習奠定堅實的基礎.
循環思想的導入主要圍繞兩個問題展開,什么是循環,為什么引入循環.首先,從具體實例出發,引入循環思想,使學生從實際問題中進入到循環思想中來.例如:
(1)全校共有100個班級,計算每個班級的各科平均成績.
(2)檢查100個學生的成績是否及格.
(3)計算100個學生的成績之和.
對這3個具體實例,如果使用順序結構程序設計,工作量大、程序冗長、重復、難以閱讀和維護.而在C語言中,循環語句正可以很好解決此類問題.
傳統的C語言循環教學法多以講授為主,注重理論知識的傳授,忽略實際操作技能的培養,造成理論與實踐脫節,致使學生的學習效果很不理想,嚴重影響了學生學習的主動性.鑒于此種情況,本文引入實例教學法,通過具體實例分散地介紹語法難點,避免了學生因為感覺枯燥和畏難而產生的厭學情緒.由于在循環程序設計教學實踐中以實例為授課重點.因此,精選實例是這一教學實踐的關鍵所在,這樣一來所選擇的實例必須是典型的,能突出重點和難點的,同時還必須具有針對性,即針對學生的接受能力來選擇.這樣才能達到良好地教學互動效果,有效增進學生的學習興趣和動力,調動學生參與學習的積極性.
循環結構程序設計主要圍繞四個要素和三個語句展開,四要素包括循環初始條件,循環條件判斷,循環體,循環條件變量的修正.三個語句為:for、do-while和while語句.其中for語句的應用比較普遍,while語句的應用相對更為廣泛,而do-while語句一般應用于特定場合.因此重點講解while語句.
實例教學法的關鍵在于精心選擇實例,選擇實例的目的是為了把抽象的理論轉化到具體實例中.具體如下:
例1 計算1+2+3+…+100的值.
數學中算式求和的方法是先進行化簡,然后求和.在c語言中卻要簡單的多,教學設計的重點就是確定循環體,即總結出算式的通式,然后采用循環結構來實現求和.首先確定一個保存結果的變量s,設定s的初始值,然后將1、2、…、100逐一累加到s變量中,具體程序如下:
s=0;
s=s+1;
s=s+2;
…
s=s+100;
由于往s上累加的1、2、…、100是逐個增加1.因此,可以將1設定為i,將i累加到s變量中,然后i逐步累加1,推理如下:
s=0; i=1;
s=s+i; i++;
s=s+i; i++;
… …
s=s+i; i++;
由此可以看出,s=s+i; i++;這兩條語句重復執行100次,因此需要使用循環.算法分析如下:
初始條件為s=0; i=1;重復執行語句為s=s+i;循環變量修正語句為i++;循環執行次數為100次,即循環執行條件判斷為i<=100.
如果使用while循環,則該題算法為:
s=0; i=1
while(i<=100)
{
s=s+i;
i++;
}
該題算法也可轉為do-while循環或for循環.具體程序如下:
do- while循環:
s=0;
while(i<=100)
{
s=s+i;
i++;
}
for循環:
s=0;
for(i=1;i<=100; i++)
s=s+i;
通過實例1 的三個循環算法,我們可以發現,它們的循環思想其實是一致的,只是表現形式不同.為了使學生更好地理解循環程序設計思想和求和類型算法,還需要精選幾個典型實例講解.
例2 計算n!.
由于n!=1*2*3*…*n,從中不難看出該題與實例1本質上一致,不同點在于該題是計算數的乘積,因而只需把實例1中保存結果的變量s=0改為s=1,循環體中的s=s+i改為s=s*i即可.具體算法如下:
循環初始條件:s=0; i=1;
循環條件判斷:while(i<=n)
{
循環體:s=s+i;
循環變量修正:i++;
}
例3 計算1!+2!+…+n!.
從題意可以看出,為了完成它的計算既需要計算數的階層,還需要計算階層的和,其實該題本質上是例1和例2的綜合.因此,計算該題需要設定一個保存階層中間結果的變量f和和變量s.具體算法為:
循環初始條件:s=0;f=1; i=1;
循環條件判斷:while(i<=n)
{
循環體:f=f*i;s=s+i;
循環變量修正:i++;
}
例4 計算1,1,2,3,5,8,13,…的前20項和.
該題的解題思想類似于例3和例4,屬于復雜累加算法,累加前,首先需要計算出被累加項.通過觀察可以發現,本題所給數列在給出的這些項中從第三項開始,后一項總是它前兩項的和.具體算法如下:
循環初始條件:a=1;b=1;s=a+b;i=3;
循環條件判斷:while(i<=20)
{
循環體:t=a;a=b;b=t+b;s=s+b;
循環變量修正:i++;
}
引入該題有兩方面好處,一方面可以強化復雜累加類型計算問題的循環思想.另一方面可以強調該類問題學生容易出錯的地方.比如在該題編程時容易誤將被累加項b值按b=a+b計算,然后累加b.其實這里的a值已經更新為原來的b,所以b值不再是前兩項的和,而是2*b.
以我校合作辦學學生為教學對象,在循環結構程序設計中引入實例教學法,充分調動了學生參與學習的積極性,因而取得了良好的教學效果,但要使學生在程序設計時進一步深入,還需要針對我們的教學對象,進一步改進教學方法和教學手段,同時很好地學習C++、Visual C++、Java和數據結構等后續課程,逐漸形成合理、標準的課程體系、實例體系,只有這樣,才能有效解決我校合作辦學學生動手編程能力弱的根本問題.
參考文獻:
[1]高枚,楊志強,許蘭蘭,龔沛曾.C/C++教學改革的探索與實踐[J].計算機時代,2005(11):8-10.
[2]王鴻磊,張雪松.程序設計基礎教與學的新模式[J].計算機教育,2006(11):53-54.
[3]施雷,陳衛衛.C語言中循環結構教學方法探討[C]//2009全國計算機網絡與通信學術會議論文集.北京:中國電子商情雜志社:301-305.
[4]劉冬暉,劉智濤.案例教學法在C語言教學中的研究與實踐[J].電腦知識與技術,2008(03):497-498.