本公众号推出真题回顾系列,将VB题目进行了Python改编,并在最后附上对于目前选考备考来说,还有价值的其它题目。
改编过程中感慨万千。大概只有我们信息技术学科,在短短十年间,变化如此之大。
信息技术教师必须具备两种学习意识:对于底层知识,需要“慢思考”,沉下心去啃硬骨头,建立深刻的理解,这可能需要几年甚至十几年的积累。对于应用层知识,需要“快学习”,快速上手,快速迭代,甚至要有“用完即弃”的觉悟。这种精神上的分裂和持续的压力,是其他学科教师难以体会的。
也因此,浙江技术选考造就了一大批优秀的信息科技教师。
今天是第一期,看看我们的来时路。
一、选择题第12题:基本算法与数组处理
【2015年10月原题】12.(加试题)有如下VB程序段:
Dim a(1 To 5) AsInteger, i AsInteger, c AsIntegera(1) = 2 : a(2) = 1 : a(3) = 3 : a(4) = 4 : a(5) = 5c = 0For i = 3 To 5If a(i - 2) + a(i - 1) = a(i) Then c = c + 1Next iText1.Text = Str(c)
该程序段运行后,文本框Text1中显示的内容是( )
A. 1 B. 2 C. 3 D. 4
【Python版】有如下Python程序段:
a = [0, 2, 1, 3, 4, 5]c = 0for i in range(3, 6):if a[i-2] + a[i-1] == a[i]:c = c + 1print(c)
该程序段运行后,输出的是( )
A. 1 B. 2 C. 3 D. 4
【解析】
当 i=3 时:a(1)+a(2) = 2+1 = 3,等于 a(3),条件成立,c 变为 1。
当 i=4 时:a(2)+a(3) = 1+3 = 4,等于 a(4),条件成立,c 变为 2。
当 i=5 时:a(3)+a(4) = 3+4 = 7,不等于 a(5)(5),条件不成立。
结果:最终 c 的值为 2。故选 B。
二、非选择题第14题:温度转换与循环结构
【2015年10月原题】14.编写VB程序,实现如下功能: 在文本框Text1和Text2中分别输入一个整数,单击命令按钮Command1,在列表框List1中显示结果。结果包含两列数据,第1列为两数之间的摄氏温度值(间隔1度、升序),第2列为对应的华氏温度值。
(1)要使命令按钮Command1上显示的文本改为“转换”,可在其属性窗口中将______属性修改为“转换”。
(2)实现代码如下:
t1 = Val(Text1.Text)t2 = Val(Text2.Text)If ___①___ Thent = t1: t1 = t2: t2 = tEnd Ifi = t1Do While ___②___f = i * 9 / 5 + 32List1.AddItem Str(i) + "" + Str(f)___③___Loop
划线①②处的选项:
A. i <= t2 B. f <= t2 C. t1 > t2 D. i < f
【Python版】输入两个摄氏温度整数,按升序输出该区间内所有摄氏度及其对应的华氏度(华氏度 = 摄氏度 × 9 / 5 + 32)。程序运行截图如下:

实现该功能的Python程序代码如下,请在划线处填入合适的代码或选项:
t1 = int(input("输入第1个整数: "))t2 = int(input("输入第2个整数: "))if ___①___:t1, t2 = t2, t1i = t1while ___②___:f = i * 9 / 5 + 32print(i,f)___③___
划线①②处的选项:
A. i <= t2 B. f <= t2 C. t1 > t2 D. i < f
【解析】
① 选 C (t1 > t2):为了实现升序输出,如果第一个数大,必须交换。
② 选 A (i <= t2):循环变量 i 从较小的 t1 开始,增加到较大的 t2 结束。
③ 填i = i + 1:手动控制循环变量递增,间隔1度。
三、非选择题第16题:冒泡排序优化
【2015年10月原题】16.(加试题)冒泡排序优化: n个数据的冒泡排序需要经过n-1遍加工,每一遍加工自下而上比较。若某一遍加工过程中没有数据交换,说明数据已经有序。
' 加框处代码有错,请改正i = 1: flag = TrueDo While i <= n - 1 Or flag = True'加框处:i <= n - 1 Or flag = True(1)flag = FalseFor j = n To i + 1 Step -1If a(j) < a(j - 1) Thenk = a(j): a(j) = a(j - 1): a(j - 1) = kflag = TrueEnd IfNext ji = i + 1Loop' (2) 处输出加工遍数逻辑(略)
【Python版】n个数据的冒泡排序需要经过n-1遍加工,每一遍加工自下而上比较相邻两个数据,把较小者交换到上面。小刘发现:当某一遍加工过程中没有数据交换,说明数据已经有序,无需进一步加工。为此,小刘对算法进行优化。运行结果如图:

小刘编写的python程序如下,(1)(2)两处加框处代码有误,请修正。
a = [44, 38, 78, 37, 96, 4, 45, 69]print("排序前数据:",a)n =8i =1flag =Truewhile i <= n -1or flag ==True:#(1)加框处:i <= n - 1 or flag == Trueflag =Falsefor j inrange(n -1, i -1, -1):if a[j] < a[j-1]:a[j], a[j-1] = a[j-1], a[j]flag =Truei = i +1print("排序后数据:",a)print("加工遍数为:", i)# (2) 加框处:i
【解析】
错误纠正 (1):原题使用 Or 是错误的。循环继续的条件必须是:既没有达到最大轮数 i <= n - 1,且 上一轮发生过交换 flag = True。一旦其中一个不满足(如 flag 为 False),就应停止。因此应改为 and。答案为:i <= n - 1 and flag == True
错误纠正 (2):由于循环末尾执行了 i = i + 1,退出循环时 i 比实际遍数多 1。答案为: i - 1。
四、非选择题第17题:字符串加密算法
【2015年10月原题】17.【加试题】某数据加密方法描述如下:
(1)以字节为单位处理;
(2)将1个字节的8位二进制数分割成前4位与后4位;
(3)将两个4位二进制分别转换为十进制数;
(4)将每个十进制数转换为1个加密字符,对应的“密码表”如下:
VB运行如下(案例及代码其他略):

【Python版】某数据加密方法描述如下:
(1)以字节为单位处理;
(2)将1个字节的8位二进制数分割成前4位与后4位;
(3)将两个4位二进制分别转换为十进制数;
(4)将每个十进制数转换为1个加密字符,对应的“密码表”如下:
值(十进制) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
加密字符 | I | l | i | k | e | C | H | N | P | O | s | t | c | a | r | d |
小明按照上述方法,设计了一个字符串(仅包含ASCII字符)加密的Python程序,功能如下:单击“加密”按钮,程序依次将输入字符串的每个字符的ASCII码值作为1个字节转换为两个加密字符,连接这些加密字符,并输出加密结果,下表显示了字符串中一个字符的加密过程:

程序运行情况如下:

实现上述功能的Python程序如下:
(1)请在划线处填入合适的代码。
def Code2Char(c):s ="IlikeCHNpostcard"return ___②___s =input("请输入明文: ")___①___ss =""for i inrange(n):a =ord(s[i]) # 获取ASCII码b1 = a //16b2 = a %16ss = ss + Code2Char(b1) + Code2Char(b2)print("密文:", ss)
(2)若将“密码表”中值为“0”对应的加密字符“I”改成“i”,加密后的密文可能无法解密,原因是 。
【解析】
(1)填空 ①:需要获取待加密字符串的长度,答案为:n = len(s)。
(1)填空 ②:根据十进制值从密码表中取字符,使用字符串索引 s[c]。(2)安全性讨论:若将密码表中的“I”改为“i”,则“i”对应了 0 和 2 两个值,导致解密时无法确定原文,造成歧义。
五、其他有价值的题目:
【2015年10月第7题】
7.用24位二进制数来表示的RGB颜色,将其每位二进制数取反(0改为1,1改为0),即变为 另一种颜色,这种操作称为颜色反相。若某RGB颜色值用十六进制表示为123456H,则其反相后的颜色值用十六进制表示为
A.654321H B. 987654H C. EDCBA9H D. FEDCBAH
【解析】答案:C
简单做法:写出1,2的二进制,取反,再转十进制,即可得到答案。
快速做法:取反后的二进制数 + 原来的二进制数 = 1111(一个十六进制数转二进制数最多4位),因此可以快速判断。
【2015年10月第11题】
11.(加试题)已知单调函数
在
区间存在一个
,使
。现用对分查找法搜索
的值,开始搜索区间为
。若经过 10 次对分查找后还需继续搜索,则第 11 次搜索区间的长度为
A.
B.
C.
D. 
【解析】答案:D
初始区间长度是 1。每对分查找 1 次,区间长度就 除以 2。查找 10 次后,区间长度变成
。