在高考中,信息技術選修算法部分壓軸的題相對較難,在考察學生知識積累的同時,更注重學生運用已有知識分析及解決問題的能力,但參與考試的學生往往綜合素質相對來說都不高,要完全讀懂程序對他們來說有困難,因此需要對這些進行總結,讓學生從中學會基本的解題方法。從2008年開始至今浙江省總共進行了7次信息技術高考,我以這7份試卷算法部分最后一大題為依據,對這些題型進行歸類總結,把它劃分為兩種類型,分別提供了相應的解題方法,總結了一些答題策略。
● 已知流程圖填空或改錯題
這類題,學生可直接通過流程圖找對應要填空或改錯部分的實現功能框圖,再根據功能框圖的要求從題目或語句中找到相關內容,運用所學的知識進行填空或改錯即可。
案例1:2009年3月卷算法模塊壓軸題。計算正數a的算術根(近似值)的算法公式如下:i=1,2,3,……計算開始時取x1=a,運用上述算法公式計算x2,然后由x2計算x3……,直到相鄰兩值差的絕對值小于設定的精度0.0001為止。實現上述算法的VB程序運行界面如圖1所示。
應用程序界面中,自上而下兩個文本框的名稱分別是Text1和Text2,“計算”按鈕的名稱是Command1。在Text1中輸入a的值,單擊“計算”按鈕,在Text2中顯示正數a的近似算術根?!坝嬎恪卑粹o單擊事件處理過程的流程圖如圖2所示。請根據流程圖將下列程序補充完整。
Private Sub Command1_Click()
Const e = ①
Dim a As Double, x1 As Double, x2 As Double
a = Val(Text1.Text)
x1 = 0
x2 = a
Do While Abs(x2 - x1) >= e
x1 = x2
②
Loop
Text2.Text = Str(x2)
End Sub
該題學生通過流程圖找對應要填空實現功能框圖分別是和,對于①學生從題目中找到與精度e相關的語句“直到相鄰兩值差的絕對值小于設定的精度0.0001為止”,故根據這一語句此框處應該填0.0001;對于②學生從題目中找到與公式計算相關的語句“算法公式如下:i=1,2,3……”,故根據這一語句此處應該填x2=(x1+a/x1)/2。
● 直接填空或改錯
這類題,學生可通過將要填空或改錯部分從題目或語句中找到相關內容,運用所學的知識進行填空或改錯。
案例2:2009年3月卷算法模塊壓軸題。下列VB程序的功能是:程序運行時,單擊命令按鈕Commandl后,產生10個[1,999]范圍內互不相同的隨機整數,依次顯示在列表框List1中,然后將它們按從小到大的順序排序,排序結果顯示在列表框List2中。數組a用于存儲產生的10個隨機整數,函數f(x)用于判斷隨機整數x與已生成的整數是否有重復,若有重復則返回True,否則返回False。程序加框處代碼有錯,請改正。
Dim a(1 To 10) As Integer
Function f(x As Integer) As
String ′①
′代碼略
End Function
Private Sub Commandl_Click()
Dim n As Integer ′n用于統(tǒng)計已經產生的隨機整數個數
Dim i As Integer.j As Integer
Dim x As Integer.k As Integer
Randomize ′初始化Rnd函數
n=0
List1.Clear ′清除列表框中內容
List2.Clear
Do While n<10
x=Int(Rnd*999)+1 ′產生[1,999]范圍內的隨機整數
If Not f(x) Then
n=n+i
a(n)=n ′②
List1.AddItem Str(a(n))
End If
Loop
′以下代碼略
①處學生從題目中找到f相關的語句“函數f(x)用于判斷隨機整數x與已生成的整數是否有重復,若有重復則返回True,否則返回False”。故返回的類型必須是邏輯型,因此①處應該改正為Boolean,②處學生從題目中找到a相關的語句“數組a用于存儲產生的10個隨機整數”,再找出隨機整數所存儲的變量的相關語句“x=Int(Rnd*999)+1 ′產生[1,999]范圍內的隨機整數”,由此②處應該改正為a(n)=x。
通過歸納總結發(fā)現,只要抓住重點,根據需要填空或修改的內容,按照題目或語句的線索,順藤摸瓜,就能得到我們需要的答案,進而達到事半功倍的效果,使信息技術高考算法部分的壓軸題不再難于上青天。