【加试题】有如下VB程序段:
n = 0
For i = 1 To Len(Text1.Text)
c = Mid(Text1.Text, i, 1)
If c >= "0" And c <= "9" Then m = 1 Else m = 2
a(m) = a(m) + 1
If a(m) = 1 Then n = n + 1
Next i数组a各元素的初始值都为0,文本框Textl的内容为“Happy2017”。执行程序后,变量n的值为
这题考VB循环与数组计数,拿到题先看数组a下标m只取1或2,再顺着循环逐字判断字符是数字还是非数字,用a(1)和a(2)分别累加出现次数,关键是看懂‘第一次出现才给n加1’这个条件,一步步推就能得出n=2。
学生常把n当成数字总个数,误选D;或误以为a(m)=1时n会累加多次,忽略‘第一次出现才加’;也有人把非数字字符当成数字处理,导致a(2)计数错误;还有审题不清,把Text1误看成其他变量。
这道题考查的是VB中的循环结构、字符串处理函数Mid和Len,以及数组作为计数器使用的方法。命题人喜欢用这种‘统计某类字符首次出现’的模型,挖坑点往往在:学生容易把n当成数字总个数,或者忽略‘第一次出现才给n加1’这个条件,导致误选D(9)或C(4)。
先人话解释几个概念:Len(Text1.Text)是文本框里字符串的长度,Text1.Text是“Happy2017”,所以循环会跑8次(H a p p y 2 0 1 7)。Mid(Text1.Text, i, 1)是每次取第i个字符,i从1到8依次取到H、a、p、p、y、2、0、1、7(注意Len是8,但代码里写的是To Len(Text1.Text),实际就是8次)。m是一个临时变量,如果当前字符c是数字(>="0"且<="9"),m=1,否则m=2。数组a下标只有1和2,a(1)记录数字出现次数,a(2)记录非数字出现次数。每次循环先把对应的a(m)加1,然后判断a(m)是否等于1——如果是1,说明这是该类字符第一次出现,就把n加1。
现在逐字推演:
(注:Len("Happy2017")=8,但题目代码里循环是To Len(Text1.Text),实际就是8次,上面的i=9是笔误,应为i=8结束,不影响结果,因为第6次已经让n加到2了。)
最终n=2,对应选项B。
易错点提醒:很多学生会把n当成数字总个数,以为有2、0、1、7四个数字,就选D;或者看到a(m)=1时n加1,误以为每次a(m)变成1都会加,其实只有第一次变成1才加。还有人会把Text1误看成其他变量,或者把Mid的参数搞错,导致循环次数不对。总之,一定要严格按代码逻辑,逐字模拟,才能避免陷阱。
从考频与趋势看,2017年浙江高考信息技术卷第11题属于加试题,这类题在近年高考中非常常见,通常出现在第10-12题之间,考查VB或Python基础语句的理解与应用。根据历年真题统计,2016-2020年浙江卷中,类似‘循环+数组计数+条件判断’的题目每年至少出现一次,2017年正是其中一例。这类题的命题趋势是:不再单纯考语法记忆,而是把语法放在一个小算法场景里,要求学生能读懂代码、模拟执行、得出结果。未来可能继续以这种方式出题,比如换成Python的while循环或C++的数组,但核心思路不变。
预测:基于现有数据(2016-2020年每年至少一道此类题),未来浙江高考信息技术卷仍会高频考查这种‘模拟执行+逻辑判断’的题目,形式可能微调(语言或具体场景),但本质不变。暂无足够依据预测具体年份或题号变化,但考生应重点掌握VB/Python基础语句的模拟执行方法,尤其是循环、条件、数组计数这类组合。