【真题回顾•第八期】2019年04月浙江省信息技术选考真题Python改编

四季读书网 3 0
【真题回顾•第八期】2019年04月浙江省信息技术选考真题Python改编

本公众号推出真题回顾系列,将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 =True=0= [0*6while i <6:= random.randint(1100)if flag or x >50:a[i] = xflag =not flag+=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程序段如下:

# 数组升序,相邻差值先增后减(单峰),二分找最大差值=int(input())=list(map(intinput().split()))=0= n -1while i +1< j:= (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的内容恢复到初始状态。            

【真题回顾•第八期】2019年04月浙江省信息技术选考真题Python改编 第1张

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

【真题回顾•第八期】2019年04月浙江省信息技术选考真题Python改编 第2张

(1)运行该程序,若输入撤销前字符串是"April",历史记录是"-3p+3ri-6e",输出字符串s的值是""。

(2)实现上述功能的Python程序如下:

def cexiao():=input("撤销前字符串:")=input("历史记录:")c, num, ss ="""", s# 逆序遍历历史记录for i inrange(len(t)-1-1-1):___①___if ch.isalpha(): # isalpha()判断是否为字母= ch + celif ch.isdigit():# isdigit()判断是否为数字num = ch + numelse:=int(num)if ch =="-":# ② 处代码= s[:n-1+ c + ___②___else:= 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):=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):=2* i if a[j] > a[j +1]:a[j], a[j +1= a[j +1], a[j]for i inrange(0, n, 2):= a[i]= i -1while t < a[j]: # (2)加框处:t < a[j]a[j +1= a[j]-=1a[j +1= treturn atest_list = [938152]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程序划线处代码

【真题回顾•第八期】2019年04月浙江省信息技术选考真题Python改编 第3张

【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。

【真题回顾•第八期】2019年04月浙江省信息技术选考真题Python改编 第4张

(1)区间[10,50]、[30,80],数组[12,44,34,45,66,50,45,70],第1段重叠块个数为_______。

(2)完善Python程序划线处代码。

=8# 数组长度=2# 2个区间= [1244344566504570]# 题目数组= [10503080]# 区间[10,50]、[30,80]i, p, L, LL =0100= [0]*(2*+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 =0+=1else:c[2*p-1= Lc[2*p] = LLL, LL, p =00, 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年各地联盟压轴题详细图示解析:

2026 年上个各地区联盟 T15 文字+图示详细解析

三:近7次新教材压轴题图示解析:

浙江省技术选考信息技术真题图示解析

抱歉,评论功能暂时关闭!