摘要:數(shù)學(xué)新課程標準對算法內(nèi)容的教學(xué)建議是:對算法內(nèi)容,應(yīng)著重強調(diào)使學(xué)生體會算法思想、提高邏輯思維能力,不應(yīng)將算法簡單處理成程序語言的學(xué)習(xí)和程序設(shè)計,同時應(yīng)通過具體實例的上機實現(xiàn)(或編程)幫助學(xué)生理解算法思想及其作用,體會算法對同一問題的通用性。
關(guān)鍵詞:一元二次方程;算法;流程圖;框圖;程序;程序設(shè)計
一、 問題提出與教學(xué)遇到的問題
在高中數(shù)學(xué)必修③(人民教育出版社2007年2月第3版,2011年6月第13次印刷)1.1.2節(jié)中(第12頁)的“例5:設(shè)計一個求解一元二次方程ax2+bx+c=0的算法,并畫出程序框圖表示”。在教學(xué)中遇到了幾個問題:
1. 書中的“算法分析”有讓學(xué)生困惑之處,就是p,q的問題,教學(xué)實踐表明p,q的存在,反而讓基礎(chǔ)薄弱的學(xué)生難以理解,學(xué)生也不知道為什么要這樣做,而且學(xué)生也不容易讀懂程序框圖,倒不如去掉這兩步。
2. 教科書講到“為了避免重復(fù)計算,可以在計算x1和x2之前,先計算p,q”,其實如果Δ=0,那么q這步就白白計算了,反而做了無用功。
3. 成績好的學(xué)生或者個別“調(diào)皮搗蛋”的學(xué)生會問到:“我就是要輸入a=0,會怎么樣?”按照書上的框圖和程序,輸入a=0是可以的,程序也會運行,只是程序會出錯,會提示“OVERFLOW”,然后高亮顯示出錯語句。程序運行到計算p這一步就出錯了,后面的更加不用看了。那么怎么解決呢?對剛接觸算法的學(xué)生來說,這個知識超越了學(xué)生現(xiàn)有的知識水平和理解程度,甚至部分教師也不懂,也有部分教師直接回答“當a=0時,它就不是一元二次方程了,而是一元一次方程,所以不能輸入a=0哦?!边@樣回答就是授之以魚而不是授之以漁了。如果不能很好的解決這些問題,而是照本宣科,這樣學(xué)生以后還能提高學(xué)習(xí)積極性?學(xué)生對學(xué)習(xí)算法還有興趣嗎?對于培養(yǎng)學(xué)生算法的思想、創(chuàng)新的能力從何談起?
二、 問題探討與解決方案
針對問題1:教科書中p、q的問題,我認為應(yīng)該直接把p、q去掉,不必花費力氣去思考p、q的作用,同時程序框圖也簡潔、明了(可以參考教參第十頁的圖)。有了這個例題的學(xué)習(xí),第33頁書習(xí)題1.2,A組的第一題和B組的第三題就可以讓學(xué)生嘗試自己進行練習(xí)了,畢竟是基本一樣的程序框圖,只是內(nèi)容變成了一個三段的分段函數(shù)。相信學(xué)生學(xué)習(xí)的效果比使用教科書原版的要好。
當然,這個時候還沒有解決“輸入a=0的問題”。我會引導(dǎo)學(xué)生嘗試去解決這個問題,首先:“日常生活中,我們上網(wǎng)注冊郵箱或者其他賬號時,大家有沒有留意到或者是體會過:當我們輸入一個自己喜歡的賬號,然后點擊輸入密碼這一欄時,電腦提示‘該用戶名已被使用,請重新輸入,如果三番四次都這樣,我們心里是不是很郁悶?”然后提出:“這個經(jīng)驗中,你想到了什么?怎樣解決輸入a=0的問題?”挑起學(xué)生的興趣,讓他們的心和腦動起來。
這里,要提醒的是,要解決“輸入a=0的問題”,我們要先講授循環(huán)結(jié)構(gòu)。引導(dǎo)或提示學(xué)生:我們可以在程序里加入當型循環(huán),讓我們可以先檢查輸入的二次項系數(shù)有沒有錯誤,然后再放行運算。
最后,跟學(xué)生一起總結(jié),給出下面程序框圖。在循環(huán)結(jié)構(gòu)里的“提示”輸出,我們可以活躍一下課堂的氣氛,就來個輸出“親,a不能為0哦,請重新選購”,學(xué)生發(fā)笑了(現(xiàn)在上淘寶網(wǎng)的學(xué)生蠻多的),學(xué)習(xí)的動力出來了。最后,給出相應(yīng)的完整程序:
Input “二次項系數(shù)a=”;a
While a=0
Print “a不能為0,請重輸”
Input “二次項系數(shù)a=”;a
Wend
Input “一次項系數(shù)b=”;b
Input “常數(shù)c=”;c
d=b^2-4*a*c
IFd>0 THEN
Print“x1=”;(-b-Sqr(b^2-4*a*c))/(2*a)
Print“x2=”;(-b+Sqr(b^2-4*a*c))/(2*a)
ELSE
IF d=0 THEN
Print“方程有兩個相等的實數(shù)根=”;-b/(2*a)
ELSE
Print“方程沒有實數(shù)根”
END IF
END IF
END
以上程序要留意第一行和第四行,是重復(fù)寫的,但是在程序框圖里面沒有體現(xiàn)。解一元二次方程的例子,講透了、引導(dǎo)學(xué)生懂得思考了,那么學(xué)生對程序的順序結(jié)構(gòu)、條件結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這三種程序設(shè)計的基本結(jié)構(gòu)就有了較為全面的了解。
在程序的教學(xué)當中,要注意的是哪些該頂格編寫,哪些該退格編寫,一定要講清楚“為什么”。如果大家都不注意格式,則自己編寫的程序別人不容易看懂,自己也不容易看懂別人寫的程序。就如上面程序字體加粗部分,本來就是一個完整的條件結(jié)構(gòu),在這里作為另外一個條件結(jié)構(gòu)里面的一個“否”的分支,退格寫就容易看出來。
在算法的教學(xué)中,教科書忽略了一點,這容易讓學(xué)生理解為input與print只能是程序的開始與結(jié)尾,全章內(nèi)容有第31頁的程序、第39頁的秦九韶算法中,input與print語句是在循環(huán)結(jié)構(gòu)里面出現(xiàn)的,這點我們要提醒學(xué)生。
三、 詮釋與研究
在計算機環(huán)境下進行算法教學(xué)既是《課程標準》的要求,也是教師教學(xué)的愿望,更是學(xué)生學(xué)習(xí)的需要。教師是課堂教學(xué)的組織者、學(xué)生學(xué)習(xí)的引導(dǎo)者。我認為教師應(yīng)強化課程開發(fā)的意識,具體表現(xiàn)在教學(xué)設(shè)計時既要深入鉆研教材,又要跳出教材,又要結(jié)合學(xué)生學(xué)習(xí)的情況進行總結(jié),再也不能把教學(xué)的過程純粹地看作是忠實地執(zhí)行與實施教材,而應(yīng)該在課程目標的導(dǎo)向下因時、因地、因生、因己靈活地處理、開發(fā)教材,創(chuàng)造出有利于學(xué)生主動學(xué)習(xí)、全面和諧發(fā)展的教學(xué)方案。
作者簡介:
張效燊,廣東省云浮市,廣東省云浮市新興縣惠能中學(xué)。