王艷會 鐘誠
[摘 要] 本文通過比較國內(nèi)外C語言程序設(shè)計教材,分析國內(nèi)外C語言程序設(shè)計課程教學(xué)方法的不同以及各自的優(yōu)點(diǎn)。根據(jù)這些比較和分析,結(jié)合國內(nèi)C語言程序設(shè)計課程的學(xué)時安排和學(xué)生知識基礎(chǔ),提出了進(jìn)一步提高C語言程序設(shè)計課程教學(xué)效果的改進(jìn)辦法。教學(xué)實踐表明,這些改進(jìn)辦法可行且有效。
[關(guān)鍵詞] C語言程序設(shè)計;計算機(jī)專業(yè)教學(xué);國外教材
[中圖分類號]G642? ?[文獻(xiàn)標(biāo)志碼] A [文章編號] 1008-2549(2020) 05-0106-02
工欲善其事,必先利其器。C程序設(shè)計是計算機(jī)類專業(yè)的專業(yè)基礎(chǔ)課,是面向?qū)ο蟪绦蛟O(shè)計、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)等十余門專業(yè)基礎(chǔ)課和專業(yè)主干課的先修課程。該課程的學(xué)習(xí)效果的好壞直接影響到后續(xù)課程的學(xué)習(xí)。如果C語言掌握不好,后續(xù)課程的學(xué)習(xí)難免流于形式;反之,如果在C語言課程的學(xué)習(xí)中獲得了本專業(yè)應(yīng)有的程序設(shè)計能力,后續(xù)課程的學(xué)習(xí)將會有深刻的理解和實踐應(yīng)用能力。從這種角度看,C語言程序設(shè)計課程不僅是計算機(jī)類專業(yè)本科課程學(xué)習(xí)的開始,而且也是后續(xù)課程的學(xué)習(xí)和實踐的工具。因此C語言課程的教學(xué)方法研究對于計算機(jī)專業(yè)的教學(xué)有著不言而喻的重要性。對于一門課程,教材很大程度上是教學(xué)理念和教學(xué)方法的反映,C語言亦是如此。近二十余年來,國內(nèi)優(yōu)秀的C語言教材層出不窮,其中更是不乏影響深遠(yuǎn)的經(jīng)典教材。這些教材為國內(nèi)的C語言教學(xué)提供了包含豐富教學(xué)經(jīng)驗的教學(xué)思路、教學(xué)內(nèi)容和教學(xué)理念,適合國內(nèi)學(xué)生的知識基礎(chǔ),是國內(nèi)C語言教學(xué)方法的代表??v觀國外的計算機(jī)專業(yè)C語言教學(xué)領(lǐng)域,也有很多優(yōu)秀的C語言教材,其中以《C Primer Plus》、《C and Pointer》、《The C Programming Language》等為代表,其中的講授思路和內(nèi)容和國內(nèi)卻有著諸多不同,也自然對應(yīng)著一些與國內(nèi)不同的教學(xué)方法。這些國外教材當(dāng)然是根據(jù)國外計算機(jī)專業(yè)學(xué)生的知識基礎(chǔ)等情況編寫,但其中某些方面亦可以作為國內(nèi)借鑒,從而進(jìn)一步提高國內(nèi)C語言課程的教學(xué)效果,增強(qiáng)學(xué)生的程序設(shè)計能力。本文從國外經(jīng)典教材《C Primer Plus》出發(fā),比較國內(nèi)外教材,分析國內(nèi)外C語言程序設(shè)計課程的教學(xué)內(nèi)容、教學(xué)目標(biāo)和教學(xué)思路的不同,然后根據(jù)我國計算機(jī)專業(yè)本科生的知識基礎(chǔ),適當(dāng)借鑒國外教學(xué)思想,提出改進(jìn)該課程教學(xué)方法的些許淺見。
一 國內(nèi)外教材的區(qū)別
(一)對語法的介紹
幾乎所有國內(nèi)教材習(xí)慣將語法劃分為多個組成部分,如數(shù)據(jù)類型、過程控制語句、函數(shù)、數(shù)組以及指針,等。每部分內(nèi)容由對應(yīng)章節(jié)介紹。在每個章節(jié)中,相應(yīng)語法內(nèi)容會被詳盡地、徹底地介紹。學(xué)生在掌握這些語法后做這些語法的應(yīng)用練習(xí),即編寫程序。以數(shù)組和指針為例,在數(shù)組和指針章節(jié)中,數(shù)組的定義、初始化、使用、二維數(shù)組、地址、存儲方式、字符串、指針、指針間接引用、二級指針、指針數(shù)組和數(shù)組指針等語法被全部介紹。在《C Primer Plus》中,數(shù)組的定義等基本語法在《循環(huán)語句》中附帶介紹,指針的定義等基本語法在《函數(shù)》中附帶介紹。國內(nèi)教材的出發(fā)點(diǎn)是首先讓學(xué)生掌握扎實的語法基礎(chǔ),然后進(jìn)行編程能力的鍛煉;《C Primer Plus》則是引導(dǎo)學(xué)生逐步編寫由易到難的程序,在使用的過程中介紹需要的語法。簡言之,國內(nèi)教材的做法是先學(xué)再做,大步推進(jìn);而國外教材的做法是在做中學(xué),小步快行。相比之下,國內(nèi)教材的做法可以使用較少學(xué)時讓學(xué)生掌握語法基礎(chǔ)并具備一定的程序設(shè)計能力,但學(xué)習(xí)難度較高;而國外教材的做法使學(xué)生在用中學(xué),在教的過程中引導(dǎo)學(xué)生養(yǎng)成良好的編程習(xí)慣,學(xué)習(xí)難度較低,但需要更多的學(xué)時。兩種教材的不同是由國內(nèi)外高校計算機(jī)專業(yè)學(xué)生、課程和學(xué)時安排的不同導(dǎo)致的。國外教材因為課程學(xué)時多,可以以較慢的進(jìn)度引導(dǎo)學(xué)生邊用邊學(xué),從而保證教學(xué)效果;而國內(nèi)計算機(jī)專業(yè)開設(shè)課程較多,單門課程不可能安排太多學(xué)時,另外學(xué)生學(xué)習(xí)更為勤奮,能夠接受少學(xué)時、大容量的課時,所以國內(nèi)教材按內(nèi)容嚴(yán)格劃分為較少章節(jié),單課時內(nèi)容更為緊湊。另外,《C Primer Plus》對語法的介紹非常全面,而國內(nèi)教材僅介紹必需的語法,這也和課程教學(xué)學(xué)時的差別有關(guān)。
(二)編程環(huán)境和編譯器
多數(shù)國內(nèi)教材會指定一種編程軟件,常見的有Turbo C(TC)和Visual C++(VC);《C Primer Plus》沒有采用特定的編程軟件。指定編程工具的好處是可以讓學(xué)生盡快進(jìn)入編程環(huán)節(jié),省去了摸索編程軟件使用方法的過程。但是指定編程軟件也導(dǎo)致不能介紹沒有被特定編譯器采用的語法,從而導(dǎo)致介紹語法不全面,甚至導(dǎo)致介紹的語法陳舊。如Visual C++的所有版本僅支持ANSI C 1989的語法,ISO C 1999和ISO C 2011中的語法就不能介紹;而Turbo C甚至連最初的ANSI C 1989都不支持。這樣指定特定編程軟件的做法會導(dǎo)致所介紹的C語言語法或者太舊,或者僅是某一種編譯器的“方言”。而《C Primer Plus》沒有指定任何一種編程軟件,因此可以毫無顧忌地介紹全面的語法,但這樣需要學(xué)生自己尋找編程軟件,而且需要自己摸索使用方法,如果該過程不順利,可能影響學(xué)生的學(xué)習(xí)心理,失去興趣,而且很多編程軟件是英文版的,對部分英語水平欠佳的中國學(xué)生來說也是一個與C語言內(nèi)容本不相關(guān)的障礙。
(三)例題和習(xí)題
國內(nèi)教材例題多有較深數(shù)學(xué)背景,如方程求根二分法,級數(shù)逼近,等。這類題目需要考慮的情況較少,但往往有較復(fù)雜的流程控制,有利于鍛煉學(xué)生的分析問題、整理編程思路的能力,但對于全面考慮問題的習(xí)慣養(yǎng)成幫助不大?!禖 Primer Plus》的例題多為與生活相關(guān)的、與數(shù)學(xué)不相關(guān)或數(shù)學(xué)基礎(chǔ)淺顯的例題,如銀行本息計算、電費(fèi)計算、整數(shù)方冪計算,等。這類題目的過程控制較為簡單,但可能出現(xiàn)的情況較多,對于分析問題、整理編程思路的能力的鍛煉促進(jìn)作用較小,但可以引導(dǎo)學(xué)生考慮到可能發(fā)生的各種情況,編寫出健康的程序。簡言之,即國內(nèi)教材所選例題注重培養(yǎng)學(xué)生堅韌的分析解決較難問題的能力,而國外教材所選例題偏重培養(yǎng)學(xué)生全面考慮問題的習(xí)慣。二者各有所長。國內(nèi)教材之所以能夠選擇數(shù)學(xué)理論較深的例題,一個很大的原因是國內(nèi)多數(shù)學(xué)生有著扎實的數(shù)學(xué)基礎(chǔ),能夠理解例題所解決的問題,而正是學(xué)生的這種基礎(chǔ),讓國內(nèi)教材有了培養(yǎng)學(xué)生刻苦分析編寫較復(fù)雜控制過程程序的條件,所培養(yǎng)出的學(xué)生中確實有較大比例人數(shù)擅長這種復(fù)雜程序的編寫,但這也恰恰將少數(shù)數(shù)學(xué)基礎(chǔ)不夠好的學(xué)生擋在了C語言的大門之外。
在課后習(xí)題方面,國內(nèi)教材常常給出包括選擇題、填空題、程序分析題和程序設(shè)計題等的較全面的題型,對概念性內(nèi)容有著比重較大的涉及。《C Primer Plus》課后習(xí)題類型僅有程序分析題和程序設(shè)計題,僅鍛煉學(xué)生讀程序和編程序的能力,對概念性的語法涉及較少。
綜上所述,在語法方面,國內(nèi)教材以語法的介紹為思路,且大多只介紹必需的語法,并通過習(xí)題強(qiáng)化對這些語法的掌握,然后開始對編程思維的訓(xùn)練;國外教材以編寫程序所涉及語法的逐層拓展為思路,但對語法的介紹極為全面,這些語法在習(xí)題部分卻沒有很全面地覆蓋,也就是說,國外教材對語法的介紹雖然全面,但其中很大的部分屬于了解性質(zhì)。從學(xué)習(xí)難度分析,國內(nèi)教材先語法后編程,是走了一道“陡坡”,學(xué)習(xí)難度較高,但若學(xué)生能夠堅持,則可以在較短時間內(nèi)取得明顯效果;而國外教材隨著編程的拓展臨時介紹需要的語法,讓語法圍著學(xué)生轉(zhuǎn),降低了學(xué)生的學(xué)習(xí)難度,是一道“緩坡”,但需要相對較長的學(xué)時。從培養(yǎng)效果分析,國內(nèi)教材強(qiáng)調(diào)學(xué)生應(yīng)該能夠編寫思路較復(fù)雜程序的能力,而國外教材的程序復(fù)雜程度有限,重點(diǎn)突出考慮問題的全面性方面的引導(dǎo)。在這些方面,國內(nèi)外的教材各有所長。從語法標(biāo)準(zhǔn)角度分析,國內(nèi)教材普遍標(biāo)準(zhǔn)陳舊,絕大部分教材還在采用ANSI C1989作為語法標(biāo)準(zhǔn),而國外教材普遍采用ISO C1999或ISO C2011標(biāo)準(zhǔn)。標(biāo)準(zhǔn)的陳舊是有編譯器的陳舊導(dǎo)致的。很多教材采用了不支持C99標(biāo)準(zhǔn)語法的Visual C++和只有在Windows98、2000、XP等老舊系統(tǒng)下才能運(yùn)行的Turbo C。在這方面,國內(nèi)部分教材略顯不足。
二 改進(jìn)建議
第一,國內(nèi)教材僅介紹必需的語法,更適合中國計算機(jī)專業(yè)本科生的計算機(jī)基礎(chǔ),也更有利于將有限的學(xué)時用到程序設(shè)計思維的鍛煉上,但是在語法介紹過程中以語法內(nèi)容劃分章節(jié),雖然所需學(xué)時較少,但是學(xué)習(xí)難度相對較高。因此在基本語法的講授環(huán)節(jié),可以以學(xué)習(xí)過程中學(xué)生所編寫的程序的規(guī)模的進(jìn)展調(diào)整語法的講授順序,介紹當(dāng)時需要的語法,如介紹循環(huán)語句時可先簡要介紹數(shù)組的基本語法,無須涉及地址以及存儲方式等較深內(nèi)容,讓學(xué)生先用起來。如果因此導(dǎo)致所需學(xué)時增加,可以減少字符串輸入輸出和格式輸入輸出函數(shù)等不重要內(nèi)容的學(xué)時。
第二,Turbo C和Visual C++僅支持C89,語法標(biāo)準(zhǔn)較陳舊,而且現(xiàn)在廣泛使用的Windows 7和Windows8操作系統(tǒng)對這兩種編程環(huán)境的支持并不好。另外,從保護(hù)知識產(chǎn)權(quán)和節(jié)省費(fèi)用的角度考慮,也應(yīng)盡量選擇開源軟件。Dev Cpp對上述要求均能很好地滿足。另外,Dev Cpp是大部分國際和國內(nèi)程序設(shè)計比賽的指定編程環(huán)境,使用它也有利于學(xué)生參加各類相關(guān)比賽;而且Dev Cpp可采用MinGW編譯器,是Linux操作系統(tǒng)GNU的Windows版本,這也有利于學(xué)生以后在Linux操作系統(tǒng)中從事嵌入式開發(fā)。
第三,課堂習(xí)題盡量不涉及較深奧的數(shù)學(xué)原理。如果涉及,應(yīng)先將所涉及的數(shù)學(xué)背景以通俗的方式講解明白,避免部分?jǐn)?shù)學(xué)基礎(chǔ)不好的學(xué)生因為對數(shù)學(xué)的恐懼而失去對C語言的興趣。在C語言課程后期,可以將數(shù)獨(dú)、彩票等簡單數(shù)字游戲或現(xiàn)實生活中的問題作為本課程的綜合練習(xí)項目。
參考文獻(xiàn):
[1]普拉塔. C Primer Plus(第5版)中文版[M]. 云巔工作室,譯.北京:人民郵電出版社,2005.
[2] Kenneth A.Reek. C和指針(中文版)[M]. 徐波,譯.北京:人民郵電出版社,2008.
[3]Brian W.Kernighan,Dennis M.Retchie.The C Programming Language(第二版)[M]. 徐寶文,譯.北京:機(jī)械工業(yè)出版社,2001.
(責(zé)任編輯: 王義祥)