头文件
- int rand(void)与void srand(unsigned int seed)属于stdlib.h头文件
- time_t time(time_t * t)属于time.h头文件
- ftime(struct timeb * tp)属于sys / timeb.h头文件
功能描述
- rand()产生的是伪随机数。若直接使用,每次执行是相同的;若使用srand()初始化,每次执行不同(有几率随机为相同数)
- rand 随机数值范围为0至RAND_MAX,随机的几率相同
- rand()用户未设定随机数种子时,系统默认的随机数种子为1
- srand()函数用来设置rand()产生随机数时的随机数种子
- srand()中的参数seed必须为整数,通常情况下会使用time(0)的返回值或NULL
- time()的返回值:距离1970年1月1日从0时0分0秒到现在的秒数
- time()中参数指针为空,则会把该函数的返回值存到吨指向的内存空间
- ftime()中参数结构体中可返回:1970-01-01至今的秒数,毫秒数)
struct timeb{
time_t time; /* 为1970-01-01至今的秒数*/
unsigned short millitm; /* 千分之一秒即毫秒 */
short timezonel; /* 为目前时区和Greenwich相差的时间,单位为分钟 */
short dstflag; /* 为日光节约时间的修正状态,如果为非0代表启用日光节约时间修正 */
};
示例
- 以秒为随机数种子
unsigned int tseed = time(NULL); srand(tseed); unsigned int crand = rand();
- 以秒为随机数种子产生一定范围内的数值
unsigned int tseed = time(NULL); srand(tseed); // 生成[b,a]范围内的数值,包括b和a unsigned int range = a - b + 1; unsigned int crand = rand() % range + b; // 生成[b,a)范围内的数值,包括b,不包括a unsigned int range = a - b; unsigned int crand = rand() % range + b;
- 以毫秒为随机数种子
struct timeb timeSeed; ftime(&timeSeed); srand(timeSeed.time * 1000 + timeSeed.millitm); // milli time unsigned int crand = rand();
- 以毫秒为随机数种子产生一定范围内的数值
struct timeb timeSeed; ftime(&timeSeed); srand(timeSeed.time * 1000 + timeSeed.millitm); // milli time // 生成[b,a]范围内的数值,包括b和a unsigned int range = a - b + 1; unsigned int crand = rand() % range + b; // 生成[b,a)范围内的数值,包括b,不包括a unsigned int range = a - b; unsigned int crand = rand() % range + b;