VB编程产生100个0-100之间的随机整数找出其中能被3整除的数,并且按由小到大顺序十个一行排列?

VB编程产生100个0-100之间的随机整数找出其中能被3整除的数,并且按由小到大顺序十个一行排列?,第1张

一、要产生1到100之间的随机数,首先了解Rnd函数的用法,Rnd函数产生的是0和1之间的随机数,范围是[0,1),包括0,但不包括1。因此要产生1~100之间的随机数,可以使用Rnd98,产生的是[0,98)的随机数,而int(Rnd98)产生的是[0,97]之间的随机整数,那么int(Rnd98)+2产生的就是[2,99]之间的随机整数了,符合目标1到100之间的随机数目的。函数代码如下:Public Function sj() As Integer Randomize sj = Int(Rnd 98) + 2End Function二、举个例子,要产生10个1到100之间的随机整数,如下:1、打开VB60开发软件,新建一个标准exe工程;2、在设计界面上添加一个Text控件和一个Command控件;3、Command1控件的Caption属性设置为"产生10个1~100之间的随机数"。4、双击Command1控件,进入代码编辑界面,输入如下代码:Public Function sj() As Integer Randomize sj = Int(Rnd 98) + 2End FunctionPrivate Sub Command1_Click()Text1Text = ""For i = 1 To 10 Text1Text = Text1Text & sj() & " "Next iEnd Sub5、运行工程,单击按钮,可以看到Text1控件中产生的10个1~100之间的随机整数。

1Abs 函数

返回数字的绝对值。

Abs(number)

number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。

说明

数字的绝对值是其无符号的数值大小。例如,Abs(-1) 和 Abs(1) 都返回 1。

下面示例利用 Abs 函数计算数字的绝对值:

Dim MyNumber

MyNumber = Abs(503 ) '返回 503。

MyNumber = Abs(-503) '返回 503。

2Atn 函数返回数值的反正切值。

Atn(number)

number 参数可以是任意有效的数值表达式。

说明

Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧度值。此比值是该角对边的长度与邻边长度之比。结果的范围是从 -pi/2 到 pi/2 弧度。

弧度变换为角度的方法是将弧度乘以 pi/180。反之,角度变换为弧度的方法是将角度乘以180/pi 。

下面的示例利用 Atn 来计算 pi 的值:

Dim pi

pi = 4 Atn(1) ' 计算 pi 的值。

注意 Atn 是 Tan(将角作为参数返回直角三角形两边的比值)的反三角函数。不要混淆 Atn 与余切(正切的倒数 (1/tangent))函数。

3Cos 函数

返回某个角的余弦值。

Cos(number)

number 参数可以是任何将某个角表示为弧度的有效数值表达式。

说明

Cos 函数取某个角并返回直角三角形两边的比值。此比值是直角三角形中该角的邻边长度与斜边长度之比。结果范围在 -1 到 1 之间。

角度转化成弧度方法是用角度乘以 pi/180。反之,弧度转化成角度的方法是用弧度乘以 180/pi。

下面的示例利用 Cos 函数返回一个角的余弦值:

Dim MyAngle, MySecant

MyAngle = 13 ' 用弧度定义一个角。

MySecant = 1 / Cos(MyAngle) ' 计算正割。

4Exp 函数

返回 e(自然对数的底)的幂次方。

Exp(number)

number 参数可以是任意有效的数值表达式。

说明

如果 number 参数超过 709782712893,则出现错误。常数 e 的值约为 2718282。

注意 Exp 函数完成 Log 函数的反运算,并且有时引用为反对数形式。

下面的示例利用 Exp 函数返回 e 的幂次方:

Dim MyAngle, MyHSin ' 用弧度定义角。

MyAngle = 13 ' 计算双曲线的正弦。

MyHSin = (Exp(MyAngle) - Exp(-1 MyAngle)) / 2

5Int、Fix 函数

返回数字的整数部分。

Int(number)

Fix(number)

number 参数可以是任意有效的数值表达式。如果 number 参数包含 Null,则返回 Null。

说明

Int 和 Fix 函数都删除 number 参数的小数部分并返回以整数表示的结果。

Int 和 Fix 函数的区别在于如果 number 参数为负数时,Int 函数返回小于或等于 number 的第一个负整数,而 Fix 函数返回大于或等于 number 参数的第一个负整数。例如,Int 将 -84 转换为 -9,而 Fix 函数将 -84 转换为 -8。

Fix(number) 等同于:

Sgn(number) Int(Abs(number))

下面的示例说明 Int 和 Fix 函数如何返回数字的整数部分:

MyNumber = Int(998) ' 返回 99。

MyNumber = Fix(992) ' 返回 99。

MyNumber = Int(-998) ' 返回 -100。

MyNumber = Fix(-998) ' 返回-99。

MyNumber = Int(-992) ' 返回 -100。

MyNumber = Fix(-992) ' 返回 -99。

6Log 函数

返回数值的自然对数。

Log(number)

number 参数是任意大于 0 的有效数值表达式。

说明

自然对数是以 e 为底的对数。常数 e 的值约为 2718282。

用 n 的自然对数除 x 的自然对数,可以得到以 n 为底的 x 的对数。如下所示:

Logn(x) = Log(x) / Log(n)以下示例为一个自定义的 Function 过程,该过程计算以 10 为底的对数:

Function Log10(X)

Log10 = Log(X) / Log(10)

End Function

7Rnd 函数

返回一个随机数。

Rnd[(number)]

number 参数可以是任意有效的数值表达式。

说明

Rnd 函数返回一个小于 1 但大于或等于 0 的值。number 的值决定了 Rnd 生成随机数的方式:

如果 number 为 Rnd 生成

小于零 每次都相同的值,使用 number 作为种子。

大于零 序列中的下一个随机数。

等于零 最近生成的数。

省略 序列中的下一个随机数。

因每一次连续调用 Rnd 函数时都用序列中的前一个数作为下一个数的种子,所以对于任何最初给定的种子都会生成相同的数列。

在调用 Rnd 之前,先使用无参数的 Randomize 语句初始化随机数生成器,该生成器具有基于系统计时器的种子。

要产生指定范围的随机整数,请使用以下公式:

Int((upperbound - lowerbound + 1) Rnd + lowerbound)

这里, upperbound 是此范围的上界,而 lowerbound 是此范围内的下界。

注意 要重复随机数的序列,请在使用数值参数调用 Randomize 之前,立即用负值参数调用 Rnd。使用同样 number 值的 Randomize 不能重复先前的随机数序列。

8Sgn 函数

返回表示数字符号的整数。

Sgn(number)

number 参数可以是任意有效的数值表达式。

返回值

Sgn 函数有如下返回值:

如果 number 为 Sgn 返回

大于零 1

等于零 0

小于零 -1

说明

number 参数的符号决定 Sgn 函数的返回值。

下面的示例利用 Sgn 函数决定数值的符号:

Dim MyVar1, MyVar2, MyVar3, MySign

MyVar1 = 12: MyVar2 = -24: MyVar3 = 0

MySign = Sgn(MyVar1) ' 返回 1。

MySign = Sgn(MyVar2) ' 返回 -1。

MySign = Sgn(MyVar3) ' 返回 0。

9Sin 函数返回某个角的正弦值。

Sin(number)

number 参数可以是任何将某个角表示为弧度的有效数值表达式。

说明

Sin 函数取某个角并返回直角三角形两边的比值。此比值是直角三角形中该角的对边长度与斜边长度之比。结果的范围在 -1 到 1 之间。

将角度乘以 pi/180 即可转换为弧度,将弧度乘以 180/pi 即可转换为角度。

下面例子利用 Sin 返回角度的正弦:

Dim MyAngle, MyCosecant

MyAngle = 13 ' 用弧度定义角度。

MyCosecant = 1 / Sin(MyAngle) '计算余割。

10Sqr 函数

Sqr(number)

number 参数可以是任意有效的大于或等于零的数值表达式。

说明

下面的示例利用 Sqr 函数计算数值的平方根:

Dim MySqr

MySqr = Sqr(4) ' 返回 2。

MySqr = Sqr(23) ' 返回479583152331272。

MySqr = Sqr(0) ' 返回0。

MySqr = Sqr(-4) ' 产生实时错误。

11Tan 函数

返回某个角的正切值。

Tan(number)

number 参数可以是任何将某个角表示为弧度的有效数值表达式。

说明

Tan 取某个角并返回直角三角形两个直角边的比值。此比值是直角三角形中该角的对边长度与邻边长度之比。

将角度乘以 pi/180 即可转换为弧度,将弧度乘以 180/pi 即可转换为角度。

下面的示例利用 Tan 函数返回角度的正切:

Dim MyAngle, MyCotangent

MyAngle = 13 ' 用弧度定义角度。

MyCotangent = 1 / Tan(MyAngle) ' 计算余切

附:

派生数学函数

下列是由固有数学函数派生的非固有数学函数:

函数 派生的等效公式

Secant(正割) Sec(X) = 1 / Cos(X)

Cosecant(余割) Cosec(X) = 1 / Sin(X)

Cotangent(余切) Cotan(X) = 1 / Tan(X)

Inverse Sine(反正弦) Arcsin(X) = Atn(X / Sqr(-X X + 1))

Inverse Cosine(反余弦) Arccos(X) = Atn(-X / Sqr(-X X + 1)) + 2 Atn(1)

Inverse Secant(反正割) Arcsec(X) = Atn(X / Sqr(X X - 1)) + Sgn((X) -1) (2 Atn(1))

Inverse Cosecant(反余割) Arccosec(X) = Atn(X / Sqr(X X - 1)) + (Sgn(X) - 1) (2 Atn(1))

Inverse Cotangent(反余切) Arccotan(X) = Atn(X) + 2 Atn(1)

Hyperbolic Sine(双曲正弦) HSin(X) = (Exp(X) - Exp(-X)) / 2

Hyperbolic Cosine(双曲余弦) HCos(X) = (Exp(X) + Exp(-X)) / 2

Hyperbolic Tangent(双曲正切) HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))

Hyperbolic Secant(双曲正割) HSec(X) = 2 / (Exp(X) + Exp(-X))

Hyperbolic Cosecant(双曲余割) HCosec(X) = 2 / (Exp(X) - Exp(-X))

Hyperbolic Cotangent(双曲余切) HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))

Inverse Hyperbolic Sine(反双曲正弦) HArcsin(X) = Log(X + Sqr(X X + 1))

Inverse Hyperbolic Cosine(反双曲余弦) HArccos(X) = Log(X + Sqr(X X - 1))

Inverse Hyperbolic Tangent(反双曲正切) HArctan(X) = Log((1 + X) / (1 - X)) / 2

Inverse Hyperbolic Secant(反双曲正割) HArcsec(X) = Log((Sqr(-X X + 1) + 1) / X)

Inverse Hyperbolic Cosecant(反双曲余割) HArccosec(X) = Log((Sgn(X) Sqr(X X + 1) +1) / X)

Inverse Hyperbolic Cotangent(反双曲余切) HArccotan(X) = Log((X + 1) / (X - 1)) / 2

以 N 为底的对数 LogN(X) = Log(X) / Log(N)

函数名

参数

返回结果

Ascii

(char_expr)

返回表达式中第一个字符的ASCII编码

Char

(integer_expr)

将单字节的integer值转换为character值。Char通常作为ascii的反函数使用。Integer_expr必须是0到255之间的数。

返回的是char数据类型。如果结果值是多字节字符的第一字节,则字符将是未定的。

Charindex

(expression1,expression2)

查找expression1在expression2中的起始位置并返回表示起始位置的integer整数值。如果没有找到expression1则返回0。如果expression1包含通配符,将其按文字处理。

Char_length

(char_expr)

返回字符串表达式或text值的长度。对于表中列的可变长数据,在计算字符表达式长度时去掉尾空格。对于多字节字符集,字符长度小于字节数,使用系统函数来确定字节数。

Difference

(char_expr1,char_expr2)

返回表示两个soundex值不同的整数值。

Lower

(char_expr)

将大写字母转换成小写字母,返回character类型值

Itrim

(char_expr)

删除字符串表达式中的前导空格。只有与SQL中指定的字符集中的空格值等价的字符才被删除。

Patindex

(“%pattern%”,

char_expr[using{bytes|

chars|characters}])

返回在指定字符串中第一次出现pattern的起始位置的integer型数据,如果没有找到pattern则返回0。缺省情况下返回字符的偏移量(多个字节的字符串)必须指定using bytes。通配符”%”必须放在pattern的前面或后面。除非要找的位置为起始字符或结尾字符。该函数可被用于text数据

Replicate

(char_expr,integer_expr)

返回一个与char_expr的类型相同的字符串。该字符串是char_expr次的结果(当结果多于255个字节时,则只取前255个字节)。

Reverse

(expression)

逆转字符串或二进制数据的值。如果表达式是“abcd”则返回“dcba”;如果表达式是”0x12345000”,则返回”0x00054321

Right

(expression,integer_expr)

返回从右边开始指定个数的字符串或二进制expression的一部分。返回值同expression具有相同的数据类型

Rtrim

(char_expr)

删除尾空格。只有与SQL中指定的字符集中的空格值等价的字符才被删除。

Soundex

(char_expr)

返回由相邻的单字节或双字节正体字母组成的字符串的一个4字符的soundex代码

Space

(integer_expr)

返回integer_expr个单字节空格组成的字符串

Str

(approx_numeric[,length[,decimal]])

返回代表浮点数的字符串。Length指定返回的字符串数目(包括小数点、小数点左边和右边所有的数字和空格);decimal指定结果返回的小数位数;length和decimal是可选项,如果选定,则必须为非负数。缺省的length为10,省的decimal为0为了与指定的length相符,该函数四舍五入小数部分

Stuff

(char_expr1,start,length,char_expr2)

从char_expr1中删除start开始的length个字符,然后将char_expr2插入到char_expr2的start处。如果只删除字符而不插入字符,则必须将char_expr2指定为null,而不是“”,“”表示一个空格

Substring

(expression,start,length)

返回字符串或二进制钟的一部分。Start指定子串的开始位置。Length指定子串的长度。

Upper

(char_expr)

将小写字符串转换为大写字符串 二进制串 列名或它们之间的组合。把字符串放到单引号或双引号中

+

expression

拼接两个或更多的字符串、二进制串、列名或它们之间的组合。把字符串放到单引号或双引号中。

rnd函数用于产生一个随机数序列,从这个序列选出个数作为返回值

函数中的参数是从这个随机数序列中取值的方式

小于 0 每次都使用参数作为随机数种子得到的相同结果。

大于 0 序列中的下一个随机数。

等于 0 最近生成的数。

省略 序列中的下一个随机数。

RND 函数是需要一个 种子 的。如果不给这个参数的话,默认为 0。那么,每次执行的时候得到的随机数列的值都是相同的。

为了得到不同的随机序列值,你可以使用 当前时间 作为 RND 的 种子 参数。这样一天内就不会出现相同的随机数列。

在使用过程中发现每次重新打开工作簿时,执行一次Rnd函数的宏,都会得到一个相同的随机数,后来看了一下“帮助”,在Rnd函数前加入Randomize就可以解决这一问题,但本人还是有点不放心,是不是这样做就会产生一个真正的随机数呢

最好能“剖析”一下Rnd,Randomize工作原理,越详细越好,即详细又准确的会加20分

多谢了,高手们!问题补充:

有如下命令:

Randomize

for a=1 to 6

cells(1,a)=rnd

next a

这是一个产生6个随机数的例子,如果前面没有Randomize时每次打开工作簿会产生同一个6个数的数列,那么加了Randomize(在For语句前)后,那这6个数之间的排列关系(注意:不是指这6个数的数值本身,数值本身应该是变的)是不是还是没变呢?

如果还是没变,那把Randomize加在For语句后cells前,那是不是就会改变呢?

如果还是没变,那有什么办法可以使这6个数完全随机化么?

满意答案

gupiao0000019

LV12

2013-08-29

Randomize Timer 用这个 它会以当前时间作为随机数种子,之后再产生的随机数就确实是真真正正的随机的了。

Rnd 每次执行都会合上一次Rnd的结果有关,也就是说是用上一个Rnd的结果演算过来的,所以

如果不进行初始化,那么一串 rnd 执行多少次 都一样。

只要使用了 Randomize timer之后 就相当于从一个时间点初始化了Rnd一下,那一串rnd 就不会再每次都一样了 ,因为 timer 函数 每次的时间都不一样

a = Int((99999999 - 10000000 + 1) Rnd + 10000000)

a = 10000000-99999999的随机数

Text1Text = a

Text1Text的内容变为a

For i = 1 to 8

i赋值为1,直到8为止

x = Mid(a,i,1)

x变为去掉a+i开头一位数

Next i

继续从i处开始,且i+1

注: For与Next必须要有

Randomize(x)即随机函数,Rnd(x)是一个系统内部定义的随机函数,它能产生一个0~1(不包括0和1的)之间的单精度随机数,但是,一般的随机数都是指定范围的,这个时候我们用系统指定的随机数乘以指定范围的最大数,即可得到指定范围的随机数,其书写格式为:

Rnd() x

例如,要产生一个1~12之间的随机数,可以用以下代码实现:

Private Sub Form_Click()

Randomize

Print Rnd() 12

End Sub

扩展资料

1、程序中如果只用Rnd取随机数时,每次执行都会产生相同的随机数序列。

2、要用RND函数产生不同随机数,必须配合随机种子Randomize一起使用。

3、随种子Randomize必须放在RND函数之前,控制RND函数随机数的产生。

4、实际上,VB的随机数函数发生器是用一个特殊公式计算的“随机数”,因此产生的是“伪随机数”。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12163406.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存