C语言中产生随机数的方法

来源:互联网 发布:淘宝上卖宿舍用品的店 编辑:程序博客网 时间:2024/04/29 09:37

     rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了 srand()函数,它的原形是void srand( int a).
    
初始化随机产生器既rand()函数的初始值,即使把种子的值改成a;从这你可以看到通过sand()函数,我们是可以产生可以预见的随机序列,那我们如何才能产生不可预见的随机序列呢?我们可能常常需要这样的随机序列,是吧。利用srand((unsign)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的
.
  
 下面讲一讲在C语言里所提供的随机数发生器的用法。现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()srand()函数。这二个函数的工作过程如下:

1)
首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535
2)
然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(032767之间)
3)
根据需要多次调用rand(),从而不间断地得到新的随机数;

4)
无论什么时候,都可以给srand()提供一个新的种子,从而进一步随机化”rand()的输出结果。
以下是一个产生随机数的例子:
需要首先使用随机数种子初始化,srand函数:
i nclude <stdlib.h>
i nclude <stdio.h>
i nclude <time.h>//使用当前时钟做种子


void main( void )
{
int i;
srand( (unsigned)time( NULL ) );//
初始化随机数

/*
打印10个随机数. */
for( i = 0; i < 10;i++ )
printf( " %d\n", rand() );
}       

 

  rand(产生随机数)
相关函数
srand 
 
表头文件
#include<stdlib.h> 
 
定义函数
int rand(void) 
 
函数说明
rand()会返回一随机数值,范围在0RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()
 
返回值
返回0RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647
 
范例
/* 产生介于1 10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考
srand()*/ 
#include<stdlib.h> 
main() 
{ 
int i,j; 
for(i=0;i<10;i++) 
{ 
j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); 
printf("%d ",j); 
} 
} 
 
执行
9 4 8 8 10 2 4 8 3 6 
9 4 8 8 10 2 4 8 3 6 
 
 
 
 
 
srand(设置随机数种子)
相关函数
rand 
 
表头文件
#include<stdlib.h> 
 
定义函数
void srand (unsigned int seed); 
 
函数说明
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
 
返回值
 
范例
/* 产生介于1 10 间的随机数值,此范例与执行结果可与rand()参照*/ 
#include<time.h> 
#include<stdlib.h> 
main() 
{ 
int i,j; 
srand((int)time(0)); 
for(i=0;i<10;i++) 
{ 
j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); 
printf(" %d ",j); 
} 
} 
 
执行
5 8 8 8 10 2 10 8 9 9 

2 9 7 4 10 3 2 10 8 7        

原创粉丝点击