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