| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1658 人关注过本帖
标题:随机数播种问题
只看楼主 加入收藏
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:15 
随机数播种问题
程序代码:
#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
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:3 
效果一样啊!

Maybe
2013-05-22 13:48
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:3 
我觉得是你定义的#include<time.h>是对主函数作用的!对你自定义的函数不起作用! 所以你应该把srand((unsigned)time(NULL));语句放到主函数中!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-05-22 22:26
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:3 
rand随机数是通过一个特别的函数计算出来的,种子一样,结果也一样。。
你把srand放到函数里,每次调用都要初始化一遍,由于运行的太快,(unsigned)time(NULL)得到的结果也是一样的,这个你可以输出检验下,把循环的20改成20000就能看到变化了。
所以每次调用random,就用同样的种子初始化srand,那么的出来的结果也是一样的。
一般在主函数里初始化一次就ok了
2013-05-23 01:53
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:3 
一样的吧...

三十年河东,三十年河西,莫欺少年穷!
2013-05-24 14:09
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
秦殇
Rank: 2
等 级:论坛游民
帖 子:61
专家分:77
注 册:2013-3-13
收藏
得分:3 
函数rand()是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 srand()会导致相同的随机数序列被生成。
2013-05-24 23:20
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:0 
程序代码:
int random(int a,int b)
{
    int i;
    srand((unsigned)time(NULL));
    printf("\ttime:%u\n",(unsigned)time(NULL));
    i=rand()%(b-a+1)+a;
    return(i);
}

你就能看到种子是一样的。
2013-05-25 14:44
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:3 
四楼的
2013-05-26 16:50
快速回复:随机数播种问题
数据加载中...
 
   



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

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