歐陽麗娜
(江蘇聯(lián)合職業(yè)技術(shù)學(xué)院鎮(zhèn)江分院信息工程系,江蘇鎮(zhèn)江 212016)
計算機(jī)的本質(zhì)是“程序的機(jī)器”,程序和指令是計算機(jī)系統(tǒng)中最基本的概念。進(jìn)行程序設(shè)計必須以一種計算機(jī)語言為工具,否則,只能是紙上談兵。作為當(dāng)前大多數(shù)學(xué)校計算機(jī)專業(yè)入門級語言的C語言功能豐富,表達(dá)能力強(qiáng),使用靈活方便,應(yīng)用面廣,目標(biāo)程序效率高,可移植性好,既具有高級語言的優(yōu)點,又具有低級語言的許多特點,既適合編寫系統(tǒng)軟件,又適合編寫應(yīng)用軟件。C語言是計算機(jī)專業(yè)的必修課,也是程序開發(fā)的前導(dǎo)課。對于學(xué)習(xí)者而言,要進(jìn)行程序設(shè)計,必須解決以下兩個問題:
1)解決問題的思路和方法,即算法。
2)算法的實現(xiàn),即用計算機(jī)語言編寫程序,達(dá)到用計算機(jī)解決問題的目的。
算法被稱為程序的靈魂。著名的計算機(jī)科學(xué)家沃思(Nikiklaus Wirth)提出一個公式,即
由此可見,算法在程序設(shè)計中的重要性。
排序算法中的冒泡排序和選擇排序相對簡單,有利于初學(xué)者循序漸進(jìn)的學(xué)習(xí)。對于剛剛接觸程序設(shè)計的學(xué)生來講,從這兩種算法開始是非常不錯的選擇。
1)理論基礎(chǔ)薄弱,在程序設(shè)計方面大多是零基礎(chǔ)。C語言是在五年制高職計算機(jī)軟件專業(yè)低年級開設(shè)的一門必修課,授課對象是初中畢業(yè)生。在此之前,這些學(xué)生大都沒有接觸過程序設(shè)計,甚至不知道什么是程序設(shè)計,這為教學(xué)工作帶來了很大的阻力。
2)自信心強(qiáng),又具有極強(qiáng)的好奇心與求知欲,喜歡運(yùn)手操作,但抽象思維和自主學(xué)習(xí)能力相對薄弱,厭煩枯燥的文字講解。在教學(xué)過程中,教師要盡量使用簡單、直觀的演示方式,使抽象的程序設(shè)計過程形象、生動起來。
3)層次不一,學(xué)習(xí)能力存在很大的差異。教師要根據(jù)學(xué)生的特點采用分層教學(xué)的方法,以滿足不同學(xué)生的需求,并教會學(xué)生自主學(xué)習(xí),突破零起點、高臺階的瓶頸。
數(shù)組[1]是C語言中重要的數(shù)據(jù)類型,通過數(shù)組可以進(jìn)行數(shù)據(jù)的排序運(yùn)算。排序算法是一種基本算法,而冒泡排序和選擇排序是排序算法中的基礎(chǔ)知識,學(xué)生接觸算法也是從它們開始的。讓學(xué)生熟練掌握這兩種算法很有必要,可以為培養(yǎng)學(xué)生的程序設(shè)計能力打下良好的基礎(chǔ)。
教學(xué)目標(biāo)是一種在教學(xué)活動之前預(yù)期的學(xué)生學(xué)習(xí)結(jié)果,即教師預(yù)先設(shè)定學(xué)生在完成某一課題的學(xué)習(xí)后應(yīng)達(dá)到的標(biāo)準(zhǔn)。教學(xué)目標(biāo)的確定是否全面、準(zhǔn)確、具體、切合實際,對課堂教學(xué)至關(guān)重要。確定教學(xué)目標(biāo)的依據(jù)是課程標(biāo)準(zhǔn)、教材和學(xué)情,三者缺一不可。在擬定教學(xué)目標(biāo)的過程中,必須“隱”“顯”兼顧,“近”“遠(yuǎn)”結(jié)合,使教學(xué)目標(biāo)具有科學(xué)性、全面性、準(zhǔn)確性和針對性。
根據(jù)課程標(biāo)準(zhǔn)、冒泡排序和選擇排序的教學(xué)內(nèi)容與特點,同時考慮到五年制高職學(xué)生的學(xué)情,確定教學(xué)目標(biāo):
1)理解冒泡排序和選擇排序的基本原理,能夠熟練應(yīng)用冒泡排序算法進(jìn)行運(yùn)算,學(xué)會使用選擇排序算法解決同樣問題。
2)在理解程序設(shè)計基本方法的基礎(chǔ)上,拓展其在現(xiàn)實中的應(yīng)用,并通過程序設(shè)計,激發(fā)學(xué)生在預(yù)測基礎(chǔ)上追求結(jié)果的成就感。
教學(xué)方法是多種多樣的。每種方法都有其獨特的作用和一定的適用范圍。教學(xué)方法的選擇受教學(xué)目標(biāo)、教學(xué)內(nèi)容、教師特點、學(xué)生的年齡特征和知識基礎(chǔ)等因素的影響。在教學(xué)過程中,筆者以任務(wù)驅(qū)動教學(xué)法為主,結(jié)合使用情境導(dǎo)入、小組合作、分層教學(xué)的方法。其中小組合作教學(xué)法的關(guān)鍵在于分組,分組的前提條件是摸清學(xué)生目前的知識結(jié)構(gòu),按照組間同質(zhì)、組內(nèi)異質(zhì)的原則進(jìn)行分組[2]。
皮亞杰曾說:“所有智力方面的工作者,都依賴于興趣”。為了讓學(xué)生對抽象的C語言產(chǎn)生學(xué)習(xí)興趣,可以嘗試將對新知識的探索融入游戲等生活情境中。通過游戲設(shè)疑,展示結(jié)果,分析程序結(jié)構(gòu),并結(jié)合動畫演示,使抽象的原理變得具體形象,一定能取得事半功倍的效果。
例如,以排序游戲作為教學(xué)過程的開始。首先,宣布游戲規(guī)則,即冒泡排序的原理的實際運(yùn)用。然后,讓學(xué)生代表按照游戲規(guī)則對手中撲克牌進(jìn)行排序,如升序。排序結(jié)束后,組織其他學(xué)生觀察撲克牌的順序變化。結(jié)果顯示,撲克牌已經(jīng)由亂序變?yōu)樯?。在此設(shè)疑,為什么經(jīng)過這樣的過程會產(chǎn)生這樣的結(jié)果呢?如果利用程序語言該怎樣完成這一任務(wù)呢?學(xué)生知道游戲規(guī)則,但是不知道為什么要制定這種規(guī)則。學(xué)生在“只知其一,不知其二”的情況下進(jìn)行游戲,在教師的提問中思考,充分激發(fā)了學(xué)習(xí)興趣。
萬丈高樓平地起,學(xué)生循序漸進(jìn)地接受新知的過程是打牢基礎(chǔ)的過程,是非常重要的環(huán)節(jié)。在觀察整個排序過程后總結(jié)規(guī)律,得出冒泡排序的基本理念。由表及里,為深入理解后面的原理做好鋪墊。接著,梳理過程,挑揀出關(guān)鍵步驟。然后,舊知新用,利用之前學(xué)習(xí)過的知識,根據(jù)關(guān)鍵步驟編寫關(guān)鍵語句,意在幫助學(xué)生循序漸進(jìn)地完成代碼編寫過程。趁熱打鐵,進(jìn)行語句整合,利用程序語言完成排序任務(wù)。
學(xué)生初步理解算法理念之后,層層遞進(jìn),帶領(lǐng)學(xué)生透過表象,探索原理,進(jìn)一步提高他們對算法的認(rèn)知程度。
1)設(shè)置疑問,遞進(jìn)思考。從元素位置、順序變化、內(nèi)外循環(huán)關(guān)系等方面引導(dǎo)學(xué)生展開組內(nèi)討論,初步理解冒泡排序原理。
2)分層教學(xué),動畫助學(xué)。學(xué)生根據(jù)自身情況借助動畫演示理解程序過程。
3)要點總結(jié),拎清特點。逐層深入,總結(jié)冒泡排序原理的特點,幫助學(xué)生進(jìn)一步理解冒泡排序原理的結(jié)構(gòu)。
4)填流程圖,理清思路。通過動畫演示,總結(jié)算法特點,組內(nèi)討論,補(bǔ)充流程圖,幫助學(xué)生理清思路,了解程序結(jié)構(gòu)。
5)探究實質(zhì),深入挖掘。學(xué)生進(jìn)行小組討論,深層次探討算法實質(zhì)。教師巡視并參與到討論中,發(fā)現(xiàn)問題及時解決,共性問題集中解決。
6)程序動作,預(yù)測效果。讓學(xué)生設(shè)計程序并演示程序片段、預(yù)測結(jié)果,培養(yǎng)學(xué)生由抽象向具體轉(zhuǎn)換的能力。
發(fā)散思維(Divergent Thinking),又稱為擴(kuò)散思維或求異思維,表現(xiàn)為思維視野廣闊,呈現(xiàn)多維發(fā)散狀,包括“一題多解”“一事多寫”“一物多用”等方式[3]。
引導(dǎo)學(xué)生學(xué)習(xí)選擇排序。具體過程,相對于同樣的數(shù)列,給出不同的排序規(guī)則。學(xué)生根據(jù)新規(guī)則和選擇排序的演示動畫,初步自學(xué)選擇排序,完成排序過程。通過觀察、比較、討論,幫助學(xué)生進(jìn)一步理解選擇排序的過程,為編寫關(guān)鍵語句做好鋪墊。最后,找出關(guān)鍵步驟,將原理轉(zhuǎn)化為程序語言。同時,針對同一問題尋求多種解決方案,培養(yǎng)學(xué)生的發(fā)散思維能力。
對比教學(xué)是指在教學(xué)活動中將兩個或兩個以上的認(rèn)識對象放在一定的條件下,按照同一標(biāo)準(zhǔn)進(jìn)行對照、比較,從而確定認(rèn)識對象屬性的異同、作用的大小、性能的優(yōu)劣、問題的難易或認(rèn)識的正誤深淺,以達(dá)到辨識、了解和把握認(rèn)識對象之目的的一種方法。對比教學(xué)法是常用的教學(xué)方法之一,使用范圍非常廣。如利用動畫演示分別使用冒泡排序和選擇排序?qū)ν唤M數(shù)列進(jìn)行排序運(yùn)算的過程,通過填寫表格的形式對比出兩種方法在算法和代碼方面的區(qū)別,可以幫助學(xué)生深入理解兩種算法的原理,并且通過比較兩種排序方法的執(zhí)行代碼,加深對代碼的理解和記憶。
學(xué)生的接受能力和理解能力有很大差異,可以進(jìn)行分層教學(xué),利用不同層次的習(xí)題鞏固理論知識,加深學(xué)生對算法的理解。設(shè)置基礎(chǔ)任務(wù)和拓展創(chuàng)新任務(wù),為學(xué)生提供創(chuàng)新思維平臺,讓學(xué)生不必拘于一種思維方式,鍛煉創(chuàng)新思維能力[4-5]。如任務(wù)可以設(shè)置為:
1)基礎(chǔ)任務(wù)——按由大到小的順序排列10個地區(qū)的面積??紤]比較過程中外循環(huán)次數(shù)、內(nèi)循環(huán)交換次數(shù),排序后兩兩之間的交換次數(shù)。如利用冒泡排序?qū)ι鲜鰯?shù)列進(jìn)行降序排列。
2)拓展創(chuàng)新任務(wù)——有10個質(zhì)量未知且不等的蘋果和一臺電子秤,用你的方法,按質(zhì)量從小到大的順序排列這10個蘋果,并嘗試完成這個過程。
學(xué)生通過交流總結(jié),及時修正練習(xí)題解答中的不足之處,強(qiáng)化學(xué)習(xí)效果,培養(yǎng)分析問題、解決問題的能力和交流能力,學(xué)會傾聽他人意見。具體操作過程如下:
1)針對學(xué)生上傳的“習(xí)題一”答案,采取匿名的方式,將錯誤的答案拿出來共同探討。
2)“習(xí)題二”部分,小組間交流互換思路,取長補(bǔ)短。
3)完成課堂效果驗收評價表。
4)學(xué)生總結(jié)本節(jié)課的收獲,教師補(bǔ)充,并對各組表現(xiàn)給予評價[6]。
讀懂課程內(nèi)容,做到“遠(yuǎn)”“近”兼顧,“隱”“顯”結(jié)合;讀懂學(xué)生,遵循學(xué)生由具體—抽象—具體的認(rèn)知活動規(guī)律,確定目標(biāo),多種教學(xué)手段相結(jié)合,為學(xué)生提供拓展創(chuàng)新思維的平臺,可以激發(fā)學(xué)生的學(xué)習(xí)興趣,使他們主動探索、接受、消化知識,更好地完成教學(xué)任務(wù),并為今后的學(xué)習(xí)打下堅實的基礎(chǔ)。
[1]譚浩強(qiáng).C程序設(shè)計[M].北京:清華大學(xué)出版社,2010:142-146.
[2]陳寶芬.小組合作教學(xué)法在高職計算機(jī)實踐教學(xué)中的應(yīng)用:如何進(jìn)行分組[J].內(nèi)蒙古石油化工,2011,37(24):112-113.
[3]姚小兵.高職院校計算機(jī)教育創(chuàng)新的探索[J].科技情報開發(fā)與經(jīng)濟(jì),2007,17(22):253-254.
[4]熊治榮.任務(wù)驅(qū)動法在程序設(shè)計教學(xué)中的應(yīng)用[J].硅谷,2009(12):157.
[5]戎小群.高職軟件技術(shù)專業(yè)課程體系目標(biāo)的創(chuàng)設(shè)[J].教育與職業(yè),2010(35):136-137.
[6]謝翠萍,陳家益.C語言中冒泡排序教學(xué)設(shè)計與分析[J].福建電腦,2013(5):50-51.