rand()函数和srand()是两个产生随机数的函数。
函数一:int rand(void)
返回一个[0, RAND_MAX]间的随机整数。
函数二:void srand(unsigned seed)
参数seed是rand()的种子。
用法:
系统在调用rand()之前会自动的调用srand(),如果用户在rand()之前曾调用过srand()给参数seed指定了一个值rand()就会将seed的值作为产生伪随机数的初始值,而如果用户在rand()之前没有调用srand()那么系统将1作为随机数的初始值。如果给了一个定值,那么每次rand()产生的随机数序列都是一样的。
通常我们用srand((unsigned)time(0))或sand((unsigned)time(NULL))来产生种子,如果仍觉得时间间隔太小,可以乘上一个数如srand((unsigned)time(0)*10)。
x = rand() % 10; //产生0~10之间的随机整数
y = rand %51 - 25; //产生-25~25之间的随机整数
z = ((double)rand() / RAND_MAX)*(b - a) + a //产生区间[a, b]上的随机整数
j = (int)(n*rand() / (RAND_MAX + 1.0)) //产生0~n之间的随机整数【注意的是n是浮点数不能写成整数】
例子:
如果没有调用srand()函数
结果:即使编译运行多次结果都一样
8 3 7 9 1 3 7 2 5
8 3 7 9 1 3 7 2 5
调用srand()函数
结果:7 9 3 0 6 6 3 3 2 7
4 8 1 9 2 0 9 6 1 2