摘 要: 算法初步是新課程新增的內(nèi)容之一,相對(duì)其它內(nèi)容來(lái)說(shuō),這是一塊全新的內(nèi)容,與現(xiàn)代信息技術(shù)聯(lián)系緊密,即使是數(shù)學(xué)教師,在教學(xué)中也會(huì)遇到很多困難。本文就算法的本質(zhì),學(xué)生學(xué)習(xí)的重點(diǎn)與難點(diǎn),如何利用好教材,實(shí)際教學(xué)中的“發(fā)現(xiàn)”等問(wèn)題作了有益的探討。
關(guān)鍵詞: 算法初步 程序化思想 框圖 程序語(yǔ)言
算法初步是普通高中數(shù)學(xué)人教A版必修《數(shù)學(xué)3》的第一章內(nèi)容,也是新課程新增的內(nèi)容之一,它將數(shù)學(xué)與現(xiàn)代信息技術(shù)緊密聯(lián)系在了一起。由于它與其它數(shù)學(xué)模塊的邏輯聯(lián)系相對(duì)較少,而與計(jì)算機(jī)方面有更多關(guān)聯(lián),在教學(xué)過(guò)程中學(xué)生對(duì)這一內(nèi)容表現(xiàn)出了更多的學(xué)習(xí)興趣。
經(jīng)過(guò)一輪教學(xué)實(shí)踐后,我對(duì)算法思想有了更進(jìn)一步的認(rèn)識(shí)。算法的本質(zhì)是什么?數(shù)學(xué)中的算法教學(xué)與計(jì)算機(jī)程序設(shè)計(jì)中的算法教學(xué)有哪些聯(lián)系與區(qū)別?如何更好地處理和利用教材,才能讓學(xué)生更好地掌握算法的本質(zhì)?這些問(wèn)題在教學(xué)過(guò)程中一直在我的腦海里盤繞著。
一、算法本質(zhì)是什么?
人教A版《數(shù)學(xué)3》對(duì)算法的定義:在數(shù)學(xué)中,算法通常是指按照一定規(guī)則解決某一類問(wèn)題的明確和有限的步驟?,F(xiàn)在,算法通常可以編成計(jì)算機(jī)程序,讓計(jì)算機(jī)執(zhí)行并解決問(wèn)題。
我們可以看出人教A版《數(shù)學(xué)3》中的表述是考慮了學(xué)生的知識(shí)基礎(chǔ),去除了一些計(jì)算機(jī)術(shù)語(yǔ)后的描述性定義,這樣的描述比較容易被高中生所接受。而且定義中對(duì)算法的范圍作了界定:在數(shù)學(xué)中,對(duì)算法的重要特征及其內(nèi)涵作了精要的概括:有序性、明確性、有限性、可行性、通用性。只有對(duì)算法的相關(guān)特征有了較深刻的認(rèn)識(shí)之后,我們才能說(shuō)對(duì)算法的概念有了較好的理解。當(dāng)然必須結(jié)合具體的實(shí)例讓學(xué)生體會(huì)算法的內(nèi)涵與特征,才會(huì)有好的效果,而且也不能期望通過(guò)一兩個(gè)課時(shí)就讓學(xué)生全面掌握這些特征,這應(yīng)該是一個(gè)循序漸進(jìn)的過(guò)程。
普通高中數(shù)學(xué)新課程標(biāo)準(zhǔn)中對(duì)算法含義的要求是:“通過(guò)對(duì)解決具體問(wèn)題過(guò)程與步驟的分析(如:二元一次方程組求解等問(wèn)題),體會(huì)算法的思想,了解算法的含義?!边@里算法的基本思想究竟指什么呢?一種較為廣泛接受的觀點(diǎn)認(rèn)為是“程序化思想”,[1]即把解決問(wèn)題的過(guò)程按照一定的規(guī)則分成明確可行的一個(gè)個(gè)步驟,使得問(wèn)題解決的過(guò)程可以描述成算法中的自然語(yǔ)言、框圖語(yǔ)言或程序語(yǔ)言,從而能利用計(jì)算機(jī)實(shí)現(xiàn)算法,解決問(wèn)題。程序化思想是算法學(xué)習(xí)的指導(dǎo)思想,不論是學(xué)習(xí)自然語(yǔ)言描述算法、框圖語(yǔ)言,還是程序語(yǔ)言,都離不開(kāi)程序化的思想。我們?cè)趯W(xué)習(xí)方程的解法、不等式解法等時(shí),總是習(xí)慣性地總結(jié)一下解題操作的步驟,其實(shí)這正是算法的基本思想——程序化思想的體現(xiàn)。算法思想貫穿于整個(gè)高中數(shù)學(xué)。[2]
二、如何把握教學(xué)的重難點(diǎn):區(qū)分?jǐn)?shù)學(xué)中的算法和計(jì)算機(jī)程序設(shè)計(jì)中的算法的教學(xué)。
有的學(xué)校在教學(xué)算法內(nèi)容時(shí)直接安排計(jì)算機(jī)教師給學(xué)生上課,看起來(lái)是不同學(xué)科教師之間的一次合作,實(shí)際上是沒(méi)有弄清楚數(shù)學(xué)中的算法教學(xué)與計(jì)算機(jī)程序設(shè)計(jì)中的算法教學(xué)的區(qū)別。那這兩者之間到底有何區(qū)別呢?
首先我們來(lái)看看數(shù)學(xué)中的算法和計(jì)算機(jī)程序設(shè)計(jì)中的算法的異同:[3]1.兩門課程中的算法都涉及了算法的概念、程序框圖、三種基本結(jié)構(gòu)、算法思想,以及算法語(yǔ)句等主要知識(shí)點(diǎn),只是細(xì)化程度和要求不同,無(wú)論是廣度,還是深度,技術(shù)課中的數(shù)據(jù)都遠(yuǎn)遠(yuǎn)大于數(shù)學(xué)課。2.兩門課程中的主要區(qū)別應(yīng)該說(shuō)是在算法語(yǔ)句即程序設(shè)計(jì)這一部分,在數(shù)學(xué)課中占有5個(gè)知識(shí)點(diǎn),而算法設(shè)計(jì)中對(duì)程序設(shè)計(jì)的要求多達(dá)12個(gè)知識(shí)點(diǎn),在算法設(shè)計(jì)的要求上技術(shù)課比數(shù)學(xué)課體現(xiàn)的算法思想更復(fù)雜些,多了遞歸、查找、排序等算法,在程序框圖上的要求兩者基本是一致的。3.雖然技術(shù)課中算法的廣度和深度遠(yuǎn)遠(yuǎn)大于數(shù)學(xué)課,但是由于數(shù)學(xué)課中授課時(shí)間較短, 導(dǎo)致了數(shù)學(xué)課中算法的難度反而較大。
所以,我們?cè)凇稊?shù)學(xué)3》中的算法教學(xué)的重點(diǎn)應(yīng)該放在算法意識(shí)和算法思想的教學(xué)上,讓學(xué)生通過(guò)對(duì)實(shí)例進(jìn)行算法分析和程序框圖的學(xué)習(xí)中體會(huì)算法概念與程序化的算法基本思想。對(duì)遞歸、查找、排序等算法不必深究,還有算法語(yǔ)句的教學(xué)應(yīng)注意理解與模仿,不宜花太多精力。我們教學(xué)算法的目的并不是讓學(xué)生成為程序設(shè)計(jì)高手,而是讓他們深刻理解算法思想,能用算法角度觀察分析實(shí)際問(wèn)題。當(dāng)然這也是學(xué)好程序設(shè)計(jì)的重要基礎(chǔ)。
算法教學(xué)的難點(diǎn)是:1.用自然語(yǔ)言描述算法時(shí)步驟如何劃分,這里的訓(xùn)練即是幫助學(xué)生學(xué)會(huì)如何有條理地表述問(wèn)題,形成程序化意識(shí);2.循環(huán)結(jié)構(gòu)中如何確定循環(huán)的條件與循環(huán)體,確定了循環(huán)的條件,也就確定了相應(yīng)的循環(huán)結(jié)構(gòu),而循環(huán)體的確定就使循環(huán)結(jié)構(gòu)非常清楚,所以確定這兩點(diǎn)是弄清循環(huán)結(jié)構(gòu)的關(guān)鍵;3.算法中特有的計(jì)數(shù)變量及賦值符號(hào)的理解,在人教A版的《數(shù)學(xué)3》中賦值符號(hào)是用等號(hào)表示的,學(xué)生容易形成負(fù)遷移而不理解,而江蘇教育出版社版本的教材使用箭頭表示更好理解些,賦值號(hào)的理解直接影響到計(jì)數(shù)變量的理解(如i=i+1),所以學(xué)生只有充分理解賦值號(hào)的意義,才能更好地理解循環(huán)結(jié)構(gòu)這個(gè)難點(diǎn)。
三、如何創(chuàng)造性地利用教材?
1.由游戲引入算法
第一堂課的目的是讓學(xué)生對(duì)算法概念有一個(gè)初步的了解,并在腦子里有一個(gè)大致輪廓,這是非常重要的,對(duì)以后的算法學(xué)習(xí)有一定的指導(dǎo)意義。所以激發(fā)學(xué)生的興趣,讓學(xué)生積極參與到學(xué)習(xí)中來(lái)是非常必要的?!稊?shù)學(xué)3》中使用二元一次方程組的求解過(guò)程來(lái)引入是一個(gè)起點(diǎn)比較低的,適合大多數(shù)學(xué)生的數(shù)學(xué)現(xiàn)實(shí),但我認(rèn)為對(duì)于一些非重點(diǎn)高中的學(xué)生來(lái)說(shuō),大部分學(xué)生對(duì)高中數(shù)學(xué)有畏懼情緒,所以用一些游戲引入更能激發(fā)他們的學(xué)習(xí)興趣。
可選游戲:
(1)從中國(guó)古代數(shù)學(xué)名題雞兔同籠列出二元一次方程組求解,再推廣到一般二元一次方程組求解?
(2)雞、狗、米過(guò)河問(wèn)題,一農(nóng)夫帶著一只雞、一只狗和一袋米來(lái)到河邊準(zhǔn)備渡河,但只有一只小船,一次只能帶一樣?xùn)|西過(guò)河,如果雞和米不能在一起,狗和雞不能在一起,問(wèn)農(nóng)夫怎樣才能安全渡河?
(3)二分法在猜價(jià)格中的應(yīng)用,如主持人出示一個(gè)MP4,誰(shuí)猜中準(zhǔn)確價(jià)格就歸誰(shuí),已知其價(jià)格在1000元內(nèi)(教師可以事先設(shè)定一個(gè)價(jià)格),對(duì)于選手的每次猜價(jià),只提示高了、低了或正確,你如何盡可能快,并且次數(shù)盡可能少地將價(jià)格猜中?
使用理由:這些問(wèn)題非常有趣,可操作性強(qiáng),很容易引起學(xué)生的興趣,而且解決過(guò)程需要一定邏輯步驟,比較講究步驟的次序,又能夠被學(xué)生解決。
設(shè)計(jì)意圖:激發(fā)學(xué)生學(xué)習(xí)興趣,體現(xiàn)算法特征,明確性、有限性、可行性、有序性,但分配時(shí)間不宜過(guò)多,不宜作為算法案例。
2.例題的調(diào)整與變式設(shè)計(jì)
教材中對(duì)于一些有難度的例題都作了螺旋式上升設(shè)計(jì),比如質(zhì)數(shù)的判斷、二分法求方程的近似根和求一元二次方程的實(shí)數(shù)根等問(wèn)題,在自然語(yǔ)言、框圖語(yǔ)言、程序語(yǔ)言的教學(xué)中都有出現(xiàn),體現(xiàn)了知識(shí)間的前后聯(lián)系與螺旋上升,這樣的設(shè)計(jì)減少了學(xué)生接觸的題目量,不僅有利于學(xué)生的逐步理解,更減輕了學(xué)生的學(xué)習(xí)負(fù)擔(dān)。在實(shí)際教學(xué)中針對(duì)不同的學(xué)生情況,我們有時(shí)要補(bǔ)充一些例題,但是要注意難度控制,因?yàn)槲覀償?shù)學(xué)中的算法教學(xué)重點(diǎn)是讓學(xué)生體會(huì)算法的基本思想——程序化,而不是讓他們成為算法編程的高手。因此為了更好地突出本章的重點(diǎn),突破教學(xué)難點(diǎn),我們可以創(chuàng)造性地運(yùn)用教材,而不拘泥于教材,下面給出兩個(gè)例子:
例1.現(xiàn)有一瓶紅墨水A和一瓶藍(lán)墨水B,請(qǐng)你交換兩瓶墨水。這個(gè)例題可以在第一課時(shí)補(bǔ)充,要求學(xué)生用自然語(yǔ)言描述算法步驟。此題并不難,學(xué)生容易在腦海中形成借助一個(gè)容器來(lái)傾倒墨水的畫面,不僅為學(xué)生理解算法基本語(yǔ)句中交換兩個(gè)變量的值的例題作了很好的鋪墊,而且為學(xué)生理解賦值號(hào)提供了形象的支持。
例2.在1.2節(jié)中的例題6.設(shè)計(jì)一個(gè)計(jì)算1+2+3+…+100的值的算法,并畫出程序框圖。書(shū)本上給出了算法分析和使用不同的循環(huán)結(jié)構(gòu)的兩種框圖,在教學(xué)時(shí)可以和學(xué)生一起設(shè)計(jì)一種程序框圖,關(guān)鍵是先確定循環(huán)條件i>100,那么循環(huán)應(yīng)該在計(jì)數(shù)變量滿足這一條件時(shí)退出,所以使用直到型循環(huán)結(jié)構(gòu),然后確定循環(huán)體,畫框圖。如果我們把循環(huán)條件改為i≤99呢?這時(shí)候應(yīng)該用什么循環(huán)結(jié)構(gòu)?可以讓學(xué)生自己解決問(wèn)題,再比較兩種結(jié)構(gòu)的異同。本題的價(jià)值還不止于此,這個(gè)例題稍加變化:
這樣得到的變式題能夠很好地體現(xiàn)算法思想及循環(huán)結(jié)構(gòu)的運(yùn)用,但難度幾乎跟例題一樣,通過(guò)變式練習(xí)有助于學(xué)生算法意識(shí)的培養(yǎng),并深刻理解循環(huán)結(jié)構(gòu)。
設(shè)計(jì)意圖:指導(dǎo)思想是例子宜少宜精而不宜多,前后連貫聯(lián)系,保持呼應(yīng),螺旋上升,突出程序化的算法思想。
3.利用Qbasic軟件編輯驗(yàn)證算法
教材給出的網(wǎng)絡(luò)教學(xué)資源下載鏈接也提供了一些算法的框圖與VB控件可以直接使用,降低了教師使用的難度,但同時(shí)也使得過(guò)程被隱藏起來(lái),不利于學(xué)生理解。
條件允許的話可以讓教師示范或讓學(xué)生將自己寫出的程序語(yǔ)言輸入Qbasic軟件,按F5鍵測(cè)試運(yùn)行結(jié)果,有一種現(xiàn)場(chǎng)生成的直觀、新鮮感,更有利于學(xué)生理解??墒箤W(xué)生獲得成就感,為進(jìn)一步學(xué)習(xí)算法提供更多動(dòng)力。
上機(jī)還可以直接驗(yàn)證所編寫的程序是否能實(shí)現(xiàn)算法,比如交換兩個(gè)變量的值的一段小程序,還有變量的重復(fù)賦值問(wèn)題,在計(jì)算機(jī)上驗(yàn)證比說(shuō)很多話更直觀、更有說(shuō)服力。
四、算法教學(xué)中遇到的出乎意料的“發(fā)現(xiàn)”。
1.區(qū)分條件結(jié)構(gòu)還是循環(huán)結(jié)構(gòu)的一種簡(jiǎn)易方法
在剛開(kāi)始接觸程序框圖的時(shí)候,我們講到算法中最基本的三種邏輯結(jié)構(gòu)是:順序結(jié)構(gòu)、條件結(jié)構(gòu)和循環(huán)結(jié)構(gòu),并給出了一些示意圖。但有些學(xué)生觀察發(fā)現(xiàn)條件結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中都有判斷框,感覺(jué)一下子難以判斷“哪個(gè)是條件結(jié)構(gòu),哪個(gè)是循環(huán)結(jié)構(gòu)”。經(jīng)過(guò)一番觀察與思考,我們終于發(fā)現(xiàn)條件結(jié)構(gòu)與循環(huán)結(jié)構(gòu)有一個(gè)非常顯著的區(qū)別就是流程線的箭頭朝向,當(dāng)框圖中出現(xiàn)判斷框時(shí),凡是由判斷框引出的流程線箭頭朝上的是循環(huán)結(jié)構(gòu),否則就是條件結(jié)構(gòu)(如圖1)。這對(duì)于一些中下數(shù)學(xué)水平的學(xué)生來(lái)說(shuō)確實(shí)是一種簡(jiǎn)單有效的方法,因?yàn)殚喿x框圖是算法學(xué)習(xí)中的一項(xiàng)基本要求,如果能很快確定邏輯結(jié)構(gòu),就能對(duì)算法有一個(gè)整體的把握,有助于理解算法。
2.奇怪的循環(huán)結(jié)構(gòu)
如圖2中(1)、(2)分別是循環(huán)結(jié)構(gòu)當(dāng)中“當(dāng)型循環(huán)結(jié)構(gòu)”和“直到型循環(huán)結(jié)構(gòu)”,但是學(xué)生在作業(yè)給出了(3)中奇怪的循環(huán)結(jié)構(gòu),這個(gè)結(jié)構(gòu)顯然是仿造(1)的,但是與(1)不一樣的地方是判斷框出來(lái)的是與否對(duì)換了,所以外形非常像“當(dāng)型循環(huán)結(jié)構(gòu)”,卻又不是。循環(huán)直到條件滿足才結(jié)束,又有些像“直到型循環(huán)結(jié)構(gòu)”,怪就怪在它既不是“當(dāng)型循環(huán)結(jié)構(gòu)”,又不是“直到型循環(huán)結(jié)構(gòu)”,但又找不出什么明顯的錯(cuò)誤之處。
仔細(xì)分析之后,發(fā)現(xiàn)它本質(zhì)上還是“直到型循環(huán)結(jié)構(gòu)”,因?yàn)椤爸钡叫脱h(huán)結(jié)構(gòu)”的最重要特征就是直到條件滿足之后才結(jié)束循環(huán),(3)中的循環(huán)結(jié)構(gòu)與(2)中的循環(huán)結(jié)構(gòu)的區(qū)別主要是前者比后者少執(zhí)行了一次循環(huán)體,循環(huán)體中語(yǔ)句的順序也是不一樣的。對(duì)學(xué)生我們可以這樣解釋:通常情況下循環(huán)機(jī)構(gòu)可以歸為兩種類型:“當(dāng)型循環(huán)結(jié)構(gòu)”(當(dāng)條件成立的時(shí)候執(zhí)行循環(huán)體,先判斷后執(zhí)行)和“直到型循環(huán)結(jié)構(gòu)”(直到條件成立的時(shí)候退出循環(huán),先執(zhí)行后判斷),習(xí)慣上把其它情況轉(zhuǎn)化為這兩種類型。
總之,算法是計(jì)算機(jī)科學(xué)的理論核心,計(jì)算機(jī)在本質(zhì)上講是算法的運(yùn)用;同時(shí)算法在數(shù)學(xué)中也有著非常重要的地位。算法的學(xué)習(xí)有利于提高學(xué)生的邏輯思維能力,發(fā)展學(xué)生有條理地思考與表達(dá)能力。算法除作為本模塊的內(nèi)容之外,其思想方法應(yīng)滲透在高中數(shù)學(xué)課程及其他有關(guān)內(nèi)容中,鼓勵(lì)學(xué)生盡可能地運(yùn)用算法解決相關(guān)問(wèn)題。[4]
對(duì)于算法的教學(xué)還是有很多問(wèn)題值得探討的,在教學(xué)時(shí)我們需要避免算法教學(xué)的一些誤區(qū):(1)簡(jiǎn)單地把它等于同計(jì)算機(jī)程序設(shè)計(jì)中的算法;(2)把程序設(shè)計(jì)作為教學(xué)重點(diǎn);(3)由于高考分值不高,而作簡(jiǎn)化處理。
參考文獻(xiàn):
[1]吳凱彬.突出本質(zhì) 注重結(jié)構(gòu)——對(duì)算法教學(xué)的若干思考.數(shù)學(xué)通報(bào),2005,VOL44,(12).
[2]郭慧清,章建躍.算法教學(xué)的思考.中學(xué)數(shù)學(xué)月刊,2007,(9).
[3]王建國(guó),劉彬.高中數(shù)學(xué)算法教學(xué)內(nèi)容難度比較與研究.北京教育學(xué)院學(xué)報(bào)(自然科學(xué)版),2006.12,VOL1,(6).
[4]普通高中數(shù)學(xué)課程標(biāo)準(zhǔn).普通高中數(shù)學(xué)課程標(biāo)準(zhǔn)研制工作組.