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