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