请问这个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不一样了吧?
展开
 我来答
阿克雷之剑
2012-07-28 · TA获得超过119个赞
知道小有建树答主
回答量:63
采纳率:0%
帮助的人:78.5万
展开全部
你的要求 “最后找出出现个数最多的两个数字,放在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

本人能力有限,希望对你有帮助~~
追问
你的答案是正确的(除了第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 循环,不再进行添加操作。
这样,懂了么??
信心安J
2012-07-28 · TA获得超过402个赞
知道小有建树答主
回答量:787
采纳率:0%
帮助的人:718万
展开全部
你这个算法太难懂;太复杂!
【两个n不一样,是不同作用域的两个不沾边儿的变量】
更多追问追答
追问
10年江苏省2级的最后一题 其他题目给我答案我还能看懂 这个题目给我答案我都没明白
追答
这几个空我也不知道怎么回答;或许给我答案就可以明白了吧;因为一个人有一个人的编程习惯;如果让我从零开始写代码就比分析人家的代码要简单得多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
787489267
2012-07-28 · TA获得超过192个赞
知道小有建树答主
回答量:951
采纳率:75%
帮助的人:245万
展开全部
不简单~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式