◎林彬
C語言教學中存在問題
◎林彬
C語言課程是理工科學生的一門重要的基礎課程。本文針對C語言教學中存在的課程學時不足、學生的算法設計和上機編程能力薄弱等問題展開探討,提出了相應的改革措施和建議。在實際的教學過程中,這些舉措能有效地幫助學生更好地掌握程序設計方法,提高學生的編程能力,更好地達成教學目的。
C語言是最重要和最流行的編程語言之一,無論在中國還是在世界各國,“C語言程序設計”始終是高等院校的一門最基本的計算機類基礎課程。雖然在過去的十余年中,許多人從C轉而使用更強大的C++語言,但C仍然有其自身的優勢,而且它還是通往C++的必由之路[1]。
作為面向過程的程序設計語言的代表,C語言是一門非常好的教學語言。通過學習C語言,學生可以掌握自頂向下、逐步細化的結構化編程方式,以及模塊化的設計,這一點是至關重要的。可以毫不夸張地說,學不好C語言課程,也就難以學習理解后續的“面向對象程序設計”、“數據結構”等一系列計算機類相關課程的內容。因此,理工科相關專業學生必須掌握使用C語言進行程序設計的基本知識和技能,為進一步學習與應用計算機打下堅實的基礎。
在C語言教學過程中,學生普遍認為C語言概念復雜、語法細節繁瑣,解題常常沒有思路,一上機寫程序就出錯,出錯了也不知問題所在。結合近幾年的教學經驗,筆者歸納出當前C語言教學中存在如下幾個方面的問題。
課程設置缺乏科學性。C語言課程主要包括順序、選擇、循環結構程序設計,數組、指針、結構體等數據類型,函數的調用,以及文件操作等內容。總的來說,內容相對繁多,細節較為繁瑣。且對于初學者來說,數組、指針類型的使用等內容概念復雜(尤其是指針),理解比較困難。筆者認為,合理的課時安排應為64學時。在實際情況中,考慮到C語言課程作為計算機類課程的主要先修課程,往往設置在本科一年級。而同時進行的還有數學、英語等重要的基礎課程,也需要占據大量的課時。所以,對于本科一年級學生的教學計劃和課時安排往往是非常緊湊的,部分高校對于C語言課程的設置僅為48學時。由于理論學時和上機學時不充足,教學效果自然也就難以得到保障。
如何在學時不足的情況下達到教學目的,這就要求教師改進教學方法,運用現代化的教學手段,注重自身業務素質的提高,切實提高教學效率和教學質量[2]。教師應充分備課并明確教學重點及教學難點,在課堂上主要介紹編程思路和怎樣用C語言去實現算法,不要孤立地逐一介紹語法的細節,對于一些非教學重點內容(諸如運算符的優先級等知識點),應引導學生自學完成。因此,有必要對授課計劃精心組織,本著強化算法、弱化語言的原則,即把解題思路、方法、步驟當做授課的重點,培養學生分析與解決實際問題的能力。
學生的算法設計能力薄弱。編寫一個C程序,首先需要設計算法,然后再考慮適合的數據結構,并用C語言將算法實現。程序的靈魂是算法,而算法的設計是靈活且富有技巧的,需要學生主動思考,這對于初學C語言的學生來說極具挑戰。
教學過程中,應改變傳統灌輸式教學模式,轉而采用問題啟發式教學,活躍學生思維,引導學生積極思考,而不是被動地接受和理解課本中的算法步驟。應遵循以下四個步驟來解決問題:一是分析問題,明確要做什么;二是給出求解問題的算法流程圖;三是根據流程圖編寫程序代碼,四是運行程序,輸出最終結果[3]。值得注意的是,流程圖對于算法的分析與表示至關重要,教學中必須要求學生看得懂流程圖、會畫流程圖,并且根據流程圖能夠順暢地寫出程序代碼。對于遞推、遞歸、窮舉等基本方法,及常用的查找、排序等算法,應讓學生有所了解并適當記憶。
學生的上機編程水平亟待提高。學生的上機編程能力普遍不能令人滿意,遇到編寫程序(尤其是規模稍大一些的程序),往往無從下手[4]。一些學生學習完C語言課程,仍然停留在只會照抄或記憶課本中程序的水平,抑或自己寫的寥寥幾行代碼,根本不考慮編程規范,編譯報錯看不懂英文提示信息,運行出錯也不懂得如何打斷點調試程序。這樣的情形是非常常見的。
教師在給學生講解示例程序時,應重點指出關鍵之處,以及容易出錯的地方,要求學生通過自己上機實踐來理解程序設計方法[5]。對于常見的編譯時錯誤,可以做一次歸納講解,但應注意培養學生根據錯誤提示信息獨立分析錯誤的能力;對于運行時錯誤,教師應演示并詳細講如何打斷點、跳斷點、單步執行等常用的調試步驟,必須要求學生掌握程序的調試方法。殊不知,編程水平就是在不斷的調試程序、修改錯誤的過程中潛移默化地不斷提高。
此外,筆者由于在從教前具有多年的軟件開發從業經驗,深知養成良好的編程習慣的重要性。平時應多提醒學生注意變量命名、程序縮進與對齊、添加必要的注釋等問題,對于學生今后從事軟件開發行業是必須的準備工作。
應該說,提高上機能力也終究還是一個孰能生巧的過程,大量的編程實踐是根本。應強調學生多寫程序(爭取每天編程一小時),并鼓勵學生自己寫程序,從最簡單的程序開始,從而循序漸進,積小勝為大勝。遇到復雜問題應逐步細化,采用模塊化設計方法,通過編寫函數來解決問題。
C語言難,難在入門。筆者在企業工作時也曾面試過一些本科畢業生,遺憾的是,部分學生經過大學四年的學習,也仍然沒有掌握程序設計的基本方法,甚至連一個小程序也寫不出來。因此,教師在教學過程中還是應強化算法、弱化語言語法,注重培養學生的獨立學習、獨立思考、獨立解決問題的能力。C語言是一門實踐性很強的課程,不斷思索如何提高學生的上機編程能力,對于教師來說,應是重中之重。
(作者單位:桂林理工大學 理學院)
廣西高等教育本科教學改革工程2015年立項項目(2015GJB252)資助;2014年桂林理工大學《數據分析》教學方法改革立項資助