文章編號:1672-5913(2011)23-0044-04 中圖分類號:G642 文獻(xiàn)標(biāo)識(shí)碼:A
摘 要:C++程序設(shè)計(jì)是我校空間信息與數(shù)字技術(shù)新專業(yè)的重要基礎(chǔ)課程。近年來,根據(jù)專業(yè)知識(shí)體系要求,我們對該專業(yè)C++課程教學(xué)進(jìn)行了系統(tǒng)建設(shè)。本文介紹了C++課程建設(shè)的相關(guān)結(jié)果,包括課程教學(xué)與實(shí)踐教學(xué)的安排、教材的選擇、教學(xué)方法的探索以及對教學(xué)內(nèi)容中與其他計(jì)算機(jī)課程的銜接處理等,可為本專業(yè)C++課程教學(xué)及其他計(jì)算機(jī)課程建設(shè)的開展提供參考。
關(guān)鍵詞:C++教學(xué);課程建設(shè);教學(xué)安排;教學(xué)方法探索;課程銜接處理
空間信息與數(shù)字技術(shù)專業(yè)(數(shù)技專業(yè))是我校新建本科專業(yè),開設(shè)數(shù)學(xué)、計(jì)算機(jī)、地理信息系統(tǒng)和遙感等課程,培養(yǎng)從事空間信息處理和海洋信息系統(tǒng)研發(fā)的專業(yè)人才。C++課程作為數(shù)技專業(yè)的基礎(chǔ)課程,教學(xué)目的是培養(yǎng)學(xué)生面向?qū)ο蟮某绦蛟O(shè)計(jì)能力,為后續(xù)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、算法分析與設(shè)計(jì)、地理信息系統(tǒng)等課程建立編程基礎(chǔ)。
數(shù)技專業(yè)屬非計(jì)算機(jī)專業(yè),我校計(jì)算機(jī)專業(yè)已有C++課程教學(xué)體系不適合直接用于數(shù)技專業(yè)的C++教學(xué)。近三年來,我專業(yè)C++教師基于“以學(xué)生為本”的思想,從學(xué)生培養(yǎng)目標(biāo)出發(fā),在梳理C++及相關(guān)課程的知識(shí)體系并吸取已有C++教學(xué)經(jīng)驗(yàn)的基礎(chǔ)上,從課程教學(xué)安排、教材及教學(xué)環(huán)節(jié)、教學(xué)手段和教學(xué)方法以及與其他程序設(shè)計(jì)語言的銜接處理上,對本專業(yè)的C++課程進(jìn)行了系統(tǒng)建設(shè),為本專業(yè)C++課程教學(xué)提供了保證。本文介紹本專業(yè)在C++課程教學(xué)內(nèi)容安排、教學(xué)方法探索和與其他相關(guān)課程的銜接等方面的建設(shè)結(jié)果。
1 合理安排教學(xué)內(nèi)容
制定符合專業(yè)實(shí)際的C++課程教學(xué)計(jì)劃,可為C++教學(xué)規(guī)定合理的教學(xué)框架。我校數(shù)技專業(yè)是強(qiáng)調(diào)計(jì)算機(jī)教學(xué)的非計(jì)算機(jī)專業(yè),開設(shè)的計(jì)算機(jī)課程包括計(jì)算機(jī)應(yīng)用基礎(chǔ)、程序設(shè)計(jì)語言、數(shù)據(jù)結(jié)構(gòu)、
算法分析與設(shè)計(jì)和操作系統(tǒng)等。本校計(jì)算機(jī)專業(yè)的程序語言是先開C再開C++。考慮到C++基礎(chǔ)部分是C的超集,比C應(yīng)用更廣[1-2],C++高級部分中的面向?qū)ο蟪绦蛟O(shè)計(jì)思想可直接用到C#和Java中[3]。此外,C++還是數(shù)據(jù)結(jié)構(gòu)、算法分析、操作系統(tǒng)等后續(xù)課程的首選實(shí)現(xiàn)語言,因此,本專業(yè)選擇在程序語言中直接開C++,并將其教學(xué)目的規(guī)定為以C++語法教學(xué)為基礎(chǔ),以培養(yǎng)學(xué)生面向?qū)ο缶幊棠芰橹攸c(diǎn)。
基于C++教學(xué)目的,我校確定數(shù)技專業(yè)C++教學(xué)大綱為貫徹培養(yǎng)學(xué)生面向?qū)ο缶幊棠芰χ骶€,保證數(shù)據(jù)結(jié)構(gòu)等課程學(xué)習(xí)必需的基本知識(shí),將表達(dá)式、數(shù)據(jù)類型、控制結(jié)構(gòu)、函數(shù)、指針與數(shù)組、類與對象、運(yùn)算符重載、繼承、多態(tài)和模板等確定為必學(xué)內(nèi)容,教學(xué)中以C++語法教學(xué)為輔助,將程序設(shè)計(jì)方法的教學(xué)作為重點(diǎn)。
在教學(xué)計(jì)劃方面,學(xué)生修完“計(jì)算機(jī)應(yīng)用基礎(chǔ)課程”后,在第二學(xué)期開設(shè)C++(理論課時(shí)64學(xué)時(shí)、實(shí)踐課時(shí)32學(xué)時(shí)),在第二學(xué)期后的小學(xué)期中開C++課程設(shè)計(jì)(32個(gè)學(xué)時(shí))。
2 探索有效的教學(xué)手段與教學(xué)方法
采用科學(xué)有效的教學(xué)方法,是完成C++課程教學(xué)目標(biāo)的重要保證。與C、C#和Java相比,C++內(nèi)容多而抽象,而數(shù)技專業(yè)學(xué)生學(xué)習(xí)C++之前沒有程序語言基礎(chǔ)。因此,在C++教學(xué)中,需要探索有效的教學(xué)手段與方法,重點(diǎn)解決讓學(xué)生樂于學(xué)和易于學(xué)的問題。
2.1 明確C++學(xué)習(xí)意義
明確C++的學(xué)習(xí)意義,可提高學(xué)生學(xué)習(xí)C++的興趣。我們主要從“C++學(xué)習(xí)有何用”著手,仔細(xì)挑選了由C++語言開發(fā)的幾款典型軟件,在第一節(jié)課簡單演示這些軟件,以此說明C++語言在整個(gè)計(jì)算機(jī)軟件開發(fā)中的重要地位,觸發(fā)學(xué)生學(xué)習(xí)愿望。主要介紹的軟件包括開發(fā)平臺(tái)Nokia Qt、Visual Studio和VC++;桌面工具Office、Photoshop、K3DSurf和Matlab;數(shù)據(jù)庫系統(tǒng)Sql Server;網(wǎng)絡(luò)軟件IE和Google搜索引擎;C++小游戲GDI動(dòng)畫;行業(yè)應(yīng)用軟件“臨港城市風(fēng)暴潮災(zāi)害三維展示系統(tǒng)”(由本專業(yè)教師參與開發(fā))等。另外,我們還羅列了數(shù)技專業(yè)與C++密切相關(guān)的后續(xù)核心課程,包括數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、算法分析與設(shè)計(jì)等,說明C++在數(shù)技專業(yè)課程中不可或缺的基礎(chǔ)地位。
2.2 靈活采用多種教學(xué)方法和手段
學(xué)生理解C++的學(xué)習(xí)意義后,仍可能會(huì)因C++的復(fù)雜而缺少學(xué)習(xí)信心。對于解決C++難學(xué)的問題,我們從理論與實(shí)踐教學(xué)兩方面探索解決方法:始終以學(xué)生為教學(xué)主體,將對學(xué)生面向?qū)ο蟪绦蛟O(shè)計(jì)思維的培養(yǎng)作為教學(xué)主線,注重對案例教學(xué)[4-7]、啟發(fā)式教學(xué)[4-5]的靈活應(yīng)用,并督促學(xué)生讀寫程序。
1) 把握C++教學(xué)主線。
C++語法復(fù)雜又細(xì)碎。為避免學(xué)生被C++語法“海洋”淹沒,在教學(xué)中,我們把握“面向?qū)ο蟪绦蛟O(shè)計(jì)”這條主線,在C++教學(xué)內(nèi)容處理上,以數(shù)據(jù)類型與表達(dá)式、控制結(jié)構(gòu)、函數(shù)、數(shù)組與指針為基礎(chǔ),以多態(tài)為目標(biāo),強(qiáng)化類與對象、繼承和多態(tài)等重點(diǎn)內(nèi)容。
此外,在C++教學(xué)中,我們避免引入如矩陣乘積和動(dòng)態(tài)鏈表等過于復(fù)雜和突兀的算法,將其留待學(xué)生掌握相關(guān)基礎(chǔ)知識(shí)后,由后續(xù)的數(shù)據(jù)結(jié)構(gòu)、算法分析與設(shè)計(jì)等課程去處理,以免加重C++的教學(xué)難度。
2) 設(shè)計(jì)教學(xué)案例。
C++的內(nèi)容枯燥。靈活應(yīng)用案例教學(xué)法,以鮮活的案例形式呈現(xiàn)C++知識(shí),提高學(xué)生學(xué)習(xí)興趣,讓學(xué)生從解決相關(guān)計(jì)算問題的C++案例程序中熟悉語法,培養(yǎng)他們的程序設(shè)計(jì)思想。在數(shù)技專業(yè)近年的教學(xué)中,主要應(yīng)用的案例有以下5個(gè)方面。
?程序控制結(jié)構(gòu)案例:九九乘法表和成績百分制向五分制的轉(zhuǎn)換。
?函數(shù)調(diào)用案例:求和函數(shù)的傳值調(diào)用,交換函數(shù)的引用和指針調(diào)用。
?類與對象案例:公民類、學(xué)生類、圓和長方形類。
?運(yùn)算符重載案例:復(fù)數(shù)的加(+)、乘以(*)和輸出(<<)等運(yùn)算符的重載。
?繼承與多態(tài)案例:公民類和學(xué)生類、圖形shape類與圓類、長方形類和銅錢類等。
讓學(xué)生理解各個(gè)案例所蘊(yùn)含的設(shè)計(jì)思想和知識(shí),輔以相應(yīng)練習(xí),讓學(xué)生模仿編程。
(1) 運(yùn)用啟發(fā)式教學(xué)。
C++是一門應(yīng)用性強(qiáng)的課程。相比于硬塞知識(shí),讓學(xué)生理解各個(gè)知識(shí)點(diǎn)“有什么用”和“如何用”更為重要。因此,在本專業(yè)C++教學(xué)中,教師運(yùn)用啟發(fā)式教學(xué),注重讓學(xué)生思考兩個(gè)問題:某個(gè)C++知識(shí)有什么用,以及某問題能用C++的什么知識(shí)來解決。在啟發(fā)學(xué)生思考后,才引出知識(shí)點(diǎn),加深學(xué)生印象。比如,在開始函數(shù)一章時(shí),我們用交換10對整形變量的重復(fù)交換代碼,啟發(fā)學(xué)生思考有沒有更節(jié)約代碼輸入的方法,以此引出函數(shù)的概念;在開始數(shù)組一章時(shí),我們用多個(gè)單變量存儲(chǔ)本班全部同學(xué)(40人以上)成績的程序,啟發(fā)學(xué)生思考有沒有更節(jié)約標(biāo)識(shí)符的方法,以此引出數(shù)組的概念。這樣,從解決實(shí)際問題出發(fā)引出C++知識(shí)點(diǎn),避免了直接講解抽象的C++概念。
在講解典型案例時(shí),充分利用板書。先啟發(fā)學(xué)生思考案例中計(jì)算問題的解決方法和步驟,將結(jié)果總結(jié)在黑板上,然后與學(xué)生一起討論,在黑板上將各步驟翻譯成C++代碼,分析代碼用到的新知識(shí)點(diǎn),帶領(lǐng)學(xué)生一起完成分析問題、算法設(shè)計(jì)和代碼編寫過程,并讓學(xué)生在練習(xí)代碼編寫時(shí)去模仿,這樣比用PPT直接展示代碼效果更好。
(2) 督促學(xué)生讀寫程序。
C++課程也是一門實(shí)踐性強(qiáng)的課程。學(xué)生往往苦于課上明白,課下不能寫。因此,必須加強(qiáng)學(xué)生的實(shí)踐練習(xí),讓其由不會(huì)到會(huì),并孰能生巧。對此,我們一方面布置學(xué)生課后讀典型案例的代碼,另一方面,將代碼書寫與上機(jī)調(diào)試有機(jī)結(jié)合:針對每章的核心知識(shí)設(shè)置編程題目,要求學(xué)生先在課后書寫代碼,再在實(shí)驗(yàn)課上調(diào)試并記錄代碼的改正步驟,以提交手寫代碼和調(diào)試記錄作為實(shí)驗(yàn)考核的依據(jù),從而督促學(xué)生多動(dòng)手,實(shí)現(xiàn)教與學(xué)相輔相成。
理論課程結(jié)束后,我們在暑假前的小學(xué)期中安排了C++課程設(shè)計(jì),目的是讓學(xué)生在分組完成小型C++課程設(shè)計(jì)題目的過程中綜合應(yīng)用學(xué)習(xí)過的C++知識(shí),強(qiáng)化面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,熟悉包括分析問題、總結(jié)算法、編寫程序和撰寫項(xiàng)目報(bào)告等在內(nèi)的程序開發(fā)流程,培養(yǎng)學(xué)生的動(dòng)手和協(xié)作能力。課程設(shè)計(jì)期間,教師跟蹤進(jìn)度和答疑。近年來,我們用過的課程設(shè)計(jì)題目主要和學(xué)生的學(xué)習(xí)實(shí)際相關(guān),主要有使用I/O流建立學(xué)生信息管理系統(tǒng)、使用類構(gòu)建選課管理系統(tǒng)、使用類建立學(xué)生評優(yōu)系統(tǒng)、通過聚合和派生構(gòu)建大學(xué)類、使用模板構(gòu)建復(fù)數(shù)類等。通過C++課程設(shè)計(jì),學(xué)生編程能力普遍提高。
3 選擇合適的教材與實(shí)驗(yàn)環(huán)境
教材是承載教學(xué)的基石,好的C++教材,應(yīng)該是主線明確、知識(shí)點(diǎn)自包含、理論內(nèi)容清晰簡潔、實(shí)例新穎貼切,強(qiáng)調(diào)學(xué)生動(dòng)手實(shí)踐。另外,數(shù)技專業(yè)是直接上C++,應(yīng)選用包含C++基本語法的教材。在歷年C++教學(xué)中,本學(xué)院采用過譚浩強(qiáng)、錢能、任哲、劉懷亮等人的教材,前二者適合課時(shí)量大的重點(diǎn)高校,任哲教材側(cè)重理論。劉懷亮教材包含了C++基本語法和面向?qū)ο髢刹糠郑碚摵啙?,?shí)例緊扣知識(shí)點(diǎn),章節(jié)練習(xí)構(gòu)思巧妙,使用下來效果較好,適合于本專業(yè)C++教學(xué)。
在C++實(shí)驗(yàn)環(huán)境方面,我們選用Visual Studio 2008,該平臺(tái)時(shí)下流行,使用方便,后續(xù)還將在C#可視化程序設(shè)計(jì)和Asp.net 網(wǎng)絡(luò)程序設(shè)計(jì)選修課中用到。另外,我們還向?qū)W生簡單介紹C++開發(fā)框架Qt,該框架將在后續(xù)地理信息系統(tǒng)和計(jì)算機(jī)圖形學(xué)與虛擬現(xiàn)實(shí)等課程中用到。
4 處理好與其他計(jì)算機(jī)課程的銜接
C++課程為其他計(jì)算機(jī)核心課程提供重要支撐。為方便學(xué)生后續(xù)計(jì)算機(jī)課程的學(xué)習(xí),我們對C++與相關(guān)課程的銜接進(jìn)行了處理。
首先,C++是數(shù)據(jù)結(jié)構(gòu)、地理信息系統(tǒng)、計(jì)算機(jī)圖形學(xué)和虛擬現(xiàn)實(shí)技術(shù)等課程的基礎(chǔ)。因此,在C++教學(xué)中,除了強(qiáng)調(diào)面向?qū)ο缶幊趟枷胪?,?nèi)容上還盡量包含相關(guān)課程所必需的基礎(chǔ)知識(shí)。比如:在C++中強(qiáng)調(diào)數(shù)據(jù)結(jié)構(gòu)(C++版)中用到的位運(yùn)算、指針、數(shù)組、抽象類和模板;分析地理信息系統(tǒng)、計(jì)算機(jī)圖形學(xué)、虛擬現(xiàn)實(shí)技術(shù)的教學(xué)內(nèi)容后,我們發(fā)現(xiàn)在C++中必須包含向量(vector),而且需介紹三門課程將用到的C++開發(fā)框架Qt。
此外,考慮到將來在參與海量數(shù)據(jù)分析與計(jì)算中,數(shù)技專業(yè)學(xué)生還可能用C和 Matlab進(jìn)行計(jì)算,而本專業(yè)未開設(shè)這兩門課,因此在C++課程理論教學(xué)結(jié)束后,我們還用4課時(shí)簡單介紹了C和Matlab的語法特點(diǎn)、程序結(jié)構(gòu)、編譯環(huán)境及與C++之間的程序轉(zhuǎn)換和鏈接方法,讓學(xué)生初步了解如何進(jìn)一步學(xué)習(xí)和應(yīng)用C與Matlab。
5 結(jié)論
數(shù)技專業(yè)是對計(jì)算機(jī)要求較高的非計(jì)算機(jī)專業(yè)。我們從專業(yè)特色出發(fā),對C++課程進(jìn)行了建設(shè):先明確了C++是該專業(yè)計(jì)算機(jī)課程的前導(dǎo)課程,確定了C++的教學(xué)目的,合理地規(guī)劃了本專業(yè)C++知識(shí)結(jié)構(gòu)、教學(xué)大綱和教學(xué)計(jì)劃;然后針對本專業(yè)學(xué)生,直接學(xué)習(xí)C++的困難,對C++教學(xué)方法進(jìn)行了探索,對案例教學(xué)法和啟發(fā)式教學(xué)法進(jìn)行了靈活應(yīng)用,對適合的教材和實(shí)驗(yàn)環(huán)境進(jìn)行了遴選;另外,考慮與相關(guān)專業(yè)課程的銜接和方便學(xué)生從事計(jì)算工作,我們在教學(xué)內(nèi)容上對有關(guān)知識(shí)進(jìn)行了強(qiáng)調(diào)和包含。經(jīng)過C++課程的系統(tǒng)建設(shè),我們保證近年來數(shù)技專業(yè)C++教學(xué)的有效開展,教學(xué)效果也較良好。
參考文獻(xiàn):
[1] 謝娟英. 大學(xué)計(jì)算機(jī)專業(yè)C與C++程序設(shè)計(jì)語言開設(shè)探討[J]. 計(jì)算