资源简介 4.3语 句 ——进制转换的程序实现 Warming up 程序的功能? 程序功能 字符串逆序(反转)输出 最先输入的字符最后输出,最后输入的字符最先输出。 Private Sub Command1_Click() Dim s as string,c as string, res as string s=text1.text res=“” for?i=1?to?len(s) ????c=mid(s,i,1) ????_①_________________ Next i Text2.text=res End Sub 程序功能 字符串逆序(反转)输出 最先输入的字符最后输出,最后输入的字符最先输出。 Private Sub Command1_Click() Dim s as string,c as string, res as string s=text1.text res=“” for?i=1?to?len(s) ????c=mid(s,i,1) ????_res=c+res____________ Next i Text2.text=res End Sub 算法思想 字符串逆序(反转)输出的算法: For?i=1? to? len(s) ????c=mid(s,i,1) ????res=c+res Next i 思考:若res=res+c能实现字符串逆序,程序要怎样修改? 程序1:十进制正整数转换成二进制数 用什么算法实现? 算法描述:对十进制数x用2辗转相除获取余数r,直至商为0为止,最后将余数r从下往上输出。 主要采用哪种算法结构?(顺序,分支,循环) 需要哪些表达式? 程序1:十进制正整数转二进制 Private Sub Command1_Click() Dim x As Integer, r As Integer, res As String x = Val(Text1.Text) res = "" Text2.Text = res End Sub 虚位以待 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}样例输入 13 样例输出 1 1 0 1 算法思想 十进制数x转换成二进制的算法: res=“” do while x<>0 r=x mod 2 ‘① x=x\2 ‘② res=str(r)+res ‘③ loop 思考: 1.语句1能否与语句2调换位置? 2.若十进制数转换成十六进制,怎样修改程序? 十进制转换成十六进制 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}十进制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F do while x<>0 r=x mod 16 ① x=x\16 ② res=str(r)+res ③ loop else If r<10 then res=数字字符+res res=字母字符+res endif 十进制转换成十六进制算法1 Do While x <> 0 r = x Mod 16 x = x \ 16 If r < 10 Then res = + res Else res = + res End If Loop {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}十进制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 十进制转换成十六进制算法1 Do While x <> 0 r = x Mod 16 x = x \ 16 If r < 10 Then res = + res Else res = + res End If Loop Str(r) chr(r+55) chr(asc(“A”)+r-10) {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}十进制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 十进制转换成十六进制算法2 s=“0123456789ABCDEF” res=“” Do While x <> 0 r = x Mod 16 res= +res x = x \ 16 Loop 十进制转换成十六进制算法2 s=“0123456789ABCDEF” res=“” Do While x <> 0 r = x Mod 16 res= +res x = x \ 16 Loop mid(s,r+1,1) 程序2:十进制负数转换成二进制数 转换成补码的算法: 1.将对应的正数转换为8位二进制数,最高位作为符号位为1,其余不足7位时高位补0 2. 除符号位外,按位取反(1变成0,0变成1) 3. 末位加1 负数在计算机中以补码的方式存储 程序2:十进制负数转换成二进制 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 Mod 2 x = x \ 2 Next i For i = 1 To 7 ‘按位取反 ① Next i a(1) = a(1) + 1 i = 1 Do While a(i)=2 a(i) = 0 ② i = i + 1 Loop a(8)= 1 ‘符号位为1 For i = 8 To 1 Step -1 b = b + Trim(Str(a(i))) 'trim()函数去除字符前后空格 Next i Text2.Text = b End Sub {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}样例输入 -1 -12 样例输出 11111111 11110100 程序2:十进制负数转换成二进制 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 Mod 2 x = x \ 2 Next i For i = 1 To 7 ‘按位取反 Next i a(1) = a(1) + 1 i = 1 Do While a(i) = 0 i = i + 1 Loop a(8) = 1 ‘符号位为1 For i = 8 To 1 Step -1 b = b + Trim(Str(a(i))) 'trim()函数去除字符前后空格 Next i Text2.Text = b End Sub a(i)=1-a(i) a(i)= 2 a(i+1)=a(i+1)+1 这个程序的编程思维你能接受吗? ②a(i)=abs(a(i)-1) ③a(i)= (a(i)+1)mod 2 程序2:十进制负数转换成二进制 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 Mod 2 x = x \ 2 Next i For i = 1 To 7 ‘按位取反 Next i a(1) = a(1) + 1 ‘末尾加1 i = 1 Do While ‘逢二进一 a(i) = 0 ‘低位变为0 ‘向高位进1 i = i + 1 Loop a(8) = 1 ‘符号位为1 For i = 8 To 1 Step -1 b = b + Trim(Str(a(i))) 'trim()函数去除字符前后空格 Next i Text2.Text = b End Sub a(i)=1-a(i) a(i)= 2 a(i+1)=a(i+1)+1 思考:你还有其他算法思路吗? 程序2:十进制负数转换成二进制2 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 Mod 2 x = x \ 2 Next i For i = 1 To 7 ‘按位取反 Next i a(1) = a(1) + 1 ‘末尾加1 i = 1 Do While ‘逢二进一 a(i) = 0 ‘低位变为0 ‘向高位进1 i = i + 1 Loop a(8) = 1 ‘符号位为1 For i = 8 To 1 Step -1 b = b + Trim(Str(a(i))) 'trim()函数去除字符前后空格 Next i Text2.Text = b End Sub a(i)=1-a(i) a(i)=2 a(i+1)=a(i+1)+1 改写: i=1 Do While a(i)=1 a(i) = 0 i = i + 1 Loop a(i)=1 题型的变化 [2017.4]奇偶校验是一种校验数据传输正确性的方法。其中奇校验方法:统计二进制数据的数位中“1”的个数,若个数为奇数,则校验位值为0,否则校验位值为1。小李编写了一个计算奇校验位值得VB程序,功能如下:在文本框Text1中输入1~255十进制待校验数,单击“计算”按钮Command1后,在文本框Text2中显示该数对应的二进制值,并在标签Label3中显示该数的校验位值。程序运行界面如图所示。 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 复习建议 多思考,多总结,积累题型,抽象模型 熟练应用基本算法和基本工具,多尝试改写算法 展开更多...... 收起↑ 资源预览