王金社
【摘 要】《C語(yǔ)言程序設(shè)計(jì)》一直是計(jì)算機(jī)專業(yè)及相關(guān)專業(yè)的專業(yè)的基礎(chǔ)課。C語(yǔ)言是一門高級(jí)程序設(shè)計(jì)語(yǔ)言。為解決C 語(yǔ)言在教學(xué)中的重點(diǎn)和難點(diǎn),作者結(jié)合多年的教學(xué)經(jīng)驗(yàn), 從三個(gè)方面對(duì)教學(xué)方法的改進(jìn)進(jìn)行了討論, 以期提高教學(xué)效果。
【關(guān)鍵詞】C 語(yǔ)言 程序設(shè)計(jì) 教學(xué)方法
《C語(yǔ)言程序設(shè)計(jì)》是計(jì)算機(jī)各類專業(yè)的基礎(chǔ)課程。全國(guó)計(jì)算機(jī)等級(jí)考試、全國(guó)計(jì)算機(jī)應(yīng)用技術(shù)證書考試(NIT)和各學(xué)校組織的大學(xué)生計(jì)算機(jī)統(tǒng)一考試等都將C 語(yǔ)言列入了考試范圍。C語(yǔ)言是一門高級(jí)程序設(shè)計(jì)語(yǔ)言,學(xué)會(huì)運(yùn)用C 語(yǔ)言編寫程序解決實(shí)際問題,有利于提高學(xué)生的思維能力,同時(shí)對(duì)學(xué)習(xí)其他語(yǔ)言課程具有很大的幫助。由于醫(yī)學(xué)院校學(xué)生基礎(chǔ)較薄弱, 在學(xué)習(xí)中普遍認(rèn)為C 語(yǔ)言語(yǔ)法多, 枯燥難懂, 全部課程完成后, 感覺知識(shí)零亂, 只能看懂程序, 而不會(huì)編寫程序, 不會(huì)應(yīng)用C 語(yǔ)言解決實(shí)際問題。
在教學(xué)過程中教師應(yīng)將要講解問題盡量簡(jiǎn)單化, 使學(xué)生先了解語(yǔ)句的用途, 在此基礎(chǔ)上再去了解其相應(yīng)的規(guī)則。C語(yǔ)言初學(xué)者首先遇到的問題是毫無(wú)頭緒, 不知從何處下手。他們即使在課堂上認(rèn)真的聆聽了老師的講述或者是認(rèn)真的閱讀了書上的例子, 但在上機(jī)輸入這些程序后, 會(huì)出現(xiàn)各種各樣的問題。以往大多數(shù)同學(xué)在學(xué)完C 語(yǔ)言后, 普遍反映看得清程序的設(shè)計(jì)代碼意義, 但遇到實(shí)際問題就無(wú)從下手, 不知所措。這種情形將降低他們學(xué)習(xí)好C 語(yǔ)言的信心、學(xué)習(xí)興趣以及學(xué)習(xí)主動(dòng)性。事實(shí)上出現(xiàn)這種問題對(duì)于C 語(yǔ)言初學(xué)者來(lái)說(shuō)是很正常的。教師要做的是找到一種好的方法, 使學(xué)生在短暫的課堂學(xué)習(xí)時(shí)間內(nèi)對(duì)C 語(yǔ)言知識(shí)進(jìn)行積累, 使學(xué)生少出現(xiàn)這種問題。要做到這一點(diǎn), 就必須要求學(xué)生, 從小程序入手, 一步步的實(shí)踐和學(xué)習(xí)。
一、注意方式方法, 盡量提高學(xué)生的學(xué)習(xí)興趣
現(xiàn)在常用于實(shí)驗(yàn)教學(xué)的是Microsoft Visual C++6.0。該系統(tǒng)能夠指出程序中錯(cuò)誤的位置和類型, 這樣學(xué)生上機(jī)調(diào)試程序時(shí)就能發(fā)現(xiàn)并糾正語(yǔ)句錯(cuò)誤,解決了對(duì)TurboC不是很熟悉的同學(xué)操作不方便的問題?!禖語(yǔ)言程序設(shè)計(jì)》的特點(diǎn)是實(shí)踐性強(qiáng),對(duì)于醫(yī)學(xué)院校學(xué)生而言, 普遍存在學(xué)生抱怨程序設(shè)計(jì)太難、太深?yuàn)W、不好學(xué)、畏懼閱讀程序、編寫程序無(wú)從下手等問題。這是因?yàn)槊恳粋€(gè)C 語(yǔ)言程序必須經(jīng)歷算法設(shè)計(jì)、書寫程序、調(diào)試運(yùn)行的三個(gè)過程與其它有直觀操作和概念的課程相比較, 顯得比較抽象、復(fù)雜。因此, 針對(duì)學(xué)生的畏難情緒, 調(diào)動(dòng)學(xué)生學(xué)習(xí)的積極性, 要學(xué)會(huì)用學(xué)生生活中的小實(shí)例來(lái)結(jié)合C 語(yǔ)言教學(xué)。比如,銀行的存取款系統(tǒng)就是用C語(yǔ)言來(lái)實(shí)現(xiàn)的;在學(xué)校就餐時(shí)使用的磁卡收費(fèi)系統(tǒng)同樣也是用C語(yǔ)言編寫的;學(xué)生玩的網(wǎng)絡(luò)游戲也是用C語(yǔ)言來(lái)實(shí)現(xiàn)的。學(xué)好C 語(yǔ)言可以修改、編寫自己喜歡的游戲,于是他們明白了C 語(yǔ)言離我們很近,而且很有用。這樣,既可以培養(yǎng)學(xué)生學(xué)習(xí)的興趣,充分調(diào)動(dòng)他們學(xué)習(xí)的主動(dòng)性,也可以為C 語(yǔ)言一些章節(jié)的實(shí)例講解作好準(zhǔn)備。
二、啟發(fā)式教學(xué), 激起學(xué)生的編程熱情
誰(shuí)都愛聽故事, 但并非誰(shuí)都愛學(xué)編程, 那些抽象的概念和復(fù)雜的算法常把學(xué)生搞得痛苦不堪。因此, 把愛聽的故事和不愛學(xué)的程序結(jié)合起來(lái)就是教學(xué)的一大特色。學(xué)生聽到的是一段故事、一個(gè)比喻、一則笑話, 記下的是故事所含的概念和算法。例如,講解交換兩個(gè)變量的值的時(shí),為了啟發(fā)學(xué)生理解該算法,我引入兒時(shí)幫媽媽打醬油的故事。假如媽媽讓我們把油瓶子和醋瓶子調(diào)換過來(lái), 該怎么做呢? 先拿出個(gè)空瓶子, 把醬油倒在空瓶子里, 然后把醋倒在已經(jīng)空了的醬油瓶子里,最后,將醬油倒入醋瓶子。設(shè)有兩個(gè)瓶子a和b,分別盛放醬油和醋,要求將它們互換。因此,引入中間變量c, 代表空瓶子。
#include
main()
{int a,b,c;
scanf(“%d %d”,&a,&b);
printf(“a=%d,b=%d\n”,a,b);
c=a; a=b; c=b;
printf(“a=%d,b=%d\n”,a,b);}
程序輸入:22 33
程序輸出結(jié)果為:
a=22,b=33
a=33,b=22
程序?qū)W會(huì)了, 大家對(duì)學(xué)習(xí)編程也產(chǎn)生濃厚的興趣, 取得很好的教學(xué)效果。同時(shí),乘熱打鐵,要求學(xué)生獨(dú)立完成類似的程序,學(xué)思結(jié)合,學(xué)思并重。例如,寫一個(gè)程序判斷某年是不是閏年。什么是閏年? 中文說(shuō)每四年一閏,但每一百年不閏;并且還要每四百年一閏。這樣的表達(dá)式要寫成程序有些費(fèi)勁, 如果用英文表達(dá),閏年的標(biāo)準(zhǔn)是滿足兩種情況之一:如果( if) 它能被4 整除, 并且(&&) 不能被100 整除;或者( ||) 能被400 整除。什么是整除? 就是余數(shù)(mod==0) 為零。我們知道其英文表達(dá)方式, 很容易寫出下列程序:
#include
main()
{int year;
scanf(“%d”,&year);
if(year%4==0&&year%100! =0||year%400==0)
printf(“%d is a leap year”,year);
else
printf(“%d is not a leap year”,year);}
C 語(yǔ)言課程中的知識(shí)點(diǎn)大都是比較枯燥的, 所以老師在授課時(shí),應(yīng)該把枯燥無(wú)味的知識(shí)點(diǎn)和我們?nèi)粘I钪械睦勇?lián)系起來(lái), 這樣學(xué)生理解起來(lái)容易,老師講授起來(lái)也輕松。比如,老師在講授指針的概念的時(shí)候, 這一章節(jié)是C 語(yǔ)言中的難點(diǎn), 如果老師就按課本上知識(shí)點(diǎn)講,很多學(xué)生都被講蒙了。這個(gè)時(shí)候可以引入我們?nèi)粘I钪袑W(xué)生宿舍的例子,假如我們要找張三,來(lái)到101 房間,里面存放著一張紙條“104 房間”,這樣我們可以到104 房間找到張三,101 房間存放的是張三所在房間的號(hào)碼(地址),可以間接通過101 房間找到張三?;蛘?,如果我們知道張三104房間的,可以直接到104 房間找到人。這樣,就可以比較形象的給同學(xué)講清楚指針的概念,讓同學(xué)理解起來(lái)更容易。另外,課堂上老師授課時(shí),還應(yīng)注意循序漸進(jìn)的授課思路,不能認(rèn)為講的程序越難學(xué)生學(xué)起來(lái)越有興趣,如果上來(lái)就講太難的程序,很多同學(xué)直接就不想接著往下聽了,很容易打擊同學(xué)的學(xué)習(xí)積極性。在C 語(yǔ)言教學(xué)中, 雙重循環(huán)和函數(shù)調(diào)用是難點(diǎn), 所以這兩個(gè)知識(shí)點(diǎn)老師應(yīng)該精講、細(xì)講。在講解雙重循環(huán)時(shí), 很多書上會(huì)有菱形星號(hào)的輸出圖形的題目,這個(gè)時(shí)候,老師可以先給學(xué)生講正方形的星號(hào)圖形如何輸出,再看直角三角形星號(hào)圖形輸出,再看等腰三角形星號(hào)圖形輸出,這樣菱形星號(hào)圖形輸出就可以讓同學(xué)課下自己去實(shí)現(xiàn)了。
在函數(shù)調(diào)用時(shí),要給學(xué)生講清楚形參和實(shí)參的區(qū)別,后面講了指針后,回顧前面講的傳值調(diào)用,根據(jù)指針存儲(chǔ)地址的特點(diǎn),再講授函數(shù)傳地址調(diào)用。
三、鼓勵(lì)學(xué)生經(jīng)常上機(jī),提高學(xué)生動(dòng)手實(shí)踐能力
學(xué)習(xí)計(jì)算機(jī)語(yǔ)言必須將理論與實(shí)踐相結(jié)合, 學(xué)好程序的關(guān)鍵是動(dòng)手與動(dòng)腦編寫程序,親自上機(jī)調(diào)試程序是提高編程能力的捷徑。針對(duì)初學(xué)者上機(jī)編程常會(huì)出現(xiàn)錯(cuò)誤而不會(huì)調(diào)試的特點(diǎn),教師在講解程序時(shí),可以運(yùn)用多媒體教室或計(jì)算機(jī)網(wǎng)絡(luò)教室向?qū)W生演示程序從編輯、編譯、鏈接到運(yùn)行的全過程, 對(duì)常見的錯(cuò)誤進(jìn)行調(diào)試改錯(cuò),讓學(xué)生對(duì)程序設(shè)計(jì)有一個(gè)直觀的了解,同時(shí)學(xué)會(huì)一些程序改錯(cuò)與調(diào)試的基本方法。在教學(xué)過程中,選擇例題應(yīng)注意由易到難,逐步深入,結(jié)合實(shí)際,融會(huì)貫通。課堂教學(xué)是傳授知識(shí)的重要途徑,因而,動(dòng)手能力的培養(yǎng)更不容忽視。
對(duì)于計(jì)算機(jī)課程來(lái)說(shuō),動(dòng)手能力的培養(yǎng)就是上機(jī)實(shí)踐。在C 語(yǔ)言的教學(xué)過程中,上機(jī)實(shí)踐這一環(huán)節(jié)是特別重要的。首先,它是消化課堂教學(xué)內(nèi)容的最好途徑,能將所學(xué)的知識(shí)有效織起來(lái);其次,能提高學(xué)生分析問題和解決問題的能力,培養(yǎng)程序和調(diào)試程序的能力。因此,C 語(yǔ)言的上機(jī)實(shí)踐是必不可少的。對(duì)于C 語(yǔ)言上機(jī)實(shí)驗(yàn)課,可采用兩種方法, 上機(jī)調(diào)試和現(xiàn)場(chǎng)編程。一是老師在講授完理論課后就給同學(xué)布置上機(jī)題目,讓學(xué)生在課下自己編寫, 上課時(shí)把自己課下編寫的程序調(diào)試運(yùn)行。二是如果大多數(shù)學(xué)生都能順利運(yùn)行,老師現(xiàn)場(chǎng)布置和本次課密切相關(guān)的程序,讓學(xué)生現(xiàn)場(chǎng)自己編,這樣可以提高一些程度好的同學(xué)的學(xué)習(xí)積極性,同時(shí)程度差的同學(xué)調(diào)試成功老師提前布置好的作業(yè),也有成就感。另外,在上機(jī)時(shí)要督促學(xué)生在上課時(shí)間內(nèi)完成任務(wù)。當(dāng)學(xué)生碰到問題時(shí),不立即解答,而是進(jìn)行提示。先讓其思考、分析后再回答學(xué)生。前期實(shí)驗(yàn)時(shí),解決學(xué)生的基本語(yǔ)法問題,后期則只解決算法問題,不解決語(yǔ)法問題。這樣,可以讓學(xué)生自己找簡(jiǎn)單語(yǔ)法問題,自己解決不了的向其他學(xué)生求教。這樣,可以給學(xué)生一定的壓力,避免有的學(xué)生不自己思考,有問題就問,到了學(xué)期結(jié)束,連最簡(jiǎn)單的語(yǔ)法錯(cuò)誤自己都解決不了(并不是不懂,而是學(xué)習(xí)態(tài)度問題)。這樣,也可以讓一部分同學(xué)在幫同學(xué)解決問題的同時(shí),自己又加深對(duì)知識(shí)點(diǎn)的理解。實(shí)驗(yàn)結(jié)束后, 要求寫好實(shí)驗(yàn)報(bào)告, 寫好小結(jié)。自我分析上機(jī)出現(xiàn)的問題和解決的方法, 通過本次上機(jī)學(xué)到了哪些知識(shí), 又有哪些不足。這樣,即可以鍛煉學(xué)生的表達(dá)能力,又可以讓學(xué)生課下對(duì)上課所學(xué)知識(shí)有一個(gè)清晰的回顧,有一個(gè)思考的過程。
以上是筆者結(jié)合多年教學(xué)的一點(diǎn)經(jīng)驗(yàn)體會(huì),實(shí)際上在教學(xué)過程中應(yīng)注意的問題還有很多。一個(gè)《C程序設(shè)計(jì)》教師要想成功,其關(guān)鍵就在于對(duì)教學(xué)內(nèi)容(教什么)和教學(xué)方法(如何教)進(jìn)行合理的組合。但是,現(xiàn)實(shí)中由于教學(xué)目的、教學(xué)內(nèi)容及學(xué)生情況等因素的千差萬(wàn)別,沒有哪一種教學(xué)模式或方法是普遍適用的,惟一的原則就是根據(jù)實(shí)際情況采用合適的教學(xué)模式和教學(xué)方法。
參考文獻(xiàn):
[1]譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社,1999.
[2]譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)上機(jī)輔導(dǎo)[M].北京:清華大學(xué)出版社,1999.