C语言中如何产生随机数

Posted on 2015-09-05 10:44  尚河果农  阅读(15149)  评论(1编辑  收藏  举报

    今天看到一段小程序 ,里面用到随机数。才发现在C语言中产生随机数不像matlab中那么简单。

    C中也有rand()函数,但是rand()函数产生的数不是真正意义上的随机数,是一个伪随机数,是根据一个数,我们称它为种子,为基准以某个递推公式推算出来的一系列数。范围在0~RAND_MAX之间。RAND_MAX和rand()一样也定义在stdlib.h中,其值至少为32767。当计算机正常开机后,种子是固定了的。所以如果不结合其他函数,使用rand()产生随机数就会出现以下情况:

 1 #include<stdlib.h>
 2 int main()
 3 {
 4      int i,j;
 5      for(i=0;i<10;i++)
 6      {
 7             j=1+(int)(rand()%10);
 8             printf("%d",j);
 9      } 
10 }

你会发现程序连续执行N次的结果是一样的,这是因为如果未设置随机数种子,rand()在调用时会默认随机数种子为1。为了解决这个问题C提供了srand()函数。所以在调用rand()产生随机数之前必须调用srand()设置种子。srand()的原形是void srand(int a)。下面结合srand()的使用我们编写一个产生随机数的程序:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
     srand((int)time(0));
     int i;
     for (i=0;i<!0;i++)
     {
        printf("%d ",(int)(rand()%10));
      }
    
      printf("\n");
}
root@ubuntu:/home/qj/python_pro# ./test
5 6 2 3 8 6 1 9 8 0 
root@ubuntu:/home/qj/python_pro# ./test
5 6 1 7 6 0 9 8 0 2 
root@ubuntu:/home/qj/python_pro# ./test
1 1 6 2 6 1 6 5 1 0 
root@ubuntu:/home/qj/python_pro# ./test
9 4 0 3 0 7 8 7 0 1 
root@ubuntu:/home/qj/python_pro# ./test
8 2 1 5 4 0 2 9 5 2 
root@ubuntu:/home/qj/python_pro# ./test
6 1 9 6 8 2 6 2 1 1 
root@ubuntu:/home/qj/python_pro# ./test
2 1 0 4 0 8 9 0 7 2 
root@ubuntu:/home/qj/python_pro# ./test
7 4 9 3 1 7 6 4 1 0 
root@ubuntu:/home/qj/python_pro# ./test
4 8 1 1 1 2 6 3 3 0 
root@ubuntu:/home/qj/python_pro# 

其中time()用来获得机器时间,它定义在time.h中。

由于程序执行是随机的,系统时间也具有随机性。故可以得到具有随机性的种子,且每次使用rand()函数前都使用srand()设置一次种子,这样我们就能得到随机数了。

还可以参考:

http://wenku.baidu.com/link?url=UCsVYyZNNAoXlVUIqhGjppcbL6JlCpxMPxAhyzep_ePMDxb977NQqTk-DAed7k7-kjj9v90Bn6N0a-P1rfaGi9DvN0WsVY04kF8-L34dXn_

 

Copyright © 2024 尚河果农
Powered by .NET 8.0 on Kubernetes