何鈺娟
摘 要:C語言課程包括語法與算法兩方面的內(nèi)容,二者密切相關,對于寫好一個C程序,缺一不可。鑒于以往教學中存在的問題——輕算法/重語法,或輕語法/重算法,都無法很好的培養(yǎng)學生的程序設計能力。因此,我們將課程教學劃分為六個模塊,通過六個模塊的訓練培養(yǎng)學生六個方面的能力:靈活運用C語言語法的能力、讀程序能力、寫程序能力、程序調(diào)試能力、程序優(yōu)化能力、規(guī)范編程能力,目的在于使學生不僅會編程序,還會編好程序。
關鍵詞:C語言;模塊化;程序設計
一、引言
20世紀90年代以來,C語言迅速在全世界普及推廣,至今依然是最常用、最受歡迎的編程語言之一。同時“C語言程序設計”是很多高等學校的一門基本的計算機課程。該課程在計算機教育和計算機應用中發(fā)揮著重要的作用。
該課程最初的教學模式為:注重語句、語法細節(jié)的講解,對如何用計算機解決問題的方法和思路講得不夠,課程的訓練著重于C語言語法和簡單程序的閱讀,而對學生編程能力的訓練不夠。結(jié)果導致學完該門課程,絕大多數(shù)學生不會編程,這樣就給后續(xù)課程留下了缺憾。針對這種情況,我們對該課程的教學進行了改革,具體為:課堂上注重編程思路的分析和講解,對C語言本身只講大語法,例如if語句的功能、循環(huán)語句的功能等,而更細節(jié)的語法由學生在編程實踐中自己學習。幾年的教學實踐表明,我們的改革在提高學生的編程能力方面取得了一定的效果,但另一方面,我們發(fā)現(xiàn)由于在課程教學中側(cè)重于編程思路的講解及訓練,C語法本身的講解及練習偏少,而二本院校的學生其自學能力及學習的自覺性較差,導致很多同學在編程時思路正確,但由于對語法的理解不夠深入,在編寫程序時不能正確靈活地選用語句,程序出錯時也不知如何修改,閱讀程序的能力也很差。
“C語言程序設計”課程涉及到兩個內(nèi)容——C語言和程序設計。C語言是程序設計的工具,主要涉及語法和語義兩個方面;而程序設計需要掌握對問題求解過程的理解與描述方法。兩個概念密切相關但又互不相同,如果只會用工具,無法編寫程序;如果只會程序設計的方法,不會使用或用不好工具,也無法編寫程序。因此,我們對以往的教學模式進行了調(diào)整。
二、模塊化的教學設計
(一)本課程的教學目標
“C語言程序設計”課程的核心教學目標就是教會學生使用C語言進行設計程序,使學生掌握程序設計的基本思想和方法,具有靈活應用這些思想和方法編寫出C程序來解決實際問題的能力。同時,還要培養(yǎng)學生較強的程序調(diào)試能力和程序閱讀能力,讓學生學習基本的編程規(guī)范,養(yǎng)成良好的編程風格,了解程序優(yōu)化的方法和原則,為將來編寫高效的程序做準備。
(二)實施模塊化教學,全方位、多角度進行編程訓練
我們將課程教學劃分為C語言語法理論練習、程序閱讀、程序跟蹤調(diào)試、程序優(yōu)化、編程規(guī)范、程序設計六個模塊,通過六個模塊的訓練培養(yǎng)學生六個方面的能力:靈活運用C語言語法的能力、讀程序能力、寫程序能力、程序調(diào)試能力、程序優(yōu)化能力、規(guī)范編程能力。
1.C語言語法理論練習
在課程的學習中,C語言作為編程的工具非常重要。掌握基本的語法規(guī)則是編程的基礎,如果不掌握必要的語法規(guī)則,連最簡單的程序也編不出來,或者編出來的程序錯誤百出,無法運行。而C語言的語法知識點多、覆蓋面廣,因此我們創(chuàng)建了C語言語法理論練習題庫,包括單項選擇題、多項選擇題、判斷題幾種題型,在每次上機課前給學生布置與本周上機內(nèi)容相關的語法練習題作為上機預習內(nèi)容,使學生先熟悉即將用到的語法,并且使用技術手段促使學生必須在上機課前完成預習內(nèi)容,以保證預習效果,為上機課做好準備。
2.程序閱讀
一切學習都從模仿開始,編程也一樣。編程就像寫文章,如果想成為一名卓越的作家,在能寫出任何拿得出手的東西之前,需要品讀其他偉大作家的文章,吸收不同的風格,看看前輩已嘗試過的東西,從中吸取精華,自己的知識才會慢慢增長,自己的作品最終才會透露出些許成熟。編寫代碼和寫作一樣,對于程序員來說,閱讀優(yōu)秀的代碼就如同作家閱讀優(yōu)秀書籍一樣重要。
對于初學C語言的學生,閱讀程序就從一本優(yōu)秀的教材開始,要求學生將教材上的源程序代碼一個一個的輸入到電腦中,編譯運行,并且用紙和筆記錄下程序的運行過程,對每一個程序都認真剖析、認真閱讀,在輸入代碼的過程中慢慢就可以品出程序的好壞了,例如,如果發(fā)現(xiàn)自己輸入了很多重復代碼,那就可以看出至少這個程序的結(jié)構(gòu)就不好,需要改進。除了教材,還為學生推薦一些經(jīng)典的C語言書籍,讓學生閱讀和剖析書上的源代碼。我們還收集了經(jīng)典的程序代碼,為學生布置閱讀程序的作業(yè),作業(yè)的形式多樣,有傳統(tǒng)的讀程序?qū)懡Y(jié)果的題型,也有自己設計的新題型,例如選程序注釋、為程序添加注釋等,選程序注釋就是給出源代碼,讓學生為指定代碼選擇已給出的注釋;為程序添加注釋就是給出源代碼,讓學生為程序的指定行添加注釋。
3.程序跟蹤調(diào)試
在程序的開發(fā)過程中,程序調(diào)試的重要性并不亞于編寫代碼,因為一個設計得再好的程序,也難免會出現(xiàn)錯誤,這些錯誤需要通過調(diào)試來排除,通常程序的功能越復雜,調(diào)試過程的工作量也就越大。
編寫程序時可能產(chǎn)生的錯誤通??梢苑譃槿箢悾赫Z法錯誤、運行時錯誤和邏輯錯誤。語法錯誤是程序代碼違反了C語言的語法規(guī)則而產(chǎn)生的錯誤,語法錯誤在編譯階段就會被編譯器檢查出來。
運行時錯誤只有在運行時才會體現(xiàn)出來,例如,在應用程序過程中打開了并不存在的文件,或者使用越界的指針等等。運行時錯誤可以在集成調(diào)試環(huán)境下通過設置斷點、單步跟蹤、添加監(jiān)視等方法來查找和排除。
邏輯錯誤是由于程序算法不完善而產(chǎn)生的運行結(jié)果不符合程序設計功能的問題,這一類錯誤比較難以檢查,一般需要通過監(jiān)視和檢查程序中數(shù)據(jù)的變化情況,來檢查錯誤發(fā)生的位置。
大多數(shù)初學C語言的學生在面對錯誤提示時,無從下手,不知錯在哪里,如何修改。為了培養(yǎng)學生調(diào)試程序的能力,對于不同的錯誤類型采用不同的方式教學。對于語法錯誤,我們將常見的錯誤編成一個文檔提供給學生,供學生查閱,同時要求學生上機寫程序時每個人都帶一個小本子和一支筆,當程序出現(xiàn)語法錯誤時,記下英文錯誤提示信息和解決相應錯誤的方法,用于積累經(jīng)驗,避免以后編程時再犯同樣的錯誤或犯了錯誤知道如何修改,此外,還布置程序改錯題對學生進行相關訓練。對于運行時錯誤和邏輯錯誤,我們?yōu)閷W生介紹了不同的調(diào)試方法,例如使用注釋程序的方法縮小錯誤范圍,使用增加printf函數(shù)查看程序運行中相關變量的變化,使用調(diào)試工具監(jiān)視和檢查數(shù)據(jù)變化情況來判斷錯誤位置。此外,還設計了程序跟蹤調(diào)試的題目訓練學生,讓學生在實際的操作中學習和領會調(diào)試工具及調(diào)試方法。以下是我們設計的有關調(diào)試練習的一個題目,該類題可以實現(xiàn)計算機自動評閱。
4.程序優(yōu)化
程序優(yōu)化指的是針對同一問題的不同程序進行比較、調(diào)整或修改,將程序變?yōu)檎Z句比較少、內(nèi)存占用量比較小、運行速度比較快的程序。每一個學習程序設計的人都應該了解程序優(yōu)化的一些常用方法和技巧。在課程中我們?yōu)閷W生介紹了一些程序優(yōu)化的原則(主要是運行時間的優(yōu)化),還設計了一些程序優(yōu)化的題目讓學生練習,在期末考試中也要考核,目的是使學生了解程序優(yōu)化的概念,具有程序優(yōu)化的意識。
5.編程規(guī)范
現(xiàn)在我們用的軟件都是規(guī)模相當大的,非常熟悉的Windows操作系統(tǒng),Office辦公軟件,各種網(wǎng)絡管理軟件等,都是需要一個龐大的研發(fā)團隊才能完成,如果沒有規(guī)范,那開發(fā)出來的將是一堆電子垃圾,沒有任何用處;沒有成功的規(guī)范,一定沒有成功的軟件;大型軟件的成功并不是某個人的智力決定的,它是嚴格按照規(guī)范來生成的。
有人說,印度十個人編程,會編出一樣的東西,而中國十個人編程可能會有十種風格。因為我們忽略了一個重要問題,即“顧客”的感受,程序的編寫是給別人看的,而不是只給我們自己看。因此,我們參考了業(yè)界比較推崇的一些編程規(guī)范,制定了適合C語言初學者使用的編程規(guī)范,目的在于培養(yǎng)學生良好的編程規(guī)范和意識、素質(zhì),促進所設計程序安全、健壯、可靠、可讀與可維護。在課上我們強調(diào)和要求程序的可讀性、規(guī)范性等編程規(guī)范,在平時的作業(yè)和期末考試中,一個程序的得分由程序結(jié)果和編程規(guī)范兩部分決定,計算機會對程序結(jié)果和編程規(guī)范進行評閱,程序中如果有3個或以上的規(guī)范錯誤,該程序計為0分。
6.程序設計
程序設計課程就是要培養(yǎng)學生利用計算機分析和解決問題的能力,學習怎樣用計算機的方式去思考和解決問題。程序設計不是聽會的,也不是看會的,而是自己練會的。學生只有在編寫大量程序之后,才能獲得真知灼見,找到感覺,最后能運用自如。因此,我們給學生提供了大量的上機練習時間,上機時我們將機房設置為實驗環(huán)境,學生在限定的時間、限定的機房內(nèi)完成老師布置的程序,并由計算機自動評分,如果發(fā)現(xiàn)有錯,還可以根據(jù)提示反復修改提交。在實驗環(huán)境下,由于無法使用U盤等外部設備、無法使用外網(wǎng),學生之間無法互相拷貝程序,每個學生都只能自己動手,不可能依賴其他同學,無法吃大鍋飯。
除了上機實驗課的編程,為了讓學生鞏固所學,還布置了課后編程作業(yè),也是限定時間提交,計算機自動評分。
期末考核也采用全機考的方式,不考死記硬背的東西,考核學生程序設計、程序調(diào)試、查閱資料等能力,計算機自動評分,對就是對,錯就是錯。
通過大量的編程練習,學生編寫程序及調(diào)試程序的能力普遍有了較大提高。
三、結(jié)語
“C語言程序設計”是一門重要的課程,對于零編程基礎的學生來說,同時又是一門困難的課程,為了上好這門課程,多年來我們一直致力于該課程的教學研究和改革,經(jīng)過多年的努力,我們的教學取得了良好的效果。
參考文獻:
[1]譚浩強.C程序設計(第四版)[M].清華大學出版社,2010.
[2]李越輝.C語言程序的跟蹤與調(diào)試[J].東西南北(大學生),2007,2:38-41.
[3]馬曉娟.淺析程序的優(yōu)化[J].電子制作,2014,11:89-90.
[4]鄭秀雷.計算機教學過程中關于編程規(guī)范的一點思考[J].科教文匯,2011,30:53.
[5]吳文虎,等.程序設計基礎(第3版)[M].清華大學出版社,2010.
(作者單位:成都信息工程大學)