题库 高中信息

题干

数据的有损压缩:对多媒体数据进行有损压缩时,以少量数据丢失作为代价的,比如对某8 bit量化缩为6 bit量化,其算法可简单表示为:逐一删除各个字节的后2 bit,将删除后的6 bit数据首尾相连,然后重新按照8 bit一组构建字节,以十六进制显示。
例如,压缩前的原始数据为:
11111100  010111010  10110000可表示为十六进制:FC  5A  B0
删除每字节的后2 bit:
111111  00  010110  10  101100  00
首尾相连构建新的数据:
11  11110101  10101100表示为十六进制:…F5  AC
自此,原数据进行了有损压缩。程序运行界面如下所示,

实现上述算法的VB程序如下,但程序中加框处有误,请改正。
Dim a(1 To 100) As Integer
Const code="0123456789ABCDEF"
Const n=100
Private Sub Form_Load()'以随机数模拟读取原始数据
s=""
Randomize
For i=1 To n

a(i)=Int (Rnd()*16)

Text1.Text=Text1.Text+  '①

Next i
End sub
Private Sub Command1_Click()
For i=1 To n

t=t+HtoB(a(i))

Next i
For j=l To n* 4 Step 8 '每8位一组每8位一组,取前6个字符

s=s+Mid(t,j, 6)

Next j
For i=1 To 4 *(n-1) Step 4 '每4位一组转为十六进制显示
Text2.Text= Text2.Text +BtoH (Mid(s,1,4))
Next i
End sub
Function HtoB (x As Integer) As String  '十六进十六进制转为二进制函数
t=""
m=0
Do While  '②

r=x Mod 2

m=m+1

t= Trim(r)+t     'trim()用于删除前导空格

x=x\2

Loop
HtoB=Mid("0000",1,4-m)+t
End Function
Function BtoH (y As String) As String '二进制转为十六进制函数
t1=Val(Mid(y,4,1))
t2=Val(Mid(y,3,1))
t3=Val(Mid(y,2,1))
t4=Val(Mid(y,1,1))
s=t1+t2*+t3*4+t4*8
BtoH= Mid(code,s+1,1)
End Function
(1)①处加框代码应改为________________________________________。
(2)②处加框代码应改为________________________________________。
上一题 下一题 0.99难度 None 更新时间:2020-03-30 10:09:23

答案(点此获取答案解析)

同类题1

   (加试题)某同学设计了一个VB程序用于分析“纸牌游戏”中发到手的牌的信息,各牌面值在程序中的输入值和输出值如图所示。程序运行界面如图所示,在文本框Text1中输入数字代表玩家手中的牌的信息,点击“分析”按钮后,在列表框list1按牌面值顺序输出各中牌的相关信息。


请回答下列问题:
(1)在打牌中5张以上的连续牌称为顺子,若输入的牌是“8991012141511610113”,则这些牌中的顺子是(使用上图中“输出值”表示各种牌):____________________
(2)请在划线处填上合适的代码。
Private Sub Command1_Click()
Dim zpAs String, pai As String, t As String
Dim a(1 To 50) As Integer, b(3 To 15) As Integer
‘a数组存储按序输入的各个牌,b数组存储每个牌型(3~10,JQKA2)的数量
Dim i As Integer, c As Integer, k As Integer, flag As Boolean
Const s = "34567890JQKA2"   '输出牌型,牌10用0代替
zp= Text1.Text  
i = 1: c = 1: flag = True
Do While i <= Len(zp) And flag = True
pai = Mid(zp, i, 1)
If pai >= "3" And pai <= "9" Then
a(c) = Val(pai): i = i + 1
ElseIf pai = "1" Then   ‘要用2位数字代表某个牌
k =_________________
If k >= 10 And k <= 15 Then
a(c) = k
i = i + 2
Else
flag = False
End If
Else
flag = False
End If
c=c+1
Loop
If flag = False Then
List1.AddItem "输入数据有误"
Else
For i = 1 To c -1  '洗牌,统计每个牌型的张数
(____________________________________________________________)
Next i
List1.AddItem "共有" + Str(c -1) + "张牌"
For i = 1 To _________________
t = ""
For k = 1 Tob(i+2)输出每个牌型及其数量
t = t + Mid(s, i, 1)
Next k
If Len(t) > 0 Then List1.AddItem t
Next i
End If
End Sub