本公众号推出真题回顾系列,将VB题目进行了Python改编,并在最后附上对于目前选考备考来说,还有价值的其它题目。
改编过程中:感慨万千。大概只有我们信息技术学科,在短短十年间,变化如此之大。
信息技术教师必须具备两种学习意识:对于底层知识,需要“慢思考”,沉下心去啃硬骨头,建立深刻的理解,这可能需要几年甚至十几年的积累。对于应用层知识,需要“快学习”,快速上手,快速迭代,甚至要有“用完即弃”的觉悟。这种精神上的分裂和持续的压力,是其他学科教师难以体会的。
也因此,浙江技术选考造就了一大批优秀的信息科技教师。
今天是第五期,看看我们的来时路。
一、选择题第11题:字符串遍历和计数
【2017年11月原题】11.(加试题)有如下VB程序段:
n = 0For i = 1 To Len(Text1.Text)c = Mid(Text1.Text, i, 1)If c >= "0"And c <= "9"Then m = 1 Else m = 2a(m) = a(m) + 1If a(m) = 1 Then n = n + 1Next i
数组a各元素的初始值都为0,文本框Text1的内容为“Happy2017”。执行程序后,变量n的值为 A.1 B.2 C.4 D.9
【Python版】有如下Python程序段
a = [0, 0, 0]# 对应VB中a(1)、a(2)n =0text ="Happy2017"for i inrange(len(text)):c = text[i]if c >="0"and c <="9":m =1else:m =2a[m] +=1if a[m] ==1:n +=1print(n)
该程序段运行后,输出的是() A.1 B.2 C.4 D.9
【解析】答案:B字符串“Happy2017”包含字母、数字两类字符,首次出现字母时n+1,首次出现数字时n+1,后续同类字符不触发n递增,最终n=2,选B。
二、选择题第12题:二分查找
【2017年11月原题】12.(加试题)某对分查找算法的VB程序段如下:
i = 1: j = 7: s = ""key = Int(Rnd * 100)Do While i <= jm = (i + j) \ 2If key = a(m) Thens = s + "M": Exit DoElseIf key < a(m) Thenj = m - 1: s = s + "L"Elsei = m + 1: s = s + "R"End IfLoopText1.Text = s
数组元素a(1)到a(7)的值依次为“24,35,38,41,45,69,78”。若该程序段执行后,文本框Text1中显示的内容可能是 A. RL B. LMR C. RLR D. LRLM
【Python版】某对分查找算法的Python程序段如下:
import randoma = [24, 35, 38, 41, 45, 69, 78]i, j, s =0, 6, ""key = random.randint(0, 99)while i <= j:m = (i + j) //2if key == a[m]:s +="M"breakelif key < a[m]:j = m -1s +="L"else:i = m +1s +="R"print(s)
该程序段运行后,输出的内容可能是() A. RL B. LMR C. RLR D. LRLM
【解析】答案:C对分查找找到目标(M)会立即退出,M后无字符,排除B,7个元素最多查找3次,排除D;A仅2次查找不符合循环逻辑,C为3次未找到的合法路径,选C。
三、非选择题第14题:字符串处理
【2017年11月原题】14.(加试题)编“字符串生成”程序,实现如下功能:在文本框Text1中(字符位置)输入多个正整数 (以“,”为分割符和结束符),单击“生成”按钮Command1,程序以这些整数为位置信息,依次从文本框Text2中(字典内容)提取字符并连接成字符串,最后将字符串显示在标签Label1中(生成内容)。

题目及代码略
【Python版】编“字符串生成”程序,实现如下功能:输入字典内容,输入(字符位置)多个正整数(以","为分隔符和结束符),回车后,程序以这些整数为位置信息,依次从字典内容中提取字符串并连接字符串,然后输出。程序运行如下图所示:

(1)实现上述功能的Python代码如下,请在划线处填上合适的代码:
# 功能:按位置提取字符拼接字符串#python is a programning language.#1,18,9,9,text2 =input("字典内容:")text1 =input("字符位置:")s =""t =""for i inrange(len(text1)):c = text1[i]if c ==",":p =int(t)s += text2[p-1]t =""else:___①___# 填空print("生成内容:", ___②___)# 填空
(2)如果输入内容结束符缺失(即输入内容为1,18,9,9),输出结果是______
【解析】(1) ① 填t += c(拼接当前字符);② 填s(输出最终字符串);(2) 按位置提取结果为:pas。
四、非选择题第16题:冒泡排序和去重
【2017年11月原题】16.(加试题)小李基于冒泡排序算法编写了一个VB程序,功能如下:在文本框Text1中显示排序前的数据,单击“排序”按钮Command1,在文本框Text2中显示剔除重复数据后的升序排序结果。

代码及题目略
【Python版】小李基于冒泡排序算法编写了一个Python程序,功能如下:先显示排序前的数据,程序运行后输出剔除重复数据后的升序排序结果。程序运行如下图所示:

实现上述功能的Python代码如下,请修正(1)(2)加框处错误。
# 冒泡排序+剔除重复数据(升序)#17 12 17 10 16 15 10 17 9 16a =list(map(int,input("请输入待排序数据:").split()))print("排序前:",a)bottom =len(a)i =0while i <= bottom -1:for j inrange(bottom -1, i, -1):if a[j] < a[i]: # (1)加框处:a[j] < a[i]a[j], a[j-1] = a[j-1], a[j]elif a[j] == a[j-1]:a[bottom] = a[j] # (2)加框处: a[bottom - 1] = a[j - 1]bottom -=1i +=1# 输出结果print("排序后:",a[0:bottom])
【解析】(1):a(j) < a(i)→ a(j) < a(j - 1)(冒泡排序需相邻比较);(2):a(bottom)=a(j) → a(j - 1) = a(bottom - 1)(用末尾元素覆盖重复项)。
五、非选择题第17题:数组转换
【2017年11月原题】17.(加试题)由数组a生成数组b的方法描述如下:
1.将数组a中的n个元素依次分割出若干个数据块,每个数据块有m×m个元素,m最大值为8,最小值为2。分割时,按尽可能大的数据块进行分割;
2.对每个分割出的数据块用“方阵转换法”进行转换,每次转换后得到的数据块依次存储在数据b中;
3.数组a分割后的剩余元素(个数小于4),直接依序存储到数组b中。
例如n=140时,可依次分割出3个数据块,元素的个数分别为64(8×8)、64(8×8)、9(3×3),剩余元素为3个。

题目及VB代码略
【Python版】由数组a生成数组b的方法描述如下:
1.将数组a中的n个元素依次分割出若干个数据块,每个数据块有m×m个元素,m最大值为8,最小值为2。分割时,按尽可能大的数据块进行分割;
2.对每个分割出的数据块用“方阵转换法”进行转换,每次转换后得到的数据块依次存储在数据b中;
3.数组a分割后的剩余元素(个数小于4),直接依序存储到数组b中。
例如n=140时,可依次分割出3个数据块,元素的个数分别为64(8×8)、64(8×8)、9(3×3),剩余元素为3个。
“方阵转换法”过程如下:将数据块中m×m个元素按行序排列成一个数字方阵,从该数字方阵中按列序得到转换后元素的次序。以3×3数据块为例,转换过程如下图所示:

小明依据上述设计了如下的Python程序,程序运行如图所示:

请回答下列问题:
(1)当n=120时,分割出的第3个数据块元素个数为。
(2)请在划线处填入合适的代码。
# 12 67 34 42 19 77 54 22 83a =list(map(int,input("请输入要转换的数组a:").split()))n =len(a)b = [0] * nm =8start =0# 当前未分割数据的第1个元素下标left = n # 当前未分割数据的个数while left >3:if left < m * m:___①___else:pa = startpb = startfor i inrange(m*m):b[pb] = a[pa]pb +=1if (i+1) % m ==0:___②___else:pa += m___③___start += m * mfor i inrange(start, n):b[i] = a[i]print("b数组结果是:",b)
【解析】(1) n=120,依次分割64(8×8)、49(7×7)、4(2×2),第3个数据块个数为4; (2) ① 填m = m - 1(m过大,逐级递减);② 填pa = pa - m*(m-1) + 1(换行后跳至下一列首行);③ 填left = left - m*m(更新剩余数据个数)。
六、其他有价值的题目
3.下列应用中,体现了人工智能技术的有
①机器人通过语音与人交流
②饮水机根据水温自动加热
③宾馆通过专用系统进行人脸识别,核实住宿人员身份
④计算机程序根据输入的三条边长自动计算三角形面积
⑤停车管理系统通过拍摄识别车牌号码,并用语音进行播报
A.①②③ B.①③⑤ C.②④⑤ D.③④⑤
答案:A
6.十进制正整数n转换为二进制数,该二进制数末位是“0”。下列说法正确的是
A.无法确定n是奇数还是偶数
B.若该二进制数的位数是4,则n的最大值是15
C.n与n+1分别转换为二进制数,这两个二进制数的位数可能不同
D.该二进制数末位的“0”去掉后,再转换为十进制数,所得的值是n/2
答案:D
往期回顾:
【真题回顾•第一期】2015年10月浙江省信息技术选考真题Python改编
【真题回顾•第二期】2016年04月浙江省信息技术选考真题Python改编
【真题回顾•第三期】2016年10月浙江省信息技术选考真题Python改编
【真题回顾•第四期】2017年04月浙江省信息技术选考真题Python改编
联盟卷图示解析合集: