陳麗紅
摘 要:浙江省新高考實施“7選3”模式后,技術課程成為其中的一門選考科目,技術課程的信息技術內容中程序填空題部分,填正確得滿分,填錯誤則零分,沒有像數學等其他學科中的解答過程步驟分,因此在考試中得分率不高。經過一段時間的探究研究,發現采用“逆思維法”來解決程序填空題是非常有效的,很多程序填空問題都可以從下一條語句或者從最后的輸出語句往前推理,也就是運用邏輯的“逆思維”來解決這個問題,能有效地提高得分率。
關鍵詞:程序填空;逆思維法;信息技術
逆思維,也就是逆向思維,它是對司空見慣的似乎已成定論的事物或觀點反過來思考的一種思維方式。敢于“反其道而思之”,讓思維向對立面的方向發展,從問題的相反面深入地進行探索,樹立新思想,創立新形象。
大家都玩過走迷宮的游戲,那么走出迷宮的最好最快的方法是什么呢?有經驗的朋友一定會說:從出口處出發倒著走。對,倒退走迷宮是一種經過實踐檢驗的非常有效的方法。從目的地出發逆向出發點可以更快地找到答案。這就是一種新的思維模式:倒著解決問題。
一般我們讀程序的時候都是從前往后讀,但是對于某些問題,尤其是一些特殊問題,從下一條語句或者從最后的輸出語句往前推理,倒過來思考,從求解回到已知條件,反過去想反而會使問題簡單化。
信息技術選考中,程序填空題是一個難點,因為在填空時,如果填寫正確則得滿分,如果填寫錯誤得零分,沒有像數學等其他學科中的解答過程步驟分,因此在考試中得分率不高。在學生熟練地掌握了基本的程序語句和語法的基礎上,如何讓學生快速提高程序填空題的得分率呢?筆者經過對大量的程序填空題的研究,發現采用逆向思維法是一種非常有效的方法。下面我結合具體的案例進行分析。
一、從后面的語句逆思維確定填空處的目標變量完成程序的填空
先看下面浙江省2016年10月份的高考選考題中的第17題的程序段:
Private sub command2_click()
‘依據數組a中的相關數據統計各班級平均分
Dim i As Integer,j As Integer,n As Integer
Dim p As Integer,sum As Integer,aver As Single
End sub
為了提高讀程序的效率,我們一般先按照程序結構把程序分割成幾個小段,這樣更容易理解,例如以上程序中,我們根據循環結構把程序分割成三個小段,分別用虛線框(一)(二)(三)標出。
1.先來看第①空如何確定填什么變量的內容
如何填第①空呢,如果按照從上到下閱讀下來,感覺不太好填,但是從第二個語句p=n+2可以看出這里的n是一個局部變量,那么在第二個語句之前應該先對n進行賦值,而除了第①空未知內容以外,我們并沒有找到對n進行賦值的操作,所以由此可以確定第①空是一個“n=?”的對n進行賦值的語句,思維這樣有了目標,那么就有了方向,再根據下面的二條循環語句For i=1 To n和For j = 1 To a(i + 1)以及根據題目內容理解和題目給出的數組的含義,反向思考就不難得出結論,在第①空中應該填寫“n=a(1)”。(數組含義可以看原題目,這里不再贅述)。
2.再來看第②空如何確定填什么變量的內容
根據程序段(二)可以看出這是一個循環變量為i的for循環語句,其中這個語句的嵌套內有程序段(三)循環變量為j的for循環語句。當讀到這個語句aver = sum / a(i + 1)時,返上去讀程序可以邏輯推理出,在這之前的語句中缺少變量sum的賦值。因此馬上可以確定第②空應該填寫“sum =?”的對變量“sam”進行賦值的語句,為解題確定了目標,然后根據題意 sum = sum + a(? ),數組的下標用哪個變量來改變呢?從它下面的一條語句p = p + 1,可以推導出用p變量。因此很容易就可以確定第②空應該填寫的是“sum = sum + a( p )”。
二、從輸出語句或結果的逆思維邏輯推理出變量的作用完成程序填空
先來看下面一段于2017年3月稽陽聯誼學校聯考技術試題卷的第17題程序,(因為原程序題比較長,以下截取關鍵部分程序段示例):
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Next i
End Sub
還是采用同樣方法,我們先根據程序結構把程序分割成三個小段,分別用虛線框(一)(二)(三)標出。
1.先來看看第①空如何填
先看程序段(一),它是一個循環變量為i的for循環語句,根據if語句的格式可知第①空應該寫一個條件表達式,然后根據then后面的語句flag(i) = True Else flag(i) = False ,在程序的省略部分有備注說明flag(i)變量的作用是用來存放身份證校驗結果,因此可以確定第①空應該填與校驗身份證號有關的內容,由程序前面省略部分可知,身份證號校驗的功能是利用自定義函數check(x)完成的,x這個變量用什么來傳遞呢?根據題目提供的變量定義可知數組sfzh(i)用來傳遞身份證號,因此可以確定第①空應該填寫的內容是check(sfzh(i))。
2.再來看第②空如何填
先分析程序段(二),這是一個循環變量為i的for循環語句,其中這個語句的嵌套有循環變量為j的for循環語句程序段(三)。我們采用逆思維法:先看最后的輸出語句“List2.AddItem Str(i) + "班共有以上" + Str(cw(i)) + "個身份證號錯誤"”,從這個輸出語句我們很明顯馬上可以推斷出i和cw(i)這兩個變量的作用:i:是班級數, cw(i)是存放身份證號錯誤的個數。再看整個程序段中在這個輸出語句之前沒有一個語句對變量cw(i)進行賦值來改變其內容,而第②空根據語句是寫一個條件表達式,由此推斷很快就可以確定第②空需要填寫的內容是“cw(i)= cw(i)+1”。
通過上述兩個案例,我們不難發現,逆思維法是一種解決信息技術選考程序填空難題的行之有效的方法。當然,每個題目不一樣,解決問題的最優方法是千變萬化的,以上筆者的解題思路也不見得一定是最好的,淺見權當拋磚引玉,希望能有更多同行和我一起在實踐中求真知。
參考文獻:
[1]何文勇.新高考背景下信息技術課堂教學有效性的探索與研究[J].新課程,2017(3).
[2]劉鑫.新高考背景下信息技術課堂作業的設計[J].文理導航,2017(5).
編輯 謝尾合