第2节 进制问题
模拟演练
1.十进制数转换为二进制数。小明用VB编写了一个程序,把输入的十进制数转换为二进制数,并判断二进制数中的“0”和“1”的个数是否相等。程序运行界面如图所示,在文本框Text1中输入要转换的十进制数。单击“确定”按钮Command1后,在文本框Text2中输出其对应的二进制数,在标签Label3中显示“相等”或“不相等”。
/
(1)程序运行界面中使用的象个数为 ,要使按钮Command1上的文字显示为“确定”,应修改的属性名为 。?
(2)为实现上述功能,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim st As String, x As Integer, xl As Integer
Dim i As Integer, j As Integer, v As Integer, c0 As Integer, cl As Integer
c0 = 0 : cl = 0 : st = “”
x = ① ?
Do While x<>0
y= ② ?
If y=0 Then c0=c0+1 Else c1=c1+1
st=y&st
x=x2
Loop
Text2.Text=st
If ③ Then?
Label3.Caption=“相等”
Else
Label3.Caption=“不相等”
End If
End Sub
答案 (1)7 Caption (2) ①Val(Text1.Text ) ②x Mod 2 ③c0 = c1
2.在计算机系统中,数值一律用补码来表示和存储。求负整数的补码是将该数对应的正数转换为二进制数(不足8位时高位补0),最高位作为符号位为1,其余每位二进制数取反(1变成0,0变成1),末位加1。小明编写了一个VB程序,功能如下:在文本框Text1中输入一个负整数,单击“转换”按钮Command1后,在文本框Text2中显示该数对应的补码。程序运行界面如图所示。
/
(1)在设计程序界面时,要使按钮Command1显示为“转换”,应修改该按钮的 属性。?
(2)实现上述功能的VB程序如下,请在划线处填入合适代码。
Private Sub Command1_Click()
Dim a(1 To 8) As Integer, x As Integer, b As String
x = Abs(Val(Text1.Text))
For i = 1 To 7 ’求反码
a(i) = ① ?
x = x 2
Next i
b = “1”: i = 1
a(1) = a(1) + 1
Do While ② And i < 7?
a(i) = 0
③ ?
i=i+1
Loop
For i = 7 To 1 Step -1
b = b + Trim(Str(a(i)))’Trim()函数去除字符前后空格
Next i
Text2.Text = b
End Sub
(3)运行该程序,在文本框Text1中输入-10,单击“转换”按钮,则显示的补码是 。?
答案 (1)Caption (2)①(x+1) Mod 2 ②a(i)=2 ③a(i + 1) = a(i+1) + 1 (3)11110110
解析 本题解题的关键在于理解求负整数的补码流程。(1)略。(2)①此步骤是求反码,(x+1)Mod 2可求反码。②处理进位,a(i)=2时需要进位。③当a(i)=2时,给a(i+1)进位,因此此处填a(i+1)=a(i+1)+1。(3)略。
3.在n个连续的方格内填字母A或B,但相邻两格都不能填B,求所有可能方案。可以用枚举算法解决,此题可以采用进制转换来解决。考虑到只包含了 A与B两个字母,我们可以用二进制的0和1来代替。
程序部分代码如下:
Private Sub Command1_Click()
Dim n, m, s, i, j, count As Long
Dim flag As Boolean
Dim a(1 To 100) As Integer
n = Val(Text1.Text)
count = 0
① ?
For i = 0 to s-1
m = i
For j = 1 To n
a(j) = m Mod 2
m = m 2
Next j
flag = True
For j = 1 To n - 1
If ② Then flag = false: exit For?
Next j
If flag = True Then ③ ?
Next i
Label1.Caption =“可行方案共”+ Str(count) + “种”
End Sub
(1)将代码补充完整;
(2)若Text1中输入5,则可行方案共 种。?
答案 (1)①s=2^n ②a(j)=1 And a(j+1)=1 ③count=count+1 (2)13
解析 (1)①下面一句代码For i=0 to s-1中出现了变量s,所以此处需要给变量s赋值,考虑到从0到s-1,也就是s种可能,而n位2进制最多能表示的范围是0~2^n-1,所以s=2^n。
②当出现相邻两个1时这个方案不可行,flag设置为False,所以答案是a(j)=1 And a(j+1)=1。
③后面代码中出现变量count,此空需要给变量count赋值,count=count+1。
(2)可以尝试把五位二进制全部写出来,设A=0,B=1,当出现连续两个1时不统计,最后结果为13个。
4.小明编写了一个输出十进制数与二进制数对应表的VB程序。程序运行时,单击“输出”按钮Command1后,在列表框List1中输出运行结果,如下图所示。实现上述功能的VB代码如下,但①②加框处代码有错,请改正。
/
Dim b(4) As Integer ’数组b按位存储二进制数
Private Sub pprint(m As Integer)
’本过程打印输出十进制数m和对应的二进制数
’代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer,j As Integer
List1.Clear
List1.AddItem “十进制数 二进制数”
For i = 0 To 4
b(i)=0
Next i
For i = 0 To 15
Call pprint(i)’打印输出一行
j= 1 ’①
b(j)=b(j)+1
Do Whileb(j)=0 ’②
b(j)=0
j=j-1
b(j)=b(j)+1
Loop
Next i
End Sub
(1)第①处修改为 ;?
(2)第②处修改为 。?
答案 (1)4 (2)b(j)=2 或 b(j)>1
解析 本题考查VB程序的综合运用。对0~15这16个十进制数,该程序利用数组b的递推,根据二进制“逢二进一”的运算法则,产生相对应的二进制。如十进制3,对应的b数组为0011,那么十进制数4的二进制产生过程如下:程序给b(4)元素加1,变成0012,然后从b(4)开始,如果当前位等于2,则取0,前面一位加1(逢二进一),一直到无需进位为止,此时b数组为0100。(1)b(4)存放的是二进制的低位,所以每次都是从b(4)往前推。(2)如果需要进位,只有b(j)=2时,才需要依次进位。
课件6张PPT。
第2节 进制问题1.n进制思想:
(1)运算规则:进位规则是逢n进一,借位规则是借一当n。
(2)基本数码:[0,n-1]教材研读 同理,八进制的基本数码为[0,7]。五进制的基本数码为[0,4]。
(3)一个n进制数后面加一个0变成原数的n倍;加两个0变成原数的n*n倍……;去一个零变成原数的1/n,去两个零变成原数的1/n^2……。 2.十进制转二进制、十六进制:除2或除16取余法 3.二进制转十进制、十六进制转十进制:按权相加法十进制与其他进制间的转换都可以采用类似的方法。4.求十进制数N的二进制反码:
s=“”
Do While n>0
r=(n+1) Mod 2 ’取余时,n加1再取余可得到反码
s=Str(r)+s
n=n2
loop 5.求字符c的ASCII码的后m位的十进制值:
表示式为Asc(c) Mod 2^m, 如c=“A”, m=4, 即求后4位。则Asc(c)=65, 65 Mod 16=1,转成二进制为0001。“A”的ASCII码为01000001,因此该式求出了后4位二进制的十进制值。常用于字符的加密解密问题。 6.字符c的ASCII码,删去后n位:
表达式为Asc(c) 2^n,如c=“A”,n=4,即删去后4位,则6516=4,转成二进制为0100。“A”的ASCII码为01000001,因此该式相当于求出了前4位(删去后4位)二进制的十进制值。常用于字符的加密解密问题。