吳元斌
(重慶三峽學院計算機科學與工程學院,萬州 404000)
提高C語言初學者編程能力的幾點措施
吳元斌
(重慶三峽學院計算機科學與工程學院,萬州 404000)
如何提高C語言初學者的編程能力,是從事C語言教學的教師普遍重視且實現難度較大的教學目標。對如何提高C語言初學者編程能力進行探索,分析C語言初學者編程能力差的主要原因,提出提高初學者編程能力的四點具體方法與步驟,并進行詳細分析,這些方法能有效地提高學生編程能力。
C語言;初學者;編程能力;計算思維
C語言現在是許多高校新生的程序設計入門課程,面對程序設計及C語言的初學者,教師和學生雙方往往都付出了不少的精力,教師有心教,學生辛苦學,但往往教學效果并不令人滿意。比較突出的問題是學生的編程能力普遍較差,即使是平時學習很好的學生,遇到編寫程序,特別是規模較大的程序,往往無從下手。一部分學生看不懂教材中的示例程序,特別是復雜的程序,更不知道如何寫程序。
分析造成這種現狀的原因,包括:重視語法的學習,陷入學習C語言的語法及其細節的泥潭,閱讀分析程序少,缺少編程訓練,上機調試程序太少,等等。這些原因固然存在,可能還比較嚴重,筆者認為,學生不會編寫程序最重要的原因是缺乏程序設計的思維方式、方法,缺乏計算思維能力的培養。
因此,為了從根本上解決不會編程的問題,應加強計算思維能力的培養,讓學生學會程序設計的思維方式、方法,從而實現課程的教學目的。下文通過四個方面介紹了具體方法和步驟。
1.1 閱讀分析示例程序是基礎
教材中的示例程序(如:文獻[1])是面向問題的,不僅僅用來學習C語言的語法基礎,更重要的是用來教學生如何寫程序,用來介紹編程方法與思想。通過閱讀分析這些示例程序,應能夠起到舉一反三、觸類旁通的作用。
面對這樣的典型示例程序,最重要的是思考。不僅是學習變量定義、語句結構、函數組成等字面上的內容,更要分析程序的功能、編程方法,從“what to do”到“how to do”,分析其中的數據結構與算法,還要進一步分析其背后的計算思維方法。
程序最基本的任務是進行數據加工,基本結構為IPO。其中I代表Input,即數據輸入;P代表Process,即數據處理;O代表Output,即輸出計算結果。對于較復雜的任務,應強調任務抽象與分解的思想,即較大規模的計算任務分解成若干個規模較小且相對獨立的子任務,分別用單獨的函數實現,即模塊化。在函數實現中,采用結構化的程序設計思想,還包括遞歸函數的思想等。還要分析數據組織方法,如:數組、結構、共用體等。然后就是算法思想,如:遞歸、搜索、排序等。
1.2 大量編程實踐是根本
我們知道,學習一門新程序設計語言的唯一途徑就是使用它編寫程序[1]。“師傅領進門,學藝靠自身”[2],應鼓勵學生自己寫程序,從最簡單的程序開始,循序漸進,一步一個腳印,積少成多,積小勝為大勝,不斷取得新的進步。使學生學會基本的編程方法,具有基本的編程能力。
編寫程序的一個最基本方法是“臨摹”示例程序,課后作業應盡量與示例程序相關聯,不斷對示例程序的增強和完善。這樣完成編程練習時,就會去復習相關的示例程序,學習其中的編程方法,并用于自己的編程練習。
編程練習除了注意與示例程序的相關性外,還要注意其典型的、趣味性、實用性,學生往往對趣味程序、游戲程序感興趣,可以加強這方面的練習,如:九九乘法表、楊輝三角形、約瑟夫問題、Hanoi塔問題、哥德巴赫猜想等。
可以用多種方法實現同一個問題,如:用不同的語句實現,用if或switch,用do while、while或for;用不同的數據結構實現,如:數組或指針;用不同的算法實現等。通過一個問題多種實現,使學生感受到編程有很大的靈活性,不是死板硬套,激發了學生的計算思維能力和創新能力。
對于編程練習,開始可以是大量簡單問題,學生力所能及,經過努力可以完成;然后是一定量的較大規模問題。總之,編程練習一定要有量的積累,才能夠學會編程方法,功到自然成。
1.3 在調試程序中不斷進步
自己編寫的程序是否正確,最重要的方法是在C語言開發平臺上進行編輯、編譯、鏈接、運行和調試。對于初學者來說,一個友好的開發平臺是非常重要的,我們在教學中采用的是Eclipse+MinGW GCC。Eclipse環境能有效地提醒初學者在編輯過程中出現的語法錯誤,避免在編譯時才能發現的錯誤(有時編譯時錯誤多達數百個,讓初學者措手不及,失去調試成功的信心)。還可以通過快捷鍵Ctrl+Shift+F(或菜單Source-〉Format)格式化源程序,使源程序清晰易讀。另外,E-clipse環境Project Explorer列出了多個項目,在項目間切換方便,這對初學者帶來不少方便。
在Eclipse環境中,通過工具欄上的按鈕或“F11”便進行調試程序過程。調試程序時可以使用斷點、單步執行、Watch等工具來查看程序的運行狀態。通過調試程序,可以發現并糾正程序中的各種邏輯錯誤,培養學生嚴密的邏輯思維能力。
通過調試程序,會感受到模塊化、結構化編程的重要性,當一個程序所有的功能實現都放在main函數中,以至于main函數包括數百行時,調試起來是多么的困難。另外,較大規模的程序在一個源程序文件中實現也是不好的方式。
通常調試過程并不是一帆風順的,有時甚至很痛苦,但要耐心,應記錄出現的各種問題及其解決方法,不斷分析研究出現的各種問題,并解決問題,及時總結取得成功的經驗與失敗的教訓,才會感受到“山窮水復疑無路,柳暗花明又一村”,并堅持到調試成功,才能感受成功的喜悅,才會有暢快淋漓的感覺。
1.4 完成課程設計項目贏得自信
通過課程設計,可以提高學生問題分析能力、規劃設計能力和團隊合作精神等綜合能力,并進一步提升C語言的編程能力和程序調試能力,學習軟件工程的基本方法[3],實踐軟件工程過程。
課程設計項目最好選擇自己感興趣的問題,也可以由教師指定,如:打字練習程序、萬年歷程序、學生成績統計分析、迷宮問題、文件分類管理等。課程設計項目要按照軟件工程方法,學會分析問題,能對較大規模的復雜問題進行任務抽象與分解,并進行自頂向下的設計方法,逐步求精,完成模塊化設計。對于每一個子問題,要進行數據結構與算法設計,最后用C語言實現,應按照軟件工程方法,使程序具有良好的可讀性。然后進行模塊測試和調試、進行集成測試,最后完成項目報告。
課程設計項目大多數時間是在課外自主完成,需要團隊合作,不斷堅持,相互學習,共同探討問題并不斷解決問題,去追求團隊的成功及個人的成功。
培養和提高初學者的編程能力,是C語言教學工作成功的關鍵。對于如何提高初學者的編程能力,本文提出了四個基本步驟:①閱讀分析教材中的示例程序,這是基礎;②大量編程實踐,這是根本;③在調試程序中不斷進步,這是階梯;④完成好課程設計項目,可以極大地贏得自信。通過在實際的教學過程使用,這些方法能有效地提高學生編程能力,受到學生的歡迎。這些步驟中,學習計算思維方法是最重要的,我們應該“激發學生對計算機領域科學探索的興趣,傳播計算機科學的快樂、崇高和力量”[4]。
參考文獻:
[1] Brian W.Kernighan,Dennis M.Ritchie.C程序設計語言(第2版新版)[M].徐寶文,等譯.北京:機械工業出版社,2004
[2] Greg Perry,Dean Miller.C語言編程——零基礎初學者指南(第3版)[M].姜佑譯.北京:人民郵電出版社,2014
[3] B.A.Forouzan,R.F.Gilberg.C程序設計——軟件工程環境(原書第3版)[M].黃林鵬等譯.北京:機械工業出版社,2008
[4] 周以真.計算思維[J].中國計算機學會通訊,2007(3):77~79
Several Measures to Improve the Programming Ability of C Language Beginners
WU Yuan-bin
(Department of Computer Science and Engineering,Chongqing Three Gorges College,Wanzhou 404000)
How to improve the programming ability for the C language beginners are the teaching objectives of C language teachers,the objectives are importance and difficult to implement.Discusses how to improve the programming ability for C language beginners.Analyzes the main causes of the poor programming ability for C language beginners,and raises four specific methods and steps to improve programming ability for beginners,and analyzes the methods in detail,which can effectively the programming ability of students.
C Language;Beginners;Programming Ability;Computational Thinking
1007-1423(2015)01-0013-03
10.3969/j.issn.1007-1423.2015.01.003
吳元斌(1965-),男,本科,副教授,從事領域為大學計算機基礎教學與研究工作
2014-11-18
2014-12-08