前提概要
rand()用于生成随机数,但不是生成真正的随机数
srand()用于设置供rand()使用的随机数种子
提示
第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand(),自动调用传参值为1
使用相同种子(srand函数传参值相同),调用 rand()生成的是相同随机数序列
函数原型
int rand(void);
void srand(unsigned seed);
参数说明
seed:srand()的种子,用于初始化srand()的起始值
引入问题
问题描述:srand函数传参固定会导致生成的随机数是相同随机数序列
解决办法:通常用srand((unsigned)time(0))或srand((unsigned)time(NULL))来产生种子
提示
如果觉得时间间隔太小,可在(unsigned)time(0)或(unsigned)time(NULL)后面乘上合适整数
例:srand((unsigned)time(NULL)*10)
time_t time(0)
time_t:是重命名的长整型
函数返回值:从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒
参考例程
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
int
main(int argc,char **argv){
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);
}
}
总结
srand()函数传参值,对应一个固定的随机数序列,通过改变srand的传参值实现产生不同随机数序列
例
srand(1) 对应一个固定随机数序列,srand(2)对应另外一个随机数序列