本公众号推出真题回顾系列,将VB题目进行了Python改编,并在最后附上对于目前选考备考来说,还有价值的其它题目。
改编过程中:感慨万千。大概只有我们信息技术学科,在短短十年间,变化如此之大。
信息技术教师必须具备两种学习意识:对于底层知识,需要“慢思考”,沉下心去啃硬骨头,建立深刻的理解,这可能需要几年甚至十几年的积累。对于应用层知识,需要“快学习”,快速上手,快速迭代,甚至要有“用完即弃”的觉悟。这种精神上的分裂和持续的压力,是其他学科教师难以体会的。
也因此,浙江技术选考造就了一大批优秀的信息科技教师。
今天是第八期,看看我们的来时路。
一、选择题第11题:基本算法与随机数生成
【2019年4月原题】11.(加试题)有如下VB程序段:
flag = True : i = 1Do While i <= 6x = Int(Rnd * 100) + 1 If flag or x >50 Thena(i)=xflag = Not flagi = i + 1End ifLoop
执行该程序段后,在下列选项中,a(1)~a(6)各元素值不可能的是 A.52,95,46,74,77,83 B.50,55,46,70,21,97 C.62,78,57,61,69,50 D.31,54,48,72,50,82
【Python版】11.(加试题)有如下Python程序段:
import randomflag =Truei =0a = [0] *6while i <6:x = random.randint(1, 100)if flag or x >50:a[i] = xflag =not flagi +=1print(a)
A.[32, 77, 54, 73, 10, 53] B.[46, 95, 41, 76, 41, 98] C.[58, 50, 8, 51, 16, 54] D.[9, 89, 58, 74, 14, 65]
【解析】程序核心逻辑:flag=True时无条件赋值,flag=False时仅x>50可赋值;奇偶位交替赋值,奇数位必须大于50。 选项C中第2位元素50不大于50,违反规则,故不可能。 答案:C
二、选择题第12题:二分查找与数组差值处理
【2019年4月原题】12.(加试题)有1个升序排列的数组a(a(1)~a(n),n≥3),从左到右相邻两个元素的差值(后一个元素值减去前一个元素值)先由小到大、再由大到小,且相邻两个差值不相等,为了查找相邻两个元素的最大差值,小李编写的VB程序段如下:
i = 1 :j = nDo While i + 1 < jm = (i + j) \ 2If a(m + 1) - a(m) > a(m) - a(m - 1) Then① Else② End ifLoopLabel1.Caption="相邻两个元素的最大差值是" + Str(a(j) - a(i))
上述程序段两个方框处的语句分别为 A. ① i = m ② j = m B. ① i = m ② j = m - 1 C. ① i = m + 1 ② j = m - 1 D. ① i = m + 1 ② j = m
【Python版】有1个升序排列的数组a(长度大于等于3),从左到右相邻两个元素的差值(后一个元素值减去前一个元素值)先由小到大、再由大到小,且相邻两个差值不相等,为了查找相邻两个元素的最大差值,小李编写的VB程序段如下:
# 数组升序,相邻差值先增后减(单峰),二分找最大差值n =int(input())a =list(map(int, input().split()))i =0j = n -1while i +1< j:m = (i + j) //2if a[m+1] - a[m] > a[m] - a[m-1]:# ① 处代码else:# ② 处代码print(f"相邻两个元素的最大差值是{a[j] - a[i]}")
上述程序段两个方框处的语句分别为 A. ① i = m ② j = m B. ① i = m ② j = m - 1 C. ① i = m + 1 ② j = m - 1 D. ① i = m + 1 ② j = m
【解析】差值先增后减为单峰特性,二分查找峰值:
·右侧差值更大→峰值在右,左边界i=m。
·右侧差值更小→峰值在左,右边界j=m。 对应①i=m,②j=m,答案:A
为什么不能用 i = m+1?判断成立时:m 是上升段的点,m 可能就是峰值前最后一个点。如果你直接 i=m+1,会跳过 m 这个关键位置,直接丢掉候选,再也找不回来。正确做法:保留 m,把左边界移到 m,继续在 [m, j] 里找峰值。有边界调整同理。
三、非选择题第14题:字符串模拟撤销
【2019年4月原题】14.(加试题)小王设计“模拟撤销”程序,需要用一个“历史记录”, “历史记录”是在对字符串s进行插入或删除时,将每步操作信息依次存储得到的,操作信息由操作符(“+”表示插入,“-”表示删除)、操作位置和操作字符串(只包含英文字母)构成,例如,“+23abc”表示在字符串s第23个位插入了“abc”, “模拟撤销”过程按照“历史记录”的逆序进行,将字符串s的内容恢复到初始状态。

【Python版】小王设计“模拟撤销”程序,需要用一个“历史记录”, “历史记录”是在对字符串s进行插入或删除时,将每步操作信息依次存储得到的,操作信息由操作符(“+”表示插入,“-”表示删除)、操作位置和操作字符串(只包含英文字母)构成,例如,“+23abc”表示在字符串s第23个位插入了“abc”, “模拟撤销”过程按照“历史记录”的逆序进行,将字符串s的内容恢复到初始状态。程序运行如下:

(1)运行该程序,若输入撤销前字符串是"April",历史记录是"-3p+3ri-6e",输出字符串s的值是""。
(2)实现上述功能的Python程序如下:
def cexiao():s =input("撤销前字符串:")t =input("历史记录:")c, num, ss ="", "", s# 逆序遍历历史记录for i inrange(len(t)-1, -1, -1):___①___if ch.isalpha(): # isalpha()判断是否为字母c = ch + celif ch.isdigit():# isdigit()判断是否为数字num = ch + numelse:n =int(num)if ch =="-":# ② 处代码s = s[:n-1] + c + ___②___else:s = s[:n-1] + s[n+len(c)-1:]ss +="→"+ sc, num ="", ""print("撤销过程:", ss)return sprint("最终s:", cexiao())
【解析】
(1)Apple(2)① ch = t[i];② s[n-1:]
四、非选择题第16题:冒泡排序(奇偶)+插入排序
【2019年4月原题】16.小明基于冒泡排序思想设计改进算法:先分别排序奇数位、偶数位元素,再后续处理。VB程序加框处有误,请改正。
VB代码略
【Python版】小明基于冒泡排序思想设计改进算法:先分别排序奇数位、偶数位元素,再后续处理。Python程序加框处有误,请改正。
def imp_sort(arr):n =len(a)for i inrange(1, (n -1) //2+1):for j inrange(0, n -2*i):if a[j] > a[j +1]: # (1)加框处:a[j] > a[j + 1]a[j], a[j +2] = a[j +2], a[j]for i inrange(n //2):j =2* i if a[j] > a[j +1]:a[j], a[j +1] = a[j +1], a[j]for i inrange(0, n, 2):t = a[i]j = i -1while t < a[j]: # (2)加框处:t < a[j]a[j +1] = a[j]j -=1a[j +1] = treturn atest_list = [9, 3, 8, 1, 5, 2]print("原始数组:", test_list)print("排序结果:", imp_sort(test_list))
【答案】
1.第(1)处加框:a(j) > a(j + 2)
2.第(2)处加框:j >= 0 and t < a[j]
五、非选择题第17题:数组区间分割
【2019年4月原题】17.(加试题)给定m个区间和数组,按规则分割为m+1段,统计非重叠块、重叠块、剩余段个数。 (1)区间[10,50]、[30,80],数组[12,44,34,45,66,50,45,70],第1段重叠块个数为? (2)完善VB程序划线处代码

【Python版】给定m个区间和1个数组(有n个元素),现要求根据各区间限定的取值范围,将数组依次分隔成m+1个段。具体分割方法如下:
①第1段是从数组首个元素开始、元素值都属于第1区间的最长连续元素段。如果首个元素不属于第1区间,则第1段元素个数为0;
②第1段分割后的剩余元素,用同样的方法来依次分割第2段、第3段、…、第m段;
③第m段分割后的剩余元素分割到第m+1段(剩余段)。
若第p(1 <= p <= m-1)段末尾连续元素的值也同时属于第p+1区间,则这块连续元素称为第p段“重叠块”,该段其余部分称为第p段“非重叠块”。由于不存在第m+1区间,这里特别规定:第m段的全部元素都分割到m段“非重叠块”,第m段“重叠块”的元素个数为0,一个数组分段示例如下图。图中数组第1个元素10不属于第1区间[0,5],因此第1段的元素个数为0。10和20属于第2区间,而33不属于第2区间,因此第2段只包含10和20两个元素。第3段末尾连续3个元素的值也同时属于第4区间,因此,第3段“非重叠块”包含33,58,46,第3段“重叠块”包含55,62,69。

(1)区间[10,50]、[30,80],数组[12,44,34,45,66,50,45,70],第1段重叠块个数为_______。
(2)完善Python程序划线处代码。
n =8# 数组长度m =2# 2个区间a = [12, 44, 34, 45, 66, 50, 45, 70]# 题目数组b = [10, 50, 30, 80]# 区间[10,50]、[30,80]i, p, L, LL =0, 1, 0, 0c = [0]*(2*m +10)# ③ 处代码def is_in(index, p):if p > m:returnFalseleft = b[2*(p-1)]right = b[2*(p-1)+1]return ___①___while ___②___:if is_in(i, p):if is_in(i, p+1):LL +=1else:___③___LL =0i +=1else:c[2*p-1] = Lc[2*p] = LLL, LL, p =0, 0, p+1# 收尾处理if i < n:c[2*p-1] = n - ic[2*p] =0else:c[2*p-1] = Lc[2*p] = LL#输出统计数据代码略
【解析】(1)第1段重叠块元素为44、34、45,个数=3(2)①a[index] >= left and a[index] <= right ② p <= m and i < n;③L = L + LL + 1;
六、其他有价值的题目
5.将十六进制数56转换成8位二进制数,再将该8位二进制数从左向右按两位一组依次分为4组,每组中的两位相互交换,得到新的8位二进制数,则新的8位二进制数对应的十六进制数是
A.D0 B.34 C.A9 D.65
【答案】:C
一:真题回顾系列:
【真题回顾•第一期】2015年10月浙江省信息技术选考真题Python改编
【真题回顾•第二期】2016年04月浙江省信息技术选考真题Python改编
【真题回顾•第三期】2016年10月浙江省信息技术选考真题Python改编
【真题回顾•第四期】2017年04月浙江省信息技术选考真题Python改编
【真题回顾•第五期】2017年11月浙江省信息技术选考真题Python改编
【真题回顾•第六期】2018年04月浙江省信息技术选考真题Python改编
【真题回顾•第七期】2018年11月浙江省信息技术选考真题Python改编
二:2026年各地联盟压轴题详细图示解析:
三:近7次新教材压轴题图示解析: