请问这个VB代码如何理解? 求具体每一步骤的解释。
9.本程序的功能是查找一组数据中的众数。所谓众数,就是在这组数据中出现次数最多的数.注意:一组数据中的众数可能有多个.(即有多个数据的出现次数相同)。事件过程Cmdfin...
9.本程序的功能是查找一组数据中的众数。所谓众数,就是在这组数据中出现次数最多的数.注意:一组数据中的众数可能有多个.(即有多个数据的出现次数相同)。事件过程Cmdfind主要功能是生成n个随机整数存入数组,再调用Freq过程,求出数组中每个不相同的数据出现的次数:再求出其中最大的出现次数值,最后,将求出相应的众数输出。请完善本
程序。
Option Explicit
Option Base 1
Private Sub Cmdfind_Click()
Dim a() As Integer,n As Integer,i As Integer
Dim Shu() As Integer,Cs() As Integer,Max As Integer
n=InputBox("输入数据个数:","查找众数",20)
ReDim a(n)
Randomize
For i=1 To n
a(i)=Int(Rnd*5)+5
Text1=Text1 & Str(a(i))
If i Mod 10=0 Then Text1=Text1 & vbCrLf
Next i
Call Freq(a,Shu,Cs)
Max=Cs(1)
For i=2 To UBound(Cs)
If Cs(i)>Max Then
___(26)___
End If
Next i
For i=1 To UBound(Cs)
If ___(27)___ Then Text2=Text2 & Shu(i) & " "
Next i
End Sub
Private Sub Freq(a() As Integer,Shu() As Integer,Cs() As Integer)
'shu数组用于存放A数组中不相同数据的值
'Cs数组用于存放对应不相同数据出现的次数
Dim i As Integer,j As Integer,js As Integer,n As Integer
For i=1 To UBound(a)
js=1
For j=1 To n '搜索数组a中不相同的数据
If Shu(j)=a(i) Then Exit For
Next j
If ___(28)___ Then
n=n+1
ReDim ___(29)___
Shu(n)=a(i)
For j=i+1 To UBound(a)
If a(j)=a(i) Then ___(30)___
Next j
Cs(n)=js
List1.AddItem a(i) & "---" & js
End If
Next i
End Sub
这个代码说在TEXT1框中随机输入20个 5~9之间的随机数形成一个数组,然后统计每个数字出现的个数并放在列表框中,最后找出出现个数最多的两个数字,放在TEXT2里面。
里面自定义过程中,又重新DIm n As Ingeter那么这个n就和之前过程的n不一样了吧? 展开
程序。
Option Explicit
Option Base 1
Private Sub Cmdfind_Click()
Dim a() As Integer,n As Integer,i As Integer
Dim Shu() As Integer,Cs() As Integer,Max As Integer
n=InputBox("输入数据个数:","查找众数",20)
ReDim a(n)
Randomize
For i=1 To n
a(i)=Int(Rnd*5)+5
Text1=Text1 & Str(a(i))
If i Mod 10=0 Then Text1=Text1 & vbCrLf
Next i
Call Freq(a,Shu,Cs)
Max=Cs(1)
For i=2 To UBound(Cs)
If Cs(i)>Max Then
___(26)___
End If
Next i
For i=1 To UBound(Cs)
If ___(27)___ Then Text2=Text2 & Shu(i) & " "
Next i
End Sub
Private Sub Freq(a() As Integer,Shu() As Integer,Cs() As Integer)
'shu数组用于存放A数组中不相同数据的值
'Cs数组用于存放对应不相同数据出现的次数
Dim i As Integer,j As Integer,js As Integer,n As Integer
For i=1 To UBound(a)
js=1
For j=1 To n '搜索数组a中不相同的数据
If Shu(j)=a(i) Then Exit For
Next j
If ___(28)___ Then
n=n+1
ReDim ___(29)___
Shu(n)=a(i)
For j=i+1 To UBound(a)
If a(j)=a(i) Then ___(30)___
Next j
Cs(n)=js
List1.AddItem a(i) & "---" & js
End If
Next i
End Sub
这个代码说在TEXT1框中随机输入20个 5~9之间的随机数形成一个数组,然后统计每个数字出现的个数并放在列表框中,最后找出出现个数最多的两个数字,放在TEXT2里面。
里面自定义过程中,又重新DIm n As Ingeter那么这个n就和之前过程的n不一样了吧? 展开
3个回答
展开全部
你的要求 “最后找出出现个数最多的两个数字,放在TEXT2里面。” 我办不到.....
实在尽力了,只能找出最大的,答案如下
26.Max = Cs(i)
27.Cs(i) = Max
28.j = n + 1
29.Preserve Shu(n), Cs(n)
30.js = js + 1
这里我给出大致的解析,有不懂的再问我吧,对了,顺便把你的答案公布下吧,希望看到答案的说
代码
Option Explicit
Option Base 1
Private Sub Cmdfind_Click()
Dim a() As Integer, n As Integer, i As Integer
Dim Shu() As Integer, Cs() As Integer, Max As Integer
n = InputBox("输入数据个数:", "查找众数", 20)
ReDim a(n)
Randomize
For i = 1 To n '为数组a赋值
a(i) = Int(Rnd * 5) + 5
Text1 = Text1 & Str(a(i))
If i Mod 10 = 0 Then Text1 = Text1 & vbCrLf
Next i
Call Freq(a, Shu, Cs) '调用过程,获取不同的数值(shu)和相应的个数(Cs)
Max = Cs(1)
For i = 2 To UBound(Cs)
If Cs(i) > Max Then '用if语句获取最大的数值的个数
Max = Cs(i)
End If
Next i
For i = 1 To UBound(Cs) '用于查找对应的众数,并传递给Text2
If Cs(i) = Max Then Text2 = Text2 & Shu(i) & " " '
Next i
End Sub
Private Sub Freq(a() As Integer, Shu() As Integer, Cs() As Integer)
'shu数组用于存放A数组中不相同数据的值
'Cs数组用于存放对应不相同数据出现的次数
Dim i As Integer, j As Integer, js As Integer, n As Integer
For i = 1 To UBound(a)
js = 1
For j = 1 To n '依次用数组shu中的元素与a(i)比较
If Shu(j) = a(i) Then Exit For
Next j
If j = n + 1 Then 'j=n+1,说明为a(i)为新的值,计入"shu"中,并接着统计次数,加入List1
n = n + 1
ReDim Preserve Shu(n), Cs(n) '重新定义数组大小
Shu(n) = a(i) '把a(i)的数据赋值给数组shu
For j = i + 1 To UBound(a) '用For语句获取新值shu(n)在数组a中出现的次数(频数)
If a(j) = a(i) Then js = js + 1
Next j
Cs(n) = js '把shu(n)频数赋值给相应的CS(n)
List1.AddItem a(i) & "---" & js
End If
Next i
End Sub
本人能力有限,希望对你有帮助~~
实在尽力了,只能找出最大的,答案如下
26.Max = Cs(i)
27.Cs(i) = Max
28.j = n + 1
29.Preserve Shu(n), Cs(n)
30.js = js + 1
这里我给出大致的解析,有不懂的再问我吧,对了,顺便把你的答案公布下吧,希望看到答案的说
代码
Option Explicit
Option Base 1
Private Sub Cmdfind_Click()
Dim a() As Integer, n As Integer, i As Integer
Dim Shu() As Integer, Cs() As Integer, Max As Integer
n = InputBox("输入数据个数:", "查找众数", 20)
ReDim a(n)
Randomize
For i = 1 To n '为数组a赋值
a(i) = Int(Rnd * 5) + 5
Text1 = Text1 & Str(a(i))
If i Mod 10 = 0 Then Text1 = Text1 & vbCrLf
Next i
Call Freq(a, Shu, Cs) '调用过程,获取不同的数值(shu)和相应的个数(Cs)
Max = Cs(1)
For i = 2 To UBound(Cs)
If Cs(i) > Max Then '用if语句获取最大的数值的个数
Max = Cs(i)
End If
Next i
For i = 1 To UBound(Cs) '用于查找对应的众数,并传递给Text2
If Cs(i) = Max Then Text2 = Text2 & Shu(i) & " " '
Next i
End Sub
Private Sub Freq(a() As Integer, Shu() As Integer, Cs() As Integer)
'shu数组用于存放A数组中不相同数据的值
'Cs数组用于存放对应不相同数据出现的次数
Dim i As Integer, j As Integer, js As Integer, n As Integer
For i = 1 To UBound(a)
js = 1
For j = 1 To n '依次用数组shu中的元素与a(i)比较
If Shu(j) = a(i) Then Exit For
Next j
If j = n + 1 Then 'j=n+1,说明为a(i)为新的值,计入"shu"中,并接着统计次数,加入List1
n = n + 1
ReDim Preserve Shu(n), Cs(n) '重新定义数组大小
Shu(n) = a(i) '把a(i)的数据赋值给数组shu
For j = i + 1 To UBound(a) '用For语句获取新值shu(n)在数组a中出现的次数(频数)
If a(j) = a(i) Then js = js + 1
Next j
Cs(n) = js '把shu(n)频数赋值给相应的CS(n)
List1.AddItem a(i) & "---" & js
End If
Next i
End Sub
本人能力有限,希望对你有帮助~~
追问
你的答案是正确的(除了第28空,答案给的是j>n),我想把里面几段代码请教一下,为什么这么写:
1、Shu()这个数组题目中说是存放A数组中不相同数据的值,那么这个数组的数是否就是:5、6、7、8、9 这5个数?
2、如果Shu()数组就是上面那几个数组成,那么
For j = 1 To n '依次用数组shu中的元素与a(i)比较
If Shu(j) = a(i) Then Exit For
这段应该如何理解?
追答
1.不一定(虽然说大致上,是),这5个数不一定都会出现,例如其它4个数重复出现20次的情况(很少,但也有这个可能)。
2.for j=1 to n 的作用是,程序每次执行一次“For i = 1 To UBound(a) 到 next i ”之间的语句,就把新的a(i)与已经储存进shu数组里面的数据比较一次,并且用“If Shu(j) = a(i) Then”判断a(i)是否与已经储存进shu的值相同,如果不同,说明是新值,那么跳过“if ”语句,进行下面的shu.Cs.list1的添加操作,如果已经存在,那么执行“ Exit For”直接跳过"for j "循环,不再执行相应的添加操作。
总结下,for i =1 to n 的作用是没完成一次for i next i语句,就把新的a(i)与已经储存进shu的数据进行一次对比,判断a(i)是不是新的值。"If Shu(j) = a(i) Then Exit For"的作用是将已经存储过的a(i)跳出for j 循环,不再进行添加操作。
这样,懂了么??
展开全部
你这个算法太难懂;太复杂!
【两个n不一样,是不同作用域的两个不沾边儿的变量】
【两个n不一样,是不同作用域的两个不沾边儿的变量】
更多追问追答
追问
10年江苏省2级的最后一题 其他题目给我答案我还能看懂 这个题目给我答案我都没明白
追答
这几个空我也不知道怎么回答;或许给我答案就可以明白了吧;因为一个人有一个人的编程习惯;如果让我从零开始写代码就比分析人家的代码要简单得多
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不简单~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询