纵观各次信息技术选考,所有加试题从知识内容上说都没有超出考试标准的范畴。但从前几次选考加试题得分情况来看,考生的得分率普遍不是很高。回顾前几次选考,看看加试题考什么、怎么考,也许能获得一些新启示。
考什么
所谓“知己知彼,百战不殆”,要在选考中发挥出较好的水准,必须要清晰地把握选考内容。
纵观前几次选考,加试题总分为15分,由3个选择题(第10、11、12题,共6分)和2个非选择题(第16、17题,共9分)组成。从知识点分布来看,主要集中在“多媒体信息编码”、“算法与VB程序设计”。除此之外,为了考查学生分析解决问题的能力,每次考试的最后一题(第17题)都会出现一个综合题,此类综合题不局限于某个经典算法,往往综合应用了程序设计中的各种方法与技术,我们可以称之为“开放性试题”。
进一步分析,“算法与VB程序设计”主要考查了排序、查找、自定义函数、字符串处理等算法与知识。而If语句、循环语句及数组、常见对象属性操作等编程基础知识,几乎渗透到了每个试题。
怎么考
根据上述梳理可知,所有考查的知识都属于选考科目考试标准的范畴。但由于试题的形式以及考查切入点的新颖性,会给考生一种不确定感,总体来说这几次选考试题呈现出下列特点。
1、 传统题讲究全面而透彻
这里的传统题指的是题材熟悉、所需知识与求解目标之间关系较为直接的试题,如表1所示的4个有关多媒体信息编码的试题。
这类试题的特点是要求考生全面地理解相关的基础知识,并能直接运用这些知识求解试题。如2015年10月选考的第10题:
[加试题]将一个时长为1分钟、采样频率为44.1kHz、量化位数为16、双声道未经压缩的Wave格式音频文件压缩为MP3格式文件,压缩后的MP3格式文件大小为940KB,则其压缩比约为
A、 11:1 B、 11:2 C、 11:4 D、 88:1
考生首先要理解音频数据数字化的原理,然后结合音频采样特点,计算出该音频未经压缩的存储量为10335.9375KB,将此结果除以压缩后的存储容量即可得到压缩比约为11∶1(选项A)。
再如2016年10月、2016年4月的第10题都是针对BMP图像数字化及存储量计算的考查,虽然知识点相同,但考查的切入点不同。前者要求考生根据分辨率和每个像素存储所需的二进制位数计算图像的存储量,而后者需要考生根据存储量和分辨率反向计算每个像素存储所需的二进制位数。
2、 算法题重视考查算法原理和设计思维
学习算法与程序设计不仅要会套用经典算法的程序框架来解决实际问题,更要在深入理解算法原理的基础上,逐渐形成基于既有算法改造之上的算法设计能力。加试部分的算法与程序设计题,充分体现了这种价值取向。
如2015年10月的第16题,要求考生在理解传统冒泡排序算法基础上,根据试题提示分析原算法中存在的冗余处理,并按照改进后的算法要求改正程序中的错误。核心部分的程序段如下:
本题考查的主要特点为:
理解冒泡排序算法的原理
冒泡排序的基本原理是每次在一个未处理区间内扫描,发现逆序对数据后即进行互换,逐渐缩小扫描区间直到区间长度为2。该算法的改进原理就是当剩余区间内数据没有发现逆序对时,即可停止排序。如果考生对原冒泡排序算法的原理理解不够深刻,就无法设计出相应的循环条件并完成改错。
理解冒泡排序程序外循环循环变量的作用原理
教材中冒泡排序算法用For i=1 to n-1语句来控制外循环,循环变量i的主要作用有两个,一是冒泡排序加工的遍数,二是为每遍的加工设定左边界。如果考生未能对这些原理有深刻的理解,就无法理解外循环变量i的作用,也就不能正确分析出Do While循环语句中的条件进而正确写出改正后的结果(将标记(1)处的“or”改为“and”、将标记(2)处的“i”改为“i-1”)。
再如2016年4月第11、12题,2017年4月第11题,2017年4月第12题。这些试题首先需要运用已学经典算法的原理去理解新的程序,更要基于新的问题去创造性地设计算法解决问题。以2017年4月的第12题为例,试题要求考生运用已学的选择排序算法思想,完善改进后的在两端同时进行选择的排序程序。该题的主要内容如下:
该题的考查特点有:
运用内化的选择排序思想理解新的选择排序算法
本题可以说是考查选择排序算法,但又不局限于考查教材中的选择排序算法,而是需要运用内化的选择排序中的“选择”思想,去帮助理解改进后的新排序算法。
根据新问题特点去创造性地设计算法
改进后的选择排序算法带来了新的问题,即两端同时进行选择时所带来的数据交换的相互影响。为了解决这个新问题,需要考生能根据问题特点去完善算法(设计思维)。新问题只有在左端点是最大值时产生,顺藤摸瓜进行分析,当最小值被交换到左端点时,最大值被交换到iMin所指位置,所以正确选项为A。
3、 开放性试题注重解决问题
为了考查学生设计算法解决问题的能力,几次选考都出现了开放性试题。此类试题的特征是没有经典算法的影子,考生在分析程序时无法依据某个经典算法的框架来帮助分析、设计算法,目的是考查学生分析问题、创造性地设计算法解决问题的能力。
这里的算法设计不是从零开始的设计,而是根据试题给出的任务和算法处理特点,针对程序中的断层(需要改错或者填空)设计算法。如,2015年10月的第17题空格②(核心代码段如下)。
根据试题给出的数据加密方法以及自定义函数Code2Char()的功能,考生如能设计出“取出字符串s中第c+1个字符,并将该字符通过函数返回”的算法,就能运用字符串函数写出此处应填的代码“Mid(s,c+1,1)”。
怎么学
1、 领会程序设计本质,掌握关键知识
计算机进行自动化数据处理的本质是对现实数据的规律性重复处理,因此程序设计的核心就是抽象数据重复处理的规律,并将规律通过程序加以体现。在这个过程中,规律性的重复处理往往用循环结构来实现,而数据的规则化组织又通过数组来实现。因此,循环和数组就成为了程序设计中的关键知识。实际前几次选考的16个有关程序设计的加试题中,全部都涉及了循环语句和数组应用。为了真正掌握这些关键知识,教学中可以通过变式应用来加深对这些知识的理解和掌握,如原来用For语句实现的循环结构可考虑用Do While语句来实现,原来用多个数组实现的程序考虑用一个数组来实现等。
除了数值处理,计算机处理的非数值数据主要就是字符串,加试题也体现了这个特征(前几次选考16个程序设计题中出现了3题)。为了熟练掌握字符串处理的关键知识,平时教学中不能只停留在传统的字符串表达式计算的层面,而要在各种字符串相关实际问题的解决过程中深入掌握字符串处理技巧,养成字符串处理的意识和思维,否则就容易出现将“Mid(s,c+1,1)”写成“s(c+1)”的错误。可以借鉴的实际问题可以是“字符文本排版”、“身份证号码校验”等。作为一种发展性思考,教学中还应关注基于字符编码的字符串处理问题的解决。
2、 培养程序设计思维
有些老师认为信息技术考试是笔试,可以不必开展上机实践,只需加强笔试题训练即可。实际上,从前面试题特征的分析可知,即使是笔试题,加试题也已经摒弃了原来“三项考试”中那种通过背代码即可解题的风格,而需要在一定的程序设计思维支持下才能正确地解题。特别地,为了考查考生的程序设计思维,加试题已经在逐步加强“设计”的分量,而不再是纯粹的单个语句的填空或改错。如2016年10月第11题,考生需要分析三个语句的组合顺序,一定程度上还原了程序设计考查的原型。
程序设计思维是当学生面临一个真实的问题时,在分析问题、设计算法与数据结构、将算法用一种程序设计语言表示并进行程序调试的过程中逐步形成的。这个过程往往是费时、充满挫折的,但正是在这样一个不断试错、反思、调整、感悟的思考辨析中,程序设计思维才能不断形成。可能一节课学生只调试了一个程序,但其中隐含了基础知识的回忆与应用、算法的设计与修正、程序代码的解析等过程,其意义与作用远远大于一节课连续讲多个试题。可以从现实中不断挖掘一些程序设计相关的素材,并通过实际编程来解决这些问题,如超市货物销售统计、共享单车使用现状统计等。
3、 针对问题特点,运用分析策略和方法
针对笔试题形式出现的选考,还可提炼并运用一些通用性的程序分析策略与方法,提高解题的正确性,如常识策略、黑匣子策略、对应策略等。
常识策略
算法与程序设计中,总存在一些相对固定的程序实现方法,总结并运用这些方法来帮助程序设计和分析就是常识策略。如:在求和算法中,保存总和的变量一开始总要初始化为零;在求最大值算法中,结果变量初始化值总为一个极小值或者第一项数据值;等等。2016年4月第16题就可运用常识策略来求最大值。
黑匣子策略
黑匣子策略指的是当对某一段程序无法完全理解时(该部分程序段可以看成黑匣子),可以先暂时放弃该模块内部如何处理的分析,而只需从已知算法的整体结构出发,分析出该模块的功能(即知道该模块在做什么),并根据该功能去帮助理解其他部分的程序代码。这样处理后,一方面可以暂时跳出这个瓶颈,不致影响对整个问题的求解,另一方面,当其他部分理解透彻后,反过来又可帮助我们对该模块算法的理解。
如,在2015年10月第17题中,如果第一遍看程序对于自定义函数Code2Char有点费解,那么就不必纠结,只需抓住该函数的功能是“将参数c中的整数转换为加密后的字符”,然后利用对该功能的理解,进一步分析出主程序中Code2Char(b1)和Code2Char(b2)分别在将1个字节的前4位和后4位二进制数对应的编码转换为加密字符。以此为突破口,就能逐步梳理出算法并解决问题。
关键变量法
关键变量法指的是运用逆向思维,首先确定程序输出结果时的关键数据,分析输出结果由哪些变量决定,将这些变量作为关键变量,在分析程序时抓住这些关键变量,从关键变量值的变化规律去归纳程序的处理规律,进而逐步梳理出算法并完成解题。
如,2016年10月选考的第11题,试题给出三行代码(如下所示),要求确定这三行代码的顺序,使得程序(因篇幅有限,其余代码略)能判断s是否为对称字符串。
在该程序中k是关键变量。结合最后输出语句及第二行代码,可知变量k在统计不同字符的个数。再结合程序中的其他代码,可进一步逆向推断出变量c1和c2分别表示左右两边对称位置上的字符。由此可逐渐分析出正确组合顺序为③②①。
对应策略
对应策略指的是如果已有程序的算法思想(可以是自己归纳得到,也可以是问题中给出),那么可在程序中寻找算法各个处理步骤对应的语句,然后根据算法要求分析程序中对应部分的功能并写出所需的代码。
2016年4月选考的第17题虽然难度较大,但如果充分运用对应策略,还是能比较顺利地解决问题。该题部分代码及题目中对应的方法描述如下表所示。
按照题目中的方法描述,示例3情况处理时应将a(pa+2)的值重复地赋予存放解压缩数据的数组b,所以空格②处代码应为“b(pb+i-1)=a(pa+2)”。而对于空格①处的代码设计,既可对应题目中的方法描述得到,也可通过示例3情况处理中的“pa=pa+3”对应分析得到。
由此可见,加试题重在基本原理理解及应用、信息技术学科思维的考查,而盲目的题海战术只能徒增师生负担。信息技术教学应顺应趋势,着眼学科核心素养、遵循实践性和综合性,引导学生在解决实际问题的过程中逐步提升信息素养。
本文作者:吴建峰 高级教师
原文均刊载于《浙江考试》期刊2017年第10期