隨著現代信息技術的飛速發展,算法思想已經成為現代人應具備的一種數學素養.在新課程必修(3)中出現的算法模塊,正是為了使學生形成符合時代要求的新的“數學基礎”,因此其思想非常重要.算法教學有利于培養學生的邏輯思維能力、理性精神和實踐能力,發展解決問題的程序化能力,有利于學生理解構造性數學,為學生未來的學習特別是信息技術方面的學習提供支持.
算法教學對于廣大高中數學教師來說還是比較陌生的,在算法教學的過程中肯定會存在著不同程度的困難.如何進行算法教學?教學中該注意哪些方面?下面筆者結合教學實踐談一點體會.
一、重點難點分析
1.把握重點
張奠宙先生指出:“算法應該從小學開始教”,“算法貫穿整個中學數學”.算法的思想和知識、技能,是學生的終身發展所必需的.在高中階段,考慮到學生的思維特點,算法教學的重點是培養學生解決某一問題的正確、可行的方法的邏輯思維能力,培養學生理性精神和實踐能力,所以在算法教學過程中,可以鼓勵學生將算法在計算機上實現,體現算法的思想——程序化思想,但不將算法等同于程序設計.
2.弄清難點
根據算法的內容和要求,難點可能主要體現在這幾個方面:
(1)算法設計的能力培養
算法設計的能力培養是第一個難點.算法與解題的區別在于平時解題不一定有嚴格的程序,而要讓計算機執行,必須嚴格按步驟進行.在算法設計中,應將平時解題中沒有想清楚的每一步都想清楚,這對學生的邏輯思維能力是極大的考驗.另外,算法的多樣性和方法的優化也會使學生很不適應.
(2)概念和理論枯燥抽象
算法中的概念如“算法”、“流程圖”等是比較枯燥的;對于某個具體的數學問題,相關理論有的較為抽象,如求兩個數的最大公約數時用到的“歐幾里得輾轉相除法”;同時理解、設計流程圖時邏輯結構的選擇和應用也是難點,因為綜合運用知識解決具體問題的能力是學生的薄弱環節.
(3)算法表示的轉化
設計流程圖并將流程圖轉化成算法語句的過程,要經歷兩個轉化:一是將自然語言轉化為流程圖,二是將流程圖轉化為算法語句.不會基本的應用絕不會有真正意義上的理解,因此要求學生對算法表示進行準確轉化.
二、算法教學過程中應采取的教學策略
1.提高學習算法的興趣
例如,在本章引入算法的含義時,筆者提出了人鬼過河問題:現在河的一岸有三個人和三個鬼,河上只有一條小船,船上最多能坐兩個“人”,在河的任何一邊,當鬼的個數比人多時,鬼就會吃掉人.請問如何才能使人和鬼都能平安到達對岸.
從一個有趣的問題出發,激發起學生的興趣,引導學生進行思考、討論,探索解決問題的方法和步驟,如果學生能夠將這個問題的解決過程描述清楚的話,應該適時地給予肯定,然后說明學生剛才所描述的過程其實就是一個算法.此時,教師再解釋什么是算法,學生就會欣然接受,有利于加深學生對算法定義的理解.相信通過這樣的一堂算法課完全可以調動學生學習算法的熱情和興趣.
2.培養舉一反三的能力
總結解決問題的一般規律和基本算法是非常重要的,例如,對于題目“給出求1+2+3+4+5+6的一個算法”就可以解決如:1+1/2+1/3+1/4+1/5+1/6;1-1/2+1/3-1/4+1/5-1/6;1×2+2×3+3×4+4×5+5×6;1×2×3×4×5×6;12+22+32+42+52等許多“和、積與乘方”類型的題目.但如果在算法教學中,教師將事先總結好的通法一味灌輸給學生,那么學生即使在課堂上能夠暫時地理解,但是課后也會很快忘記,這種教學方法是算法教學過程中的大忌.教學中應讓學生自己去發現知識,充分重視學生親身感受、實踐操作、合作交流,給學生提供探索與交流的空間,使數學學習過程真正成為在已有經驗基礎上的主動建構過程,在知識的形成與應用過程中認識和掌握雙基,在經歷過程中感悟算法的思想和通法.
3.培養理解能力和靈活性
在給出一個具體問題,試著寫出其流程圖時,要培養學生學會如何分析該問題的結構特點,預計一下要如何確定一個初始狀態,判斷一些數據,循環從何開始又如何結束,輸入哪些數據與輸出哪些結果,例如,1×3×5×7×…×n>10000,那么,如何尋找滿足條件的最小整數呢?偽代碼(如圖1):
S←1S←1 S←1
I←1I←1I←1
WhileS≤10000WhileS≤10000WhileS≤10000
I←I+2S←S×IS←S×I
S←S×II←I+2I←I+2
End WhileEnd WhileEnd While
Print IPrint IPrint I-2
圖1 圖2 圖3
該問題是循環語句中的典型問題,問題(如圖2)是將循環體中的兩條賦值語句互換位置,所得結果是否正確?為了驗證方便,不妨特殊化將數字10000換成為10,先來看S的初始值為1,首先檢驗“S≤10是否成立”,此時成立,那么進入第一次循環:S←S×I,I←I+2得S=1,I=3;再檢驗“S≤10是否成立”,1≤10成立,進入第二次循環:S←S×I,I←I+2得S=3,I=5;再檢驗“S≤10是否成立”,3≤10成立,進入第三次循環:S←S×I,I←I+2得S=15,I=7;再檢驗“S≤10是否成立”,因為“15≤10”不成立,結束循環.結果輸出:I=7,而5才是滿足條件的最小正整數,所以結果是錯誤的.修改方法(如圖3).
通過分析可以使學生明白,循環體中語句順序不能隨意更換,也就對記數變量、循環次數、輸出結果之間的關系有了更深刻的理解.在算法教學中可以經常將一些細節進行變動,這樣可讓學生加深對問題的理解,為算法表示的轉化打好基礎;還會讓學生體會到算法多樣化的本質,增強學生解題的靈活性.
4.循序漸進培養邏輯思維能力和綜合應用能力
第一,算法的順序、條件分支及循環三種結構由易到難,逐層深入.循環結構是算法結構中的重點和難點,要做到循序漸進.
例如,在講算法含義時,不妨舉韓信點兵或者娛樂節目中“猜數”游戲(參賽者如在規定時間內猜出商品價格)等,來滲透循環結構的知識;而教師在教循環結構時,也可以從簡單的循環開始,慢慢增加難度,到了教條件語句和循環語句時,再逐步加深.
第二,解決問題時由易到難,逐層深入.
例如,高一某班一共有50名學生,設計一個算法,統計班上數學成績良好(分數大于80且小于90)和優秀(分數大于或等于90)的學生人數,輸出成績優秀的學生的相應學號及成績,畫出流程圖并寫出偽代碼.
此題要求很高,畫出的流程圖需有多個功能:判斷全班每個學生成績的優良等級;統計成績優秀的人數;統計成績良好的人數;輸出成績優秀的學生的相應學號及成績.在教學過程中應引導學生由淺入深,逐步解決問題(如圖4):
第一步,判斷一個學生成績的優良等級,只需借助選擇結構;
第二步,判斷全班每個學生成績的優良等級,只需再借助循環結構,將輸入語句設置在循環里面,輸入一人判斷一人,再設置兩個累加變量分別記錄相應等級的人數;
第三步,將輸出成績優秀的學生的相應學號及成績的語句插入循環體內部.
圖4
有了流程圖,結合實際問題便可寫出偽代碼,實現算法表示的轉化就變得相對簡單.
本題將諸多難點分散,然后再逐步深入,將各個具有不同功能的結構有機結合,從而解決問題.通過這樣的過程,可以有效地培養學生的邏輯思維能力和綜合運用知識解決問題的能力,提高算法設計的能力;也可以拓寬思路,激發靈感,培養學生的創新意識和創新能力.
當然,在算法的教學中還有很多值得去探討的內容,需要我們共同努力.
參考文獻
[1]徐稼紅.高中數學教學參考書3[M].南京:江蘇教育出版社,2005.
[2]劉兼,黃翔,張丹.數學課程設計[M].北京:高等教育出版社,2003.
[3]孫東升.淺談和、積運算的算法編寫[J].高中數學教與學,2006(4).
(責任編輯 黃春香)