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