喻洋平
摘 要:《C++程序設(shè)計》課程教學(xué)一直是基于語法體系的,采用在課堂講授語法、上機(jī)驗證程序,強(qiáng)調(diào)語法規(guī)則的掌握。課程應(yīng)從宏觀上把握課程教學(xué)體系,堅持整體性原則,注意和其他相關(guān)課程之間的橫向聯(lián)系,強(qiáng)調(diào)教學(xué)的目應(yīng)該使學(xué)生逐步掌握程序設(shè)計的思想和方法,即算法。隨著信息技術(shù)的發(fā)展,必須及時整合課程體系、教學(xué)內(nèi)容、教學(xué)方法、教學(xué)手段和考核方式,構(gòu)建《C++程序設(shè)計》大課程教學(xué)體系。
關(guān)鍵詞:C++程序設(shè)計;算法;整合
本課題是江西教育考試招生“十二五”規(guī)劃課題《應(yīng)用型本科院校程序設(shè)計課程教學(xué)體系建設(shè)的研究與實踐-----以江西科技學(xué)院試點本科為例》階段性成果之一(課題批準(zhǔn)號:1361)
1 《C++程序設(shè)計》及相關(guān)程序設(shè)計課程教學(xué)中存在的問題---片面強(qiáng)調(diào)語法
第一、學(xué)校在教學(xué)計劃中設(shè)置了多門程序語言的課程,目的是使學(xué)生掌握更多的語言,便于就業(yè)。但在這些程序設(shè)計類課程的教學(xué)大綱中過多地強(qiáng)調(diào)語法,對付考試,這就導(dǎo)致了程序設(shè)計課程的教學(xué)重點出現(xiàn)偏差,甚至本末倒置,喪失了學(xué)習(xí)語言課的目標(biāo);第二、由于現(xiàn)在的課程教學(xué)是基于語法體系的,并且采用在課堂語法、上機(jī)通程序的教學(xué)模式,教師只能將課本的程序語法規(guī)則和程序設(shè)計例題講解給學(xué)生,把教材作為指定的讀本,學(xué)生上機(jī)實驗也是一種驗證式的工作。在這種教學(xué)模式下,教師往往把很大力,甚至是主要精力放在特定語言的語法規(guī)則和語義上。這樣做其實是不自覺地把程序設(shè)計課上成了程序語言課,沒有真正去區(qū)別程序設(shè)計和程序語言這兩者之間的不同。第三、在教學(xué)過程中,程序設(shè)計課程的教學(xué)一般圍繞語言本身的體系展開,孤立地教授語言本身的語法知識,把低級語言與高級語言硬性割裂開來,把面向過程的語言與面向?qū)ο蟮恼Z言硬性割裂開來分,把各種面向?qū)ο蟮恼Z言硬性割裂開來分,把語言課程與算法課程硬性割裂開來分。
2 《C++程序設(shè)計》教學(xué)內(nèi)容整合研究
2.1 教學(xué)內(nèi)容整合思路
依據(jù)程序設(shè)計課程特點和實際需要,在教學(xué)過程中,注重學(xué)生分析問題和解決問題能力培養(yǎng),將理論課與實驗課進(jìn)行整合,使學(xué)生感覺到堂堂都是實驗課,調(diào)動了學(xué)生自主學(xué)習(xí)的積極性。這樣即保證了課程內(nèi)容的充實,又能作到信息量大;即避免了理論和實踐的脫節(jié),又避免了內(nèi)容的重復(fù)講授,使學(xué)生感到學(xué)有所值,學(xué)有所用。為此,我們精選了大量的教學(xué)案例,制訂了課程知識點教學(xué)大綱,同時申報了院級網(wǎng)絡(luò)課件的項目,并將成果軟件運(yùn)用于實踐教學(xué)。一年的實踐表明,學(xué)生的編程能力有顯提高,學(xué)習(xí)興趣較之以前有了大幅度提高。
2.2 C和C++語言的語法內(nèi)容整合思路
C++的概念龐雜,難以理解,不容易深入,同時,C++新標(biāo)準(zhǔn)的出現(xiàn)使C++和數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)順序發(fā)生沖突:數(shù)據(jù)結(jié)構(gòu)的先修課是C++,而C++的新特性中包含數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,它們互為前提。要有效地解決這兩個問題,必須把C、C++和數(shù)據(jù)結(jié)構(gòu)整合。需要注意的是,把C 作為C++的元語言,這時C++的概念就可以用C 程序嚴(yán)格地描述,避免C++解釋中的歧義性和模糊性,有利于理解,而且C++也就不必從開頭講起,我們可以直接講授C++相對C 的修正和補(bǔ)充部分,有利于深入。
2.3 語法教學(xué)內(nèi)容難重點教學(xué)思想
語法是算法的基礎(chǔ)。從發(fā)展辯證的觀點認(rèn)識語言中的地址、指針、數(shù)組等內(nèi)在聯(lián)系,對于語言本質(zhì)的把握具有良好的指導(dǎo)作用。
(1)指針的重要性
指針為C 語言編程提供了強(qiáng)大的支持,一個很好地利用了指針的程序會非常高效、簡潔和精致。學(xué)好指針也是為通用的數(shù)據(jù)結(jié)構(gòu)和具體的標(biāo)準(zhǔn)模板庫的學(xué)習(xí)做準(zhǔn)備,因為C++的STL 迭代器的機(jī)制是模擬指針的操作而設(shè)計[3],迭代器是指針的高級形式。事實上,指針是數(shù)據(jù)和處理的中介:計算機(jī)處理的數(shù)據(jù)需要存儲,數(shù)據(jù)存儲是為了處理,處理一般通過指針找到存儲中的數(shù)據(jù)。程序語言的發(fā)展都會反映在指針的發(fā)展上。
指針在程序設(shè)計語言中,早期的體現(xiàn)形式就是匯編語言的物理地址,如何存儲和表示地址是指針演變的前提,于是,指針作為處理地址相關(guān)數(shù)據(jù)的數(shù)據(jù)類型就應(yīng)運(yùn)而生,隨著程序語言的發(fā)展,指針也在不斷豐富和抽象,在C++語言中,則發(fā)展為引用,迭代器,功能更加豐富和強(qiáng)大。在指針語法講解的時候,采用簡單圖示教學(xué),形象易于理解。比如:指針是一種數(shù)據(jù)類型,在講解時,要引導(dǎo)學(xué)生將其同基本的數(shù)據(jù)類型的認(rèn)識要統(tǒng)一起來,只不過它所處理的數(shù)據(jù)不同,是地址相關(guān)的信息。在基本概念理清后,確定幾條基本的學(xué)習(xí)定式并輔助于圖形理解:
指針包含了兩層含義:存儲了地址和指向了某個數(shù)據(jù)對象,指向的位置依賴于基類型和存儲的地址。例如整型指針變量P,存放了整型變量a的地址,p=&a;。
(2)指針和地址的關(guān)系
對于指針運(yùn)算符、指針和數(shù)組的聯(lián)系,主要涉及到的運(yùn)算符是&(取地址)和間接指向*。指針和數(shù)組的聯(lián)系中,要特別強(qiáng)調(diào),數(shù)組是一種特殊的指針,是指針常量,數(shù)組名里面的存放的地址不能被改變,即不能作為左值。
需要注意的是,C語言語法學(xué)習(xí)和熟練是必須的,但是在教學(xué)內(nèi)容的講授方面,普遍容易進(jìn)入一個教學(xué)誤區(qū):即以語法教學(xué)為主,算法教學(xué)次之。這樣一來,課程的教學(xué)方向和重點就發(fā)生了偏移,脫離了以實踐能力為培養(yǎng)目標(biāo)的教學(xué)要求。這點在學(xué)時安排上需要注意分配。因此,通過調(diào)整教學(xué)計劃,將《數(shù)據(jù)結(jié)構(gòu)》和先行課作為一個有機(jī)整體,使得相關(guān)課程教學(xué)計劃和進(jìn)度進(jìn)行針對性的關(guān)聯(lián)統(tǒng)一,突出語法為基礎(chǔ),算法為重心。
機(jī)器語言發(fā)展到C 語言,作為機(jī)器語言要素的地址就要發(fā)展為C 語言的要素,這就是指針類型。指針是C 的類型,就應(yīng)該和整型、字符型等語言內(nèi)置類型一樣,具有自己的常量,因此,指針字面值常量的引入是不可避免的。而處理的需要又使指針一但出現(xiàn)就和數(shù)組構(gòu)成一個整體,它們都以對方的存在作為自己存在的前提。這種整體性要求把一個變量等價于一個長度為1 的數(shù)組,把指向一個變量的指針看作是指向一個長度為1 的數(shù)組的指針。這種整體性的科學(xué)性需要二維指針和二維數(shù)組的定義來檢驗,例如,二維數(shù)組必須是一維數(shù)組的推廣,就像二重積分是一重積分的推廣一樣,而且它們在一定條件下可以互相轉(zhuǎn)化。
(3)指針和數(shù)組--相互依賴、相互作用的關(guān)系
相互作用是事物真正的終極原因。指針和數(shù)組是辯證的關(guān)系,那么把這種關(guān)系包含在指針和數(shù)組的定義中,這樣兩者之間聯(lián)系得到了統(tǒng)一。兩者的關(guān)鍵橋梁是:數(shù)組名(指針常量)。