这两天写的一个程序里需要用到随机数,就又 把随机数好好的看了一下,但终没找到我满意的。估计是没有吧。先把我看的东西总结一下。若大家有更好的,请留言回复教教俺哈,在此先谢谢了。
1 首先一提到随即数,大家肯定首先会想到 rand() ,也确实是这样, rand() 函数可以产生随机数。但是若是我们仅仅用 rand() 的话,就会发现,它产生的并不是真正的随机数。而是被人成为 的“伪随机数”,为什么这样说呢?大家看一下这个程序就明白了:
- #include <stdio.h>
- #include <stdlib.h> //rand() 需要它;
- int main()
- {
- int i;
- printf( "Ten random numbers from 0 to 99/n/n" );
- for (i=0; i<10; i++)
- printf( "%d/n" , rand()%100);
- return 0;
- }
运行程序后,你会得到十个随机数, 也许这十个各不相同。这是因为他们都是在随即情况下产生的。但是当你再次运行或是多次运行后,你就会发现,每次运行后的结果都和第一次是一样的。这就是结 论了。仅由rand() 产生的随机数除了第一次是随机的外,其他时候都和第一次是一样的。因为他们 的种子是一样的。那我们如何产生真正的随机数呢?即每次得到的数字都是不一样的。我在网上查到了一个方法。如下。
2 srand() 函 数。
这个函数和以为 rand() 函数提供可变的种子。然后, rand() 函数就会产生出不断变化的随机数了。我们看下下面程序 :
运行下程
序,哇,我们可以得到随机数了。。呵呵。。
还有人不是这样用,它没有为srand()
函数定义参数t.
他直接写成这样了:
测试后我感觉这两个用法产生的效果没什么不同。
但是我总的感觉产生的随机数还是不够随机。因为我观
察发现,随机数大部分情况下都是升序变化的。并不是我们想象中的那样很随机。
3 random()
和 randomize()
好多人都提到这两个函数,但是我去查了这两个函数在C
语言中并不能运行成
功。在MSDN
上提到的Math.random()
产
生一个0
到1
的伪随机数。但是好像是用到
Jscript
里的。
MSDN
提到了
Randomize
[number
];
好像是用到
VB
里面的。
C
语言里
好像没有这样的库函数。看了一个朋友的博客总结,他为了使用
randomize()
函数,竟然
写成这样
:
呵呵。真是执着和煞费苦心啊。。
若那位朋友有关于随机数的更好的方法不妨指教一下。
在此先谢谢了!