詹建兵
《普通高中信息技術(shù)課程標(biāo)準(zhǔn)(2017年版)》將計(jì)算思維作為信息技術(shù)的學(xué)科核心素養(yǎng),同時(shí)指出,在算法與程序設(shè)計(jì)模塊中學(xué)生需要“理解利用算法進(jìn)行問(wèn)題求解的基本思想、方法和過(guò)程,掌握算法設(shè)計(jì)的一般方法,能描述算法,分析算法的有效性和效率,利用程序設(shè)計(jì)語(yǔ)言編程以實(shí)現(xiàn)算法,并能有意識(shí)、負(fù)責(zé)任地應(yīng)用算法解決實(shí)際問(wèn)題”。隨著浙江省學(xué)考和選考的分離,選考中算法與程序設(shè)計(jì)模塊的分值明顯增加,這充分體現(xiàn)了計(jì)算思維的核心地位。于是,筆者在自己的教學(xué)中從知識(shí)技能落實(shí)、解題步驟思考及學(xué)習(xí)效果總結(jié)這三個(gè)層面構(gòu)建并嘗試計(jì)算思維視野下算法與程序設(shè)計(jì)題的學(xué)生解題能力培養(yǎng)策略。
● 注重知識(shí)技能落實(shí),夯實(shí)學(xué)生的思維基礎(chǔ)
1.加深印象,鞏固基礎(chǔ)知識(shí)
算法與程序設(shè)計(jì)模塊的主要內(nèi)容是系列常用算法的思想及其程序?qū)崿F(xiàn),這些內(nèi)容的學(xué)習(xí)鞏固應(yīng)該從對(duì)算法基本思想的理解開(kāi)始,到用自然語(yǔ)言及流程圖描述算法,最后形成模塊化的程序代碼。通過(guò)層層遞進(jìn)實(shí)現(xiàn)計(jì)算思維中概念界定、變量假設(shè)、數(shù)學(xué)模型創(chuàng)建、問(wèn)題解決等過(guò)程;同時(shí)也讓學(xué)生加深對(duì)相應(yīng)算法內(nèi)容的印象,鞏固算法基礎(chǔ)知識(shí)。
2.舉一反三,理解算法變式
對(duì)于常用算法的考查,在高中信息技術(shù)學(xué)考選考題中一般都通過(guò)設(shè)置相應(yīng)算法變式進(jìn)行??v觀歷次考試真題,在9次選考的程序設(shè)計(jì)題中共有4次出現(xiàn)了冒泡排序,涉及知識(shí)點(diǎn)分別是冒泡排序優(yōu)化、冒泡排序中數(shù)據(jù)移動(dòng)的過(guò)程、剔除重復(fù)數(shù)據(jù)并排序、冒泡排序奇偶數(shù)列排序的變式等。另外,在選考題中還經(jīng)常涉及數(shù)組基礎(chǔ)知識(shí)的變式內(nèi)容,如桶思想應(yīng)用、矩陣變換思想、字符的加解密等問(wèn)題。因此,在復(fù)習(xí)中應(yīng)該引導(dǎo)學(xué)生在掌握常用算法的基本思想后要多進(jìn)行舉一反三,以拓展思路,理解算法變式。
3.上機(jī)操作,梳理綜合程序
由于算法與程序設(shè)計(jì)模塊的綜合題是浙江省高中信息技術(shù)學(xué)考選考的壓軸題,其題型多變,程序復(fù)雜,綜合性強(qiáng),這就需要學(xué)生在掌握基本知識(shí)點(diǎn)的基礎(chǔ)上具備將多個(gè)程序整合重組的能力(根據(jù)所需要解決的問(wèn)題,運(yùn)用嵌套的選擇語(yǔ)句或循環(huán)語(yǔ)句等將多個(gè)程序組合成一個(gè)程序)。筆者在復(fù)習(xí)時(shí)通過(guò)組織學(xué)生進(jìn)行上機(jī)操作來(lái)培養(yǎng)學(xué)生該方面的能力,如讓學(xué)生編寫(xiě)一個(gè)課間操排隊(duì)程序。由于學(xué)生在編寫(xiě)該程序時(shí)既用到了運(yùn)算量、基本語(yǔ)句及程序的多重嵌套等基礎(chǔ)知識(shí),又用到了數(shù)據(jù)庫(kù)數(shù)據(jù)讀取、排序算法及數(shù)據(jù)去重等多種數(shù)據(jù)處理技能。因此,通過(guò)對(duì)該程序的編寫(xiě)調(diào)試,有效夯實(shí)了學(xué)生分析問(wèn)題、合理運(yùn)用算法編程解決問(wèn)題的思維基礎(chǔ),從而提升了學(xué)生的解題能力。
● 注重解題步驟思考,強(qiáng)化學(xué)生的思維意識(shí)
算法與程序設(shè)計(jì)模塊綜合題是改錯(cuò)題或填空題,題目已給出了相應(yīng)的代碼輪廓,需要學(xué)生按出題者的思維完成對(duì)題意的分析并解題。另外,選考試題閱讀量大,考試時(shí)間緊,通常在十分鐘左右就要解決一道綜合題。因此,考試中有效的解題方法與技巧必不可少。
1.明確要求,把握關(guān)鍵點(diǎn)
閱讀題中主要是文字描述,并將要實(shí)現(xiàn)的功能重點(diǎn)圈出,若程序?qū)崿F(xiàn)有先后順序(特別是涉及字符加解密類別的程序設(shè)計(jì)題),則可將各類功能按照一、二、三排列,簡(jiǎn)要寫(xiě)在邊上。讀懂了題目意思后,再結(jié)合所給的例圖進(jìn)行具體數(shù)值的帶入運(yùn)算,檢驗(yàn)程序是否按剛才所讀懂的功能進(jìn)行。例如,2020年1月的選考題,文字題目中僅僅說(shuō)明了要實(shí)現(xiàn)的功能效果,而具體實(shí)現(xiàn)的步驟都體現(xiàn)在所給的例圖中。此外,把握題目關(guān)鍵點(diǎn)后,可以先想一想如果自己要編寫(xiě)該程序,應(yīng)通過(guò)怎樣的流程來(lái)實(shí)現(xiàn),將思維從人的思想轉(zhuǎn)換為運(yùn)用計(jì)算機(jī)可以實(shí)現(xiàn)的方式分析問(wèn)題、建模處理,為之后的解題提供參考。
2.劃分模塊,分析程序功能
明確自然語(yǔ)言及例圖所描述的算法實(shí)現(xiàn)步驟之后,為了提高解題效率可以直接開(kāi)始閱讀代碼。程序設(shè)計(jì)選考題的程序代碼通常由很多語(yǔ)句組成(少則十幾行,多則可達(dá)到五六十行),看起來(lái)十分復(fù)雜。因而閱讀代碼的第一步是根據(jù)各類語(yǔ)句的基本結(jié)構(gòu)進(jìn)行區(qū)域劃分,明確循環(huán)語(yǔ)句、選擇語(yǔ)句如何執(zhí)行,梳理程序的功能效果。另外,對(duì)于循環(huán)語(yǔ)句要特別注意多重循環(huán)嵌套的效果,對(duì)于選擇語(yǔ)句要特別注意是行還是塊If語(yǔ)句。
3.對(duì)應(yīng)流程,生成解題思路
雖然審題時(shí)已經(jīng)嘗試按照自己的思路設(shè)計(jì)程序代碼,但是相同的功能可以用不同的代碼來(lái)實(shí)現(xiàn),更何況程序設(shè)計(jì)選考題是按出題者的思路去解題。因此,劃分完程序代碼模塊后需要馬上通過(guò)代碼去理解出題者的思路。結(jié)合前兩步的算法思想梳理及功能模塊劃分,一一對(duì)應(yīng),明確填空或改錯(cuò)所在的代碼位置及其大致要實(shí)現(xiàn)的效果。另外,有些程序設(shè)計(jì)選考題的程序代碼中給出的注釋可能包含關(guān)鍵信息(提示某個(gè)變量具體存儲(chǔ)的內(nèi)容或者是接下來(lái)一段代碼總體實(shí)現(xiàn)的功能等),這對(duì)解題起到了很好的提示作用。
4.結(jié)合思路,完成相應(yīng)代碼
理順?biāo)惴▽?shí)現(xiàn)過(guò)程及代碼后應(yīng)該就能明確本空格所要實(shí)現(xiàn)的功能,再聯(lián)系其前后代碼,開(kāi)始填空或改錯(cuò)。首先,找出當(dāng)前代碼中算法的關(guān)鍵點(diǎn),回憶本題是否有相關(guān)的基本算法,警惕其中易錯(cuò)點(diǎn)。例如對(duì)分查找算法,要明確對(duì)分查找的原理、對(duì)分查找的范圍、每一次對(duì)分查找中點(diǎn)數(shù)組元素下標(biāo)及通過(guò)flag邏輯變量跳出循環(huán)的方式、If與ElseIf語(yǔ)句的不同實(shí)現(xiàn)效果等。其次,注意填空或改錯(cuò)在程序中的位置,其填寫(xiě)內(nèi)容大致可以總結(jié)為“循環(huán)前賦值、循環(huán)中變化、循環(huán)后輸出”。循環(huán)前一般考查的都是賦值語(yǔ)句,可能是從VB界面中獲取值,也可能是類似于0、1、2之類的數(shù)字;循環(huán)中的改錯(cuò)或填空應(yīng)根據(jù)題意去寫(xiě),可能是變量的變化,也可能是條件的判斷;循環(huán)后的一般就是結(jié)果的輸出。另外,改錯(cuò)題還應(yīng)注意修改前和修改后內(nèi)容的相似之處。
5.代入檢驗(yàn),提高正確率
為了進(jìn)一步提高正確率,筆者建議在完成代碼后最好將填好的內(nèi)容代入原代碼進(jìn)行檢驗(yàn)。在條件類的填空或改錯(cuò)中,首先要注意邏輯運(yùn)算符號(hào)的優(yōu)先級(jí),其次還應(yīng)該聯(lián)系全文,查看是否有多個(gè)判斷條件,特別注意是否需要加上邏輯變量flag的條件。在帶有數(shù)值的填空或改錯(cuò)題中,需要注意各類變量的數(shù)據(jù)類型及是否需要+1、-1等數(shù)學(xué)運(yùn)算。
筆者認(rèn)為,算法與程序設(shè)計(jì)模塊綜合題的解題步驟可按上述的五個(gè)步驟展開(kāi),逐一分析,抽絲剝繭,運(yùn)用計(jì)算思維完成程序功能分析、建模處理、梳理流程及最終解題。上頁(yè)圖1所示為2018年11月選考的第16題的解題過(guò)程。
● 注重學(xué)習(xí)效果總結(jié),鞏固學(xué)生的思維水平
1.知識(shí)技能總結(jié),明確掌握程度
課堂學(xué)習(xí)完成后,通過(guò)填寫(xiě)算法總結(jié)表(樣表如圖2)來(lái)羅列所學(xué)習(xí)的基本知識(shí)點(diǎn)。算法總結(jié)表的主要內(nèi)容包括算法思想及特點(diǎn)、數(shù)組元素值變化、基本代碼、代碼變式等。
2.練習(xí)效果反饋,細(xì)化解題過(guò)程
每次考試或練習(xí)結(jié)束后組織學(xué)生填寫(xiě)練習(xí)效果反饋表(樣表如圖3),將典型例題抄寫(xiě)在試題區(qū)或直接剪下來(lái)貼在表中,從解題結(jié)果和思路啟示等方面進(jìn)行本次練習(xí)反饋。解題結(jié)果主要從概念界定、變量假設(shè)、數(shù)學(xué)模型創(chuàng)建等出發(fā),結(jié)合練習(xí)中出現(xiàn)的一系列常見(jiàn)問(wèn)題來(lái)分析題目做錯(cuò)的原因;思路啟示主要是對(duì)一些新型解題思路進(jìn)行匯總,如算法變式等。