摘 要: 針對C語言程序設計課程教學提出了案例式教學的可行性方案,并從多角度舉例說明了其在教學中的具體應用。該方案對培養和提高學生的編程能力、邏輯思維能力和創新能力能起到積極的作用。
關鍵詞: C語言程序設計; 案例式教學; 計算思維; 能力
中圖分類號:G642 文獻標志碼:A 文章編號:1006-8228(2013)01-55-02
Study and practice of case teaching of C language programming
Xiong Qijun, Ning Bin, Gu Qiong
(College of mathematics Computer Science Hubei University of Arts and Science, Xiangyang, Hubei 441053, China)
Abstract: A feasible project of case teaching is put forward for C language programming. Its application in teaching is illustrated from various aspects. The result shows that it plays a positive role in improving the students' programming ability, computational thinking ability and creative ability.
Key words: C language programming; case teaching; computational thinking; ability
0 引言
“C語言程序設計”課程是計算機及相關專業學生進入大學所學習的第一門專業基礎課程。教學實踐證明,該門課程對引領學生進入編程世界、掌握基本概念和原理、產生編程興趣和愛好、完成從傳統學科的思維方式向計算思維方式的轉變、培養編程意識、形成編程風格、提高編程能力等,起著決定性的作用。因此,加強對C語言程序設計課程的教學與研究至關重要。
我校自2008年提出“211”人才培養模式以來,對教學的研究與改革如火如荼,秉持理論夠用,重在實踐的原則,開展教學研究及實踐。針對C語言程序設計課程的教學,筆者曾提出了“四期六段教學模式”[1]、“多元教學模式”[2]等,有力地推動著教學的研究和改革。
1 案例教學法基本思想及特點
目前,案例教學被廣泛應用于醫學、法學和管理學等學科的教學之中。案例教學模式是一種互動式的教學方法,以案例分析為基礎,解決問題為主線, 教學內容圍繞案例的討論、分析逐步展開,通過對案例的剖析,激發學生的求知欲,調動學生的積極性,使學生主動地思考,讓學生充分討論并發表各自的見解,教師適時引導和評判,最后推導出結論[3]。案例是實現案例教學的前提和基礎,教學案例并不是簡單的舉例,不僅要求案例所涉及的知識點要豐富,并且要求案例具有針對性、系統性、可實踐性和啟發性。
由此可見,比起簡單的說教,將案例式教學引入程序設計語言的教學之中,可以起到示范、模仿、思考、啟發、應用、拓展的作用。
2 案例教學法在C語言教學中的應用
案例教學的一般過程是“提出案例-案例分析-要點講解-知識點導入-模仿-應用-拓展”。
2.1 通過案例上好第一次課
C語言教材的第一章是C語言概述,主要講述其發展歷史、特點、應用領域、程序結構、上機操作步驟等。在講授這部分內容時,不需要按部就班,因為計算機語言的發展歷史、特點是純文字的、抽象的、枯燥的,即使演講得天花亂墜,在現階段也是不能被學生所理解的,還可能讓學生產生厭惡、畏懼的情緒。
第一節課就通過案例直接切入主題:讓學生了解計算機解題的步驟、程序的基本組成和框架。
通過簡單的算術運算導入計算機如何解題。譬如計算圓的面積。先用口頭語言或文字進行描述:先需要給定圓周率、指定半徑;然后才是根據固定的計算公式進行計算;最后是顯示結果。這種一目了然的計算步驟,既展示了解題的算法,又體現了順序程序的基本結構,符合人的思維習慣,是容易被理解和接受的,在此基礎上,現場敲入代碼,添加頭文件、主函數,再進行編譯和運行。以這個實例為基礎,再去認識常量、變量、輸入輸出函數、主函數、語句等。這樣,圍繞一個簡單的例子,既演示了解題算法、也講述了程序的基本框架。上好第一節課,盡早將學生引入編程世界、盡早讓學生開始模仿編程、盡早讓學生建立程序框架的概念是可行的,也是必須的。
2.2 通過案例完成教學內容取舍和組合
以教材和教學內容為基礎,對教學內容進行適當的取舍和組合,起到降低難度、分散難點的作用。
⑴ 單純的語法教學向實用型教學轉變。C語言的語法規則繁多且復雜,初學者很難理解、記憶、明晰和掌握。在講述時可以化繁為簡,只講授最簡潔、常用的格式,且嵌入到實際的例子之中,而不是單獨去說教。譬如“輸入輸出的格式控制”,在教學中追求簡單和實用,暫時剔除復雜和靈活方面的內容。即化語法教學向實用化教學方向轉變。
⑵ 及早引入函數的概念和使用簡單的函數。將庫函數、自定義函數與數學上的函數進行類比,譬如“求平方根的函數sqrt”,明晰使用函數的原因和目標,再循序漸進地講述函數的名稱、參數和返回值等專業術語。
⑶ 及早引入指針和地址的概念。指針既是C語言的難點,也是其亮點,更是重點,及早建立指針和地址的概念和關系,了解指針最基本的用法,加強練習分散難點[4]。
⑷ 循環結構的程序設計是教學的重點和難點,必須列舉大量的案例,花大量的時間進行講授和練習。在講授和練習過程中,務必采用手工執行循環體的方式,寫下每次執行時循環變量、中間變量的結果,將循環體執行3到5次,循環體的功能自然能清晰明了。在這項技能掌握熟練之后,再講述單步跟蹤調試。學習過程中切忌“只動眼不動手”。攻克了循環結構,特別是多重循環這個難關,后續的函數、數組的教學就簡單多了。
2.3 通過案例逐步建立計算思維的思想
求和、乘積,是講述循環時的常例,求和時一般設置和的初值為0,乘積初值為1。必須將這個基本規律傳授給學生,并加以靈活使用。
計算機解題的算法雖然來源于數學,但更是數學知識應用的升華。
例如:如何將一個二進制數字串轉化成十進制數。可以這樣引入:一個5位十進制整數12048如何用數學式子表示?數學上可以這樣寫:1*104+2*103+0*102+4*101+8*100,這要進行多少次乘法和加法(禁止使用pow指數函數進行運算);如果寫成(((1*10+2)*10+0)*10+4)*10+8,需要進行多少次乘法和加法,誰的效率更高呢?由此再過渡到使用數組實現一個二進制數字串轉化成十進制數。
在這個案例中,并沒有高深的數學知識,只有思維的轉變。然而,形成計算思維是一個長期引導、積累、思索、實踐的過程,不能操之過急。
2.4 通過案例建立知識的關聯
求最值(最大值、最小值、次大值、次小值)的算法,從講授選擇結構時就可以開始灌輸和培養。從2個數、3個數求最值,到數組求最值,到選擇排序,都使用了這樣的思想——“將左手中握著的最值與右手中的一個個數進行比較、替換”,可見,知識之間存在強烈的內在聯系。早早地灌輸求最值的思想,為講授后續算法做鋪墊。
2.5 通過案例發現規律拓展應用
在講述循環結構的程序設計時,通過求1+2+3+…+n的值,可以過渡到求1+3+5+…的值,再過渡到求1-3+5-7+…的值,過渡到求1+(1+2)+(1+2+3)+…的值;從求1+1/2+1/3+…的值,過渡到求1+1/2+2/3+3/5+…的值……。通過舉例,讓學生學會觀察和分析,尋找項與項之間的關系和規律,學會觀察、思考、應用,最終達到舉一反三的效果。
2.6 通過精選案例收獲多重效果
精選案例,注重案例的實用性、趣味性、綜合性,能達到立竿見影、事半功倍的教學效果。
譬如:在講述關系運算、邏輯運算時,列舉的例子通常是簡單的關系運算或者關系運算的邏輯組合,雖然容易理解,但缺乏趣味性,難以引人入勝。我們可以引入一些推理題,如“誰做了好人好事”、“誰是罪犯”[5]。通過這樣的例子,既講授了基本的概念和原理,又列舉了知識的應用領域,極具實用性、趣味性、可引起學生的共鳴,自然能收到良好的教學效果。
3 培養能力綜合考核
為了提高學生對程序的編輯能力,必須要求熟練計算機基本操作技術。譬如:在實驗課上、在C語言的集成開發環境中,必須強調對Tab、Insert、Home、End等按鍵的功能和使用,因為它們能加快代碼編輯的速度和質量。
為了提高編程能力,必須增加課外學時,勤學苦練,將其與水滴石穿、冰凍三尺非一日之寒、點石成金進行類比,充分說明只有經歷大量的程序閱讀,編寫、調試練習,才能成就文如泉涌、火眼金睛。
為了真正檢驗學習效果,必須改變只憑一次考試決定該課程成績的做法。考試的次數要增加、考試形式要多樣化,可以是機考、筆試、單元測驗、答辯等,便于及時掌握教學效果,檢查、督促和改進。
4 結束語
教學實踐證明,采用案例教學,將抽象的概念、枯燥的語法、繁多的算法,轉化為一個個具體生動的實例,再加上學生多閱讀、多思考、多練習,就能夠很好地解決素質教學中倡導的“3W1H問題(what,where,why,how)”,使C語言程序設計課程達到良好的教學效果,從而使后續的程序設計類課程教學游刃有余。
參考文獻:
[1] 熊啟軍,袁磊,谷瓊.基于“四期六段”模式的C語言教學[J].現代計算機,2012.5:40-42
[2] 曹文平,熊啟軍.多元教學模式在C語言教學中的探索與實踐[J].教育理論與教學研究,2012.6:31-32
[3] 丁海燕,袁國武,周小兵,白孟堯.高級語言程序設計案例式教學模式的探討[J].計算機教育,2011.4:65
[4] 袁磊,李勇.程序設計基礎(C語言)[M].科學出版社,2008.
[5] 李文虎,徐明星編著.程序設計基礎(第3版)[M].清華大學出版社,2010.