2020版高考信息技术二轮浙江专用 专题五 数制转换课件(58张幻灯片)+学案

文档属性

名称 2020版高考信息技术二轮浙江专用 专题五 数制转换课件(58张幻灯片)+学案
格式 zip
文件大小 6.2MB
资源类型 教案
版本资源
科目 信息技术(信息科技)
更新时间 2019-11-30 14:28:58

文档简介

专题五 数制转换
1.(2019·1月浙江学考)小红编写了一个将5位以内的十六进制正整数转化成十进制数的VB程序,功能如下:在文本框Text1中输入一个十六进制正整数,单击“转换”按钮Command1,在标签Label3中显示结果。程序运行界面如图所示。
(1)要使窗体Form1标题显示“数制转换”,则需该窗体的______(单选,填字母:A.Font/ B.Caption/ C.BackColor)属性。
(2)要实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
 Dim x As String, ch As String
 Dim flag As Boolean, i As Integer, result As Long
 x =______①____
 i = 1
 result = 0
 flag = True
 ch = Mid(x, 1, 1)
 Do While i <= Len(x) And flag = True
If ch >= ”0” And ch <= ”9” Then
   result = result * 16 + Val(ch)
ElseIf ch >= ”A” And ch <= ”F” Then
result = result * 16 + (Asc(ch) - Asc(”A”) + 10)
   ElseIf ch >= ”a” And ch <= ”f” Then
   result = result * 16 + (Asc(ch) - Asc(”a”) + 10)
Else
   flag = False
End If
i = i + 1
 ch = ______②____
Loop
If flag = True Then
Label3.Caption = Str(result)
Else
Label3.Caption = ”输入错误”
 End If
End Sub
(3)若在文本框Text1中输入5+9,单击“转换”按钮后,标签Label3中显示的内容是________ (单选,填字母:A.14 / B.E / C.输入错误)。
解析 从语句ch = Mid(x, 1, 1)来看,x是文本框Text1输入字符。Ch为每次取出字符,如果不是0-9或A-F或a-f的字符,则flag = False。
答案 (1)B (2)①Text1.Text ②Mid(x, i, 1) (3)C
2.(2018·4月浙江学考)某种编码以4位二进制码为一组,每组前两位表示方向,后两位表示距离。编写一个程序,将编码翻译成方向和距离,距离值为每组编码后两位二进制码转换为十进制数的值。具体功能如下:在文本框Text1中输入连续多组编码,单击“翻译”按钮Command1,结果显示在列表框List1中。
程序运行界面如下图所示。
(1)要使程序运行时,文本框Text1的Width属性值为2018,可在Form_Load事件过程中添加语句________(单选,填字母:A.Width=2018 / B.Text1.Width = 2018 / C.Width.Text1=2018)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, c As String, d As String
Dim n As Integer, b1 As Integer, b2 As Integer, v As Integer, i As Integer
s = Text1.Text: n = Len(s): i = 1
Do While i <= n
c = Mid(s, i, 2)
If c = ”00” Then
d = ”东”
ElseIf c = ”01” Then
d = ”南”
ElseIf c = ”10” Then
d = ”西”
Else
d = ”北”
End If
b1 = Val(Mid(s, i + 2, 1))
b2 = Val(Mid(s, i + 3, 1))
v=____①____
List1.AddItem d + ” ” + Str(v)
___②____
Loop
End Sub
(3)若文本框Text1中输入的内容为“1111”,单击“翻译”按钮,列表框List1中显示的内容是________。
解析 变量i表示在字符串每个字符的位置,d表示方向,v表示距离,距离值为每组编码后两位二进制码转换为十进制数的值。Loop语句前往往要改变循环变量的值。
答案 (1)B (2)①b1*2+b2 ②i = i + 4 (3)北3
3.(2017·4月浙江选考)奇偶校验是一种校验数据传输正确性的方法。其中奇校验方法:统计二进制数据的数位中“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= n2
t=____①____
s=Str(a)+s
Loop
V=t Mod 2
Text2.Text=s
Label3.Caption=”校验位值”+____②____
End Sub
(3)运行该程序,在文本框Text1中输入22,单击“计算”按钮,则显示的校验位值是________。
解析 (1)本小题考查对象的属性设置,文本框中的显示内容为文本框的“Text”属性。(2)该算法通过“除二取余”将十进制的待校验数n转换为二进制数s,变量t将二进制数各数位上的“0”或“1”累加起来(统计二进制数据中“1”的个数),即“t=t+a”。v=t mod 2用于判断t的奇偶性,当v=1时,t为奇数,当v=0时,t为偶数,校验位值可以从t的奇偶性来判断,校验位值为(1-v)或(v-1),通过Label3的Caption属性值输出,需转化为文本型,②处应为str(1-v)或str(Abs(v-1))。(3)十进制数22转化为二进制数为“10110”,各数位上的“0”或“1”相加得3,为奇数,校验位值为0。
答案 (1)Text (2)①t+a ②str(1-v) (3)0
4.某数据加密方法描述如下:
1)以字节为单位进行加密处理;
2)将1个字节的8位二进制数分割成前4位与后4位两个二进制数;
3)分别将上述两个4位二进制数转换为十进制数;
4)将每个十进制数转换为1个加密字符,对应的“密码表”如下:
值(十进制)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
加密字符
I
I
i
k
E
C
H
N
p
o
s
t
c
a
r
d
小明按照上述方法,设计了一个字符串(仅包含ASCII字符)加密的VB程序,功能如下:单击“加密”按钮Command1,程序依次将文本框Text1中每个字符的ASCII码值作为1个字节转换为两个加密字符,连接这些加密字符,最后在文本框Text2中输出加密结果。下表显示了字符串中一个字符的加密过程:
程序运行效果如图所示:
实现上述功能的VB程序如下:
(1)请在划线处填入合适代码。
Private Sub Command1_Click()
Dim n As Integer,s As String,i As Integer,ss As String
Dim a As Integer ′存储加密前字符的ASCII码
Dim b1 As Integer,b2 As Integer ′分别存储分割、转换后的两个十进制数
s=Text1.Text
____①____
For i=1 To n
 a=Asc(Mid(s,i,1))
 b1=a16
 b2=a Mod 16
 ss=ss+Code2Char(b1)+Code2Char(b2)
Next i
Text2.Text=ss
End Sub
′十进制值转换为加密字符的函数
Function Code2Char(c As Integer)As String
 Dim s As String
 s=”IlikeCHNpostcard”
 Code2Char=____②____
End Function
(2)若将“密码表”中值为“0”对应的加密字符“I”改为“i”,加密后的密文可能无法解密,原因是_____________________________________________________。
解析 变量i表示字符在字符串中的位置,n表示字符串长度。在自定义函数中,函数名Code2Char将作为返回值,参数c表示某个数字,其值范围在[0,15]之间,当c=0时,对应密码表第1个字符,因此他在密码本中位置为c+1。加密字符“I”改为“i”,密码本中有两个i,解密成0或2两个数。
答案 (1)①n=Len(s)或n=Len(Text1.Text)
②Mid(s,c+1,1)
(2)加密字符i对应两个值0,2
在计算机中,存储信息的基本单位是字节,且所有的信息都是二进制数表示,但二进制比较冗长,把一个字节的8个位分成高4位和低4位两部分,每部分转换成1位十六进制数,即一个字节在计算机中用8个位存储,但在查看内码或其他操作时,可以用2个十六进制数表示。因此经常进行二进制、十进制和十六进制之间的转换。
考点1 十进制数向其他进制数转换
1.十进制数向二进制或十六进制转换时,用该数除以2或16,把商作为被除数,重复计算,值到得到的商为0为止,把每次的余数反向连接起来,组成新的进制数。
2.十六进制数的基数为0-9及A-F,因此将每次除的余数0-15分别对应以上字符,可以有两种方法,一是在1个“0123456789ABCDEF”字符串中用Mid函数取出相对应的字符,二是利用字符内码,转换成相应的字符,在转换之前要进行判断。
3.数值小于255的正整数n,转换成十六进制,可以将n16和n Mod 16在上述的字符串中,取出两个数对应的字符即可。
【例1】 用VB 编写正整数十进制转换为十六进制的程序,运行界面如图所示。程序功能如下:在文本框Text1 中输入待转换的十进制值,单击“十进制转换十六进制”按钮Command1,在文本框Text2 中输出转换结果。
请在程序的划线处填写合适的代码。
【方法一】Private Sub Command1_Click()
Dim a As String, s As String
Dim r As Integer, x As Integer
x = Val(Text1.Text)
s =" "
s1 = “0123456789ABCDEF”
Do While ____①____ 
r = x Mod 16
s2 = Mid(s1, r + 1, 1)
____②____
x = x 16
Loop
Text2.Text = s
End Sub
【方法二】Private Sub Command1_Click()
Dim a As String,s As String
Dim r As Integer,x As Integer
x = Val(Text1.Text)
s =" "
Do While x > 0
____①____
If r > 9 Then
  ____②____
Else
s2 = Trim(Str(r)) ′Trim函数的功能是去除字符两端的空格
End If
s = s2 + s
x = x '16
LoopEnd Sub
解析 本题考核的知识点十进数向其他进制数的转换。关键是如何将数字转换成相对应的字符。方法一中采用在某个字符串取出相应位置的字符,方法二中采用内码的方法。
答案 【方法一】① x > 0 或x<>0 ②s = s2 + s
【方法二】① r = x Mod 16 ②s2 = Chr(r + 55)
【变式训练1】 小林为了将十进制数转化为k进制数(k介于2~16之间),设计如下界面程序:在文本框Text1中输入一个十进制数,在文本框Text2中输入整数k(范围在2到16之间),单击“运行”按钮Command1,程序将十进制转化为k进制的,并在标签Label1中输出结果。请回答下列问题:
(1)程序代码如下,请在划线处补充完整。
Private Sub Command1_Click()
d = Val(Text1.Text)
k = Val(Text2.Text)
s = ” ”
Do While d > 0
r = d Mod k
If r >= 10 Then
   s2 = Mid(”ABCDEF”, ____①____, 1)
Else
s2 = Trim(Str(r))
End If
s = s2 + s
____②____
Loop
Label1.Caption = ”结果为” + s
End Sub
(2)运行该程序,在文本框Text1中输入“38”,文本框Text2中输入“2”,单击“运行”按钮,则Label1 显示的内容为是__________。
解析 本题的关键是当余数如果超出9,即把10-15如何转换成A-F之间字符。
答案 (1)①r-9 ②d = d k (2)100110
考点2 其他进制数向十进制数转换
1.如果是一位十六进制数字转十进制,分0-9和A-F两种情况,0-9的可以用Val函数进行转换,A-F字符可以用其内码减去55进行转换。
2.按权展开相加法。从低位开始,把每一位上的数乘以该位数的权,把每次的乘积相加。如(1011)2=1×20+1×21+0×22+1×23,38H=8×160+3×161=8+48=56D。
相应的代码是
For i = Len(s) To 1 Step -1
t = Val(Mid(s, i, 1) * 2 ^ (Len(s) - i))
n = n + t
Next i
3.计算左边第1位值t,从第2位开始,把该数表示成前面的数左移一位(在后面添加1个0)。如将二进制数1101B和十六进制数A1B2H转换成十进制数的过程,其中i表示每次读取的位置,ch表示每次读出的数字。
二进制数向十进制转换
十六进制数向十进制转换
i
Ch
t
i
ch
t
1
”1”
1B
1
”A”
AH
1
”1”
10B+1B
2
”1”
A0H+1H
0
”0”
11B+0B
3
”B”
A1H+BH
1
”1”
110B+1B
4
”2”
A1BH+2H
二进制数和十六进制数后面添加1个0,其值分别为原来的2和16倍。
相应的代码是
For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch >= ”0” And ch <= ”9” Then
t = Val(ch)
Else
t = Asc(ch) - 55
End If
n = n * 16 + t
Next i
【例2】 RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各种各样的颜色。RGB颜色分量的值通常采用十进制数表示,而Flash软件中颜色值采用十六进制数表示。比如RGB(100,255,10)等价于十六进制颜色码#64FF0A,每个RGB颜色分量对应两位十六进制数。
颜色
R
G
B
十进制
100
255
10
十六进制
64
FF
0A
小杜编写一个十六进制颜色码转RGB颜色值的转换程序,程序功能如下:程序运行时在文本框Text1输入一个十六进制颜色码,输入格式为:“#”后面跟6位十六进数(其中字母均为大写)。单击“转换” 按钮Command1,在标签Label1上输出对应的RGB颜色值。程序运行界面如下图所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)程序运行时,在文本框Text1输入“#C50913”,则标签Label1上显示的内容是________。
(2)请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, ch As String, ans As String
Dim i As Integer, j As Integer
Dim a(1 To 3) As Integer ′分别用于存储RGB对应的3个十进制分量
s = Text1.Text
s = Mid(s, 2, 6)
For i = 1 To 3
 a(i) = 0
Next i
For i = 1 To 6
j = (i + 1) 2
ch = Mid(s, i, 1)
a(j) =____①____
Next i
For i = 1 To 3
ans = ans + Str(a(i))
If i <> 3 Then ans = ans + ”,”
Next i
ans = ”RGB(” + ans + ”)”
Label2.Caption = ans
End Sub
Function HtoD(x As String) As Integer ′将一位十六进制数转十进制数
If x >= ”0” And x <= ”9” Then
HtoD = Val(x)
Else
____②____
End If
End Function
解析 根据语句j = (i + 1) 2,j的值分别为1、1、2、2、3、3,即每两个十六进制数转换为一个十进制数,把这两个十六进制数看成前面的十六进制数添加1个0,即扩大16倍再加上第2位十六进制数。
答案 (1)RGB(197,9,19) (2)①a(j) * 16 + HtoD(ch) ②HtoD = Asc(x) - 55
【变式训练2】 在文本框Text1中输入一个二进制数,单击“转换”按钮Command1,在文本框Text2中显示该二进制数对应的十进制数,若二进制数中存在不是0和1的数,则输出“非法的二进制数!”,程序运行时界面如下:
程序代码如下,请在空白处补充完整。
Private Sub Command1_Click()
Dim s As String, t As Integer, i As Integer
Dim ch As String, flag As Boolean, j As Integer
s = Text1.Text
flag = True
j = 0
For i = Len(s) To 1 Step -1
ch = Mid(s, i, 1)
If ch = ”1” Or ch = ”0” Then
    ____①____
    j = j + 1
Else
    ____②____
    Exit For
End If
Next i
If flag = True Then
Text2.Text = Str(t)
Else
Text2.Text = ”非法的二进制数!”
End If
End Sub
解析 理解变量的含义。S输入的二进制数,t是转换后的十进制数,ch是从低位向高位分解的字符,j从0、1、2、3……的变化规律,flag是否是二进制数的标志。
答案 ①t = t + Val(ch) * 2 ^ j ② flag = False
考点3 二进制数与十六进制数互相转换
1.由于16是2的4次方幂,因此每4位二进制数转换为1位十六进制数,每1位十六进制数转换为4位二进制数,不足4位在前面补0.
2.二进制数向十六进制数转换时,从低位开始,每4位二进制数转换成十进制数,再在”0123456789ABCDEF”字符串中用Mid函数取出相对应的字符。
【例3】 小李编写了一个二进制数转十六进制数的VB程序,功能如下:在文本框Text1中输入一个二进制数,单击“转换”按钮Command1,在文本框Text2输出相对应的十六进制数,运行界面如图所示。实现上述功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Dim i As Integer, t As Integer , s1 As String, s2 As String, s3 As String
s2 = ”0123456789ABCDEF”
s = Text1.Text
i = Len(s)
Do While              ′(1)
If i >= 4 Then
     s1 =        ′(2)
Else
     s1 = Mid(s, 1, i)
End If
t = 0
For j = 1 To Len(s1)
     t = t * 2 + Val(Mid(s1, j, 1))
Next j
s3 =      ′(3)
i = i - 4
Loop
Text2.Text = s3
End Sub
解析 i表示字符串s中位置,从最后找到第一个位置为止。当i大于等于4时,表示可以取出4位二进制数,因此取出的字符个数为4,否则取出剩余的字符。在循环For j = 1 To Len(s1)中,是计算每组二进制对应的十进制数,再在s2中找到对应的字符,并进行反向连接。
答案 (1)i>=1 (2)Mid(s, i, 4) (3)Mid(s2, t+1 , 1) + s3
【变式训练3】 在文本框 Text1 中输入一组 12 位以内的二进制数,将该二进制数转化为十六进制数后在 Label1 中输出。程序运行后如图所示。
(1)程序运行时,将宽度调整为5000,则需在 Form_Load()过程中加入语句________(选填,填字母:A.Text1.Caption=5000 /B.Height=5000 /C.Text1.Width=5000 /D.Text1.Left 5000)。
(2)实现上述功能的 VB 程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim a(1 To 12) As Integer  ′a 数组用以存储二进制数
Dim b(1 To 3)  As Integer ′b 数组用以存储十六进制数
Dim m, s  As String
Dim i, j, k As Integer
m = Text1.Text
For i = 12 To 12 - Len(m) + 1 Step -1 ′将每位二进制数保存到数组 a 中
___①____
Next i
For i = 1 To 3 ′将每 4 位二进制数转化为十进制数后保存到数组 b 中
For j = 4 To 1 Step -1
b(i) = b(i) + a(____②______ ) * 2 ^ (j - 1)
Next j
Next i
For i = 1 To 3
If b(i) < 10 Then
m = Chr(b(i) + 48)
Else
m = Chr(b(i) + 55)
End If
s = s + m
Next i
Label1.Caption = ”转换后的十六进制数为:” + s
End Sub
(3)若程序运行后,若在文本框中输入二进制数 1101101101,则变量s的值为____________。
解析 先把二进制数m每一位数字存储在数组a中,再从低位开始,每4位转换为一位十六进制数。
答案 (1)C (2)①a(i) =Val(Mid(m, i, 1)) ②i * 4 - j + 1 (3)“36D”
1.编写“十六进制加法”程序。程序运行时,在文本框 Text1 和文本框 Text2 分别输入两个十六进制数,单击“计算”按钮后在文本框 Text3上输出两个十六进制相加后的结果。程序运行如图所示。
(1)观察代码,触发代码执行的事件名是 __________ 。
(2)实现上述功能的 VB 程序如下,请在划线处填入合适的代码。
Private Sub Cmd1_Click()
Dim a1 As String, a2 As String, sum As String, t As String
Dim b1 As Integer, b2 As Integer
Dim dist As Integer, x As Integer, jw As Integer
a1 = Text1.Text: a2 = Text2.Text: sum = ” ”
dist = Len(a1) - Len(a2)
If dist < 0 Then
t = a1: a1 = a2: a2 = t
____①____
End If
For i = 1 To dist
a2 = ”0” + a2
Next i
jw = 0
For i =____②____
If Mid(a1, i, 1) >= ”A” And Mid(a1, i, 1) <= ”F” Then
b1 = Asc(a1) - 55
Else
b1 = Val(Mid(a1, i, 1))
End If
If Mid(a2, i, 1) >= ”A” And Mid(a2, i, 1) <= ”F” Then
b2 = Asc(a2) - 55
Else
b2 = Val(Mid(a2, i, 1))
End If
x = b1 + b2 + jw
jw = x 16
If ____③____Then
sum = Chr(x Mod 16 + 55) + sum
Else
sum = Str(x Mod 16) + sum
End If
Next i
If jw = 1 Then sum = ”1” + sum
Text3.Text = sum
End Sub
(3)若将代码If jw = 1 Then sum = ”1” + sum删除,则图中 Text3 中显示的结果为________。
解析 dist表示字符串长度的差值,当dist<0时,交换a1和a2,确保Len(a1)>Len(a2),并且把a2前面加0,使得长度一致。两个十六进制相加时,应从低位开始相加,jw表示是否有进位,如果除去进位后的数,大于10转换成A-F,否则转换成0~9的数字。
答案 (1)Click (2)①dist = -dist 或 dist = Abs(dist)
②Len(a1) To 1 Step -1  ③x Mod 16 >= 10
(3)2D
2.编写VB程序,实现如下功能:在文本框Text1中输入十进制整数,文本框Text2中输入待转换进制(范围2~16),单击“转换”按钮Command1,在列表框List1中输出该整数对应的进制结果,运行效果如图1所示。
(1)设计时,属性窗口对象列表如图2所示,则该程序共有__________个对象。
(2)为实现上述功能,请在划线处填入合适的代码。
Private Sub Command1_Click()
Const code = ”0123456789ABCDEF”
Dim s1 As String, s As String ′变量s存储转换后的结果
Dim x As Long, R As Integer
___①____
If R >= 2 And R <= 16 Then
 x = Val(Text1.Text)
 s = ” ”
 Do While x > 0
y = x Mod R
x = ____②____
s1 = Mid(code, y + 1, 1) ′将余数转换为对应的字符
s = ____③____
 Loop
 List1.AddItem ”(” & Text1.Text & ”)10” & ” →(” & s & ”)” & R
End If
End Sub
答案 (1)6 (2)①R=Val(Text2.Text) ②x=x[JB( ③s1+s
3.二进制转十六进制,从文本框 TextB 输入二进制整数,单击“转换”按钮,将二进制转换为十六进制并显示在文本框 TextH 中。程序界面如图所示。转换方法:先从右往左将二进制数分割成 4 位一组,若最左边的一组不足4位,则用0将高位补足,然后将每4位二进制数转换为1位十六进制数。
(1)观察程序代码, “转换”按钮的对象名为______ 。(单选,填字母:A.TextB/ B.TextH/ C.Command1/ D.Convert/ E.转换)
(2)为实现上述功能,请在划线处填入合适的代码。
Private Sub Convert_Click()
Const zf = ”0123456789ABCDEF”
Dim a(1 To 100) As Integer, temp As Integer
Dim s As String, res As String, n As Integer, r As Integer
res = ” ”: s = TextB.Text: n = Len(s)
For i = 1 To n
a(i) = Val(Mid(s, i, 1))
Next i
t = n 4
______①____
temp = 0
For i = 1 To r  ′将最高的r位转换为十六进制
temp = temp * 2 + a(i)
Next i
res = Mid(zf, temp + 1, 1)
For i = 1 To t ′将t组4位二进制转换为十六进制
temp = 0
For j = 1 To 4
temp = temp * 2 + ____②______
Next j
res = res + Mid(zf, temp + 1, 1)
Next i
TextH.Text = res
End Sub
(3)若在文本框TextB中输入“101000111”,则单击“转换”按钮后的输出结果为:__________。
解析 根据本程序的算法及代码,将二进制字符串里的字符逐个取出来,存储到数组a,最高位存储在 a(1) 。计算出这个二进制数按4位一组来分有完整的几组,存储在 t 变量,除去完整的t组4位的,剩下的r个位成一组,单独转成十六进制,转换时本程序中先计算出一组二进制对应的十进制数,然后到字符串zf 中去取对应的十六进制字符,需要注意如果计算出的十进制是 temp ,那么它在 zf 中对应的十六进制字符是 temp+1 位置。
答案 (1)D (2)① r = n Mod 4 或 r =n - t * 4
②a(j + r + 4 * (i - 1)) (3)147
4.有趣的进制数,编写 VB程序找出符合条件的十进制自然数,它的七进制与九进制都是三位数,且七进制与九进制的三位数码顺序正好相反,输出这个十进制数与对应的七进制和九进制数。程序运行界面如下图所示。
实现上述功能的 VB 程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim i As Integer, d As Integer, r As Integer
Dim rs As String, ans1 As Integer, ans2 As Integer
For i = 81 To 342
___①____
rs = ” ”
Do While d <> 0
r = d Mod 9
rs = Str(r) + rs
  ____②____
Loop
ans1 = Val(rs)
′ 求出相应的七进制数,存储在变量ans2中,代码略
If ans1 Mod 10 = ans2 100 And ans1 100 = ans2 Mod 10 And ____③______
Then
Text1.Text = ______④____
Text2.Text = Str(ans1)
Text3.Text = Str(ans2)
End If
Next i
End Sub
解析 利用变量d代替i进行进制的转换,不会影响到i的值。将十进制数d转换九进制,因此每次要除9。符合题目的要求,三个数字顺序正好相反。
答案 ①d = i ②d=d〉 或者其它等价答案 ③ans1 10 Mod 10 = ans2 10 Mod 10 或者(ans1 mod 10) 10 =(ans2 mod 10) 10 或者mid(str(ans1),2,1)=mid(str(ans2),2,1) 或者其它等价答案 ④str(i)
5.在计算机系统中,数值一般用补码来表示和存储,补码由符号位和数值位两部分组成,符号位用0表示正数,用1表示负数。例如,整数n(-128<=n<=127)用8位二进制补码的表示方法为:
符号位(1位)
数值位(7位)
第1位(最高位)
第2~8位
①正数:正整数补码的数值即其二进制表示。例:12的8位二进制表示00001100,最高位即符号位”0”表示正数。
②负数:除符号位外,所有位取反,然后+1。例:-5的8位二进制补码表示方法如下,5对应7位二进制数为0000101(原码),所有位取反后为 1111010(反码),再加1后为1111011(补码),再设置符号位为1,因此-5用8位二进制补码表示为11111011。小明设计了一个VB程序,点击”补码”按钮Command1,将文本框Text1中输入的整数n(-128<=n<=127)转换成相应的补码,并在文本框Text2中输出,程序结果如图所示,请将划线处的代码补充完整。
(1)-28用8位二进制补码表示为________________。
(2)请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim n As Integer, a As Integer, i As Integer, m(1 To 8) As Integer
Text2.Text = ” ”
n = Val(Text1.Text)
If n >= 0 Then
For i = 8 To 2 Step -1  ′计算二进制原码
m(i) = n Mod 2
n = n 2
Next i
m(1) = 0
Else
n = -n
For i = 8 To 2 Step -1  ′计算二进制反码
m(i) = ____①____
n = n 2
Next i
i = 8
m(i) = m(i) + 1
Do While m(i) = 2 
m(i)=0
   ____②____
i = i - 1
Loop
m(1) = 1  ′设置符号位
End If
For i = 1 To 8
Text2.Text = Text2.Text & Trim(Str(m(i)))
Next i
End Sub
解析 28转换成7位二进制是0011100,所有位取反1100011,再加1值为1100100。设置符号位为1,结果为1100100。将二进制的最低位存储在m(8)中,m(2)为高位,m(1)是符号位。若某位为2时,该位为0,并向前进位。
答案 (1)1100100 (2)①(n + 1) Mod 2 或1- n Mod 2
②m(i-1)=m(i-1)+1
6.对输入的明文(由英文字母或数字组成的字符串)进行加密,输出加密后得到的密文。数据加密方法为对明文中的每个字符进行如下处理:
1)将该字符ASCII码转换成对应8位二进制;
2)将对应8位二进制数进行按位取反(1变0,0变1);
3)将产生的8位二进制数循环左移3次;
4)最后产生的8位二进制数转换成对应的十六进制数。
例如,明文大写字母“A”通过上述算法加密算法加密后生成的密文是“F5”,在文本框Text1中输入明文,单击“生成密文”按钮Command1,加密后生成的密文显示在文本框Text2中。
(1)如果输入明文为大写字母“F”,则生成的密文是________。
(2)请在划线处填入合适的代码。
Function btoh(m As String) As String   ′将4位二进制数转换成对应的十六进制数
Dim s As Integer, i As Integer, str As String
str = ”0123456789ABCDEF” :s = 0
For i = 1 To 4
s = s * 2 + Val(Mid(m, i, 1))
Next i
___①____
End Function
Private Sub Command1_Click()
 Dim ans As String, s As String, ch As String, ret As String
 Dim i As Integer, asc1 As Integer, n As Integer
 ____②____
 ans = ” ”
 For i = 1 To Len(s)
ch = Mid(s, i, 1)     ′取出第i个字符存入变量ch
asc1 = Asc(ch)
ret = ” ”
For m = 1 To 8      ′完成加密步骤1)和步骤2)
  n = (asc1+1) mod 2
  ret = n & ret
  ____③____
Next m
ret = Mid(ret, 4, 5) + Mid(ret, 1, 3) ′完成加密步骤3)和步骤4)
s1 = btoh(Mid(ret, 1, 4))
s2 = btoh(Mid(ret, 5, 4))
ans = ans & s1 & s2   ′将第i个加密后的字符添加到变量ans的末尾
 Next i
 Text2.Text = ans
End Sub
解析 字母F的内码为01000110,按位取反得到 10111001,循环左移3位得到11001101对应十六进制数为CD。btoh函数将4位二进制数转换成对应的十六进制数,并通过函数名返回函数的值。
答案 (1)CD (2)①btoh = Mid(str, s + 1, 1)
②s = Text1.Text  ③asc1 = asc12
7.字符加密:用VB编写某字符串加密解密程序(仅针对ASCII码字符),其加密过程如下:首先,分别求出待加密ASCII字符的ASCII码,然后用7位二进制来表示,比如“4”的ASCII码为十进制52,转换为7位二进制为“0110100”;其次,从左至右依次记为第1、2、3……7位,分别把第3、4、5位取反,即0变1,1变0,至此“0110100”变为“0101000”,将此二进制转换为ASCII码为40,对应的字符为左括号“(”, 即“4”经过加密后得到加密字符左括号“(”。
在文本框Text1中输入ASCII字符,单击命令按钮Command1,则在文本框Text2中显示经过加密的字符。VB代码如下,程序界面如图所示。上述加密与解密过程实际上是可以互逆的,请完成下列问题。
请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim a(1 To 7) As Integer
Dim i As Integer, j As Integer, n As Integer
Dim asc1 As Integer, s As String, s1 As String
i = 1
s = Text1.Text
Text2.Text = ” ”
Do While i <= Len(Text1.Text)
s1 = Mid(s, i, 1)
asc1 = Asc(s1)
n = 0
For j = 7 To 1 Step -1
If j = 3 Or j = 4 Or j = 5 Then
     a(j) =______①______
Else
     a(j) = asc1 Mod 2
End If
asc1 = asc1 2
n =______②______
Next j
Text2.Text = Text2.Text +____③______
i = i + 1
Loop
End Sub
解析 s1表示每个待加密的字母,asc1为S1的ASCII值,采用除2倒取余数(asc1 Mod2)法,把各个位的值依次存放在数组a中,当j = 3 Or j = 4 Or j = 5需要取反,取反的方法是把该位加1后再Mod 2,计算各位后,还需转化成十进制数,因此采用按权展开相加法,把计算的十进制值存放在变量n中,再到n转换成相对应的字母。
答案 ①(asc1 Mod 2 + 1) Mod 2 ②n + a(j) * 2 ^ (7 - j)  ③Chr(n)
8.在计算机中负数反码的计算如下:给出十进制数 x(-127≤x≤0),将 x的绝对值转化为七位二进制数,然后逐位取反,最左边增加符号位 1得到八位二进制数反码。例如十进制数-7,将 7转换为七位二进制数为 0000111,逐位取反变成 1111000,最左边增加符号位 1得到八位二进制数反码为 11111000。小杜编写了一个反码转化程序,功能如下:在文本框 Text1中输入十进制负数 x (-127≤x≤0),单击按钮 Command1后,在标签 Label1上显示其反码。程序运行界面如下图所示:
(1)结合程序界面和程序代码,没有使用控件为________(填数字: )。
(2)实现上述功能的 VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim n As Integer, t As Integer
Dim r As Integer, c As Integer, s As String
n = Val(Text1.Text)
s = ” ”
If n < 0 Then
__①____
Do While t > 0
r = (t + 1) Mod 2
  ____②____
t = t 2
c = c + 1
Loop
For i = 1 To 8 - c    
s = Str(1) + s
Next i
Label1.Caption = ”十进制数” + Str(n) + ”的二进制反码为” + s
Else
Label1.Caption = ”输入的数不符合要求!”
End If
End Sub
(3)程序运行时,在文本框中输入“-27”,单击“转反码”按钮后,标签 Label1 上显示的内容是为:十进制数-27的二进制反码为 ____________。
解析 本题解题的关键在于理解求反码流程,难点在r =(t+1) mod 作用是实现逐位取反。8 - c 表示前面0的个数。
答案 (1)2 (2)①t = -n 或 t = Abs(n)
②s = Str(r) + s (3)11100100
9.卡普利加数又称雷劈数,指该数的平方拆分成两部分,该数与这两部分的和相等。编写VB程序,实现功能:在文本框Text1.Text输入一个数,单击“判断”按钮Command1,在标签Label2中显示该数的平方,在标签Label3中显示结论。程序运行的界面如下图所示:
(1)“Private Sub Command1_Click()”中Click是____________(单选,填字母:A.属性名 / B.事件名 / C.过程名)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim x As Integer, i As Integer
Dim y As Long, flag As Boolean
x = Val(Text1.Text)
i = 10
y = x * x
Label2.Caption = ”该数的平方是:” + Str(y)
flag=false
Do While y i > 0
t1 = y i
t2 = y Mod i
If t1 + t2 = x Then
   ____①____
Label3.Caption = Str(t1) + ”+” + Str(t2) + ”=” + Str(x)
End If
___②____
Loop
If Not flag Then Label3.Caption = ”该数不是卡普利加数”
End Sub
(3)如果在Text1中输入“9”,Label3中将输出___________________________。
解析 该题虽然不属于数制转换,但运用了类似的算法思想。flag是用来判断条件是否成立的变量,t1+t2=x表示满足卡普利加数的条件,故此处为flag=true;循环条件是y[JY)]>0,循环中y的值不会发生改变,那么改变的必然是i,y[JY)]的作用是将y从右向左逐步分解,则i的变化为不断乘以10;根据题意,y=92=81,进循环后,t1=100[ST0=8,t2=81 mod 10=1,满足t1+t2=y,则输出8+1=9。
答案 (1)事件 (2)①flag=true ②i=i*10 (3)8+1=9
10.某ASCII字符加密方法算法如下 :
(1)计算出该ASCII字符的8位二进制数值
(2)将该数值分割为前4位与后4位两个二进制数
(3)分别将上述两个4位二进制数转换为十进制数
(4)将每个十进制数转换为1个加密字符,对应的“密码表”如下:
值(十进制)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
加密字符
I
1
i
k
e
C
H
N
p
o
s
t
c
a
r
d
根据以上加密算法来推断解密算法,下表显示了字符串中两个字符的解密过程:
小明设计了一个解密程序,功能如下:在文本框Text1中输入密文,单击“解密”按钮Command1,在文本框Text2中输出解密结果。程序运行时界面如下图所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim z As String, a As String, b As String
Dim i As Integer, y As Integer
z = Text1.Text
Text2.Text = ” ”
For i = 1 To ____①____
a = Mid(z, i, 1)   
b = Mid(z, i + 1, 1)
   ____②____
Text2.Text = Text2.Text + Chr(y)
Next i  
End Sub
Function zn(x As String) As Integer  ′得出加密字符对应密码表中的十进制数
Dim m As String, i As Integer
m = ”I1ikeCHNpostcard”
For i = 0 To 15
If ____③____Then
  zn = i
Exit For
End If
Next i
End Function
(2)若已知字符“a”的ASCII码值为97(十进制),加密字符HN对应的英文字母是__________。
解析 变量z是输入的密文,每次从中取出两个字符,②所填内容肯定和y有关,y是一个十进制数的ASCII值,该值应该去调用自定义函数,找出两个字母的位置,同时第1个位置是高4位,是原来的16倍。在自定义函数中,要找变量x在密码表中位置,当他们相等时,就表示找到了。输入HN后,H在密码表位置是6,N在密码表位置是7,由这两个数转连接成的十进制数是103,103-97=6,是字符a后面第6个。
答案 (1)① len(z) Step 2 ② zn(a) * 16 + zn(b) ③Mid(m, i + 1, 1) = x (2)g

课件58张PPT。专题五 数制转换1.(2019·1月浙江学考)小红编写了一个将5位以内的十六进制正整数转化成十进制数的VB程序,功能如下:在文本框Text1中输入一个十六进制正整数,单击“转换”按钮Command1,在标签Label3中显示结果。程序运行界面如图所示。(1)要使窗体Form1标题显示“数制转换”,则需该窗体的______(单选,填字母:A.Font/ B.Caption/ C.BackColor)属性。
(2)要实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
 Dim x As String, ch As String
 Dim flag As Boolean, i As Integer, result As Long
 x =____①____ i = 1
 result = 0
 flag = True
 ch = Mid(x, 1, 1)
 Do While i <= Len(x) And flag = True
If ch >="0" And ch <= "9" Then
   result = result * 16 + Val(ch)
ElseIf ch >= "A" And ch <= "F" Then
result = result * 16 + (Asc(ch) - Asc("A") + 10)   ElseIf ch >="a" And ch <= "f " Then
   result = result * 16 + (Asc(ch) - Asc("a") + 10)
Else
   flag = False
End If
i = i + 1
ch = ___②____
Loop
If flag = True ThenLabel3.Caption = Str(result)
Else
Label3.Caption = " 输入错误"
 End If
End Sub(3)若在文本框Text1中输入5+9,单击“转换”按钮后,标签Label3中显示的内容是________ (单选,填字母:A.14 / B.E / C.输入错误)。解析 从语句ch = Mid(x, 1, 1)来看,x是文本框Text1输入字符。Ch为每次取出字符,如果不是0-9或A-F或a-f的字符,则flag = False。
答案 (1)B (2)①Text1.Text ②Mid(x, i, 1) (3)C2.(2018·4月浙江学考)某种编码以4位二进制码为一组,每组前两位表示方向,后两位表示距离。编写一个程序,将编码翻译成方向和距离,距离值为每组编码后两位二进制码转换为十进制数的值。具体功能如下:在文本框Text1中输入连续多组编码,单击“翻译”按钮Command1,结果显示在列表框List1中。
程序运行界面如下图所示。(1)要使程序运行时,文本框Text1的Width属性值为2018,可在Form_Load事件过程中添加语句________(单选,填字母:A.Width=2018 / B.Text1.Width =2018 / C.Width.Text1=2018)。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, c As String, d As String
Dim n As Integer, b1 As Integer, b2 As Integer, v As Integer, i As Integers = Text1.Text: n = Len(s): i = 1
Do While i <= n
c = Mid(s, i, 2)
If c = " 00 " Then
d = "东"
ElseIf c = " 01 " Then
d = "南 "
ElseIf c = " 10 " Then
d = " 西 "Else
d = "北 "
End If
b1 = Val(Mid(s, i + 2, 1))
b2 = Val(Mid(s, i + 3, 1))
v=____①____List1.AddItem d + " " + Str(v)
___②____
Loop
End Sub
(3)若文本框Text1中输入的内容为“1111”,单击“翻译”按钮,列表框List1中显示的内容是________。
解析 变量i表示在字符串每个字符的位置,d表示方向,v表示距离,距离值为每组编码后两位二进制码转换为十进制数的值。Loop语句前往往要改变循环变量的值。
答案 (1)B (2)①b1*2+b2 ②i = i + 4 (3)北33.(2017·4月浙江选考)奇偶校验是一种校验数据传输正确性的方法。其中奇校验方法:统计二进制数据的数位中“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= n2
t=____①____
s=Str(a)+sLoop
V=t Mod 2
Text2.Text=s
Label3.Caption= " 校验位值" +____②____
End Sub
(3)运行该程序,在文本框Text1中输入22,单击“计算”按钮,则显示的校验位值是________。
解析 (1)本小题考查对象的属性设置,文本框中的显示内容为文本框的“Text”属性。(2)该算法通过“除二取余”将十进制的待校验数n转换为二进制数s,变量t将二进制数各数位上的“0”或“1”累加起来(统计二进制数据中“1”的个数),即“t=t+a”。v=t mod 2用于判断t的奇偶性,当v=1时,t为奇数,当v=0时,t为偶数,校验位值可以从t的奇偶性来判断,校验位值为(1-v)或(v-1),通过Label3的Caption属性值输出,需转化为文本型,②处应为str(1-v)或str(Abs(v-1))。(3)十进制数22转化为二进制数为“10110”,各数位上的“0”或“1”相加得3,为奇数,校验位值为0。
答案 (1)Text (2)①t+a ②str(1-v) (3)04.某数据加密方法描述如下:
1)以字节为单位进行加密处理;
2)将1个字节的8位二进制数分割成前4位与后4位两个二进制数;
3)分别将上述两个4位二进制数转换为十进制数;
4)将每个十进制数转换为1个加密字符,对应的“密码表”如下:小明按照上述方法,设计了一个字符串(仅包含ASCII字符)加密的VB程序,功能如下:单击“加密”按钮Command1,程序依次将文本框Text1中每个字符的ASCII码值作为1个字节转换为两个加密字符,连接这些加密字符,最后在文本框Text2中输出加密结果。下表显示了字符串中一个字符的加密过程:程序运行效果如图所示:实现上述功能的VB程序如下:
(1)请在划线处填入合适代码。
Private Sub Command1_Click()
Dim n As Integer,s As String,i As Integer,ss As StringDim a As Integer ′存储加密前字符的ASCII码
Dim b1 As Integer,b2 As Integer ′分别存储分割、转换后的两个十进制数
s=Text1.Text
____①____
For i=1 To n
 a=Asc(Mid(s,i,1))
 b1=a16
 b2=a Mod 16
 ss=ss+Code2Char(b1)+Code2Char(b2)Next i
Text2.Text=ss
End Sub
′十进制值转换为加密字符的函数
Function Code2Char(c As Integer)As String
 Dim s As String
 s= " IlikeCHNpostcard "
 Code2Char=____②____
End Function(2)若将“密码表”中值为“0”对应的加密字符“I”改为“i”,加密后的密文可能无法解密,原因是_____________________________________________________。
解析 变量i表示字符在字符串中的位置,n表示字符串长度。在自定义函数中,函数名Code2Char将作为返回值,参数c表示某个数字,其值范围在[0,15]之间,当c=0时,对应密码表第1个字符,因此他在密码本中位置为c+1。加密字符“I”改为“i”,密码本中有两个i,解密成0或2两个数。
答案 (1)①n=Len(s)或n=Len(Text1.Text)
②Mid(s,c+1,1)
(2)加密字符i对应两个值0,2在计算机中,存储信息的基本单位是字节,且所有的信息都是二进制数表示,但二进制比较冗长,把一个字节的8个位分成高4位和低4位两部分,每部分转换成1位十六进制数,即一个字节在计算机中用8个位存储,但在查看内码或其他操作时,可以用2个十六进制数表示。因此经常进行二进制、十进制和十六进制之间的转换。考点1 十进制数向其他进制数转换
1.十进制数向二进制或十六进制转换时,用该数除以2或16,把商作为被除数,重复计算,值到得到的商为0为止,把每次的余数反向连接起来,组成新的进制数。
2.十六进制数的基数为0-9及A-F,因此将每次除的余数0-15分别对应以上字符,可以有两种方法,一是在1个“0123456789ABCDEF”字符串中用Mid函数取出相对应的字符,二是利用字符内码,转换成相应的字符,在转换之前要进行判断。
3.数值小于255的正整数n,转换成十六进制,可以将n16和n Mod 16在上述的字符串中,取出两个数对应的字符即可。【例1】 用VB 编写正整数十进制转换为十六进制的程序,运行界面如图所示。程序功能如下:在文本框Text1 中输入待转换的十进制值,单击“十进制转换十六进制”按钮Command1,在文本框Text2 中输出转换结果。请在程序的划线处填写合适的代码。
【方法一】Private Sub Command1_Click()
Dim a As String, s As String
Dim r As Integer, x As Integer
x = Val(Text1.Text)
s = " "
s1 = “0123456789ABCDEF”
Do While ____①____ 
r = x Mod 16
s2 = Mid(s1, r + 1, 1)
____②____x = x 16
Loop
Text2.Text = s
End Sub
【方法二】Private Sub Command1_Click()
Dim a As String,s As String
Dim r As Integer,x As Integer
x = Val(Text1.Text)
s = " "Do While x > 0
____①____
If r > 9 Then
  ____②____
Elses2 = Trim(Str(r)) ′Trim函数的功能是去除字符两端的空格
End If
s = s2 + s
x = x '16
LoopEnd Sub解析 本题考核的知识点十进数向其他进制数的转换。关键是如何将数字转换成相对应的字符。方法一中采用在某个字符串取出相应位置的字符,方法二中采用内码的方法。
答案 【方法一】① x > 0 或x<>0 ②s = s2 + s【方法二】① r = x Mod 16 ②s2 = Chr(r + 55)【变式训练1】 小林为了将十进制数转化为k进制数(k介于2~16之间),设计如下界面程序:在文本框Text1中输入一个十进制数,在文本框Text2中输入整数k(范围在2到16之间),单击“运行”按钮Command1,程序将十进制转化为k进制的,并在标签Label1中输出结果。请回答下列问题:(1)程序代码如下,请在划线处补充完整。
Private Sub Command1_Click()
d = Val(Text1.Text)
k = Val(Text2.Text)
s = " "
Do While d > 0
r = d Mod k
If r >= 10 Then
   s2 = Mid("ABCDEF " , ____①____, 1)
Elses2 = Trim(Str(r))
End If
s = s2 + s
____②____
Loop
Label1.Caption = "结果为" + s
End Sub
(2)运行该程序,在文本框Text1中输入“38”,文本框Text2中输入“2”,单击“运行”按钮,则Label1 显示的内容为是__________。解析 本题的关键是当余数如果超出9,即把10-15如何转换成A-F之间字符。
答案 (1)①r-9 ②d = d k (2)100110考点2 其他进制数向十进制数转换
1.如果是一位十六进制数字转十进制,分0-9和A-F两种情况,0-9的可以用Val函数进行转换,A-F字符可以用其内码减去55进行转换。
2.按权展开相加法。从低位开始,把每一位上的数乘以该位数的权,把每次的乘积相加。如(1011)2=1×20+1×21+0×22+1×23,38H=8×160+3×161=8+48=56D。
相应的代码是
For i = Len(s) To 1 Step -1
t = Val(Mid(s, i, 1) * 2 ^ (Len(s) - i))
n = n + t
Next i3.计算左边第1位值t,从第2位开始,把该数表示成前面的数左移一位(在后面添加1个0)。如将二进制数1101B和十六进制数A1B2H转换成十进制数的过程,其中i表示每次读取的位置,ch表示每次读出的数字。二进制数和十六进制数后面添加1个0,其值分别为原来的2和16倍。
相应的代码是
For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch >= "0 " And ch <= " 9 " Then
t = Val(ch)
Else
t = Asc(ch) - 55
End If
n = n * 16 + t
Next i【例2】 RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各种各样的颜色。RGB颜色分量的值通常采用十进制数表示,而Flash软件中颜色值采用十六进制数表示。比如RGB(100,255,10)等价于十六进制颜色码#64FF0A,每个RGB颜色分量对应两位十六进制数。小杜编写一个十六进制颜色码转RGB颜色值的转换程序,程序功能如下:程序运行时在文本框Text1输入一个十六进制颜色码,输入格式为:“#”后面跟6位十六进数(其中字母均为大写)。单击“转换” 按钮Command1,在标签Label1上输出对应的RGB颜色值。程序运行界面如下图所示。实现上述功能的VB程序如下,请回答下列问题:
(1)程序运行时,在文本框Text1输入“#C50913”,则标签Label1上显示的内容是________。
(2)请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim s As String, ch As String, ans As String
Dim i As Integer, j As Integer
Dim a(1 To 3) As Integer ′分别用于存储RGB对应的3个十进制分量s = Text1.Text
s = Mid(s, 2, 6)
For i = 1 To 3
 a(i) = 0
Next i
For i = 1 To 6
j = (i + 1) 2
ch = Mid(s, i, 1)
a(j) =____①____Next i
For i = 1 To 3
ans = ans + Str(a(i))
If i <> 3 Then ans = ans + " , "
Next i
ans = " RGB(" + ans + ") "
Label2.Caption = ans
End SubFunction HtoD(x As String) As Integer ′将一位十六进制数转十进制数
If x >= "0 " And x <= " 9 " Then
HtoD = Val(x)
Else
____②____
End If
End Function解析 根据语句j = (i + 1) 2,j的值分别为1、1、2、2、3、3,即每两个十六进制数转换为一个十进制数,把这两个十六进制数看成前面的十六进制数添加1个0,即扩大16倍再加上第2位十六进制数。
答案 (1)RGB(197,9,19) (2)①a(j) * 16 + HtoD(ch) ②HtoD = Asc(x) - 55【变式训练2】 在文本框Text1中输入一个二进制数,单击“转换”按钮Command1,在文本框Text2中显示该二进制数对应的十进制数,若二进制数中存在不是0和1的数,则输出“非法的二进制数!”,程序运行时界面如下:程序代码如下,请在空白处补充完整。
Private Sub Command1_Click()
Dim s As String, t As Integer, i As Integer
Dim ch As String, flag As Boolean, j As Integer
s = Text1.Text
flag = True
j = 0
For i = Len(s) To 1 Step -1
ch = Mid(s, i, 1)
If ch = " 1 " Or ch = " 0 " Then   ____①____
    j = j + 1
Else
    ____②____
    Exit For
End If
Next i
If flag = True Then
Text2.Text = Str(t)
ElseText2.Text = "非法的二进制数! "
End If
End Sub解析 理解变量的含义。S输入的二进制数,t是转换后的十进制数,ch是从低位向高位分解的字符,j从0、1、2、3……的变化规律,flag是否是二进制数的标志。
答案 ①t = t + Val(ch) * 2 ^ j ② flag = False考点3 二进制数与十六进制数互相转换
1.由于16是2的4次方幂,因此每4位二进制数转换为1位十六进制数,每1位十六进制数转换为4位二进制数,不足4位在前面补0.
2.二进制数向十六进制数转换时,从低位开始,每4位二进制数转换成十进制数,再在”0123456789ABCDEF”字符串中用Mid函数取出相对应的字符。【例3】 小李编写了一个二进制数转十六进制数的VB程序,功能如下:在文本框Text1中输入一个二进制数,单击“转换”按钮Command1,在文本框Text2输出相对应的十六进制数,运行界面如图所示。实现上述功能的VB程序如下,但加框处代码有错,请改正。Private Sub Command1_Click()
Dim i As Integer, t As Integer , s1 As String, s2 As String, s3 As String
s2 = "0123456789ABCDEF"
s = Text1.Text
i = Len(s)i = i - 4
Loop
Text2.Text = s3
End Sub
解析 i表示字符串s中位置,从最后找到第一个位置为止。当i大于等于4时,表示可以取出4位二进制数,因此取出的字符个数为4,否则取出剩余的字符。在循环For j = 1 To Len(s1)中,是计算每组二进制对应的十进制数,再在s2中找到对应的字符,并进行反向连接。
答案 (1)i>=1 (2)Mid(s, i, 4) (3)Mid(s2, t+1 , 1) + s3【变式训练3】 在文本框 Text1 中输入一组 12 位以内的二进制数,将该二进制数转化为十六进制数后在 Label1 中输出。程序运行后如图所示。(1)程序运行时,将宽度调整为5000,则需在 Form_Load()过程中加入语句________(选填,填字母:A.Text1.Caption=5000 /B.Height=5000 /C.Text1.Width=5000 /D.Text1.Left 5000)。(2)实现上述功能的 VB 程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim a(1 To 12) As Integer  ′a 数组用以存储二进制数
Dim b(1 To 3)  As Integer ′b 数组用以存储十六进制数
Dim m, s  As String
Dim i, j, k As Integer
m = Text1.TextFor i = 12 To 12 - Len(m) + 1 Step -1 ′将每位二进制数保存到数组 a 中
___①____
Next i
For i = 1 To 3 ′将每 4 位二进制数转化为十进制数后保存到数组 b 中
For j = 4 To 1 Step -1
b(i) = b(i) + a(____②______ ) * 2 ^ (j - 1)
Next j
Next i
For i = 1 To 3If b(i) < 10 Then
m = Chr(b(i) + 48)
Else
m = Chr(b(i) + 55)
End If
s = s + m
Next i
Label1.Caption = "转换后的十六进制数为: "+ s
End Sub(3)若程序运行后,若在文本框中输入二进制数 1101101101,则变量s的值为____________。
解析 先把二进制数m每一位数字存储在数组a中,再从低位开始,每4位转换为一位十六进制数。
答案 (1)C (2)①a(i) =Val(Mid(m, i, 1)) ②i * 4 - j + 1 (3)“36D”
同课章节目录