本公众号推出真题回顾系列,将VB题目进行了Python改编,并在最后附上对于目前选考备考来说,还有价值的其它题目。
改编过程中:感慨万千。大概只有我们信息技术学科,在短短十年间,变化如此之大。
信息技术教师必须具备两种学习意识:对于底层知识,需要“慢思考”,沉下心去啃硬骨头,建立深刻的理解,这可能需要几年甚至十几年的积累。对于应用层知识,需要“快学习”,快速上手,快速迭代,甚至要有“用完即弃”的觉悟。这种精神上的分裂和持续的压力,是其他学科教师难以体会的。
也因此,浙江技术选考造就了一大批优秀的信息科技教师。
今天是第七期,看看我们的来时路。
一、选择题第11题:数组处理与条件判断
【2018年11月原题】11.(加试题)有如下VB程序段:
代码略
执行程序后,a数组各元素可能是() A.11,11,7,9,3,9 B.6,2,8,10,5,9 C.6,9,3,7,8,12 D.3,9,0,8,2,7
【Python版】有如下Python程序段:
import randoma = [0] *6for i inrange(0, 6):a[i] = random.randint(1, 10)for i inrange(0, 5):if i %2==0and a[i] > a[i+1]:a[i], a[i+1] = a[i+1], a[i]else:a[i] = a[i] +1print(a)
执行程序后,a数组各元素可能是()
A.11,11,7,9,3,9 B.6,2,8,10,5,9 C.6,9,3,7,8,12 D.3,9,0,8,2,7
【解析】
1.初始数组元素为1~10的随机整数,无0、12这类超出范围的值;排除CD选项。
2.偶数位i若大于后一位则交换,否则该位数值+1;因此偶数位的数要小于或者等于奇数位;排除B选项。
答案选A。
二、选择题第12题:字符升序序号计算
【2018年11月原题】12.(加试题)下列VB程序功能为:根据文本框Text1中各字符的大小关系,计算各字符升序排列的序号,并将序号保存在数组y中。如文本框内容为“2011”,程序运行后y(1)~ y(4)各元素的值分别为“4,1,2,3”。
代码略
上述程序段3各方框处的表达式分别为() A. (1)n (2)1 (3)Mid(s, j, 1) >= Mid(s, i, 1) B. (1)n (2)1 (3)Mid(s, j, 1) > Mid(s, i, 1) C. (1)n-1 (2)i+1 (3)Mid(s, j, 1) >= Mid(s, i, 1) D. (1)n-1 (2)i+1 (3)Mid(s, j, 1) > Mid(s, i, 1)
【Python版】下列Python程序功能为:输入一个字符串,计算各字符升序排列的序号,并将序号保存在数组y中。如文本框内容为“2011”,程序运行后y[0]~ y[3]各元素的值分别为“4,1,2,3”。
s =input("输入字符串:")n =len(s)y = [1] * nfor i inrange(___(1)___):for j inrange( ___(2)___ , n):if___(3)___ :y[j] = y[j] +1else:y[i] = y[i] +1print(y[1:])
A. (1)n (2)1 (3)s[j] >= s[i] B. (1)n (2)1 (3)s[j] > s[i] C. (1)n-1 (2)i+1 (3) s[j] >= s[i] D. (1)n-1 (2)i+1 (3) s[j] > s[i]
【解析】
1.外层循环无需遍历到n,到n-2即可避免重复比较,故(1)是n - 1;
2.内层循环从i+1开始,只和后续字符比较,故(2)是i+1;
3.字符比较条件为>=,满足则对应序号+1,故(3)是s[j]>=s[i]; 答案选C。
三、非选择题第14题:折线长度计算
【2018年11月原题】14.(加试题)在平面坐标系中,给定一组有序的点。从原点出发,依次用线段连接这些点,构成一条折线。要求编写一个“计算折线长度”的程序,功能如下:在文本框Text1中依次输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),单击“计算”按钮Cmd后,程序计算这条折线的长度,结果显示在Label1中。例如,三个点的坐标为(5,10),(8,12),(6,17),输入格式为5,10,8,12,6,17,。

VB代码略
【Python版】在平面坐标系中,给定一组有序的点。从原点出发,依次用线段连接这些点,构成一条折线。要求编写一个“计算折线长度”的程序,功能如下:输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),回车后,程序计算这条折线的长度,并输出结果。程序运行如图所示:

(1)实现上述功能的Python代码如下,请在划线处填入合适的代码。
import math# (1)Cmd按钮属于CommandButton类,选Ds =input("输入坐标(逗号分隔,以逗号结尾):")x1, y1 =0, 0k =1j =0___①___for i inrange(len(s)):if s[i] ==",":v =float(s[j:i])j = i +1if___②___:x2 = velse:y2 = vd = math.sqrt((x2 - x1)**2+ (y2 - y1)**2)Totald += dx1, y1 = x2, y2k +=1print("折线总长度:", Totald)
(2)运行该程序,输入数据如上图所示,程序执行到循环结束时,变量k为_______。
【答案】(1)①Totald = 0;②k % 2 == 1(2)7
四、非选择题第16题:交替上升数组对分查找
【2018年11月原题】16.(加试题)数组a中存储的是左右交替上升的n个正整数,如下表所示:依据对分查找思想,设计一个在数组a中查找数据key的程序,实现该功能的VB程序如下,但加框处代码有错,请改正。
VB代码略
【Python版】列表a中存储的是左右交替上升的n个正整数,如下表所示:

依据对分查找思想,设计一个在列表a中查找数据key的程序,实现该功能的Python代码如下,但加框处代码有误,请修正。
a = [3, 25, 38, 55, 31, 12]n =len(a)key =int(input("输入查找值:"))i =0j = n //2flag =Falsewhile i < j andnot flag: #(1)加框处:i < jm = (i + j) //2if key == a[m]:flag =Trueelif key < a[m]:j = m -1else:i = m +1ifnot flag and j >0:m = n - j#(2)加框处:m = n - jif key == a[m]:flag =Trueprint("找到,位置:"+str(m) if flag else"找不到")
【解析】
1.对分查找循环条件应为i <= j,原i < j会遗漏中间元素;
2.右侧查找位置计算错误,应改为:n - i。
五、非选择题第17题:数据加密与解密
【2018年11月原题】17.(加试题)某种数据加密方法描述如下(加密前后的数值都是0-255):
1.以m个数据为一段,将n个待加密数据依次分割成若干个数据段,剩余数据(个数小于m)为独立数据段。
2.数据加密规则:数据个数等于m的数据段,先值变换,再位置变换,得到加密数据段;数据个数小于m的数据段,只进行值变换。
3.依次合并加密数据段,即为最终加密数据。
·值变换:值变换后第i个元素=(待加密数据段第i个元素+x(i))Mod 256
·位置变换:加密后数据段第y(i)个元素=值变换后第i个元素
VB代码略
【Python版】17.某种数据加密方法描述如下(加密前后的数值都是0-255):
1.以m个数据为一段,将n个待加密数据依次分割成若干个数据段,剩余数据(个数小于m)为独立数据段。
2.数据加密规则:数据个数等于m的数据段,先值变换,再位置变换,得到加密数据段;数据个数小于m的数据段,只进行值变换。
3.依次合并加密数据段,即为最终加密数据。
值变换:用值变换密钥数组x(元素个数为m,值为0~255的整数),将待加密数据段中的数据进行值变换,方法如下:
值变换后第i个元素=(待加密数据段第i个元素+x[i])% 256,其中i=1,2,……,m
位置变换:用位置变换密钥数组y(元素个数为m,值为1~m的不重复整数),将上述值变换后的m个元素进行段内位置变换,方法如下:
加密后数据段第y[i]个元素=值变换后第i个元素,其中i=1,2,……,m
例如,n=5,m=3的数据加密过程如下:

(1)已知m = 3,数组x与数组y中的数据如下表所示。则待加密数据段“155,1,250”加密后的数据段为___________(填数据,用逗号分隔)

(2)小张根据上述加密算法,涉及了一个对应的解密程序,其Python代码如下,请在划线处填入合适的代码(解密与加密使用相同的密钥数据)

#mi =[21,24,165]mi =list(map(int,input("请输入密文:").split(" ")))x =list(map(int,input("请输入密钥数组x:").split(" ")))y =list(map(int,input("请输入密钥数组y:").split(" ")))m =int(input("请输入分段m数值:"))n =len(mi)ans = [0] * n# 位置逆转for i inrange(___①___):for j inrange(m):___②___ = mi[i * m + y[j] -1]# 剩余不足m的数据直接赋值for i inrange((n//m)*m, n):ans[i] = mi[i]# 值逆变换j =0for i inrange(n):___③___if j < m:j = j +1else:j =1print("解密成功,原文为:",ans)#输出ans为:[155,1,250]
【答案】(1)21,24,165。
值变换:(155 + 10)% 256 = 165,(1 + 20)%256 = 21,(250 + 30)% 256 = 24。
值变换:165,21,24--->3 1 2--->21,24,165 (2)①n//m;②ans[i * m + j];③ ans[i] = (ans[i] + 256 - x[j]) % 256
六、其他有价值的题目
无
一:真题回顾系列:
【真题回顾•第一期】2015年10月浙江省信息技术选考真题Python改编
【真题回顾•第二期】2016年04月浙江省信息技术选考真题Python改编
【真题回顾•第三期】2016年10月浙江省信息技术选考真题Python改编
【真题回顾•第四期】2017年04月浙江省信息技术选考真题Python改编
【真题回顾•第五期】2017年11月浙江省信息技术选考真题Python改编
【真题回顾•第六期】2018年04月浙江省信息技术选考真题Python改编
二:2026年各地联盟压轴题详细图示解析:
三:近7次新教材压轴题图示解析: