文章編號:1672-5913(2008)16-0055-02
摘要:傳統的C語言教學模式面臨越來越多的新問題,已經不適合當代教育的發展。本文從我校C語言程序設計教學情況入手,借鑒教育心理學的理論,對C語言程序設計課程的教學改革以及實踐情況進行了探討。
關鍵詞:C語言程序設計;教學模式;算法
中圖分類號:G642.0
文獻標識碼:B
1C語言教學中面臨的問題
(1) 學生對學習該門課程沒有明確的學習目的,沒有學習興趣。很多同學認為這門課就是介紹C語言的一些語法規則,對以后的學習、就業和發展沒有什么影響,所以不愿學。而且很多同學通過網絡了解到現在流行的程序開發語言是Java和C#,更覺得C語言沒有用處。
(2) 目前很多學校C語言課程的教學仍停留在傳統的模式上,過分注重語句、語法等細節的教授,學生學習C語言之后感覺只能實現一些簡單的程序,比如只能把一些數據存儲到數值中再輸出在屏幕上,或者更難點的使用結構體建立一個數據鏈表等。這些東西跟日常生活相距甚遠,學生不愿意學,這樣也就給后續的課程教學、畢業設計乃至畢業后參加工作帶來了隱患。
2C語言教學改革方案
2.1設定兩個階段的學習目標
第一階段,需要教師在上第一節課之前,設計好一個用純C語言開發的目標軟件,該軟件應該包括C語言程序設計的核心知識點。當然目標軟件需要根據學生的基礎而設定,例如一個簡單的學生管理系統,學生比較熟悉,也相對容易上手。該軟件可以在第一次課時進行展示,告訴同學通過課程學習和老師的幫助就可以實現該軟件,這樣可以增強學生的熱情,同時也可以介紹一下C軟件工程師的就業情況等。
第二階段,在課程學習之后組織一些學有余力的學生對學生管理系統加以改進使之能成為一個實用型的軟件。例如,學期結束每個班級都會進行綜合測評,而該測評工作量往往很大。測評時需要計算每個學生的綜合成績,而綜合成績又是由考試成績和實踐成績組成,同時要考慮一些加分情況。最后還要對綜合成績進行排名取一定比例分配獎學金,其中又有些特定的規則要考慮,例如一個同學盡管綜合成績很高,但是有門課掛科,按照學校規定也是不能進行獎學金評定。該軟件的設計較為復雜,這就需要教師把這個任務進行分解,從先易后難、先實現普通功能后實現特殊功能的角度出發,讓學生一步步完成該任務。每取得一個進步,要給予一定的鼓勵,同時可以選擇一些學習積極性很高,實踐能力強的同學擔當“項目經理”,促使這部分人盡快成長。我院074班鄭略略、戴媛等幾位同學就基本完成了該軟件的開發,并且榮獲了校軟件協會頒發的三等獎、中科企業獎學金等。
2.2合理選擇教材
建議有條件的學校選擇兩本教材,一本為國內流行的教學效果較好的教材,一本為國外經典教材的翻譯本。國內的教材較為精煉,但缺乏一個思考的過程。例如國內很多教材在介紹某個算法的時候只給出一個最優的算法,讓學生感覺自己完全不可能想出來,只能照樣子做下。而有些國外的教材知識鋪墊比較多,正好可以給學生一個由淺入深的接受過程。一本好的教材除了理論基礎,應還介紹一些實例算法的思考過程,以及經典的應用實例和練習,這樣才能充分激發學生的學習興趣。
例如比方在求解最大公約數的時候,很多國內教科書只給出一個經典的輾轉相除法算法,這是根據一個數學定理得到的求最大公約數的算法。大部分學生都不知道這個定理,但他們一般會從最大公約數的定義出發,即幾個數所公有的約數叫這幾個數的公約數,公約數中最大的一個叫做這幾個數的最大公約數。按照該理論可以寫出學生很容易理解的算法:
main()
{
int m,n,j;
clrscr();
printf(\"input n,m(n>0,m>0):\");
scanf(\"%d%d\",n,m);
j=(n<m)?n:m;
for(;j>0;j--)
{
if(n%j==0m%j==0)
break;
else
continue;
}
printf(\"max gys is:%d\\",j);
}
該程序的思想是,從兩個數中選出較小的那個整數,從它開始依次遞減(步長為1),直到某個數可以同時整除這兩個數,最先滿足條件的就是最大公約數。如果先按照學生的普遍思路出發講解這個簡單的程序實現方法,然后再講解經典算法,學生就會更有自信,興趣也會更濃。
2.3采用“2+1”授課方式
傳統的教學方式是老師滔滔不絕地講,學生規規矩矩地聽。課堂教學基本上是教師自我表演的天地,較少有學生參與的機會。以我院為例,從2007年開始采用C語言教學在實驗室進行的模式,三節課連堂,前兩節老師多媒體授課,后一節讓學生把老師講的例子調試和加以修改實現一些有實際意義的功能。
在前面兩節課中,要注意突出語言特色,充分運用形象思維講授函數、把握由淺入深、循序漸進的過程,把函數和指針作為重點和難點。教學中可盡量用一些通俗的比喻來說明一些抽象的概念。例如,在學生剛開始學習變量的時候,可以舉這樣一個例子,變量就相當于一個“碗”,
變量的值就相當于碗里面的東西。在講指針時,可以這樣舉例,對于\"地址\",它就相當于房間的門牌號,每個房間都有自己的號碼,在每個房間都住著人。這就像內存中的數據,它們都存放在內存單元中,內存單元就相當于房間,每個地址就相當于門牌號,里面所存放的數據就像是住的人。通過這些形象通俗的比喻,學生理解起來就容易了許多。
在后一節的實踐中,教師應該根據學生在前兩節學到的知識點把簡單學生管理系統進行功能分解,讓學生來實現相應的部分。對于少數與該管理系統聯系不是十分緊密的知識點,我們可以抓住學生愛玩游戲的特點,布置一些小的游戲任務讓學生實現,不同的學生可能有不同的實現方法,教師把典型的一些實現方法加以對比,讓學生來評價優劣,使學生知道未來程序改進的方向。
2.4抓住大學生“爭強好勝”的心理
學生大都希望別人能夠肯定自己,如果教師能利用這一點在學習上加以引導,會有較好的效果。例如,我院教師在教授C語言期間,常出一些問題給學生思考,并且鼓勵學生參與C語言程序設計競賽,對表現積極的學生經常加以表揚,發現此部分同學主動性更好,學的也更扎實。表1為我院072班課程考試結果,上課常積極思考并因此經常得到老師表揚的同學成績都是優秀。

3結束語
在“C語言程序設計”的教學中,應該充分抓住當代大學生的心理加以引導,以程序設計和課程設計為主,
通過教學方式的改變,激發學生的學習興趣,使學生不但掌握高級編程語言的知識和基本算法,更重要的是掌握程序設計的思想和方法,使其能靈活應用高級語言進行程序設計解決一些實際問題。
參考文獻:
[1] 劉曉鋒,吳亞娟. 計算機專業“C語言程序設計”教學與教學改革[J]. 四川師范學院學報,2004,24(l): 34-36.
[2] 方加娟.李紅彼. 多媒體輔助教學在C語言教學中的應用[J]. 計算機與建材. 2005,(32): 47-48.
[3] 張大均. 教育心理學[M]. 北京: 人民教育出版社,2004.