程序設計的內(nèi)容相對于信息技術學科的其他內(nèi)容來說較為抽象,雖然目前我們使用的教材中列舉的算法都是一些典型的、常見的例子,但算法仍是學生較難理解和掌握的內(nèi)容。
算法原本來自生活,是解決問題的策略和步驟的提煉,何不將算法融人生活中呢?這里筆者結(jié)合江蘇省高中信息技術必修教材的程序設計內(nèi)容,介紹三種融入式的游戲教學方法實例。
使用道具法
適當?shù)厥褂媒虒W道具是傳統(tǒng)課堂中一種常用和有效的輔助教學方法,在程序設計教學中靈活運用教學道具同樣可以讓課堂教學生動而富有樂趣。
例如,在講授“交換兩個變量中的數(shù)據(jù)”這個基本算法時,筆者首先拿出事先準備好的教學道具——兩個相同的瓶子,瓶子上分別貼有標簽“x”和標簽“y”,瓶子里面裝滿不同顏色的溶液,要求交換這兩個瓶子里的溶液,接著讓一名學生走上講臺完成這個要求。根據(jù)生活經(jīng)驗,這是一個顯然不可能完成的任務,這名學生面露難色,向教師提出增加一個空瓶的要求,教師很樂意地拿出一個同樣的空瓶子,上面貼有標簽“m”??吹竭@里,很多學生很自然地聯(lián)系到這三個瓶子分別對應變量“x”、“y”和中間變量“m”。其實,筆者并不一定要求學生真正去交換兩個瓶子中的溶液,而是讓學生去思考這樣一個實際生活問題的解決過程和步驟,進而很自然地引出計算機程序設計算法的描述。
通過上面的演示和分析,學生很容易就歸納出這個算法的步驟。具體描述如下:
已知變量x和y中分別存放了數(shù)據(jù),現(xiàn)在要交換其中的數(shù)據(jù)。為了達到交換的目的,需要引進一個中間變量m,其算法如下:
?、賹中的數(shù)據(jù)送給變量m,即x→m:
?、趯中的數(shù)據(jù)送給變量x,即y→x;
③將m中的數(shù)據(jù)送給變量y,即m→y。
這個算法是教材中安排的第一個基本算法,它的思想及過程更多地應用在很多相對復雜的大型程序中。筆者通過一個小游戲開場,不僅讓學生帶著興趣接受了這樣一個小算法,還讓學生明白原來計算機程序并不像想象中那么神秘,算法其實就是解決實際問題的步驟和過程,從而很自然地將學生引入程序設計的課堂。
為了進一步激發(fā)學生的求知欲,同時也為后續(xù)知識的展開稍作鋪墊,筆者又提出了兩點思考:“如果兩個瓶子不一樣,是否可以交換瓶子中的溶液”和“當前容器中的溶液”。這兩點思考分別聯(lián)系后續(xù)知識點:變量的數(shù)據(jù)類型和變量的特點。
趣味實例法
我們選用的教材中學習的高級語言Visual Basic(簡稱VB)是一種面向?qū)ο蟮某绦蛟O計語言,具有很強的可視化操作性,很多知識點都融入在一些簡單有趣的實例中。教師可以先演示實例的運行效果,這些有趣的實例對學生有較強的吸引力,可激發(fā)學生學習的興趣和求知的欲望。結(jié)合這些趣味實例的演示與分析,不僅讓學生在快樂的學習中掌握了知識點,還進一步激發(fā)了學生的創(chuàng)新思維。
例如,在講授“星星閃爍”的實例時,首先讓學生想象一下自己心中的星空景象,接著教師寅示了該實例的效果,同時提出了三點思考:“如何改變星星及天空的顏色”、“如何增減天空中星星的個數(shù)”及“如何改變星星閃爍的時間間隔”。該實例的效果圖、屬性設置及程序代碼如下。
為了實現(xiàn)星星閃爍的效果,本例設置了一個定時器控件,窗體啟動后,每隔500ms觸發(fā)一次Timer事件,在該事件中使用循環(huán)語句隨機產(chǎn)生50個坐標值,然后用窗體的Pset方法在這些坐標處畫點,窗體上就會出現(xiàn)星星的效果。在Timer事件的開頭,使用Cls方法清屏,以產(chǎn)生閃爍效果。完成本程序需要在設計階段設計的屬性如下表。(屬性表和代碼中粗體字為思考題的答案,即需要修改的地方)
在教師的演示和提示下,學生通過討論和思考很快就找到了解決問題的答案。趁著學生剛剛有了一定的成就感,教師分析并歸納了本實例的知識點,即在本實例中循環(huán)語句的設置是關鍵。
為了進一步激發(fā)學生的創(chuàng)新思維,教師可提出更進一層的思考,如“如何產(chǎn)生五顏六色的星星”、“如何產(chǎn)生不同形狀的星星,如圓形、五角形”,同時教師也可以作適當提示,其中的知識點又與后續(xù)知識有一定聯(lián)系,這樣學生學習的興趣能夠有效地保持并延伸到將來的學習中去。課后,有一名學生還問“能否將自己的姓名書寫在星空中”,當時我很欣慰地作了解答。
親身體驗法
很多在初學者看來抽象難懂的算法,其實只要換一個角度來看,換一個方式來理解,就可以變抽象為通俗。例如:筆者在講授經(jīng)典的排序算法時,嘗試用游戲的方式讓學生親身體驗到了算法的魅力,并感悟到了算法的內(nèi)涵。
這里以教材中提到的最簡單的簡單選擇排序為例,介紹如何將排序的思想融入游戲中。以下是筆者引用的例題和程序代碼:
[例]輸入10個數(shù),將它們按從小到大順序排列輸出
[實踐過程]
在講解該實例時,筆者先對學生介紹了簡單選擇排序的基本思路,并提醒學生注意代碼中的關鍵點。接下來要求學生根據(jù)簡單選擇排序的思想完成一個排隊的小游戲,為了便于操作,筆者要求只上來6名學生,由其中5名高矮相差明顯的學生隨機排成一列,另1人為排隊的指揮員,最后排成一列由矮到高的隊伍,這樣擔任“指揮員”的學生相對來說對算法的理解就要求更深一些。筆者還有意讓班級的體育委員來挑選小組成員,包括體育委員在內(nèi)的學生都因為這個小小的安排變得更加積極和踴躍起來,原本略顯抽象空洞的程序設計課也充滿了樂趣。
其中,為了體現(xiàn)算法的一些重要細節(jié),筆者還有意要求學生通過一些動作來演示,如為了表達“a(j)
[分析與歸納]
通過教師的恰當引導和學生的積極參與,學生較好地掌握了這個經(jīng)典的排序算法。學生分析并歸納了本算法的關鍵;確定內(nèi)外層循環(huán)變量及初始值和終止值;理解“aU) 教師也進一步引導學生,今天講到的簡單選擇排序方法雖然簡單,但是其中的思想應用十分廣泛。
[進一步思考]
為了進一步激發(fā)學生的學習熱情,筆者又提出了兩點思考。
第一個思考是書中的“實踐與探索”:仔細分析上例程序不難看出,每進行一次比較,只要a(j) 要求學生能夠在原代碼的基礎上做出修改,并且能夠繼續(xù)用今天排隊的方式表演出來。
第二個思考是“后面我們將有機會學習到另一個經(jīng)典的排序算法——冒泡排序,到時候希望今天的原班人馬為我們表演續(xù)集”。
第二個思考雖然并不需要學生現(xiàn)在去思考,但為后續(xù)章節(jié)埋下了伏筆,也進一步提高了學生的學習興趣。
(作者單位:江蘇省鎮(zhèn)江高等專科學校丹陽校區(qū)教師教育系 21231