rand()函数可以用来产生随机数,但这并不是真正意义上的随机数,而是伪随机数。是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。
1.rand()
功能:随机数发生器
用法:int rand(void)
所在的头文件:stdlib.h
rand()函数产生的伪随机数字,每次执行时是相同的,若要不同,可用srand()函数初始化。
2.srand()
功能:初始化随机数发生器
用法: void srand(unsigned int seed)
所在头文件: stdlib.h
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
3.使用当前时钟作为随机数种子 (时钟所在头文件为 time.h)
rand()产生的随机数在每次运行的时候都是与上一次相同的。若要不同,用函数srand()初始化它。可以利用srand((unsigned int)(time(NULL))的方法,产生不同的随机数种子,因为每一次运行程序的时间是不同的。
4.产生随机数的用法
-
给srand()提供一个种子,它是一个unsigned int类型;
-
调用rand(),它会根据提供给srand()的种子值返回一个随机数;
-
根据需要多次调用rand(),从而不间断地得到新的随机数;
例如:
#include <stdio.h>
#include <stdlib.h>
intmain()
{
intnumber;
for (inti=0; i<5; i++)
{
number=rand() %10;
printf(“%d\n”, number);
}
return0;
}
-
无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。
例如:运用时钟做为随机数的种子
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
intmain()
{
intnumber;
srand((unsigned)time (NULL));
number=rand() %10; //取0~9之间的数
printf(“%d”, number);
return0;
}
5.
5.产生一定范围随机数的通用表示公式
通用公式:int num = rand() % n +a;其中在随机数的范围中a是起始值,n-1+a是终止值,n是整数的范围。
要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;