本公众号推出真题回顾系列,将VB题目进行了Python改编,并在最后附上对于目前选考备考来说,还有价值的其它题目。
改编过程中:感慨万千。大概只有我们信息技术学科,在短短十年间,变化如此之大。
信息技术教师必须具备两种学习意识:对于底层知识,需要“慢思考”,沉下心去啃硬骨头,建立深刻的理解,这可能需要几年甚至十几年的积累。对于应用层知识,需要“快学习”,快速上手,快速迭代,甚至要有“用完即弃”的觉悟。这种精神上的分裂和持续的压力,是其他学科教师难以体会的。
也因此,浙江技术选考造就了一大批优秀的信息科技教师。
今天是第四期,看看我们的来时路。
一、选择题第11题:二分查找
【2017年4月原题】11.(加试题)某对分查找算法的VB程序段如下:
key = Val(Text1.Text)i = 1: j = 10Text2.Text = ""Do While i <= jm = Int((i + j) / 2 + 0.5)If key = a(m) Then Exit DoIf key < a(m) Then j = m - 1 Else i = m + 1Text2.Text = Text2.Text + Str(a(m))Loop
数组元素a(1)到a(10)的值依次为“8,17,24,30,36,40,55,58,61,66”,文本框Text1中输入的值是30,执行该程序段,文本框Text2中显示的是() A.40 24 B.40 24 36 C.36 24 D.36 17 24
【Python版】有如下Python程序段:
a = [8,17,24,30,36,40,55,58,61,66]key =30i =1j =10ans =""while i <= j:m =int((i + j) /2+0.5)if key == a[m]:breakif key < a[m]:j = m -1else:i = m +1ans = ans +str(a[m]) +" "print(ans)
该程序段运行后,输出结果是() A.40 24 B.40 24 36 C.36 24 D.36 17 24
【解析】key=30,查找过程: i=0,j=9,m=int((0+9)/2+0.5)=5,a[5]=40≠30,30<40,j=5,记录40 i=0,j=4,m=int((0+4)/2+0.5)=2,a[2]=24≠30,30>24,i=4,记录24 i=3,j=4,m=int((3+4)/2+0.5)=4,a[4]=36≠30,30<36,j=4,记录36 i=4,j=4,m=4,a[4]=30,退出循环。 最终ans值为:40 24 36。故选B。
二、选择题第12题:选择排序变形
【2017年4月原题】12.(加试题)小赵对选择排序算法进行了如下改进:在数组的所有元素中找出最小和最大数据的元素,然后将这两个元素分别与第一个和最后一个元素交换数据,在余下的元素中找出最小和最大数据的元素,分别与第二个和倒数第二个元素交换数据,以此类推,直到所有元素的数据按升序排列。小赵编写的VB程序段如下:
p = 1: q = 10Do While p < qiMin = p: iMax = pFor i = p + 1 To qIf a(i) < a(iMin) Then iMin = iIf a(i) > a(iMax) Then iMax = iNext it = a(iMin): a(iMin) = a(p): a(p) = t①t = a(iMax): a(iMax) = a(q): a(q) = tp = p + 1q = q - 1Loop
要使程序实现上述算法思想,则方框中的语句是() A.If iMax = p Then iMax = iMin B.If iMin = p Then iMin = iMax C.If iMax = p Then iMin = iMax D.If iMin = p Then iMax = iMin
【Python版】小赵对选择排序算法进行了如下改进:在数组的所有元素中找出最小和最大数据的元素,然后将这两个元素分别与第一个和最后一个元素交换数据,在余下的元素中找出最小和最大数据的元素,分别与第二个和倒数第二个元素交换数据,以此类推,直到所有元素的数据按升序排列。小赵编写的Python程序如下:
a = [4,5,2,8,1,10,6,33,76,18,9]p =0q =10while p < q:iMin = piMax = pfor i inrange(p +1, q +1):if a[i] < a[iMin]:iMin = iif a[i] > a[iMax]:iMax = ia[p], a[iMin] = a[iMin], a[p]___①___a[q], a[iMax] = a[iMax], a[q]p = p +1q = q -1
则①处应填语句为() A.If iMax = p:iMax = iMin B.If iMin = p:iMin = iMax C.If iMax = p:iMin = iMax D.If iMin = p:iMax = iMin
【解析】最小元素与p位置交换后,若原最大值位置是p,最大值位置会被覆盖,需把iMax改为iMin。 故选A。
三、非选择题第14题:进制转换程序实现
【2017年4月原题】14.(加试题)奇偶校验是一种校验数据传输正确性的方法。其中奇校验方法:统计二进制数据的数位中“1”的个数,若个数为奇数,则校验位值为0,否则校验位值为1。小李编写了一个计算奇校验位值得VB程序,功能如下:在文本框Text1中输入1~255十进制待校验数,单击“计算”按钮后,在文本框Text2中显示该数对应的二进制值,并在标签Label3中显示该数的校验位值。程序运行界面如图:(VB代码略)

【Python版】奇偶校验是一种校验数据传输正确性的方法。其中奇校验方法:统计二进制数据的数位中“1”的个数,若个数为奇数,则校验位值为0,否则校验位值为1。小李编写了一个计算奇校验位值的Python程序,功能如下:输入1~255十进制待校验数,回车后,显示该数对应的二进制值,并换行显示该数的校验位值。程序运行如下:

(1)Python实现代码如下,请在划线处填入合适的代码:
n =int(input("请输入待校验数:"))t =0s =""while n >0:a = n %2n = n //2t = ____①____s =str(a) + sv = t %2print("二进制:", s)print("校验位值:", ____②____)
(2)运行该程序,如果输入22,回车,则显示的校验位值是_______
【解析】(1)① 填t + a:统计二进制中1的个数。 (1)② 填1 - v:奇校验位规则,1的个数奇数则为0,偶数则为1。 (2)输入22,二进制为10110,1的个数为3(奇数),校验位值为0。
四、非选择题第16题:枚举算法和字符串处理
【2017年4月原题】16.(加试题)小王编写了一个实现文字查找替换功能的VB程序,文本框Text1显示原文内容,Text2中输入查找内容,Text3中输入替换内容,单击“全部替换”按钮后,Text4显示查找替换的结果,Text5中显示替换的次数,Text6显示“查找内容”在原文中的起始位置。程序加框处代码有错,请改正。

【Python版】小王编写了一个实现文字查找替换功能的Python程序,输入原文、查找内容、替换内容,输出查找替换的结果,并显示替换的次数及“查找内容”在原文中的起始位置。程序运行如下图:

实现上述功能的Python程序如下,加框处代码有错,请改正。
#博客是一种特殊的网络出版形式。博客已经得到了广泛应用。目前,一些政府部门在网上建立了官方博客,借此平台发布重要信息,博客已成为政府部门对外交流的窗口之一。text1 =input("请输入原文:")text2 =input("请输入查找内容:")text3 =input("请输入替换内容:")i =0count =0result =""pos =""len_find =len(text2)while i <=len(text1) -1:s = text1[i:i+len_find]if s == text2:result = result + text3count = count +1pos = pos +str(count) +" "# (1)加框处:pos + str(count)i = i + len_findelse:result = result + text2# (2)加框处:result = result + text2i = i +1print("替换结果:", result)print("替换次数:", count)print("起始位置:", pos)
【解析】
(1)位置记录错误:pos + str(count) 改为 pos + str(i + 1)(Python从0开始)。
(2)替换错误:result = result + text2 改为 result = result + text1[i]。
五、非选择题第17题:桶思想和数组应用
【2017年4月原题】17.(加试题)小王编写了一个依据成绩计算名次的VB程序,成绩为0到100之间的整数。算法的基本思想:先统计每个分数的个数,然后按照分数从高到低依次计算每个有效分数(该分数的个数不为0)对应的名次,分数相同时名次并列。最高分为第1名,该分数的名次与个数之和为下一个有效分数的名次,以此类推。程序用数组A存放每个分数对应的个数,数组B存放每个分数对应的名次。例如,下表中最高分100有2个,并列第1名,则分数96的名次为分数100的名次加上分数100的个数,即第3名。

程序运行界面如图所示:

设问及VB代码略
【Python版】小王编写了一个依据成绩计算名次的Python程序,成绩为0到100之间的整数。算法的基本思想:先统计每个分数的个数,然后按照分数从高到低依次计算每个有效分数(该分数的个数不为0)对应的名次,分数相同时名次并列。最高分为第1名,该分数的名次与个数之和为下一个有效分数的名次,以此类推。程序用数组A存放每个分数对应的个数,数组B存放每个分数对应的名次。例如,下表中最高分100有2个,并列第1名,则分数96的名次为分数100的名次加上分数100的个数,即第3名。

程序运行如图所示:

实现上述功能的Python程序如下,请回答下列问题:
(1)如表所示,若分数93的个数为2,则该分数对应的名次为________
(2)请在划线处填入合适的代码。
sName = ["陈立港","李小宝","历乐天","杨加惠","许兴天","潘恩西","高力军","杨红婷"]sScore = [75,87,100,85,76,100,65,96]____①____# 学生人数# 统计分数个数、计算名次A = [0] *101# A[i]表示分数i的人数B = [0] *101# B[i]表示分数i的名次for i inrange(n):____②____mc =1for i inrange(100, -1, -1):if A[i] !=0:B[i] = mc____③____# 输出学生姓名、分数、名次for i inrange(1, recCount +1):score = sScore[i]mc = B[score]print(sName[i], score, "第", mc, "名")
【解析】(1)分数93个数为2,名次为:7。
(2)① 填n = len(sName)或n = len(sScore):使用len()函数得到学生人数 ② 填A[sScore[i]] = A[sScore[i]] + 1:统计每个分数出现次数。 ③ 填mc = mc + A[i]:更新下一个分数名次。
六、其他有价值的题目
无
往期回顾:
【真题回顾•第一期】2015年10月浙江省信息技术选考真题Python改编