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