算法是計(jì)算機(jī)理論的技術(shù)核心,也是數(shù)學(xué)的最基本內(nèi)容之一.與傳統(tǒng)的教學(xué)內(nèi)容相比,算法是新課程改革中新增的內(nèi)容,目的是培養(yǎng)學(xué)生們的邏輯思維能力,提高解決問(wèn)題的程序化能力.算法語(yǔ)句有著嚴(yán)格的語(yǔ)法規(guī)則,教材中介紹了五種基本的算法語(yǔ)句:輸入語(yǔ)句、輸出語(yǔ)句、賦值語(yǔ)句、條件語(yǔ)句、循環(huán)語(yǔ)句.每一種語(yǔ)句都有著嚴(yán)格的要求,但學(xué)生在學(xué)習(xí)算法基本語(yǔ)句時(shí)常會(huì)犯一些共性的錯(cuò)誤.本文從以下幾個(gè)實(shí)例對(duì)算法中常見錯(cuò)誤作簡(jiǎn)要剖析.
易錯(cuò)剖析一:賦值概念的理解錯(cuò)誤
例1 已知兩個(gè)單元存放了變量x,y,z的值,試給出一個(gè)算法,依次變換x,y,z的值.(x←y←z←x)
錯(cuò)解:Step1:x←y
Step2:y←z
Step3:z←x
錯(cuò)因:沒(méi)有理解賦值的含義,按上述算法,結(jié)果為x=z且為原y的值,y為原z的值.
正如A、B、C三個(gè)杯子中分別裝有可樂(lè)、雪碧、橙汁,若要交換這三種飲料,需要一個(gè)空杯子D來(lái)存儲(chǔ)A中的可樂(lè),這樣才能依次將B中雪碧倒入A中,C中的橙汁倒入B中,再將D中可樂(lè)倒入A中.
所以,正解:Step1:p←x Step2:x←y
Step3:y←z Step4:z←p
易錯(cuò)剖析二:變量的初始值錯(cuò)誤
i←0
S←0
While i≤10
S←S+2i
i←i+1
End While
Print S
End
i←1
S←0
While i≤10
S←S+2i
i←i+1
End While
Print S
End
例2 寫出一個(gè)計(jì)算 1+2+22+23+…+210的值的程序語(yǔ)句.
錯(cuò)解 如圖1
錯(cuò)因:錯(cuò)解中程序語(yǔ)句的功能是計(jì)算式子2+22+23+…+210的值,比題目中要求的式子少了一項(xiàng)“1”,將循環(huán)體中i的初始值改為0,可以實(shí)現(xiàn)題目的要求.
正解:如圖2
易錯(cuò)題剖析三:算法語(yǔ)句順序錯(cuò)誤
例3 設(shè)計(jì)一個(gè)求1+2+3+4+…+100流程圖.
錯(cuò)解(1):如圖3
錯(cuò)因:當(dāng)先執(zhí)行S←S+n,再判斷,而后執(zhí)行n←n+1,當(dāng)S加上100時(shí),符合條件,再次進(jìn)入循環(huán),這樣執(zhí)行的最后結(jié)果中多了101.即改變了算法語(yǔ)句的順序,使得執(zhí)行的結(jié)果發(fā)生了變化.
正解:如圖4,圖5
變式:用當(dāng)型循環(huán)來(lái)設(shè)計(jì)一個(gè)求1+2+3+4+…+100的流程圖.
錯(cuò)解:如圖4
錯(cuò)因:當(dāng)型循環(huán)與直到型循環(huán)概念不清.當(dāng)型循環(huán)特點(diǎn)是“先判斷后操作”,先判斷所給條件p是否成立,若成立,再執(zhí)行操作;若不成立,一次也不執(zhí)行循環(huán),直到型循環(huán)的特點(diǎn)是“先操作后判斷”,先執(zhí)行操作,再判斷所給條件p是否成立,若不成立,則再次循環(huán),如此反復(fù),直到條件p成立,循環(huán)結(jié)束.
正解:如圖6
易錯(cuò)題剖析四:“For”語(yǔ)句結(jié)構(gòu)認(rèn)識(shí)不清
例4 設(shè)計(jì)一個(gè)算法,計(jì)算1+3+5+…+99,寫出偽代碼.
錯(cuò)解:如圖7,
S←0
For i From 1 To 99
S←S+i
Print S
End For
S←0
For i From 1 To 99 Step2
S←S+i
End For
Print S
圖7_____________ 圖8
錯(cuò)因:在“For”語(yǔ)句中,如果省去步長(zhǎng)“Step2”,那么循環(huán)時(shí),i的值每次只增加1;而且將“Print S”放在循環(huán)體內(nèi),則每循環(huán)一下就輸出一個(gè)S.
正解:如圖8
在含有循環(huán)語(yǔ)句的程序中,變量的初始值、語(yǔ)句的順序和循環(huán)條件是關(guān)鍵,它們直接影響程序語(yǔ)句的輸出結(jié)果,各種循環(huán)的結(jié)構(gòu)也需要認(rèn)清,實(shí)際上例3的變式和例4都是對(duì)循環(huán)結(jié)構(gòu)的混淆.
易錯(cuò)題剖析五:If語(yǔ)句的嵌套結(jié)構(gòu)不了解
例5 函數(shù)y=2xx≤4
84 2(12-x)8 Read x If x≤4 Then y←2x Else If x>8 Then y←2(12-x) Else y←8 End If End If Print y End 錯(cuò)解_______________________________________ 正解 Read x If x≤4 Then y←2x If x>8 Then y←2(12-x) Else y←8 End If End If Print y End 錯(cuò)因:沒(méi)有使用If語(yǔ)句的嵌套結(jié)構(gòu). 易錯(cuò)剖析六:算法語(yǔ)句選擇不當(dāng) 例6 輸入3個(gè)數(shù) a,b,c,如果這三個(gè)數(shù)能作為三角形的三邊長(zhǎng),那么輸出12(a+b+c),否則提示重新輸入. 試用算法基本語(yǔ)句表示上述過(guò)程. 錯(cuò)解 _____________ Read a,b,c If a+b≤c或a+c≤b或b+c≤a Then Read a,b,c Else p←(a+b+c)2 End If Print p End 錯(cuò)因:錯(cuò)解中用的是條件語(yǔ)句,僅僅執(zhí)行滿足條件的那一次,不能反復(fù)執(zhí)行,而題目條件的意思是:只要不滿足條件,就要反復(fù)執(zhí)行,因此應(yīng)該用循環(huán)語(yǔ)句. 正解: _____________ Read a,b,c While a+b≤c或a+c≤b或b+c≤a Then Read a,b,c End While p←(a+b+c)2 Print p End 上面談及的問(wèn)題和所列舉的例子,只是算法中的部分常見錯(cuò)誤,希望通過(guò)這些例子對(duì)大家有所啟發(fā).改錯(cuò)是引導(dǎo)學(xué)生辨析正誤的重要手段,只要經(jīng)過(guò)努力,每個(gè)同學(xué)掌握算法這章節(jié)的知識(shí)不是一件困難的事,而且通過(guò)自身努力掌握知識(shí),也就有了把數(shù)學(xué)學(xué)得更好的信心了. (作者:陳燕,江蘇省溧水高級(jí)中學(xué))