有关srand()函数的疑问

sunyuqian 2010-03-10 03:05:28
大家好,对srand()函数有个不懂的地方,用/**/标出,请高手解答

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
int i;
srand((unsigned int) time(0));
/*如果把srand()函数写在for循环里,就出一样的数,为什么呢?*/
for (i = 0; i < 100; i++)
printf("%d ",rand());
return 0;
}
...全文
164 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunyuqian 2010-03-10
  • 打赏
  • 举报
回复
谢谢了

回复内容太短了!
昵称很不好取 2010-03-10
  • 打赏
  • 举报
回复
引用 3 楼 sunyuqian 的回复:
每次调用rand()函数都要先执行srand()函数,如果把srand()函数放在循环里出一个数是因为for循环执行
快,那把它放在外面出不同的数是因为执行慢吗?感觉这俩就是执行步骤不一样,一个先执行srand,一个先
执行rand,时间会错很多吗?

把srand放在外面,里面rand()的返回值会作为下一次rand()的种子,因此每次得到的rand()返回值都是不同的,放外面只用到srand一次
放里面是用到了多次,注意这个区别
insulted 2010-03-10
  • 打赏
  • 举报
回复
大家都说得很清楚了,我就不画蛇添足了~~~
yuzl32 2010-03-10
  • 打赏
  • 举报
回复
引用 3 楼 sunyuqian 的回复:
用了楼上的方法,确实变了,但还有一个疑问

C/C++ codesrand((unsignedint) time(0));for (i=0; i<100; i++)
printf("%d",rand());

每次调用rand()函数都要先执行srand()函数,如果把srand()函数放在循环里出一个数是因为for循环执行
快,那把它放在外面出不同的数是因为执行慢吗?感觉这俩就是执行步骤不一样,一个先执行srand,一个先
执行rand,时间会错很多吗?


time(0)若在for循环内的话,产生的值(时间)是一样的(至少在100内的循环是一样的),也就是种子是一样的。
huanmie_09 2010-03-10
  • 打赏
  • 举报
回复
要每次生成的随机数不同应结合srand函数和time函数。srand只是随机数发生器的初始化函数, 其参数为初始化种子。
可以如下用法:

srand((unsigned int) time(0));
for (i = 0; i < 100; i++){
for(j=0; j<300; ++j)
for(k=0; k<200000; ++k);
printf("%d ",rand());
}
sunyuqian 2010-03-10
  • 打赏
  • 举报
回复
用了楼上的方法,确实变了,但还有一个疑问

srand((unsigned int) time(0));
for (i = 0; i < 100; i++)
printf("%d ",rand());


每次调用rand()函数都要先执行srand()函数,如果把srand()函数放在循环里出一个数是因为for循环执行
快,那把它放在外面出不同的数是因为执行慢吗?感觉这俩就是执行步骤不一样,一个先执行srand,一个先
执行rand,时间会错很多吗?
昵称很不好取 2010-03-10
  • 打赏
  • 举报
回复
可以在for循环里面再写个for循环耗下时间
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
int i,j,k;
for (i = 0; i < 100; i++){
for(j=0; j<300; ++j)
for(k=0; k<200000; ++k);
srand((unsigned int) time(0));
printf("%d ",rand());
}
return 0;
}
昵称很不好取 2010-03-10
  • 打赏
  • 举报
回复
你的for循环执行太快了,srand的种子time还没有来得及变~~

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧