| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1658 人关注过本帖
标题:随机数播种问题
取消只看楼主 加入收藏
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
随机数播种问题
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int random(int a,int b);
void main()
{
    int i;
    for(i=1;i<20;i++)
        printf("%d\n",random(2,10));
}
int random(int a,int b)
{
    int i;
    srand((unsigned)time(NULL));
    i=rand()%(b-a+1)+a;
    return(i);
}

请问为何这个产生的随机数没办法改变?
而把srand函数搬到主函数内就可以了??
难道在声明函数的时候,它就已经播种了?
2013-05-22 12:50
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
回复 4楼 apull
正解!!!!
2013-05-24 21:26
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
回复 4楼 apull
对了,那个rand函数,每次调用的时候,输入的种子不是一样吗????为什么会产生不同随机数?
2013-05-24 21:31
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
以下是引用apull在2013-5-23 01:53:23的发言:

rand随机数是通过一个特别的函数计算出来的,种子一样,结果也一样。。
你把srand放到函数里,每次调用都要初始化一遍,由于运行的太快,(unsigned)time(NULL)得到的结果也是一样的,这个你可以输出检验下,把循环的20改成20000就能看到变化了。
所以每次调用random,就用同样的种子初始化srand,那么的出来的结果也是一样的。
一般在主函数里初始化一次就ok了



我想问,为什么放到主函数,这个问题就没有了呢?
2013-05-26 18:36
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
感谢各位大神啊!!!!小的学识太浅。。。已再加分
2013-05-27 16:18
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
回复 11楼 浮云之冰雪
就是用srand产生一个种子。。。。函数的备注写错了。。。。
2013-05-27 16:19
快速回复:随机数播种问题
数据加载中...
 
   



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

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