摘要:C語言是高等院校計算機類專業教學的重要課程。該文結合近年來的教學實踐和教學體會,從教學內容組織、教學手段完善、教師水平提高等方面對C語言程序教學方法進行探討和總結,希望能對C語言程序設計教學有所幫助,旨在進一步提高C語言程序教學效果。
關鍵詞:C語言;程序設計; 教學方法; 教學體會
中圖分類號:G642文獻標識碼:A文章編號:1009-3044(2010)11-2690-02
Simply Discussing on C Language Programming Teaching Experience
ZHANG Yan-ming
(Key Lab of Network and Intelligent Information Processing, Hefei University, Hefei 230601, China)
Abstract: C language is a very important computer professional course in Colleges and Universities. Through the teaching practice and experience in recent years, from the teaching content organization, teaching means completion, teacher level improvement, etc. the C language teaching methods are summarized and discussed in this article, in order to be helpful to C language teaching and to improve the teaching effect.
Key words: C language; programming; teaching method; teaching experience
C語言程序設計是高等院校計算機專業的一門專業基礎課程,通常是作為高校學生學習程序設計的開端,同時也是數據結構、操作系統、編譯原理等計算機專業課程的前導課程。這門課程教學效果以及學生吸納效果的好壞,將直接影響到學生今后在計算機專業知識方面的學習興趣乃至計算應用能力和水平的提高程度[1]。
1 C語言程序設計教學方法
高校計算機基礎教育應當遵循的理念是面向應用需要、采用多種模式、啟發自主學習、重視實踐訓練[2]。作為一門十分靈活的程序設計開發語言,C語言教學有其較難學習的一面,加上現行教學過程中存在的一些弊端以及學生自身因素的原因,在學習中普遍存在著學生反映“比較難學”、“不會編程”的問題。這要求教師在計算機教學中,應不斷改變教育觀念,創造性組織教學內容,充分調動、挖掘學生的興趣和潛力,同時不斷完善自身的程序設計理論和開發實踐水平。現就本人近年在C程序設計方面的幾點教學心得,加以總結,僅供借鑒。
1.1 上好第一堂課
某種程度上,C語言的第一堂課看上去只是一堂基礎的理論背景課,但萬事開頭難,如何讓學生通過短短的時間迅速地對C語言有感性上的認識,并進而產生好奇心和興趣,絕不是一件輕而易舉的事情。筆者的第一堂C語言課通常會向學生教授以下幾個方面的內容:
1) C語言能做什么?這個問題可以首先從“程序設計語言能做什么?”引申而來。程序設計語言就像人類彼此交流和用以寫作的自然語言一樣,通過它們,我們可以編寫出能夠被計算機所理解和執行的計算機世界中的一篇篇“作品”或“文章”,即程序。比如大家上網用的瀏覽器,交流用的聊天軟件等等,都是程序設計語言之下的杰出作品。在此基礎上,再讓學生認識到,C語言是目前世界上使用最廣泛的計算機語言之一,學好C程序設計,今天坐在課堂上的學生,明天自己也可以成為自由駕馭程序設計語言的一個個“大作家”。
2) C語言的發展背景。這部分內容的傳授應該是充滿樂趣的,可以穿插一些C語言發展背景史上著名人物的逸聞趣事,讓學生在輕松的心態下進入下面的環節。
3) 編寫一個最簡單的C程序。C語言是實踐的語言,第一堂課就應該讓學生接觸到編程。通過最簡單的“打印Hello World”程序,忽略掉語法上的細節知識,讓學生迅速對編寫C簡單程序有感官上的直接認識。筆者的做法是在講解最后點名讓個別學生上教師機操作,模仿教師剛剛寫好的程序,在最后加上一條自己的打印語句,比如,可以打印出“我叫誰,我來自哪里”之類的輸出。當結果正確而神奇地顯示在輸出屏幕上時,臺上學生略帶興奮的表情,以及臺下學生躍躍欲試的神態,會向教師傳達出這樣一種信息:期待。學生在期待從這門課程中找到更多未知的新世界。
4) 如何學習C程序?第一堂C語言課的最后應該傳授給學生正確的C程序學習態度和方法。一個簡單的打印程序只是程序設計的冰山一角,要真正地學好程序設計,就像攀登高山,不付出艱辛無以到達峰巔。應該讓學生清醒地認識到,無論做什么事情,要做好它絕非一朝一夕,許多學生在遇到困難時半途而廢,因而錯過了山頂風景的壯觀。端正態度的同時,要注意學習方法:打好基礎,重視實踐。
1.2 講好C語言的基礎知識
C語言程序設計教學涉及到的數據類型、變量、運算符、表達式等基礎知識,對學生來說是邁入程序設計大門的第一步,這一步寧可邁得慢一些也要邁得堅實。沒有堅實的基礎知識,無從談及隨后的程序設計。
基礎知識的講解一般比較抽象,這要求教師必須生動教學,力求讓學生在腦海中建立起具象的認識。比如,筆者在講解“變量對應內存單元,變量必須先定義,再使用”時,通常是將變量類比成有一個個門牌號的賓館房間,房間住人,變量存數據。賓館房間住人前,必須要在前臺申請;同樣,變量存儲數據之前,必須要向系統申請,也就是“先定義”。
1.3 突出重點,鼓勵和引導自主學習
C語言程序設計課程知識點眾多,課堂教學的時間有限,教師的授課原則應該是讓學生抓住重點,突出程序設計的思路、算法和實現。語句只是表達工具,應重點講授一些最主要的東西,細節的內容引導學生課后自學,動手上機操作練習[3]。
抓住重點的首要條件是從教學內容的確定上下功夫,明確教授知識點。C語言作為絕大多數高校開設的第一門程序設計語言課程,最終目標應該是能夠讓大部分學生編寫出一些簡單的C程序[4]。針對這一目標,結合現行C語言的一些經典教材,筆者根據自己的教學經驗,明確教學的講授知識點和自學知識點。
講授知識點的范圍主要包括變量、數據類型和表達式,選擇結構(單分支、雙分支和多分支),循環結構(一重循環和多重循環)、數組(一維、二維),函數,結構體,指針等。自學知識點主要是在近期學生編程過程中用得相對較少、或者較難掌握以及在后續課程中會繼續涉及到的一些內容,比如多維數組應用、共用體、鏈表應用等。
C語言的學習具有很強的連貫性,往往某一個重要知識結構環節的掌握缺失,會極大影響后續的學習進度,進而對學習興趣產生嚴重的抑制抵消作用。這就要求教師對于講授知識點中的一些重點及難點內容,比如多重循環,遞歸、指針,教授過程中應特別耐心和仔細,盡量降低學生的畏難情緒,引領學習有困難的學生一步一步地走出泥沼。
在有限的課堂教學過程中,要注意鼓勵和引導學生的自主學習,為學生提供有價值的學習資源,包括優秀的書籍和視頻,經常勉勵學生在程序設計的道路上勇往直前。
1.4 強化實驗教學模式和效果
C語言程序設計的突出特點是它的實踐性,學生只有多動手,真正地編寫出能夠運行的程序,才會有成就感,進而對語言的興趣才能夠漸漸建立起來。為了培養學生的學習興趣,強化實驗教學效果,在實驗內容的安排上,筆者堅持理論教材、實驗教材和自擬題目相結合的方式,由易到難,并且根據學生個人實際情況,靈活分配實驗內容。
實驗教學的考核上,要求學生做到課前預習,對于重點的算法,應事先在預習稿紙上繪出流程圖。實驗課結束之前,隨機抽查學生的實驗結果,要求學生講解程序執行流程,并能夠針對教師對程序的改動進行現場調試和糾錯。實驗課結束之后,學生應認真編寫實驗報告,記錄實驗過程中的詳細信息。最終,一學期的全部實驗課結束時,對實驗進行單獨的實驗期末考核,從歷次實驗題目中隨機抽取,對所有同學分批次進行現場測試,現場打分。
1.5 建立師生之間良性的關系和互動模式
在教與學的過程中,師生之間的關系需要教師格外地注意,在嚴格與寬泛之間,應該找到很好的一個平衡點[5]。過于寬泛,容易放羊,過于嚴格,也未必可取?,F在高校的學生,已經逐漸進入90后,對待這個群體的學生,就更加要求教師在堅持嚴格教學之外,應時刻注意對學生特別是后進學生的關懷和鼓勵。
在近年的教學實踐中,筆者注意到,往往教師在課堂上對于某個學生的一個關注的眼神,或者課間一句關切的詢問,都有可能對該學生的學習動機和興趣產生積極而正面的影響。筆者在近年的C語言教學過程中,始終堅持對于所教授學生的姓名盡量了然在心,對于課堂教學過程中聽講精力不集中以及實驗過程中茫然失措的學生,注意課后的單獨談心和引導,時刻保持對這部分學生的關注,并在必要且合適的條件下,實施一定量的理論補課和實驗加課。結果證明,絕大多數的學生對于教師真正的關心都會有正面的反饋表現?!皼]有學不好的學生,只有教不好的教師”,這句看似不講道理的話語,其實恰恰反映出了深刻的教學道理。
1.6 完善教師的程序設計理論和開發實踐水平
目前,國內高校有許多教授程序設計語言的教師,本身的程序語言運用和軟件開發實踐能力有所欠缺。筆者認為,在有條件的情況下,教師應積極參與軟件項目開發,一方面可以不斷提升自己的實踐能力,一方面可以在程序設計語言更廣闊的層次和道路上給予學生正確的引導。同時,通過實際項目訓練,也能夠更好地結合教學理論知識點和實踐的聯系,具體教學。比如,在對學生講解C語言浮點數據類型的精度和有效范圍問題時,因計算機表達數據的精度和范圍有限,無法做到與真實數據完全一致,筆者就舉了自己曾經參與的一個煤質管理信息平臺系統的項目開發經歷為例。該系統涉及到大量對精度要求極高的數據的各種統計計算,而計算機最終運算出的結果和用戶傳統人工運算的結果卻有一定的誤差,用戶一開始對此不能夠理解,為什么計算機還沒有人工計算的精確?為此還頗費了一些周折跟用戶進行相關的耐心解釋。又比如,在向學生傳輸“養成良好的編程習慣”時,筆者以自己曾經參與過的另外一個日本外包項目為例,介紹國外的軟件公司在規范性方面往往非常重視,要求所有核心代碼的注釋必須完善、詳細而準確。真實項目的開發實踐經驗,即加深了筆者對于程序設計理論的深刻認識,同時也使得筆者在教授學生的過程中間往往能夠理論聯系實際??傊?,教師受益良多,學生也因此受益。
2 結論
C語言的教學過程中需要注意和總結的問題有很多,關鍵在于對教學內容(教什么)和教學方法(如何教)的合理組合,激發學生的學習熱情和興趣,以達到使得學生具備運用語言進行程序設計能力的教學目的[6]。以上是筆者近年來C語言教學中的一點教學心得與體會,實踐證明,取得了不錯的結果。只要教師在具體教學過程中,能夠與時俱進,采用得法的措施和手段,不斷豐富自己的教學和實踐經驗,相信一定能夠取得理想的成效。
參考文獻:
[1] 何欽銘,顏暉.C語言程序設計[M].北京:高等教育出版社,2008.
[2] 譚浩強.C程序設計[M].北京:清華大學出版社,2002.
[3] 蘇惠香.C語言程序設計教學方法探析[J].電腦知識與技術,2009,5(2):886-887.
[4] 項響琴.淺談程序設計語言C的教學改革[J].電腦知識與技術,2008,4(5):1166-1168.
[5] 韋純福,耿三靖.C程序設計課程教學效果探索[J].福建電腦,2007(3):213-214.
[6] 陳奮.提高C語言教學質量初探[J].廈門教學學院學報,2005,8(2):71-72.