本公众号推出真题回顾系列,将VB题目进行了Python改编,并在最后附上对于目前选考备考来说,还有价值的其它题目。
改编过程中:感慨万千。大概只有我们信息技术学科,在短短十年间,变化如此之大。
信息技术教师必须具备两种学习意识:对于底层知识,需要“慢思考”,沉下心去啃硬骨头,建立深刻的理解,这可能需要几年甚至十几年的积累。对于应用层知识,需要“快学习”,快速上手,快速迭代,甚至要有“用完即弃”的觉悟。这种精神上的分裂和持续的压力,是其他学科教师难以体会的。
也因此,浙江技术选考造就了一大批优秀的信息科技教师。
今天是第六期,看看我们的来时路。
一、选择题第11题:斐波那契、前缀和
【2018年4月原题】11.【加试题】有如下VB程序段:
a(1) = 1: a(2) = 1b(1) = 1: b(2) = 2For i = 3 To 5a(i) = a(i - 1) + a(i - 2)b(i) = b(i - 1) + a(i)Next i
执行该程序段后,数组元素b(5)的值为() A.12 B.8 C.5 D.5
【Python版】有如下Python程序段:
a = [1, 1]b = [1, 2]for i inrange(2, 5):a.append(a[i-1] + a[i-2])b.append(b[i-1] + a[i])print(b[4])
【解析】 i=2 时:a[2]=a[1]+a[0]=2,b[2]=b[1]+a[2]=4 i=3 时:a[3]=a[2]+a[1]=3,b[3]=b[2]+a[3]=7 i=4 时:a[4]=a[3]+a[2]=5,b[4]=b[3]+a[4]=12 结果:最终 b[4]的值为 12。故选 A。a[i]是斐波那契数列,b[i]是a[i]的前缀和列表。
二、选择题第12题:二分查找算法
【2018年4月原题】12.【加试题】数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的VB程序段如下:
i = 1: j = 10Key = Val(Text1.Text)Do While i <= jm = (i + j) \ 2If a(m) = Key Then Exit DoIf Key Mod 2 = 1 And a(m) Mod 2 = 0 Then(1)ElseIf Key Mod 2 = 0 And a(m) Mod 2 = 1 Then(2)Else(3)End IfLoopIf i > j Then s = "没有找到!"Else s = "位置:" + Str(m)Text2.Text = s
上述程序中方框处可选语句为: ①i = m + 1 ②j = m - 1 ③If Key < a(m) Then j = m - 1 Else i = m + 1 则(1)、(2)、(3)处语句依次是() A.①、②、③ B.①、③、② C.②、①、③ D.③、②、①
# a = [1,3,5,7,2,4,6,8]# 奇数在前偶数在后,各自升序i =0j =9key =int(input())while i <= j:m = (i + j) //2if a[m] == key:breakif key %2==1and a[m] %2==0:___(1)___elif key %2==0and a[m] %2==1:___(2)___else:if ___(3)___: j = m -1else:i = m +1if i > j:print("没有找到!")else:print("索引:", m)
【Python版】数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的 Python 程序段如下:
上述程序中方框处可选语句为: ①i = m + 1 ②j = m - 1 ③ key < a[m] 则(1)、(2)、(3)处语句依次是() A.①、②、③ B.①、③、② C.②、①、③ D.③、②、①
【解析】Key是奇数、a(m)是偶数→往左找,j=m-1; Key是偶数、a(m)是奇数→往右找,i=m+1; 同奇偶→正常对分查找。故选 C。
三、非选择题第14题:
【2018年4月原题】14.【加试题】某种编码以4位二进制码为一组,每组前两位表示方向,后两位表示距离。编写一个程序,将编码翻译成方向和距离,距离值为每组编码后两位二进制码转换为十进制数的值。具体功能如下:在文本框Text1中输入连续多组编码,单击“翻译”按钮Command1,结果显示在列表框List1中。 (1)要使程序运行时,文本框Text1的Width属性值为2018,可在Form_Load事件过程中添加语句(单选,填字母)。 (2)实现上述功能的VB程序如下,请在划线处填入合适的代码。VB代码略。

【Python版】某种编码以4位二进制码为一组,每组前两位表示方向,后两位表示距离。编写一个程序,将编码翻译成方向和距离,距离值为每组编码后两位二进制码转换为十进制数的值。具体功能如下:输入连续多组编码,输出结果。

(1)若输入的内容为“1111”,单击“翻译”按钮,列表框List1中显示的内容是______。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
s =input().strip()n =len(s)i =0while i < n:c = s[i:i+2]if c =="00":d ="东"elif c =="01":d ="南"elif c =="10":d ="西"else:d ="北"b1 =int(s[i+2:i+3])b2 =int(s[i+3:i+4])v = ___①___print(d, v)___②___
【解析】(1)输入“1111”:前两位11→北,后两位11→3,输出:北 3
(2)① 后两位二进制转十进制:b1×2 + b2 ② 每组4位,i每次+4
四、非选择题第16题:选择排序优化
【2018年4月原题】16.【加试题】有一组正整数,要求对其中的素数进行升序排序。排序后素数在前,非素数在后。排序示例如下。
【Python版】有一组正整数,要求对其中的素数进行升序排序。排序后素数在前,非素数在后。排序示例如下。

实现上述功能的程序代码如下,加框处代码有误,请修正。

import matha = [86, 71, 5, 41, 81, 79, 37, 89]n =len(a)def is_prime(m):if m <2:returnFalsefor i inrange(2, int(math.sqrt(m)) +1):if m % i ==0:returnFalsereturnTruefor i inrange(0, n — 1):k =1# (1)加框处 k = 1if is_prime(k):flag =Trueelse:flag =Falsefor j inrange(i +1, n):if is_prime(a[j]):if a[j] < a[k]: # (2)加框处 a[j] < a[k]k = jflag =Trueifnot flag:breakif k != i:a[i], a[k] = a[k], a[i]print(a)
【解析】
(1) k = i 。假定i位置就是最小的素数。
(2) not is_prime(a[k]) or a[j] < a[k] 或者 not flag or a[j] < a[k]。k位置如果不是素数,那么遇到第一个素数,就应该记录这个素数的位置。否则,会出现k位置不是素数,后面是素数,但是大于k位置的非素数,也不会记录j。因此要加 not is_prime(a[k]) 这个条件。
五、非选择题第17题:状态标记及数组应用
【2018年4月原题】17.【加试题】为分析数组a中各元素依次变化的情况,进行如下定义: 变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i) <a(i-1))和持平段(a(i)=a(i-1))。 波峰:从上升段转到下降段形成一个波峰。 对称波峰:上升段与下降段个数相同的波峰称为对称波峰。 现要求统计数组a各元素依次变化过程中“对称波峰”的个数。 VB代码略 </a(i-1))和持平段(a(i)=a(i-1))。
【Python版】为分析数组a中各元素依次变化的情况,进行如下定义: ①变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a[i]>a[i-1])、下降段(a[i]

现要编写程序统计数组a各元素依次变化过程中“对称波峰”的个数。
(1)数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次变化过程中“对称波峰”的个数为_____。
(2)请在划线处填入合适的代码。
a = [1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1]n =len(a)flag =0# 1升 -1降 0平count =0steps =0def is_sym_peak(f, s):return ___①___for i inrange(___②___):if a[i] > a[i-1]:if is_sym_peak(flag, steps):count +=1if flag ==0or flag ==-1:___②___flag =1else:steps +=1elif a[i] == a[i-1]:if is_sym_peak(flag, steps):count +=1steps =0flag =0else:steps -=1flag =-1if is_sym_peak(flag, steps):count +=1print(count)
【解析】(1)3 。(2)①填:f == -1 and s == 0,如果前面状态是下降并且步数是0那么说明有前面是一个波峰。
②填:1, n 。循环从第2个元素开始:i从1到n ③ 上升段开始,步数置1:steps = 1。如果前面是平或者下降,那么这是新波峰第一次上升,步数加1。
六、其他有价值的题目
2.超文本标记语言用于描述网页的内容,该语言的简称是( )
A. WWW B. URL C. HTTP D.HTML
答案:D