题库 高中信息

题干

查找并删除重复数据的算法是基于顺序查找的优化,主要思路是把待查数据的起点元素设置成查找关键字,然后从后往前查找,通过结束时停留的数据位置来判断查找结果(即结束时若停留在数据序列的起点,表示数据序列中无重复数据;否则,存在重复数据,删除该数据后继续查找)。
编写VB程序,实现上述算法。程序功能如下:运行程序时,在列表框List1中显示数组a中的原始数据;单击“去重”按钮(Command1),查找数组a中的重复数据并删除,即相同的数据仅保留一个,并在列表框List2中输出去重后的数组a中的数据,同时在标签Label1中显示删除的数据总个数,运行效果如图所示。

实现上述功能的VB代码如下,但加框处代码有错,请改正。
Const maxn = 10
Dim a(1 To maxn) As Integer
Private Sub Form_Load()
' maxn个数据存储在数组a中,并在列表框List1中显示
' 代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, n As Integer 'n用于存储当前查找的数组长度
Dim j As Integer, key As Integer   'key用于存储本次查找关键字的数据位置
key = 1: n = maxn
Do While key <= n

i = n

Do While  a(i) <> a(1)   '(1)

i = i - 1
Loop
If i = key Then   '找到重复数据,删除;未找到,设定下一查找关键字
key = key + 1
Else
For j = i To n - 1
a(j) = a(j + 1)
Next j
n = n - 1
End If
Loop
For i = 1 To n
List2.AddItem a(i)
Next i
Label1.Caption = "共删除重复数据:" &  Str(n)  & " 个" '(2)
End Sub
上一题 下一题 0.99难度 填空题 更新时间:2019-05-07 11:22:06

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

同类题2

纪念品分组问题。某教师节晚会的纪念品分组规则如下:按纪念品价值进行分组,每组总价值不超过限定值w且最多包含两件,要求分组数最少。编写VB程序解决该问题,程序运行时,在文本框Text1中依次输入每件纪念品的价格(不超过w),以逗号分隔,在文本框Text2中输人限定值w,单击“分组”按钮,在标签 Label2上输出最少的分组数。程序运行界面如图所示。

(1)要使程序启动后,窗体的标题栏显示“纪念品分组”文字,可在 Form Load事件过程中添加语句   (单选,填字母:
A.Form1="纪念品分组"/B.Form1.Name="纪念品分组"/C.Form1. Caption="纪念品分组"/D.Fom1.Text="纪念品分组")。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码;并且加框处代码有错,请改正。
Private Sub Command1 Click()

Dim a(l To 1000), n As Integer, w As Integer,cnt As Integer

Dim i As Integer, j As Integer, t As Integer

Dim s As String, ch As String

Dim p As Integer, q As Integer

S= Textl. Text: w =Val(text2. Text): n=0

For i=1 To Len(s)

ch=Mid(s, i, 1)

If ch="."Then

n=n+1:a(n)=t: t=0

Else

t=____________________

 End If

Next i
For i=n To 2 Step-1

For j=1 To '②

If a(j)< a(j+1)Then
t=a(j):a(j)=a(j+1):a(j+1)=t

End If

   Next j
Next i
cnt= 0
p=1: q=n
Do While p<q

cnt=cnt+1

If _________________ Then

p=p+1:q=q-1

Else

p=p+1

End If

Loop
If p=q Then cnt=cnt+1
Label2 Caption- Str(cnt)
End sub
(3)若在文本框Text1中输入“50,30,100,70,80,40,50,20”,文本框Text2中输人“110”,单击“分组”按钮,标签Labe2中显示的内容是____________。