寧祿喬,王新昊,康振華
(山東工商學院 管理科學與工程學院,山東 煙臺 264005)
基于專業培養目標的C語言教學研究與實踐
寧祿喬,王新昊,康振華
(山東工商學院 管理科學與工程學院,山東 煙臺 264005)
本文首先從語法、語義和認知境界分析了C語言教學本質,然后根據信息管理與信息系統專業培養目標,結合學生實際具有的基礎知識和基本技能,將C語言在教學實踐中進行了結構調整;并參照工程考核要求,實行了新的課程考核形式。
C語言;結構調整;培養目標;工程考核
C語言自從1978年被貝爾實驗室正式發布以來,30多年歷久彌新。另外從語法角度來說,C++、JAVA、C#均直接繼承于C語言語法。因此,C語言作為程序設計語言的基礎地位仍然無可替代。
C語言是一種屬于機器的語言,所以對人來說,C語言就是一門新的外語。因此學習C語言與學習外語一樣,都是易學難精。相比外語學習,C語言學習也是一個持續不斷的過程,可以粗略分為三個境界:[1]
1.語法境界
在這個過程中,將主要學習變量定義方法、程序設計的三種基本結構(順序、選擇和循環)、函數定義及調用方法以及良好的編碼規范等。對于語法問題,無論是誰,都只能去適應這門語言的規則,所以學生在學習C語言語法時普遍感到枯燥是可以理解的。
2.語義境界
在這個過程中,學習使用C語言完成某個特定的任務,比如“百錢買百雞”、求素數、求最大公約數、求最小公倍數等經典編程問題。在此階段主要解決使用C語言解決實際問題的能力。
對于這些C語言應用,學生普遍認為這些算法問題具有挑戰性。這些題目經常成為C語言的考試內容,也是被很多學生認為能夠從本門課程中學到的有用知識。
3.認知境界
在這個過程中,學習語言背后的計算機硬件、操作系統原理,學習與語言無關的算法設計 (包括數據結構知識),學習軟件工程知識(比如分層體系結構等)等。在此主要解決如何按照工程要求(比如正確性、可靠性、可維護性、性能等)解決實際問題的能力。
對于這些知識,學生在結課時認識仍然是模糊的。當然,這也不可能僅僅通過C語言一門課程就能夠讓學生達到改變認知的地步,但這是四年信息管理與信息系統專業本科學習的目標之一。
因為課堂教學在本質上是不可分割的一個整體,例如在講授“百錢買百雞”例子時完全可以同時涉及語法、算法和認知這三種境界。基于C語言教學本質的分析,根據信息管理與信息系統專業培養目標,結合學生實際具有的基礎知識和基本技能,將C語言在教學實踐中從結構方面進行如下調整:[2]
1.淡化位運算講授
作為計算機專業學生,應該掌握位運算。因為位運算不僅是一種基本運算,而且往往可以為工程提供一種高性能解決方案。但是作為信息管理與信息系統專業的學生,一方面位運算與計算機硬件高度相關,另一方面完全可以用其他方法來代替位運算解決方案,只是損失些性能而已。
2.弱化輸入輸出函數語法教學
雖然C語言的scanf和printf函數功能強大,但是能夠正確運用卻不是一件容易的事情,因為這里面涉及數據類型、數組、指針等眾多內容。在輸入輸出基本通過GUI界面、數據存儲大多經由DBMS的今天,熟練掌握scanf和printf函數已經不再是一種必需。
3.補充適當硬件知識
C語言提供的豐富數據類型讓初學者有時難以理解:有必要如此區分整數和小數嗎?不都是可以做四則運算嗎?在不同數據類型統一運算時,因為自動類型轉換得到的異常結果經常讓初學者困惑不已。這個問題在編程語言層次上很難解釋清楚,但是從硬件層次上卻容易說明,因為其背后的硬件機理不同。
4.示范良好編碼規范
在教學和上機實踐中,始終貫穿并示范良好的編碼規范。比如無論在循環中還是在分支中,堅持為程序塊加上完整的塊標志。在運算符的優先級講述中,強調小括號可以改變并明晰計算的優先級,如此講授不僅可以減少語法的講授時間,同時也可以提高程序設計質量。在教學中有意識地示范如何在關鍵位置處加上調試輸出語句,部分代替單步跟蹤,提高程序調試效率。
5.強化程序設計方法教學
函數作為一個基礎的程序設計工具,在實踐中的地位非常重要,是軟件工程、各種軟件設計方法的實現基礎。另外,在函數層次編程,可以鍛煉一個人的問題抽象能力和模塊劃分意識。在教學中,有意識強化函數應用,比如要求以函數方式對問題進行設計,并且在上機實驗中安排大作業,要求兩個人協作完成,從而培養學生模塊化問題解決意識和編程習慣。
6.側重符合機器思維的算法講授
在講授如何求解最大公約數例子時,雖然輾轉相除法效率很高,但是窮舉法更容易理解和實現,而且也更加符合算法設計思維。輾轉相除法對于專業軟件來說意味著效率,但是對于初學者來說則意味著很高的門檻。對于常見的“數組越界”問題,采用的對策是讓學生適應計算機從0開始的編址方案,盡管在初期學習中可能帶來一些困難,但是如此堅持可以保證學生對計算機原理的理解上具有完整性和一致性。這樣,采用一套理論就可以很好解決指針與多維數組的地址計算關系。
7.調整指針教學側重點
為方便與后續課程的銜接(包括數據結構、數據庫原理),重點講授與一維、二維數組、結構體、鏈表相關的指針應用。而對于其他的指針應用(如函數指針、雙重指針等),則概括性提及,讓學生了解C語言指針的強大和靈活,從而更全面理解C語言指針的本質,以及由此帶來的程序調試挑戰。
在課程考核中,參照工程要求,拋棄以往的那種單純考核語法的題目(尤其是那些不常用的語法),代之以符合良好工程編程規范的程序閱讀題和程序設計題,分別通過筆試和機試進行。經過兩年實踐,發現此種考核方法更有利于反映出學生的真實水平,但是由此產生的問題是經常無法滿足對考核成績的正態分布要求,呈明顯的階梯狀分布。☉
[1]孔垂柳,田地.基于程序設計思想的C語言教學方案[J].吉林大學學報(信息科學版),2005,8(23):5-6.
[2]葉幼林.對計算機C語言教學的探討與研究[J].中南民族大學學報(人文社會科學版),2004,4(24):189-190.
[3]譚浩強.C程序設計[M].北京:清華大學出版社,2010.6.
(編輯:楊馥紅)
G434
B
1673-8454(2012)05-0059-02