縣里舉辦高中信息技術(shù)研討課。讓我在一個(gè)基礎(chǔ)最薄弱的學(xué)校上一堂《選擇排序》算法課。也就是說,給最差的學(xué)生講解最難的知識(shí)。這無疑是一個(gè)很大的挑戰(zhàn)。
分析該校學(xué)生的情況,他們?cè)趯W(xué)習(xí)之前已經(jīng)知道了表示算法的三種方式,學(xué)過了流程圖,會(huì)辨認(rèn)每個(gè)圖框及其表示意思,可能難以理解什么條件下兩個(gè)數(shù)據(jù)要交換以及如何找到最小數(shù),會(huì)搞混流程圖中多個(gè)控制變量所代表的作用。教師如果直接拿出整個(gè)排序的復(fù)雜算法分析,會(huì)嚇倒學(xué)生,學(xué)生注意力難以長時(shí)間集中。于是,我把選擇排序算法進(jìn)行肢解,分解為一個(gè)個(gè)小知識(shí)點(diǎn),再各個(gè)突破,這樣,由淺入深、由小到大,前后呼應(yīng),上課節(jié)奏波浪起伏,直到解決完整算法,完成“讓學(xué)生掌握選擇排序算法的具體過程,會(huì)畫出選擇排序流程圖,體驗(yàn)算法與生活的緊密聯(lián)系,感受解決算法的成功感”的教學(xué)目標(biāo)。
一、教學(xué)重點(diǎn)、難點(diǎn)與突破策略
教學(xué)重點(diǎn)、難點(diǎn):選擇排序的算法及其表示。
策略:講授法為主,適當(dāng)讓學(xué)生討論與體驗(yàn)。
二、課前準(zhǔn)備
素材:“世界七大洲最高峰”Excel表格、選擇排序的Visual Basic演示程序。
教學(xué)環(huán)境:多媒體教室或者機(jī)房。
三、教學(xué)過程
1.導(dǎo)入
教師由Excel排序功能導(dǎo)入排序。
師:我們都已經(jīng)學(xué)過了電子表格Excel,感受到了Excel給我們的日常生活、學(xué)習(xí)與工作帶來的便利。其中的“排序”功能,能把一組數(shù)據(jù)按照一定的順序排列好。我這里有一個(gè)“世界七大洲最高峰”的表格。想要讓山峰數(shù)據(jù)從高到低排列好。怎么做呢?
請(qǐng)學(xué)生上來操作。
愛思考、會(huì)動(dòng)腦筋的學(xué)生會(huì)提出疑問,電腦到底是怎么樣把數(shù)據(jù)按照順序排列好的?我們能否不用Excel,自己編寫一個(gè)程序?qū)崿F(xiàn)排序功能呢?
設(shè)計(jì)意圖:復(fù)習(xí)Excel的重點(diǎn)內(nèi)容“排序操作”,并導(dǎo)入排序。在Excel中用鼠標(biāo)點(diǎn)來點(diǎn)去,對(duì)高中生來說已是“小兒科”,他們自然提出自己寫一個(gè)程序?qū)崿F(xiàn)排序的想法。只要學(xué)生有膽量提出這個(gè)想法,也就成功了一半。
2.新知講解
師:今天給大家介紹一種排序方法——選擇排序。大家認(rèn)真觀察選擇排序到底是怎么排列數(shù)據(jù)的,其排序的過程是怎樣的。
教師出示四個(gè)數(shù)三次排序的圖示,并根據(jù)圖示講解選擇排序的過程。
師:按“108→120→96→75”順序排列的這四個(gè)數(shù)最終要排成“75→96→108→120”這樣一個(gè)從小到大的序列。第一次,從四個(gè)數(shù)中找到最小數(shù)75,與108交換位置。第二次,從剩下的三個(gè)數(shù)中找到最小數(shù)96,與120交換位置。第三次,從剩下的兩個(gè)數(shù)中找到最小數(shù)108,與120交換位置。
得出選擇排序的方法(略)。
師:請(qǐng)用選擇排序方法,從大到小排列四個(gè)數(shù)。
3.計(jì)算機(jī)選擇排序的循序漸進(jìn)
學(xué)生排過序后,教師演示電腦幫忙排序——對(duì)著電腦,拍拍顯示器(就像拍人肩膀)說:“電腦,你幫我把這四個(gè)數(shù)按從大到小的順序排列起來?!庇袑W(xué)生在偷笑,“老師,電腦聽得懂嗎?”
師:對(duì),上個(gè)學(xué)期我們就已經(jīng)學(xué)習(xí)過了,讓計(jì)算機(jī)幫我們做事情,要用計(jì)算機(jī)語言與它交流,講自然語言,它聽不懂,自然不會(huì)理睬你。
師生回顧表示算法的三種方法:自然語言→流程圖→程序語言。
師:自然語言轉(zhuǎn)換成流程圖是系統(tǒng)分析師做的事情,流程圖轉(zhuǎn)換成程序語言是程序員做的事情。兩類人的身價(jià)是不一樣的,前者的年薪是后者的3~5倍。今天,我們要做的是把自然語言轉(zhuǎn)化為流程圖,做系統(tǒng)分析師的事情。也就是畫出“選擇排序”的流程圖,價(jià)值很高,相信大家能很好地完成。
設(shè)計(jì)意圖:用幽默詼諧的語言吸引學(xué)生注意力;由人才市場(chǎng)實(shí)際薪酬報(bào)價(jià)提升本堂課內(nèi)容的價(jià)值,引起學(xué)生的興趣,無縫引導(dǎo)學(xué)生畫出選擇排序的流程圖。
學(xué)生得出“開始→選擇排序→結(jié)束”的流程圖。
師:這個(gè)流程圖沒錯(cuò),可是實(shí)際問題還沒有解決,到底選擇排序是怎樣進(jìn)行的呢?
請(qǐng)一位學(xué)生起立,對(duì)照上面實(shí)例,引導(dǎo)學(xué)生問答進(jìn)行排序要有兩步:第一步,找最小數(shù);第二步,交換位置。
師:你的觀察很仔細(xì),對(duì)解決我們今天的問題具有啟示意義。選擇排序其實(shí)就是圍繞這兩步展開的。
從而得到“開始→選擇排序→找最小數(shù)→互換→結(jié)束”的線性流程圖。
師:請(qǐng)對(duì)比數(shù)據(jù)108、120、96、75,“找最小數(shù)”和“交換位置”要重復(fù)幾次?
生:3次。
師:如果總共5個(gè)數(shù),重復(fù)幾次?
師生得出結(jié)論,循環(huán)次數(shù)比數(shù)據(jù)個(gè)數(shù)少一次,因?yàn)樽詈笠淮蔚淖詈笠粋€(gè)數(shù)不用比較。重復(fù)做同一件事情,在教師的引導(dǎo)下,學(xué)生想到了循環(huán),得出流程圖一并逐步推演程序的執(zhí)行過程。
選擇排序流程圖一
難點(diǎn)一步一步在突破,流程圖也完整多了。
師:數(shù)據(jù)交換是不是每次都要進(jìn)行?
師生通過分析兩個(gè)真實(shí)的數(shù)據(jù)排列的實(shí)例,引導(dǎo)學(xué)生得出結(jié)論:如果i≠k,交換位置;否則,不交換位置。(i表示第幾次循環(huán),k表示最小數(shù)的位置。)
師:剛才我們無意中一起講到了一個(gè)經(jīng)典的選擇結(jié)構(gòu)。其實(shí),每個(gè)人天生就是程序員,每天講著算法語言過日子,只是缺乏一種發(fā)現(xiàn)的眼光罷了。早上來學(xué)校的路上,聽到一位老奶奶說:“早上下雨的話,撐傘去菜場(chǎng)買菜;不下雨,空著手去買菜?!蔽衣犃撕芨吲d,這也是一句經(jīng)典的選擇結(jié)構(gòu),我畫出買菜和數(shù)據(jù)交換的流程圖與大家分享(圖略)。
設(shè)計(jì)意圖:用貼近生活的算法語言作類比,減少算法的距離感。學(xué)到這里,學(xué)生思維已經(jīng)有些疲勞了,用詼諧幽默的語言放松學(xué)生緊繃的神經(jīng)。
將數(shù)據(jù)交換條件的流程圖納入到整個(gè)流程圖一中,得出流程圖二。
選擇排序流程圖二
師:你看,我們一步一步分析下來,流程圖從簡(jiǎn)單到復(fù)雜,是不是很有成就感?我們離成功還有一步之遙,還差哪一步呢?
生:怎樣在一組數(shù)中找到最小數(shù)據(jù)?
教師請(qǐng)學(xué)生起來,回答按“108→120→96→75”排列的四個(gè)數(shù)中哪個(gè)數(shù)最小。學(xué)生很快回答出來。
師:這么快就找到了!老師可是花了老半天時(shí)間才找到最小數(shù)——第一眼看到了108,第二眼看到120,眨了一下眼睛看到了96,最后才發(fā)現(xiàn)了75,再加上大腦的一一比較判斷,發(fā)現(xiàn)最小數(shù)是75。像你反應(yīng)這么快,IQ肯定很高。我能學(xué)會(huì)算法,你更能學(xué)得會(huì)了。大家請(qǐng)看老師的大腦分析過程:
注:k表示最小數(shù)位置,d(k)表示最小數(shù)
總結(jié):找到一個(gè)數(shù),如果比d(k)還要小,那么這個(gè)數(shù)字就是最小的,把它的標(biāo)記給k。這樣一次一次不斷做下去。
設(shè)計(jì)意圖:使用幽默風(fēng)趣的語言,讓學(xué)生在不知不覺中同教師一起發(fā)現(xiàn)了解決問題的算法。
根據(jù)以上分析,在教師的指引下,分以下三步從簡(jiǎn)單到復(fù)雜畫出找最小數(shù)的流程圖:
(1)如果有比d(k)還要小的數(shù),則把這個(gè)數(shù)的標(biāo)記給k。畫出流程圖。
?。?)一個(gè)一個(gè)比較下去,要比較幾次?4次循環(huán)。在上圖基礎(chǔ)上加上循環(huán)部分。
?。?)剛開始假設(shè)第一個(gè)最小,k=1,從第二個(gè)開始與它比較,j=2。J表示下一個(gè)數(shù)。在上圖基礎(chǔ)上加上初始值,最終得出找最小數(shù)流程圖:
找最小數(shù)流程圖
根據(jù)流程圖分析,用數(shù)據(jù)“108→120→96→75”的隊(duì)列驗(yàn)證找最小數(shù)流程圖是正確的。
師:選擇排序的最后一個(gè)難關(guān)被我們攻破了?,F(xiàn)在我們把找最小數(shù)流程圖納入到整個(gè)流程圖中,就成了選擇排序完整的流程圖(如流程圖三)。
選擇排序流程圖三
4.驗(yàn)證流程圖
師生綜合分析整個(gè)選擇排序的流程圖,找到哪一塊是“找最小數(shù)”的程序塊,哪一塊是“交換”的程序塊,再接著用將“3→1→2”排列成“1→2→3”的實(shí)例共同驗(yàn)證流程圖正誤。
師:我們成功了??磥?,流程圖沒有問題,能進(jìn)行正確的選擇排序。
設(shè)計(jì)意圖:讓學(xué)生積極參與到算法活動(dòng)中,體會(huì)算法正誤,體驗(yàn)理解正確的喜悅。
5.書本勘誤
師:細(xì)心的同學(xué)可能會(huì)發(fā)現(xiàn),我們教科書的第37頁上的圖與我們的圖有出入。
(1)應(yīng)將圖2、3、6中的d (j) 改為d(i);
?。?)應(yīng)將圖2、3、7中的k=1改為k=i;
師:有興趣的同學(xué)可以寫信給作者,和他探討一下,說不定作者還會(huì)給咱們回信。
6.程序演示
師:有了流程圖,我們就可以把它翻譯成程序語言。老師已經(jīng)根據(jù)我們一起畫的流程圖寫了選擇排序的程序代碼,大家一起來欣賞。
程序運(yùn)行,輸入一組數(shù),按次序排列好。
四、問題研討
《算法與程序設(shè)計(jì)》選修模塊,內(nèi)容抽象乏味,教師教得辛苦,學(xué)生學(xué)得也辛苦,特別是算法一章更是晦澀難懂,課堂上大部分學(xué)生跟不上教師節(jié)奏,聽得糊里糊涂,似懂非懂,效果很差。怎樣上好《算法與程序設(shè)計(jì)》?上完本課,我認(rèn)為以下方法具有啟示作用:
1.分而治之,各個(gè)擊破。其實(shí)再難的問題,再復(fù)雜的難點(diǎn),都可以分解為一個(gè)個(gè)淺顯易懂的小知識(shí)點(diǎn)。選擇排序是很難、很復(fù)雜的算法,我在這里特意將它分割成“每次做什么”、“重復(fù)幾次”、“怎么交換”、“怎么找最小數(shù)”四個(gè)相對(duì)容易的分知識(shí)點(diǎn),然后引導(dǎo)學(xué)生分別突破四個(gè)分知識(shí)點(diǎn),最終解決整個(gè)選擇排序算法。教師自己首先要把每個(gè)知識(shí)點(diǎn)的來龍去脈、前因后果爛熟于胸,才能順利分割知識(shí)點(diǎn),才能引領(lǐng)學(xué)生將難點(diǎn)各個(gè)攻破。
2.由淺入深,步步為營。如果教師在上課一開始時(shí)就拋出選擇排序的完整算法,可能有一大部分學(xué)生會(huì)懵掉,跟不上教師的思路。換種方式,抓住一條主線,從簡(jiǎn)單問題入手,以學(xué)生現(xiàn)有的知識(shí)為基礎(chǔ),逐步加深,無縫過渡,直到掌握最終的知識(shí)為止。這樣設(shè)計(jì)結(jié)構(gòu)清晰,學(xué)生容易接受,并且前后呼應(yīng),符合邏輯。
3.幽默詼諧,生動(dòng)活潑。一般而言,算法內(nèi)容抽象、晦澀,很難與生活實(shí)際聯(lián)系,與學(xué)生距離遠(yuǎn)。但算法本來就是源于生活,如果教師能夠細(xì)心觀察,多多思考,完全可以使算法的課堂變得充滿人情味,生活氣息十足,如本課中人與計(jì)算機(jī)對(duì)話,老奶奶講算法語言等等。在教學(xué)過程中以貼近生活的語言拉近學(xué)生和算法之間的距離,用詼諧風(fēng)趣的話語拉近學(xué)生和教師之間的距離,不斷給予學(xué)生鼓勵(lì)、夸獎(jiǎng),建立學(xué)好算法的信心,培養(yǎng)學(xué)生對(duì)算法與程序設(shè)計(jì)的興趣,這才是第一位的。
4.節(jié)奏合理,時(shí)起時(shí)伏。算法課總是少不了大量的邏輯推理和因果判斷。如果整堂課都充斥著緊張推算,學(xué)生思維疲勞,學(xué)習(xí)效果很差。教師可以采取一些變化,每一步之間,盡量松緊結(jié)合,既講了復(fù)雜的內(nèi)容,又有輕松的內(nèi)容調(diào)節(jié)學(xué)生緊繃的神經(jīng),學(xué)生的學(xué)習(xí)效果自然更好。
以上幾點(diǎn)綜合應(yīng)用,可以很好地化解難點(diǎn),改變學(xué)生對(duì)算法課的恐懼心理,提高教師上課效率,改善算法與程序設(shè)計(jì)的課堂。
?。ㄗ髡邌挝唬赫憬笊街袑W(xué))