| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 992 人关注过本帖
标题:rand和srand函数的一个疑问。
只看楼主 加入收藏
交相辉映
Rank: 2
等 级:论坛游民
帖 子:13
专家分:17
注 册:2010-11-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
rand和srand函数的一个疑问。
已经知道了srand函数是生成一个seed,每次运行rand每次前先检测是否有srand函数,如果没有,只运用rand函数那么就会生成一个相同的序列。
如果不使用srand函数,只用rand
for(int i=0;i<10;i++)
{
int j=rand()%9;
printf("%d ",j);
}
假设这个程序每次生成的序列都为6 5 3 7 8 4 5 5 7 0
根据描述每次rand返回一个数,我的疑惑就是第一次调用rand时,默认利用了srand(1)这个条件,种子为1.
那么进行第二次循环的时候,调用rand时,此时是否还是调用 srand(1)的这个条件?那么5是如何产生的呢?
不是很清楚里面的具体实现机理。希望有好心的同学帮忙讲解一下。
搜索更多相关主题的帖子: rand 函数 疑问 
2010-12-20 21:50
马后炮
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:156
专家分:560
注 册:2010-12-17
收藏
得分:10 
你可以这样看:

假设srand(1)后产生一个这样的随机数组
arr[] = {123,345,49,49,37,34857,4936,....}
然后你第一次调用rand就得到123,第二次调用就是345,第三次就是49.....

如果某时刻你再srand,就再重新生成这个数组,并且rand会重新从第一个开始取

樱之雪,晓之车
2010-12-20 22:21
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:10 
顶一下

Go Go Go
2010-12-20 22:38
交相辉映
Rank: 2
等 级:论坛游民
帖 子:13
专家分:17
注 册:2010-11-28
收藏
得分:0 
以下是引用马后炮在2010-12-20 22:21:45的发言:

你可以这样看:

假设srand(1)后产生一个这样的随机数组
arr[] = {123,345,49,49,37,34857,4936,....}
然后你第一次调用rand就得到123,第二次调用就是345,第三次就是49.....

如果某时刻你再srand,就再重新生成这个数组,并且rand会重新从第一个开始取


    找到了个源代码看了下
貌似不是你说的这样
不过可以这样理解
是rand函数利用一次种子,然后利用自己生成的数进行迭代调用。
结贴吧
2010-12-20 22:48
快速回复:rand和srand函数的一个疑问。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021771 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved