最近几天,我从新走了一遍课本,当走到随机选取10个两位数的题的时候,觉得和米老师当初讲的产生了共鸣!同时也发现了rnd的问题,因此先总结一下,增加自己的认识。
前提:回顾课本,百例
通过回顾更深刻的理解了rnd的内容。
课本解释:Rnd函数用于返回或者说产生一个小于1但是大于或等于0的Single类型的随机数。
VB百例解释:该函数用于返回0~1之间的随机数,也称为随机数发生器。
格式 Rnd(number)
number<0 每次都使用number作为随机数,得到相同结果。
number>0 序列产出下一个随机数
number=0 最近生成的数
省略 序列中的下一个随机数
一.细节分析
从大体上分析VB,各种数据穿插在其中。
所以,VB为我们提供了初始化随机数生成器的语句Randomize,课本解释是自动使用系统时钟的值作为随机数产生器的“种子”值。我的理解是有了Randomize 可以让每次的值都是新的。
但是大多时候我们用rnd都是来得到一个区间的数,所以我把一些比较常用的rnd区间总结在下面:
生成[0,x)区间的随机Single类型的数据,使用表达式Rnd*x
生成[m,n)区间的随机Single类型的数据,使用表达式m+Rnd*(n-m)
生成[m,n]区间的随机整数,使用表达式m+int(Rnd*(n-m+1))或int(m+Rnd*(n-m+1))
生成一个随机的大写英文字母,使用表达式Chr(int(rnd*27)+65)
生成一个随机的小写英文字母,使用表达式Chr(int(rnd*27)+97)
二.排序的方法
常用的方法有“选择排序法”和“冒泡排序”
先介绍选择排序,
比如,我有10个数要比较大小。
第一轮:共需比较9次选出最大的,并把它存为a(1)
第二轮:出去a(1),剩下8个数,比较7次,得出第二大的数,存为a(2)
.......
依据上面方法,可以总结出任意的第i轮比较进行的操作是:从后n-i+1个数中选出最大者存入a(i),共须比较n-i次。
百科解释:
三.举例及构思
随机产生10个10~100之间的整数。使用“选择排序法”由大到小排序。
构思:我整体分成了两部分,①先随机数。用int(rnd*91)+10来选10个随机数,依次放入数组a()中 ②通过“选择排序法”和”冒泡法“来实现排序。
四.实现
①先产生随机数
'********************************************
'名字:王雷
'说明:随机10个大于10小于100的数,由大到下排列
'时间:2015-1-11
'********************************************
'先产生10个随机数
Private Sub Form_Load()
Dim p As String, i As Integer
Randomize
p = ""
For i = 1 To 10
a(i) = Int(Rnd * 91) + 10 '产生随机数是关键语句,91是关键,[10,100]
p = p & a(i) & ","
Next i
Label1.Caption = LTrim(Left(p, Len(p) - 1)) 'ltrim 是删除p的左边的所有字符。
End Sub
②选择排序法
'********************************************
'名字:王雷
'说明:随机10个大于10小于100的数,由大到下排列
'时间:2015-1-11
'********************************************
Dim a(1 To 10) As Integer
'变换随机数
Private Sub Command1_Click()
Form_Load
End Sub
' 选择排序法从大到小排列。两个for把数组a(i)改写成从大到小的新数组a(i),然后再把a(i)显示在label2中。
Private Sub Command2_Click()
Dim i As Integer, j As Integer, p As String, t As Integer
p = ""
For i = 1 To 9
For j = i + 1 To 10
If a(i) < a(j) Then
t = a(i): a(i) = a(j): a(j) = t 'a(j)与a(i)的值进行交换。
End If
Next j
Next i
For i = 1 To 10
p = p & Str(a(i)) & ","
Next i
Label2.Caption = LTrim(Left(p, Len(p) - 1))
End Sub
③冒泡排序
'********************************************
'名字:王雷
'说明:随机10个大于10小于100的数,由大到下排列
'时间:2015-1-11
'********************************************
'变换随机数
Private Sub Command1_Click()
Form_Load
End Sub
Private Sub Command2_Click()
Dim p As String, i As Integer, j As Integer
p = ""
For i = 1 To 9
For j = 1 To 10 - i
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
For i = 1 To 10
p = p & Str(a(i)) & ","
Next i
Label2.Caption = LTrim(Left(p, Len(p) - 1))
End Sub
五.小结
为什么这莫好的方法自己没有想到?一个是因为自己不愿意去深思,还没开始就结束了。二是自己没有站在巨人的肩膀上,要想看到更漂亮的风景就要站的高;眼里看到的东西多了,也就自然会有更好的体会,更好的方法,就像米老师,他老人家身经百战,最后把本事传授给我们,我们没什么还不站在他老人家的肩膀上呢?总之就是巩固,大牢自己的基础!
评论