新一轮学考选考即将在10月开考,浙考微君特地为大家准备了技术科目的解题指南。其中信息技术部分主要从压轴题入手,帮助同学们剖析真题,提高解题能力;通用技术部分则从技术设计题切入,为日常教学和学生规范解题提供参考。大家不妨仔细瞧瞧,扎实做好复习。
信息技术
真题剖析
2016年4月学考选考中,信息技术压轴题为:
17.【加试题】某数据压缩方法描述如下:
1)原始数据中,某数不为0且相邻无重复,压缩数据用该数表示;
2)原始数据中,某数为0且相邻无重复,压缩数据用两个数表示:第1个为0,第2个为0;
3)原始数据中,某数据相邻有重复,压缩数据用3个数表示:第1个为0,第2个为重复数的个数,第3个为该数本身;
根据上述压缩方法,对应的解压缩方法示例如图a所示。
小明编写了一个解压缩VB程序,功能如下:窗体加载时,自动读取压缩数据,依次存储在数组元素a(1)、a(2)、a(3)……中,压缩数据的个数存储在变量n中,压缩数据显示在文本框Text1中。单击“解压缩”按钮Command1,程序对压缩数据依次进行解压缩处理,解压缩数据显示在文本框Text2中。程序运行界面如图b所示。
(1)如果压缩数据为“23,0,21,66,0,0,77,0,5,0”,则解压缩数据的个数是 。
(2)实现上述功能的VB程序如下。请在划线处填入合适代码。
Dim a(1 To 100) As Integer'存储压缩数据,最大处理个数为100
Dim b(1 To 1000) As Integer'存储解压缩数据,最大处理个数为1000
Dim n As Integer'存储压缩数据的个数
Private Sub Form_Load( )
'压缩数据由上述压缩方法生成
'本过程用于读取压缩数据并存储在数组a中,压缩数据个数存储在变量n中
'代码略
End Sub
Private Sub Command1_Click( )
Dim pa As Integer'存储压缩数组当前处理位置
Dim pb As Integer'存储解压缩数组当前处理位置
Dim firstdata As Integer, count As Integer, i As Integer
pa = 1: pb = 1
Do While pa <= n
firstdata = a(pa)
If firstdata <> 0 Then '示例1情况处理
b(pb) = firstdata
pa = pa + 1: pb = pb + 1
Else
count = a(pa + 1)
If count = 0 Then'示例2情况处理
b(pb) = 0
pa = ① : pb = pb + 1
Else ’示例3情况处理
For i = 1 To count
②
Next i
pa = pa + 3: pb = pb + count
End If
End If
Loop
Text2.Text = Str(b(1))
For i = 2 To ③
Text2.Text = Text2.Text + "," + Str(b(i))
Next i
End Sub
该试题模型取自浙教版《信息技术基础·必修》教材——信息的压缩及其原理,但采用的压缩、解压缩算法有所变化,并形成一个相对完整的压缩、解压缩数据表达体系。对试题的解答可通过以下几个方面完成。
1
理解问题是解题基础
学生只有根据题干描述理解算法思想,才能准确把握程序代码细节(考前对教材这段内容进行过认真学习并理解压缩、解压缩基本思想的学生能够比较快速地读懂题目)。这里的关键是压缩与解压缩的关系。
本题第1小题考查学生对题干描述的解压缩算法的理解。题目中压缩数据为“23,0,21,66,0,0,77,0,5,0”,根据题干描述图示中的3种情况,可将压缩数据切分为“23”(示例1)、“0,21,66” (示例3)、“0,0” (示例2)、“77” (示例1)、“0,5,0” (示例3),共五组,再根据题意,得到解压缩数据的个数为29。具体分析过程如下表所示。
正确解答该题将获得一个理解算法(更确切是对照图示,理解解压缩思想)即可得分的机会(这是算法考核的一种新方法),同时又为后续VB程序代码填空的解答作了铺垫。
2
转换问题是解题核心
要继续解答该题,需要进行以下几个转换。
(1)将压缩算法转换为解压缩算法。
根据题意,解压缩数据共有示意图中的“示例1”、“示例2”和“示例3”三种情况。将解压缩数据按照这三种情况,结合对前面压缩方法理解的基础上,可得到如下解压缩算法:
1)压缩数据中示例1情况:压缩数据只有一个数且不为0,解压缩数据即为该数本身;
2)压缩数据中示例2情况:压缩数据有两个数且均为0,解压缩数据为0;
3)压缩数据中示例3情况:压缩数据用3个数表示:第1个为0,第2个为解压缩数据的个数,第3个为解压缩数据。解压缩数据为重复的数据,重复数的个数为第2个数,值为第3个数。
(2)将解压缩算法的描述由自然语言形式转换为流程图形式。
将上述情况先用下表总结:
题目对三种情况处理的注释十分清晰。从题目中的代码可以看出:firstdata表示当前处理情况的第1个数,count表示第2个数即重复个数。由此可以很容易地画出三种示例情况处理的解压缩算法流程图(如下图所示)。
当然,要做进一步处理,还需要对这部分流程图进行细化和扩充,此处不再赘述。
3
数组下标运用是解题关键
在该题算法实现过程中,压缩数组的下标pa和解压缩数组的下标pb是程序的关键。通过pa、pb实现这2个数组元素的对应操作。即依次分析压缩数组中的数据,把解压缩后数据放置在解压缩数组的对应位置中。
通过前面对算法的理解和分析,下标计算也就清晰了(pa、pb的初始值都为1):示例1情况压缩数据只有1个,因此数据处理完成后a数组下标的值pa加1;示例2情况压缩数据有2个,因此数据处理完成后,pa的值加2,由此可知程序代码中①处填写pa+2(同理,示例3情况压缩数据有3个,因此数据处理完成后,pa的值加3)。
示例1和示例2两种情况的解压缩数据都只有1个,因此数据处理完成后解压缩数组下标pb的值都增加1。示例3情况的解压缩数据有count个,因此数据处理完成后pb的值增加count。但不管是哪一种情况,pb的值增加后,都指向即将处理的下一组第1个解压缩数据,即使是最后一组数据也不例外。因此,解压缩循环结束后,已经处理得到的解压缩数据的总个数为pb-1,由此可知程序代码③处应填写pb-1。
要回答程序代码中②处的问题,应认识到此处是示例3情况的处理。此时,压缩数组a中的元素依次为a(pa)、a(pa+1)、a(pa+2),解压缩数组b中的元素依次为b(pb)、b(pb+1)、……、b(pb+count-1),这count个元素的值均为a(pa+2)。结合循环变量i(初值为1,终值为count),可知程序代码中②处应填写b(pb+i-1)= a(pa+2)。
复习策略
1
夯实基础
上述压轴题,基本涵盖了《算法与程序设计》模块中的主要内容。从两次信息技术试题来看,试题重视基础,关注知识覆盖,注重对考生能力的考查。夯实基础,自主构建完善知识结构是提高信息技术解题能力的不二法门。
2
审题、解题、反思
(1)审题要仔细,边读边画,不丢掉任何一个解题信息,抓住问题的核心,确立正确的解题方向。
(2)解题过程中包含着一系列基础知识和基本技能的灵活运用,及时归纳总结解决某类问题的思想方法,对于提高解题能力大有益处。
这两年的压轴题将高中信息技术中的编码、加密与解密、压缩与解压缩、算法设计和程序实现生动地结合在一起。要解答该类题目,需要理解算法实现的整个过程(包括宏观过程与细节处理),熟练掌握VB变量、基本运算、表达式,熟练运用两类VB语句(分支与循环)。尽管在题目中没有出现排序算法和查找算法,但题目对数组的要求都很高。尤其是针对数组元素的操作而言,下标永远是灵魂。其实,排序算法和查找算法也同样体现对数组下标的运用能力。
复习阶段要有针对性地整理解题思路、提炼解题方法、内化解题策略。
(3)解题后反思是提高解题能力的重要环节。反思是对所学知识的进一步提炼,是对解题能力的进一步提升。通过反思活动,可以将“死记硬背”的知识转化为真正属于自己的能力,同时训练了思维。通过反思活动,力求做到“做一题,通一类,会一片”,从而提升解题能力。
3
充分利用易错题资源
收集易错题,建立自己的错题本。分析错因,并对错因进行归类。如果是知识性错误,应进行基础知识的查漏补缺。如果是方法性错误,应该重新审题,找准切入点,理清解题思路,学会该类题型的解题技巧。如果是过失性错误,则应该克服自己的一些非智力毛病。只有找准错误,对症下药,才能提升解题能力。