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