黃寶貞 張 琦 馮 瑤
文章編號:1672-5913(2009)02-0130-02
摘要:本文從C語言程序設(shè)計(jì)這門課程的特點(diǎn)出發(fā),結(jié)合應(yīng)用型本科院校的特點(diǎn)以及筆者的教學(xué)經(jīng)驗(yàn),對如何提高C程序設(shè)計(jì)課程教學(xué)效果給出幾點(diǎn)體會。
關(guān)鍵詞:應(yīng)用型本科院校;C語言;程序設(shè)計(jì);教學(xué)經(jīng)驗(yàn);教學(xué)效果
中圖分類號:G642
文獻(xiàn)標(biāo)識碼:B
C語言程序設(shè)計(jì)是計(jì)算機(jī)、通信、信計(jì)等相關(guān)專業(yè)的專業(yè)基礎(chǔ)課程,同時(shí)也是數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、嵌入式系統(tǒng)等計(jì)算機(jī)專業(yè)課程的前導(dǎo)課程。通過這門課程的學(xué)習(xí),可使學(xué)生獲得程序設(shè)計(jì)語言的知識,培養(yǎng)一定的軟件開發(fā)能力,還可鍛煉學(xué)生的邏輯思維能力,對學(xué)生綜合素質(zhì)的提高也具有一定的促進(jìn)作用。但是由于C語言牽涉到的概念比較復(fù)雜,規(guī)則繁多,使用靈活,容易出錯(cuò),不少初學(xué)者感到學(xué)習(xí)困難。如何提高此課程的教學(xué)效果呢?筆者經(jīng)過不懈的探索,結(jié)合筆者的教學(xué)經(jīng)驗(yàn),總結(jié)了如下體會。
1 注意方式方法,培養(yǎng)學(xué)生對程序設(shè)計(jì)語言的興趣
對于剛開始接觸C語言的同學(xué),一定要把C語言的用途講清楚。例如可用C語言編寫各種系統(tǒng)軟件(如Windows)和應(yīng)用軟件;還可以編寫一些小游戲;C語言是數(shù)據(jù)結(jié)構(gòu)等專業(yè)課的基礎(chǔ)等;使學(xué)生明白學(xué)習(xí)C語言的目的和目標(biāo)。
C語言的教材很多都是一開始就介紹一些程序代碼和函數(shù)使用規(guī)則,而學(xué)生對語法、函數(shù)一無所知。如果按照書本順序進(jìn)行講解,學(xué)生一開始理解起來很吃力,就失去了對C語言的學(xué)習(xí)興趣。為了使初學(xué)者能盡快地掌握,培養(yǎng)學(xué)生的學(xué)習(xí)興趣就成為關(guān)鍵。在課程講授過程中,不先講授比較煩人的定義和規(guī)則,而是從具體問題入手,努力把枯燥無味的“語言”講得生動、活潑。因此,筆者給學(xué)生找一些比較有意思的問題,如“水仙花數(shù)”、“兔子問題”、“哥德巴赫猜想”等,用算法語言來求解,培養(yǎng)學(xué)生的學(xué)習(xí)興趣,使學(xué)生體會程序設(shè)計(jì)的用途和一種全新的解決問題的方法。
在上機(jī)課時(shí),可以給出幾個(gè)簡單并有輸出結(jié)果的程序源代碼,讓學(xué)生編輯并上機(jī)調(diào)試。當(dāng)他們自己從鍵盤輸入的程序輸出結(jié)果的時(shí)候,學(xué)生對程序設(shè)計(jì)的興趣自然就產(chǎn)生了。在同學(xué)們自己輸入程序的過程中,肯定會出現(xiàn)這樣或那樣的錯(cuò)誤,比如沒有在行的末尾輸入分號;函數(shù)名字輸錯(cuò)了;括號少輸入半邊等錯(cuò)誤。針對這些錯(cuò)誤,再去講授語法,告訴學(xué)生在C語言中是有規(guī)定和規(guī)則去約束的。錯(cuò)誤的地方在C語言中是如何規(guī)定的,應(yīng)該如何去做。這樣子,學(xué)生們接受起來比較容易,記憶也比較深刻。
其次,還要借助于多媒體教學(xué)。多媒體輔助教學(xué)能夠化靜為動,寓教于樂,培養(yǎng)和激發(fā)學(xué)生的學(xué)習(xí)興趣,能將抽象的問題形象化,便于學(xué)生對知識點(diǎn)的理解和運(yùn)用,還能節(jié)約傳統(tǒng)的板書時(shí)間,使課堂講解時(shí)間相對增加,大課堂信息量。
2完善課堂教學(xué)
針對應(yīng)用型本科院校培養(yǎng)應(yīng)用型人才的特點(diǎn),必須調(diào)整新的教學(xué)思路。初步設(shè)計(jì)分三步走,首先要學(xué)好C語言的語法、規(guī)則這些基礎(chǔ)知識;其次,培養(yǎng)學(xué)生具有好的編程思想和方法;最后,通過安排課程設(shè)計(jì),學(xué)生可以獨(dú)立編寫一個(gè)軟件。
2.1學(xué)好基礎(chǔ)知識
講授C語言的基礎(chǔ)知識,最好是結(jié)合一些簡單小程序來逐一介紹C語言成分及語法使用規(guī)則。因?yàn)橐恍┥驳闹R點(diǎn)會使學(xué)生感到厭煩,一旦失去學(xué)習(xí)的興趣,就沒有學(xué)習(xí)的動力了,也就學(xué)習(xí)不好了。在教學(xué)過程中,針對C語言的特點(diǎn),要舉一反三,要有計(jì)算機(jī)的最終運(yùn)行結(jié)果。也就是說在上課的過程中,不要單純講授理論,要將程序引入到課堂上。比如講++i 和i++的區(qū)別:++i是先執(zhí)行i=i+1后,再使用i的值;而i++ 是先使用i 的值后,再執(zhí)行i=i+1。如:i=3,printf("%d",++i)輸出值為4;若用printf("%d”,i++),則輸出值為3。這個(gè)可以編寫一個(gè)程序,將運(yùn)行結(jié)果呈現(xiàn)給學(xué)生。在講解了這個(gè)例子后,再在這個(gè)基礎(chǔ)上適當(dāng)?shù)淖饕幌滦薷模茸屚瑢W(xué)們回答應(yīng)該是一個(gè)什么樣的結(jié)果,最后運(yùn)行程序把正確的結(jié)果呈現(xiàn)給大家。
2.2學(xué)好算法
語言只是程序設(shè)計(jì)的形式,而算法才是靈魂。沒有正確的算法,計(jì)算機(jī)解決不了任何問題,因此,要將分析算法作為教學(xué)重點(diǎn)。要引導(dǎo)學(xué)生實(shí)現(xiàn)從編寫簡單的小程序到靈活運(yùn)用C語言編程解決具有一定難度的實(shí)際問題的轉(zhuǎn)變。在教學(xué)過程中,結(jié)合實(shí)例由淺入深地介紹了一些典型的算法,如迭代、遞歸、貪心、回溯等方法,逐步提高學(xué)生良好的編程能力,培養(yǎng)學(xué)生良好的編程思想和編程風(fēng)格。有一些學(xué)生對C語言的語法和句式掌握得很好,但一面對具體問題就一片空白,不知如何運(yùn)用所學(xué)知識來解決,這就要求教師在講程序設(shè)計(jì)前要先介紹如何分析問題、設(shè)計(jì)算法并將算法正確表示出來。
例如利用函數(shù)調(diào)用來解決問題時(shí),很多學(xué)生不知怎樣來設(shè)計(jì)形式參數(shù)。教師在講解這部分的例題或習(xí)題時(shí)應(yīng)先引導(dǎo)學(xué)生回顧形式參數(shù)的作用——用于接收被調(diào)函數(shù)需要主調(diào)函數(shù)傳給它的數(shù)據(jù)。然后分析被調(diào)函數(shù)需要主調(diào)函數(shù)傳給它什么類型的數(shù)據(jù)有幾個(gè)。有的可通過全局變量傳遞,有的就需要通過實(shí)際參數(shù)傳給形式參數(shù),這樣就設(shè)計(jì)出了形式參數(shù)的數(shù)目和類型。
在講解解決某一個(gè)問題的算法時(shí),可將多種算法聯(lián)系起來分析,通過對一個(gè)問題提出多種解決方案,來開闊學(xué)生的思維,培養(yǎng)他們的編程技巧和方法。
兔子問題:有一對兔子,從出生后第3個(gè)月起每個(gè)月都生一對兔子,小兔子長到第三個(gè)月后每個(gè)月又生一對兔子,假如兔子都不死,問每個(gè)月的兔子總數(shù)為多少?
首先,這個(gè)問題可以使用循環(huán)結(jié)構(gòu)來完成:
#include
Void main( )
{
long f1,f2;
int i;
f1=f2=1;
for(i=1;i<=10;i++)
{
printf("%12ld %12ld",f1,f2);
if(i%2==0) printf(" ");/*控制輸出,每行四個(gè)*/
f1=f1+f2; /*前兩個(gè)月加起來賦值給第三個(gè)月*/
f2=f1+f2; /*前兩個(gè)月加起來賦值給第三個(gè)月*/
}
}
當(dāng)然,也可以使用遞歸算法來實(shí)現(xiàn):
#include
long fun(int n)
{
if (n==1) return 1;
if (n==2) return 1;
if (n>2)return fun(n-1)+fun(n-2);
}
void main( )
{ int i;
for(i=0;i<9;i++)
{
printf("%12ld",fun(i));
}
}
2.3課程設(shè)計(jì)
課程結(jié)束后,會安排C語言的課程設(shè)計(jì)。筆者會精心設(shè)計(jì)一些課題,題目均具有較強(qiáng)的應(yīng)用背景,如成績管理系統(tǒng)、商品管理系統(tǒng)、工資管理系統(tǒng)等,使學(xué)生能迅速適應(yīng)從開發(fā)小程序到開發(fā)大程序的轉(zhuǎn)變。要求學(xué)生經(jīng)過需求分析、軟件設(shè)計(jì)、編碼、測試等軟件開發(fā)的各階段,最后提交源代碼及有關(guān)文檔。實(shí)踐證明,在軟件開發(fā)的過程中,C語言的基礎(chǔ)知識更扎實(shí)了,同時(shí)提高學(xué)生的軟件開發(fā)水平。
3重視語言實(shí)踐環(huán)節(jié),注重上機(jī)實(shí)驗(yàn)指導(dǎo)
對一個(gè)年級的學(xué)生問卷調(diào)查顯示,在學(xué)程序設(shè)計(jì)和算法分析時(shí),學(xué)生的普遍反映就是看得清楚,聽得明白,遇到實(shí)際問題就無從下手,顯得很被動。究其原因,主要是沒對實(shí)驗(yàn)引起足夠的重視,導(dǎo)致動手能力差。在國外計(jì)算機(jī)課程中,實(shí)驗(yàn)占學(xué)生成績相當(dāng)大的比重,而在國內(nèi)除了極少數(shù)重點(diǎn)大學(xué)外,這方面做得非常差。
實(shí)驗(yàn)是C語言課堂教學(xué)的必要補(bǔ)充,課堂上難于理解的以及模糊的概念可以通過上機(jī)實(shí)驗(yàn)解決,因此應(yīng)該有針對性地布置一些實(shí)驗(yàn)練習(xí)。C語言程序設(shè)計(jì)上課與上機(jī)的學(xué)時(shí)安排比例應(yīng)該為1:1。在教學(xué)中,我們非常重視實(shí)驗(yàn)這一環(huán)節(jié),及時(shí)解答在實(shí)驗(yàn)中碰到的問題。
4結(jié)束語
針對當(dāng)前應(yīng)用型本科院校的教學(xué)特點(diǎn),并從教學(xué)實(shí)踐出發(fā),提出了一個(gè)新的教學(xué)思路供大家探討,使得理論與實(shí)踐相結(jié)合,再配以課程設(shè)計(jì),實(shí)踐證明,教學(xué)效果顯著。
參考文獻(xiàn)
[1] 彭秀芬,吳璞. 淺論C語言教學(xué)方法[J]. 計(jì)算機(jī)教育.
[2] 成紅勝. 應(yīng)用型本科院校C語言教學(xué)初探[J]. 林區(qū)教學(xué),2007,(2).
[3] 劉達(dá)明. 如何提高計(jì)算機(jī)專業(yè)的C語言教學(xué)質(zhì)量[J]. 計(jì)算機(jī)教育,2005,(8).