展开全部
1.概念A:srand用来设置随机数种子的,rand用来产生随机数的
srand(1);//1为随机的数的种子
printf("%d", rand());//因为种子为1不变,产生的随机数是不变的
2.void srand(unsigned int)查看参数为unsigned int
time_t time(time_t *);//time的构造函数带参time_t *
typedef long time_t; //time.h定义time_t为long
time(NULL);time(0)//返回的是一个long型时间值,取的是当前系统时间,因此总是变化的
3.srand(time(NULL))就是设置当前的时间值为种子,那么种子总是变化的
printf("%d", rand());//因为种子总是变化的,所以以该种子产生的随机数总是变化的
这里比较time(NULL)和time(0),没有多大意义啊
4.核心你该搞清楚 srand是怎么用的:srand定义种子,如果种子是个常量,那么产生的随机数不变,所以需要一个
总是变化的种子,而系统时间总是变化的将时间值转化成unsigned int传入srand就达到了产生可变种子的目的.因此
int iRet = rand()//产生的随机数每次都不一样
小例子:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
int i = 0;
srand( (unsigned)time(NULL));
//srand((unsigned int)time(0));
//srand(1);
for( i = 0; i < 100; i++ )printf("%d,[1,10]=%d\n", rand(), (rand()%10+1));
}
srand(1);//1为随机的数的种子
printf("%d", rand());//因为种子为1不变,产生的随机数是不变的
2.void srand(unsigned int)查看参数为unsigned int
time_t time(time_t *);//time的构造函数带参time_t *
typedef long time_t; //time.h定义time_t为long
time(NULL);time(0)//返回的是一个long型时间值,取的是当前系统时间,因此总是变化的
3.srand(time(NULL))就是设置当前的时间值为种子,那么种子总是变化的
printf("%d", rand());//因为种子总是变化的,所以以该种子产生的随机数总是变化的
这里比较time(NULL)和time(0),没有多大意义啊
4.核心你该搞清楚 srand是怎么用的:srand定义种子,如果种子是个常量,那么产生的随机数不变,所以需要一个
总是变化的种子,而系统时间总是变化的将时间值转化成unsigned int传入srand就达到了产生可变种子的目的.因此
int iRet = rand()//产生的随机数每次都不一样
小例子:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
int i = 0;
srand( (unsigned)time(NULL));
//srand((unsigned int)time(0));
//srand(1);
for( i = 0; i < 100; i++ )printf("%d,[1,10]=%d\n", rand(), (rand()%10+1));
}
更多追问追答
追问
那srand(time(NULL))与srand(time(0))与等价咯
追答
@函数名称: time
函数原型: time_t time(time_t *timer)
函数功能: 得到机器的日历时间或者设置日历时间
函数返回: 机器日历时间
参数说明: timer=NULL时得到机器日历时间,timer=时间数值时,用于设置日历时间,time_t是一个long类型
所属文件:
这里你要分开看啊,观念一定清楚
第一步分析:time(0)与time(NULL)的返回值是否相等
long l = 101;
long l1 = time(&l);
Sleep(1000);//更改时间的长短,可以看到当暂停时间大于1S,l1和l2的值不一样
//注释掉Sleep(1000)函数,l1==l2
long l2 = time(NULL);
printf("%d,%d\n", l1, l2);
问题是传0或传NULL,跟两个函数调用的时间的有关系,明白吗?调用的时间不一样,其结果不一样.
第二分析:
A:srand((unsigned int)time(0));
B:srand((unsigend int)time(NULL));
如果A句和B句顺序执行了,他们的值相同,当A执行了,这个时候主线程暂停了,过5S后,线程又被CPU调度了,那B句就改变了种的值了.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询