随机数

这两天写的一个程序里需要用到随机数,就又把随机数好好的看了一下,但终没找到我满意的。估计是没有吧。先把我看的东西总结一下。若大家有更好的,请留言回复教教俺哈,在此先谢谢了。

1首先一提到随即数,大家肯定首先会想到rand(),也确实是这样,rand()函数可以产生随机数。但是若是我们仅仅用rand()的话,就会发现,它产生的并不是真正的随机数。而是被人成为的“伪随机数”,为什么这样说呢?大家看一下这个程序就明白了:

Code:
  1. #include<stdio.h>
  2. #include<stdlib.h>//rand()需要它;
  3. intmain()
  4. {
  5. inti;
  6. printf("Tenrandomnumbersfrom0to99/n/n");
  7. for(i=0;i<10;i++)
  8. printf("%d/n",rand()%100);
  9. return0;
  10. }

运行程序后,你会得到十个随机数,也许这十个各不相同。这是因为他们都是在随即情况下产生的。但是当你再次运行或是多次运行后,你就会发现,每次运行后的结果都和第一次是一样的。这就是结论了。仅由rand()产生的随机数除了第一次是随机的外,其他时候都和第一次是一样的。因为他们的种子是一样的。那我们如何产生真正的随机数呢?即每次得到的数字都是不一样的。我在网上查到了一个方法。如下。

2 srand()函数

这个函数和以为rand()函数提供可变的种子。然后,rand()函数就会产生出不断变化的随机数了。我们看下下面程序:

Code:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>//time_t需要它
  4. intmain()
  5. {
  6. inti;
  7. time_tt;
  8. srand((unsigned)time(&t));
  9. printf("Tenrandomnumbersfrom0to99/n/n");
  10. for(i=0;i<10;i++)
  11. printf("%d/n",rand()%100);
  12. return0;
  13. }

运行下程序,哇,我们可以得到随机数了。。呵呵。。

还有人不是这样用,它没有为srand()函数定义参数t.他直接写成这样了:

Code:
  1. srand((unsigned)time(NULL));

测试后我感觉这两个用法产生的效果没什么不同。

但是我总的感觉产生的随机数还是不够随机。因为我观察发现,随机数大部分情况下都是升序变化的。并不是我们想象中的那样很随机

3 random() randomize()

好多人都提到这两个函数,但是我去查了这两个函数C语言中并不能运行成功。在MSDN上提到的Math.random()产生一个01的伪随机数。但是好像是用到Jscript里的。MSDN提到了Randomize [number];好像是用到VB里面的。C语言里好像没有这样的库函数。看了一个朋友的博客总结,他为了使用randomize()函数,竟然写成这样:

Code:
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<time.h>
  4. #definerandomize()srand((unsigned)time(NULL))
  5. intmain(void)
  6. {
  7. inti;
  8. randomize();
  9. for(i=0;i<10;++i)
  10. printf("%d/n",rand()%100);
  11. }

呵呵。真是执着和煞费苦心啊。。

若那位朋友有关于随机数的更好的方法不妨指教一下。在此先谢谢了!

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...