


摘 要:2014年浙江省出臺新高考方案,算法與程序設計作為高中信息技術其中一個重要環節,在四次選考后已經引起師生的充分重視。本文根據筆者對新高考模式下的教學經歷,在算法與程序設計的解題技巧提出自己的想法和體會,與各位同仁交流探討,希望能對您有所啟發,從而提高我們的教學水平,一起做好高中信息技術教學的相關工作。
關鍵詞:新高考;信息技術;加試題;算法與程序設計
一、 技術選考,困境重重
通過2015年10月與2016年4月及2016年10月、2017年4月四次選考后,明顯發現學生對加試題部分(算法與程序設計)的得分普遍不高,尤其是最后16、17兩個加試題,學生基本上是顆粒無收,能答出兩空以上的學生已經是非常不錯了。如何提高學生在加試題上的得分率是我們信息技術教師需迫切解決的問題,筆者就本人在教學中的一些經歷和想法與大家探討。
二、 明確思路,有的放矢。
(一) 仔細審題,戒驕戒躁
在解算法與程序設計題時,除了要有扎實的基礎,在應試時還要認真仔細,沉著應考,切忌急躁。高考卷中的加試題基本上都要對基本語句進行再加工,進行微調,如果不細心讀題,容易犯經驗主義錯誤,掉入出卷專家的陷阱中。如例1(2016年4月高考加試11題)使用排序算法解題,粗粗一看以為是冒泡算法,其實不然,出卷專家在本題中出了兩個陷阱:1.外循環范圍是1 to 2,而不是1 to 4;2.在兩兩比較的過程中不是a(j)和a(j-1)比較,而是在比較的過程中每一次都和i位置的值比較。在答題時稍一粗心,就會弄錯算法,導致解題錯誤。
數組元素a(1)到a(5)的值依次為“33,24,45,16,77”,經過該程序段“加工”后,數組元素a(1)到a(5)的值依次為
A. 77,45,33,16,24B. 77,33,45,16,24
C. 77,24,45,16,33D.77,45,33,24,16
又如例2所示,如果審題不清,誤把題目要求的“至少查找次數”理解為最多查找次數,會想到通過公式int(log2n)+1求解得到答案C,而正確答案為B。
例2 [加試題]使用對分查找對22個有序數組成的序列進行查找,查找失敗時關鍵字比較次數至少需要為
A. 3次B. 4次
C. 5次D. 6次
以上兩例充分反映了審題的重要性,審題不清求出的答案似是而非,費時費力,做無用功。
(二) 明確過程,切忌空想
在解析算法與程序設計題時,經常出現循環語句,在推導時步驟繁多,如果只是自己腦中想想,很容易遺忘步驟,導致解題錯誤。因此充分利用草稿紙,記錄算法運行過程,記錄代碼中的變量變化情況,聯系前后文進行解題是非常必要的。
我們的方法是做一張表格,把步驟記錄在表格中,每一行表示一遍循環,把算法的過程寫清楚。如上面“例1”中要求解加工后的元素排列順序,我們做如下表格:
通過表格能很清晰得到答案,又如上題“例2”中求對分查找失敗至少查找次數,也是要把代碼運行過程進行演示推到,通過推導對分查找過程得到答案:
對分查找失敗的條件時i>j,通過推導,我們可以發現查找到第4次時,第1個數i和j的位置相等,如果未查找到key值,那么就表示查找失敗,從而得出查找失敗至少查找次數為4次。
(三) 熟讀題目,理出步驟。
算法與程序設計中16、17題往往題目描述較長,而考試時間有限,學生匆匆讀完題目后再解讀代碼時往往已經忘了題目要求是什么,又要反復讀題,非常浪費時間和精力。所以我們要求學生在讀題時把題目要求步驟化,找出重點內容,精簡描述,列出算法步驟,提升讀代碼時的效率。如下題所示:
我們首先要分析算法,通過題意我們可以讀出以下算法過程:
步驟1.N個房間,第i個房間住a(i)人;
步驟2.選擇一個初始房間,接著每個人按照順時針走到相鄰的房間;
步驟3.每走過一個房間消耗一點能量,計算消耗能量的和;
步驟4.比較是否最少消耗,是輸出結果,不是返回步驟2。
通過分析我們可以得出算法為枚舉,1步驟賦值;2~4步驟循環;3步驟累加;4步驟比較大小。本題要求是計算每個初始房間能量消耗,比較能量消耗得到消耗最少的組合。
(四) 拆分代碼,從繁到簡
算法通過程序實現,我們解題過程就是分析代碼對應相應的算法步驟,把相關代碼的功能與算法步驟對應起來,把整個程序代碼分為多個小的代碼段,減輕讀題難度。對題目不做要求代碼猜出功能后可以跳過,這樣可以節省時間,對于高考來說時間是非常寶貴的。上題的程序代碼如下圖所示:
通過分析:①所對應的程序代碼段是算法中的步驟3;②所對應的程序代碼段是算法中的步驟4;③所對應程序代碼段是算法中的步驟2。明確每段程序要完成的功能后,對應算法步驟拆分程序段,分步解決問題。
(五) 題意釋變,推導變量。
算法與程序解題必須了解各個變量的功能,可以通過題意要求和代碼上下關系,推導變量功能,助推解題過程。如上題的代碼過程:
1.因為Text2.Text輸出為最小能耗,所以通過ans變量推出t變量為當前能量消耗總和;
2.因為Text1.Text輸出為最小能耗的初始房間號,所以通過k變量可推出i變量為初始房間號;
3.通過w=i+j和t=a(w)*j兩個語句可以推出j變量表示初始房間后第幾個房間,w變量為下一個房間編號。
推導出各個變量的功能,整個程序的解題過程完成一半,接下來是使用具體的方法來進行解題。
三、 巧用方法,事半功倍。
(一) 數值代入,考慮特殊
在程序解題過程中,我們經常可以考慮算法程序的極端情況,代入一些特殊數值進行求解,往往會起到奇效,可以把題目中的特殊問題表現出來,有助于快速解題。
例如上題中因t變量為消耗總量,為累加語句,所以第二空我們可以得到答案為累加語句t=t+a(w)*j;而第一空處我們就要使用特殊數值代入分析問題,假設一共有5個房間,如果初始房間號為最后一個房間5,執行代碼w=i+j后下一個房間編號應該為6,而實際房間號為1,不符合算法要求,超出總房間數后應該取余,所以可以得到正確的代碼為w=(i+j)mod n。這與計算今天過后下一天是星期幾的解題方法一樣,相應的單位個數內循環運行可以使用取余的算法實現。
(二) 明確下標,理清過程。
加試題中經常出現的考點是“數組”應用,要求學生對數組及數組下標的關系非常清楚,如果學生在解題過程中對數組和對應的值不明確,就不知如何去解題。在2016年4月、10月、2017年4月的加試題中都涉及了數組的應用。
第①部分中下標i表示的是從0分到100分,從下標推出第一部分的功能是對A數組賦初值為0,表示每個分數沒有1個對應的學生;第②部分中下標i表示第1位到最后一位學生,該部分的功能是統計A數組中每個分數的學生數(計數語句A(?)=a(?)+1),所以要找出學生和分數的關系,通過代碼得知在sscore()數組中存儲的就是每位學生的分數,可以得到答案是:A(sscore(i))=A(sscore(i))+1;而第③部分中i表示的是100分到0分,而根據題目中要求可得數組A+數組B為下一分數的名次,可以得到答案為mc=A(i)+B(i)。
數組在程序代碼中經常出現,我們在解題的過程中應該重點分析數組下標及對應的內容關系,培養學生良好的解題習慣,提升學生解題思維。
(三) 上下關聯,推導結果。
算法程序代碼是相關聯的,在解題的過程中不一定要通讀代碼,可以通過上下語句的關聯性,推導出所需要的答案。通過這種方法可以大大節省時間,提高答題效率。例如求解2016年10月份的第17題:
[加試題]小李與小王合作編寫一個成績統計的VB程序:小王編寫一個過程,該過程從數據庫讀取某一指定科目的相關數據,存儲在數組a;小李編寫一個過程,該過程依據數組a中的相關數據統計各班平均分。小李與小王約定的數據a各元素含義如圖所示。
在求解第1空時,我們從第2行代碼(p=n+2)中發現n沒有賦初值,所以這一行代碼應該為n的賦值語句,而賦的值是什么,我們可以在分析題意時知道n=a(1)。在求解第2空時,我們從代碼(aver=sum/a(i-1))中推出sum為求和,所以第2空應該是一句累加語句:sum=sum+a(?),而a數組的下標具體是什么我們可以通過下1計數語句(p=p+1)中得到,該語句在代碼的其他位置都沒有用到,所以肯定在第2空中用到了p變量,那么第2空語句應該是sum=sum+a(p),最后代入數值求證結果是否正確。
通過各種解題方法的組合使用,可以有效地提高學生解題效率,節約解題時間,提升解題正確率。
四、 與時俱進,學習提高。
新高考模式下算法與程序設計屬于加試題,是學生成績的拉分點,也是學生難以掌握的知識點,如何提高學生的得分率,使得學生考出理想的成績,是我們教師的責任和挑戰。本文筆者對應自己的教學經驗,通過夯實基礎,歸納總結,仔細審題,明確過程,熟讀題目描述,理解算法思想;對照算法思想,逐條找出對應的程序代碼,前后關聯,解釋變量的過程分析代碼。通過數值代入,一般問題特殊化,通過上下關聯,推導結果等方法逐步分解加試題,把難題分解為最基本的學生理解的結構,最終解出答案。這是筆者對加試題解題方法的一些想法和實踐,其中有很多不足及不對之處,希望各位讀者能加以指正,同時希望其中某點方法可以和讀者產生共鳴。
參考文獻:
[1] 浙江省新課改高考方案.浙江省人民政府網.http://www.zj.gov.cn
[2] 《走進高中新課程》編寫組.走進高中新課程[M].華中師范大學出版社.
[3] 《同步優化 信息技術》一課一練[M].浙江教育出版社.
[4] 2015年10月、2016年4月、2016年10月、2017年4月技術真題卷.
作者簡介:錢煥春,浙江省杭州市,浙江省杭州市富陽區新登中學。