本公众号推出真题回顾系列,将VB题目进行了Python改编,并在最后附上对于目前选考备考来说,还有价值的其它题目。
改编过程中:感慨万千。大概只有我们信息技术学科,在短短十年间,变化如此之大。
信息技术教师必须具备两种学习意识:对于底层知识,需要“慢思考”,沉下心去啃硬骨头,建立深刻的理解,这可能需要几年甚至十几年的积累。对于应用层知识,需要“快学习”,快速上手,快速迭代,甚至要有“用完即弃”的觉悟。这种精神上的分裂和持续的压力,是其他学科教师难以体会的。
也因此,浙江技术选考造就了一大批优秀的信息科技教师。
今天是第二期,看看我们的来时路。
一、选择题第11题:排序算法变形
【2016年4月原题】11.(加试题)有如下程序段:
For i = 1 To 2For j = 5 To i + 1 Step -1If a(j) > a(i) Thent = a(j): a(j) = a(i): a(i) = tEnd IfNext jNext i
数组元素a(1)到a(5)的值依次为“33,24,45,16,77”,经过该程序段“加工”后,数组元素a(1)到a(5)的值依次为() A. 77,45,33,16,24 B. 77,33,45,16,24 C. 77,24,45,16,33 D. 77,45,33,24,16
【Python版】有如下Python程序段:
for i inrange(0, 2):for j inrange(4, i, -1):if a[j] > a[i]:a[j], a[i] = a[i], a[j]print(a[0:5])
数组元素a[0]到a[4]的值依次为“33,24,45,16,77”,经过该程序段“加工”后,数组元素a[0]到a[4]的值依次为() A. 77,45,33,16,24 B. 77,33,45,16,24 C. 77,24,45,16,33 D. 77,45,33,24,16
【解析】答案:A。
这段代码是一个变种的选择排序(Selection Sort),或者说,是一个带有冒泡特征的求最值算法。有排序算法基础,可以快速模拟。
最终结果:77,45,33,16,24。
二、选择题第12题:二分查找算法
【2016年4月原题】12.(加试题)已知一无序数组a(下标1到n),通过引入数组b(下标1到n),使得a(b(1))≤a(b(2)) ≤a(b(3))……≤a(b(n)),对这些有序数据可进行对分查找。则第一次查找时,中点位置m与中点值分别是() A. m的值是Fix((1+n)/2),中点值是 a(m) B. m的值是Fix((1+n)/2),中点值是 a(b(m)) C. m的值是Fix((b(1)+b(n))/2),中点值是 a(m) D. m的值是Fix((b(1)+b(n))/2),中点值是 a(b(m))

【Python版】已知无序数组a,通过数组b实现有序,满足a[b[0]] ≤ a[b[1]] ≤ … ≤ a[b[n-1]]。对该有序序列进行对分查找,第一次查找时中点位置m与中点值分别是() A. m=(1+n)//2,值为a[m]B. m=(1+n)//2,值为a[b[m]] C. m=(b[0]+b[-1])//2,值为a[m]D. m=(b[0]+b[-1])//2,值为a[b[m]]
【解析】答案:B 对分查找的中点位置按查找范围1~n计算:m = (1 + n) // 2,有序值存放在a[b[m]]中。
三、非选择题第14题:基本语法
【2016年4月原题】14.(加试题)编写VB程序,实现如下功能:在文本框Text1中输入某一年份,单击按钮,在列表框中输出该年份开始的12个年份及对应的“天干地支”与“生肖”。

VB代码略
【Python版】输入一个年份,输出从该年份开始连续12年的天干地支与生肖。天干:甲乙丙丁戊己庚辛壬癸,地支:子丑寅卯辰巳午未申酉戌亥,生肖:鼠牛虎兔龙蛇马羊猴鸡狗猪。程序运行如下图所示:

(1)Python实现代码如下,请在划线处填入合适代码:
s1 ="甲乙丙丁戊己庚辛壬癸"s2 ="子丑寅卯辰巳午未申酉戌亥"s3 ="鼠牛虎兔龙蛇马羊猴鸡狗猪"n =int(input("请输入年份:"))for i inrange(n, ____①____):a = (i +6) %10b = (i +8) %12c1 = s1[a]c2 = s2[b]c3 = s3[b]print(____②____, "年", c1 + c2, c3)
(2)由上述算法可知,2028年对应的“天干地支”为。
【解析】(1)① 填 n + 12:连续12年,循环到n+12结束。 (1)② 填 str(i):输出当前年份。 (2)2028年对应天干地支:戊申。
四、非选择题第16题:擂台法求最值
【2016年4月原题】16.(加试题)某地1900-1999年的平均降水量数据保存在数据库中。现要求找出相邻两年年平均降水量变化(即本年度与上年度“年平均降水量”差值的绝对值)最大的年份区间。如果多个符合要求的年份区间,只输出距今最近的。(VB代码略)
【Python版】数组w存储1900-1999年降水量,找出相邻年份差值绝对值最大的区间,有多个则输出最近的区间。程序加框处代码有误,请修正。
w = [...]# 已存储100个数据,w[0]对应1900年n =len(w)imax =0# (1)加框处:0for i inrange(1, n -1):ifabs(w[i] - w[i -1]) >=abs(w[i -1] - w[i -2]): #(2)加框处:abs(w[i - 1] - w[i - 2])imax = iprint("最大区间:", 1900-1+ imax, "-", 1900+ imax)
【解析】
(1)初始值错误:imax = 0 改为 imax = 1。根据输出语句,假如1900-1901就是最大区间,那么imax的值应该是1才符合输出结果。
(2)擂台对象错误:abs(w[i - 1] - w[i - 2])改为abs(w[imax] - w[imax-1])。
五、非选择题第17题:数据压缩算法
【2016年4月原题】(加试题)17.某数据压缩方法描述如下:
1)原始数据中,某数不为0且相邻无重复,压缩数据用该数据表示;
2)原始数据中,某数为0且相邻无重复,压缩数据用两个数表示,第1个位0,第2个为0;
3)原始数据中,某数据相邻有重复,压缩数据用3个数表示:第1个位0,第2个为重复数的个数,第3个为该数本身;
根据上述压缩方法,对应的解压缩方法示例如图a所示。

图a
VB运行界面如图b所示。

图b
VB题目及代码略
【Python版】某数据压缩方法描述如下:
1)原始数据中,某数不为0且相邻无重复,压缩数据用该数据表示;
2)原始数据中,某数为0且相邻无重复,压缩数据用两个数表示,第1个位0,第2个为0;
3)原始数据中,某数据相邻有重复,压缩数据用3个数表示:第1个位0,第2个为重复数的个数,第3个为该数本身;
根据上述压缩方法,对应的解压缩方法示例如图a所示。

图a
Python程序运行如图b所示。

图b
(1)如果压缩数据为“23,0,21,66,0,0,77,0,5,0”,则解压缩数据的个数是。
(2)实现解压缩的Python程序如下,请在划线处填入合适代码。
a =list(map(int,input("压缩数据:").split()))b = [0] *1000# 解压缩结果n =len(a)# 压缩数据长度pa =0# 压缩数组指针pb =0# 解压缩数组指针while pa < n:first = a[pa]if first !=0:b[pb] = firstpa +=1pb +=1else:count = a[pa +1]if count ==0:b[pb] =0pa = ____①____pb +=1else:for i inrange(count):____②____pa +=3pb += count# 输出结果res = []for i inrange(____③____):res.append(str(b[i]))print(','.join(res))
【解析】
(1)答案:29。根据规则可知解压缩数据为:1个23,21个66,1个0,1个77,5个0,1+21+1+1+5=29。
(2)① 填 pa + 2:跳过0和count。 (2)② 填 b[pb + i] = a[pa + 2]:循环写入重复数值。 (2)③ 填 pb:输出有效解压缩长度。
六、其他有价值的题目
无
往期回顾: