趙彩娟
【中圖分類號】G633.67 【文獻標識碼】A 【文章編號】2095-3089(2018)03-0225-02
算法與程序設計之變式教學是指在教學過程中,教師根據學生的知識水平和教學內容,精心設計一系列問題或程序的變式,引導學生的思維逐步朝著預期的結果靠近,即要讓學生理解算法與程序設計模塊的知識內容、算法思想、編程方法等,又能深刻地體會算法的思維模式,提高學生在實際生活中利用算法思想來解決實際問題的能力,下面筆者是在實際課堂中探索變式教學的運用。
一、“一題數變”,延伸拓展
在教學過程中,筆者經常會發現一些相近的問題或原題隔段時間再給學生解答,很多學生依然無從下手或者做錯,我們教師在說學生上課不用心的同時也該反思我們自己的教學,教學設計是否合理、教學過程是否學生都在參與,在講解例題時,更要關注學生的思維參與度,反思該題是否能設計變式,通過變式訓練幫助學生歸納總結出某一類題目最本質的解法,讓學生達到舉一反三、觸類旁通的水平。
【案例1】《冒泡排序之變式探索》教學設計
變1:優化的冒泡排序
Private Sub Command1_Click()
Dim tmp As Integer, i As Integer, j As Integer, k As Integer
For i = 1 To 9
k = 0
For j = 10 To i + 1 Step -1
If a(j) > a(j - 1) Then
tmp = a(j): a(j-1) = a(j): a(j) = tmp (1)
k = k + 1
End If
Next j
If k > 0 Then i = 10 (2)
Next i
For i = 1 To 10
List2.AddItem Str(a(i))
Next i
End Sub
Private Sub Form_Load()
Dim i As Integer
Randomize
For i = 1 To 10
a(i) = Int(Rnd()?鄢100)
List1.AddItem Str(a(i))
Next i
End Sub
變2:上述程序中的k也可以用一個邏輯變量來代替,代碼應該怎么改呢?
變3:雙向冒泡,程序段如下,請根據題意把下列程序補充完整。
low=1:high=n
do while low < high
for i=low to high-1
if a(i)>a(+1) then
t=a(i):a(i)=a(i+1):a(i+1)=t
end if
next i
high = high - 1
for i=high to low+1 step -1
如在教學過程中,教師發現在好多的程序中都會運用到整除和求余,故有了下面的一節課。
【案例3】《神奇的整除求余兄弟》教學設計
變1:以下程序段為十進制轉八進制,請學生填空:
Private Sub Command1_Click()
Dim y As Integer
Dim s As String
Dim r As Integer
y = Val(Text1.Text):s = ""
Do While y <> 0
(1)
s = Str(r) + s
(2)
Loop
Text2.Text = s
End Sub
答案:(1)r = y Mod 8, (2)y = y \ 8
變2:如果是十進制轉化成二進制或十六進制,那么只要把8的位置改成2或16就可以了,即十進制轉化成n進制,上兩式8的位置改成n即可。
變3: (2015浙江學考模擬,3分)小明想編一個反轉數字游戲,要用鍵盤輸入一個正整數,然后把該數的每位數字按逆序輸出。例如:輸入685,則輸出586,輸入100,則輸出001。為實現這一目標,請在程序劃線處填入的合適表達式或語句。
Private Sub Command1_Click()
Dim x As Integer
x=InputBox(“請輸入一個正整數”)
do While x>0
Print (1) ;
x= (2)
loop
End Sub
答案為(1)x mod 10,(2)x\10
本題通過求余整除得出每個數位上的數。
框線處通過求余整除得到該數位上的數和該數位有沒有超過10的結果放入到jiewei變量中。
本課通過三個完全不一樣的題目,卻需要完全一樣的答案的變式訓練,不斷的強化學生對整除和求余這一知識的認識和理解,引導學生從變的現象中發現不變的本質,從不變中探索規律,逐步培養學生靈活多變的思維品質,增強其應變能力,不斷的完善學生做題經驗,對學生應付萬變的高考試題有很大的幫助,也讓學生深刻體會“萬變不離其宗”這句話的深刻含義。
四、易錯易混,著眼細節
因為學生的知識背景、解題經驗、思維方式等都跟教師不同,他們在解題時有可能不能跟教師一樣考慮到位或思維產生偏差,這就會出現“解題誤區”,因此,教師在算法與程序設計模塊復習中若能在易錯易混處進行變式教學,就能以誤治誤,加深理解,訓練思維。
【案例4】在某一次的練習講解課教學片段
當老師講解下面習題時,課堂出現了爭論:
小明編寫了一個數據插入程序。程序輸入一個數字,將該數字插入一列有序數據:-5,3,4,12,20,45,70,并使數據序列保持有序。設計的算法是從前往后找位置插入。
Private Sub Command1_Click()
Dim a(1 To 8) As Integer
Dim n, i, j, x As Integer
list1.Clear
list2.Clear
a(1) = -5: a(2) = 3: a(3) = -4: a(4) = 12: a(5) = 20
a(6) = 45: a(7) = 70
For j = 1 To 7
list1.AddItem Str(a(j))
Next j
x = Val(text1.Text)
Do While x > a(i) And i < 8
i = i + 1
Loop
For j = 8 To i + 1 Step -1
________________
Next j
a(i) = x
For j = 1 To 8
list2.AddItem Str(a(j))
Next j
End Sub
正確答案是a(j)=a(j-1),但是部分同學卻認為是a(j+1)=a(j)
師:請錯誤的同學再仔細看看此處for語句的初值。
錯誤的同學其實是懂這個算法的,但是具體程序細節沒有去探究,for語句的初始值是8,a數據在沒有插入數據之前只有7個元素,第8個元素是空的。
變1:如果要想答案為a(j+1)=a(j),程序該怎么改。
生1:把for語句改成For j = 7 To i + 1 Step -1
師:同學們在理解整個題目算法的基礎上,在填空時要特別注意循環的初始值和終值,自己寫好的答案再用初值或終值去代入試試看,有沒有相差1的錯誤。
縱觀真題卷和各類的模擬卷,在程序填空題上學生經常出錯在+1或-1上面,這樣的錯誤很可惜,學生其實程序是懂的,只是在思維的嚴謹度上還欠缺些,趁著這次機會,筆者通過3個變式來訓練學生,實踐證明,這樣的變式對于學生后面做題的全面性和嚴謹性都有很大的幫助,把信息技術學科核心素養中的“計算思維”融入在平時的學習和生活的各個方面。
總之,在高三算法與程序設計的復習課堂上運用變式教學,學生能充分發揮主觀能動性,調動思維,學生在變式的訓練中會慢慢的敢于思考,敢于聯想,培養他們的自主探究能力與創新精神,在無窮的變化中探索算法的精髓,形成自己的知識網絡,最終科學合理的落實信息技術學科核心素養。