《算法初步》是高中數(shù)學(xué)新增加內(nèi)容,算法思維與傳統(tǒng)的數(shù)學(xué)思維有著明顯的不同之處,要學(xué)好算法并非易事,本文著重列舉算法中的易誤點(diǎn),以期對(duì)同學(xué)們學(xué)好算法有所幫助。
一、理解輸入語句與賦值語句的區(qū)別與聯(lián)系
例1 已知三角形的三邊長為4、5、6,借助三角形的面積公式S=p(p-a)(p-b)(p-c)(其中a、b、c分別為三角形的三邊長,p=a+b+c2),用輸入、輸出語句和賦值語句表示計(jì)算三角形面積的一個(gè)算法。
方法一:方法二:
a←4Read a,b,c
b←5p←a+b+c2
c←6S←p(p-a)(p-b)(p-c)
p←a+b+c2Print S
S←p(p-a)(p-b)(p-c)
Print S
剖析:賦值語句與輸入語句目的都是對(duì)變量賦值,在這個(gè)意義上輸入語句實(shí)際上也是一種賦值語句,它們的區(qū)別在于賦值的實(shí)質(zhì)和方式不同,賦值語句是在運(yùn)行時(shí)已經(jīng)對(duì)變量自動(dòng)賦值,而輸入語句是在程序運(yùn)行過程中通過外部設(shè)備(如鍵盤)對(duì)變量賦值。使用輸入語句可以解決一類問題,如方法二可以求任意一個(gè)三角形的面積,只要在運(yùn)行時(shí)按實(shí)際情況輸入a、b、c的值。所以在程序中變量獲得一個(gè)確定的值固然可以用賦值語句,但是如果需要賦值的變量較多或變量的值有多組,則使用輸入語句更為方便。而方法一要求不同的三角形的面積則需要對(duì)程序進(jìn)行修改,實(shí)際使用并不方便,但在解決個(gè)例則顯得貼切、恰當(dāng)。
二、循環(huán)結(jié)構(gòu)中的前后有別
例2 求使1×2×3×4×……×n>2010成立的最小自然數(shù)n。
解法一: 解法二:
S←1S←1
i←1i←1
While S≤2010While S≤2010
i←i+1
S←S×iS←S×i
i←i+1
End whileEnd While
Print iPrinti-1
剖析:在While語句的循環(huán)體中,解法一將“i←i+1”放在“S←S×i”前,則最后一個(gè)數(shù)i參與了乘積運(yùn)算,循環(huán)計(jì)數(shù)變量為最后一個(gè)i,故輸出的結(jié)果應(yīng)為 i。解法二將“S←S×i”放在了“i←i+1”前,最后的i沒有參與乘積運(yùn)算,循環(huán)計(jì)數(shù)變量卻是i,故輸出的結(jié)果應(yīng)為“i-1”
三、輸出值的確定
例3 設(shè)計(jì)算法,求使1+32+52+……+n2<2010成立的最大正整數(shù)n的值.
解:由于具體的n的值是要探求的,所以在畫流程圖時(shí)使用了當(dāng)型循環(huán)結(jié)構(gòu)以判斷循環(huán)條件是否滿足.因?yàn)樵撗h(huán)的終值不知道,所以用While語句表示這個(gè)算法:
S←0
n←1
While S<2010
S←S+n2
n←n+2
End While
n←n-4
Print n
剖析:為什么是“n←n-4”而不是“n←n-2”?當(dāng)退出循環(huán)時(shí)S是一個(gè)不小于2010的值,因此應(yīng)該取前一個(gè)S所對(duì)應(yīng)的n,同時(shí)應(yīng)該注意到,在得到第一個(gè)不滿足循環(huán)條件的S后,n的值又被加了2,故使S小于2010的n應(yīng)該為退出循環(huán)時(shí)的n減去4。具體操作時(shí)可以用“追蹤法”:將2010改小一點(diǎn),如30,按如下方法進(jìn)行追蹤:S=0,n=1→S=1,n=3→S=10,n=5→S=35,n=7.這時(shí)退出循環(huán),而滿足條件的最大S為10 ,其對(duì)應(yīng)的n為3,退出循環(huán)的n的值為7.故輸出的n 的值為7-4=3。
在學(xué)習(xí)算法的過程中要不斷總結(jié)、反思,鍛煉算法思維,這樣才能提高解決算法問題的能力。