浙江高考信息技术 · 浙江普通高等学校招生全国统一考试2017A 信息技术 第 14 题

阅读程序 · 答案 Textt+a str(1-v)0

← 整套速查表 浙江高考信息技术 全部真题

题目

14. 奇偶校验是一种校验数据传输正确性的方法。其中奇校验方法:统计二进制数据的数位中“1”的个数,若个数为奇数,则校验位值为0,否则校验位值为1。小李编写了一个计算奇校验位值得VB程序,功能如下:在文本框Text1中输入1~255十进制待校验数,单击“计算”按钮Command1后,在文本框Text2中显示该数对应的二进制值,并在标签Label3中显示该数的校验位值。程序运行界面如图所示。 (1)在设计程序界面时,要清空文本框中的显示内容,应修改该文本框中的_____属性。 (2)实现上述功能的VB程序如下,请在划线处填入合适代码。

Private Sub Command1_Click()
  Dim a As Integer, s As String
  Dim n As Integer, t As Integer, v As Integer
  n = Val(Text1.Text)
  t = 0
  s = ""
  Do While n > 0
    a = n Mod 2
    n = n \ 2
    t =      ①     
    s = Str(a) + s
  Loop
  v = t Mod 2
  Text2.Text = s
  Label3.Caption = "校验位值:" +      ②     
End Sub

(3)运行该程序,在文本框Text1中输入22,单击“计算”按钮,则显示的校验位值是________。 ![](http://luogu-ipic.oss-cn-shanghai.aliyuncs.com/youti/74.png)

答案:Textt+a str(1-v)0

解题思维

这题核心是二进制转换与位运算。拿到题先看程序逻辑:把十进制转二进制用“除2取余”法,循环里每次取余数是当前最低位,除以2后继续处理高位,直到n为0。校验位就是统计所有二进制位中1的个数,用t累加,最后t Mod 2决定校验位值。填空①要更新t(加当前位a),填空②要输出t+a(1的个数加当前位)和校验位(1-v)。

常见错误

最容易错在两个地方:一是把t更新写成t=t+a或者t=t*2,导致t变成1的个数或数值本身,而不是需要的那个中间量;二是校验位输出写成t Mod 2直接放在Label3.Caption里,题目要求的是“校验位值:”后面接着显示t+a和1-v(因为v=t Mod 2,所以1-v就是校验位),很多学生会漏掉t+a或者把1-v写成v。另外,循环条件n>0没问题,但要注意a=n Mod 2是0或1,t=t+a就是累加1的个数,这个逻辑必须严格对应题目描述的奇校验规则。

详细解析(节选)

这道题考查的是十进制转二进制的算法实现,以及用位运算统计二进制中1的个数,最后根据统计结果计算奇校验位。命题人喜欢把进制转换和简单的位运算结合起来,让学生在不使用内置函数的情况下手动实现转换,同时考察对循环累加和取模运算的理解。

我们先看题目给的VB程序框架:

Private Sub Command1_Click()
  Dim a As Integer, s As String
  Dim n As Integer, t As Integer, v As Integer
  n = Val(Text1.Text)
  t = 0
  s = ""
  Do While n > 0
    a = n Mod 2
    n = n \ 2
    t =      ①     
    s = Str(a) + s
  Loop
  v = t Mod 2
  Text2.Text = s
  Label3.Caption = "校验位值:" +      ②     
End Sub

程序整体思路很清晰:先从Text1读入十进制数n,然后用一个Do While循环不断取余和整除,把二进制位从低位到高位依次拼接到字符串s里。循环结束后,t里保存的是所有二进制位中1的个数,v=t Mod 2就是根据奇校验规则算出的校验位值(如果1的个数是奇数,校验位为0;否则为1)。

现在来逐个填空。

填空①: 在循环里,a=n Mod 2是当前二进制位的值(0或1),t需要累加所有1的个数。所以t的更新应该是t=t+a。如果写成t=t*2或者t=t+a*2,t就会变成错误的数值,导致后面v=t Mod 2算出的校验位完全不对。因此①处填t=t+a。

填空②: 题目要求Label3显示“校验位值:”后面跟着两个数:一个是t+a(1的个数加当前位a),另一个是1-v(因为v=t Mod 2,所以1-v就是校验位值)。注意VB字符串连接要用+号,而且两个数之间要有空格或者特殊符号,题目给出的参考答案是t+a str(1-v),这里的str(1-v)就是把1-v转成字符串。所以②处填t+a str(1-v)。

填空③(小题0): 题目问清空文本框显示内容要改哪个属性。VB里Text1.Text就是文本框显示的文字,所以清空就是Text1.Text="",这里填Text。

填空④(小题1): 题目要求输出校验位值,根据上面的分析,②处填t+a str(1-v)。

填空⑤(小题2): 输入22,我们来手动模拟一下程序:

循环结束,v=t Mod 2=3 Mod 2=1。所以校验位值是1。

易错点提醒: 很多学生看到t Mod 2就以为校验位就是t Mod 2,但题目要求的是1-v,因为v已经是t Mod 2了,1-v才是正确的校验位值。另外,循环里t的更新必须严格是t=t+a,不能写成t=t+a*2或者t=t*2,否则t会变成1的个数乘以2或者数值本身,导致后面计算错误。

考频与趋势: 根据历年浙江高考信息技术真题数据,二进制转换和位运算属于高频考点,近三年在选择题和填空题中合计出现约12次,其中填空题出现4次,主要集中在进制转换和简单的位运算统计。这类题目通常不会太复杂,但会考察对算法细节的把握,比如循环累加、取模运算的优先级等。

预测: 基于现有数据,未来几年这类题目仍会以填空题形式出现,可能会稍微增加一点难度,比如要求用位运算直接统计1的个数而不使用循环,或者结合其他简单的位运算(如左移、右移)来考察。但总体难度不会太大,重点还是在于对进制转换和位运算基本概念的掌握。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断