用 c 语言产生随机数
在 C语言中 ,rand() 函数可以用来产生随机数,但是这不是真
真意义上的随机数, 是一个伪随机数, 是根据一个数, 我们可以称它
为种子,为基准以某个递推公式推算出来的一系数, 当这系列数很大
的时候,就符合正态公布, 从而相当于产生了随机数, 但这不是真正
的随机数, 当计算机正常开机后, 这个种子的值是定了的, 除非你破
坏了系统,为了改变这个种子的值, C提供了 srand() 函数,它的原
形是 void srand( int a) 。
可能大家都知道 C 语言中的随机函数 random,可是 random 函数并不
是 ANSI C 标准,所以说, random 函数不能在 gcc,vc 等编译器下编
译通过。
rand() 会返回一随机数值,范围在 0 至 RAND_MAX间。返回 0 至
RAND_MAX之间的随机数值, RAND_MAX定义在 stdlib.h ,( 其值至少
为 32767) ,运算的结果是一个不定的数,要看你定义的变量类型,
int 整形的话就是 32767。 在调用此函数产生随机数前, 必须先利用
srand() 设好随机数种子,如果未设随机数种子, rand() 在调用时会
自动设随机数种子为 1。一般用 for 语句来设置种子的个数。具体见
下面的例子。
一 如何产生不可预见的随机序列呢
利用 srand((unsigned int)(time(NULL)) 是一种方法,因为每一次
运行程序的时间是不同的。
在 C语言里所提供的随机数发生器的用法:现在的 C编译器
精选文库
都提供了一个基于 ANSI 标准的伪随机数发生器函数,用来生成随机
数。它们就是 rand() 和 srand() 函数。这二个函数的工作过程如下:
1) 首先给 srand() 提供一个种子,它是一个 unsigned int 类型,其
取值范围从 0~65535;
2) 然后调用 rand() ,它会根据提供给 srand() 的种子值返回一个随
机数 ( 在 0 到 32767 之间 )
3) 根据需要多次调用 rand() ,从而不间断地得到新的随机数;
4) 无论什么时候,都可以给 srand() 提供一个新的种子,从而进一
步“随机化” rand() 的输出结果。
下面是 0~32767 之间的随机数程序:
#include
#include
#include // 使用当前时钟做种子
void main( void )
{int i;
srand( (unsigned)time( NULL ) ); // 初始化随机数
for( i = 0; i < 10;i++ ) // 打
印出 10 个随机数
printf( " %d\n", rand() );
}
根据上面