| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1605 人关注过本帖
标题:用rand( )的奇怪现象
取消只看楼主 加入收藏
cmx2409
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-11-10
收藏
 问题点数:0 回复次数:3 
用rand( )的奇怪现象
用rand()输出10个随机数(这10个随机数的范围在1-10之间)
代码如下:
#include<iostream>
using namespace std;
#include<time.h>
int main()
{
    int i;
    srand((unsigned)time(NULL));
    for(i=0;i<10;i++)
    {
        cout<<1+(int)(10.0*rand()/(RAND_MAX+1.0))<<" ";
    }
    cout<<endl;
        return 0;
}
我连续运行几次结果如下:
9 5 2 9 1 10 10 1 6 10
Press any key to continue
9 2 3 4 7 3 1 9 6 6
Press any key to continue
9 2 10 6 7 6 4 7 1 1
Press any key to continue
--------------------------------------------------------------------------------------------------------------------------
我发现在产生的第一个数都是一样的,于是对代码做如下改动:
将原来的“cout<<1+(int)(10.0*rand()/(RAND_MAX+1.0))<<" "; ”
改为“cout<<1+(int)(10.0*rand()/(RAND_MAX+1.0))<<" "<<rand()<<" ";”
连继几次运行结果如下;
8 30867 3 15363 4 25193 1 4540 9 9588 6 10727 9 11060 6 15548 1 1345 1 15649
Press any key to continue
2 30850 6 24346 8 6389 6 21745 8 25334 6 11466 4 31438 9 2891 3 31095 5 6495
Press any key to continue
5 30834 9 561 2 20352 10 6183 8 8312 6 12206 8 19048 3 23003 4 28077 9 30109
Press any key to continue
这回第一个数不同了,但是根据后面的随机数并按“1+(int)(10.0*rand()/(RAND_MAX+1.0))”计算的话,前面的1-10之间的数并不正确
---------------------------------------------------------------------------------------------------------------------------
再做实验,代码如下:
#include<iostream>
using namespace std;
#include<time.h>
int main()
{
    int i;
    srand((unsigned)time(NULL));
    for(i=0;i<10;i++)
    {
        cout<<1+(int)(10.0*rand()/(RAND_MAX+1.0))<<" ";
    }
    cout<<endl;
    for(i=0;i<10;i++)
    {
        cout<<1+(int)(10.0*rand()/(RAND_MAX+1.0))<<" "<<rand()<<" ";
    }
    cout<<endl;
    return 0;
}
连续几次运行结果如下:
1 5 1 7 5 9 9 7 8 2
6 30130 1 14232 10 26183 6 31074 1 21586 8 14874 9 3277 9 7596 8 15158 4 21679
Press any key to continue
1 1 4 2 8 10 5 1 3 10
6 27615 7 30144 10 10234 2 28228 4 19940 8 12329 5 29153 6 26471 3 16956 10 27719
Press any key to continue
1 4 9 9 1 1 6 1 9 8
6 27467 2 19515 6 32426 7 22278 1 21771 3 23745 7 11400 9 8306 8 5496 6 4944
Press any key to continue
1 10 10 4 8 3 8 9 9 5
6 27172 2 31025 6 11274 8 10378 5 25432 3 13808 2 8661 6 4744 8 15345 9 24930
Press any key to continue
这回第一个数又相同了

请高手帮忙解释下
搜索更多相关主题的帖子: rand 
2008-11-12 22:35
cmx2409
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-11-10
收藏
得分:0 
MSDN中不是说了么..rand( )产生的是伪随机数..

Remarks
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.

今天我又连续运行了几次第一个程序,第一个数虽然不是9,但都是2开头的
还有就是第二个程序中,根据后面的随机数并按“1+(int)(10.0*rand()/(RAND_MAX+1.0))”计算的话,前面的1-10之间的数并不正确.这是为什么 如:
30867 按“1+(int)(10.0*rand()/(RAND_MAX+1.0))”计算,前面应该是10啊,而不是8
2008-11-15 20:27
cmx2409
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-11-10
收藏
得分:0 
MSDN中不是说了么..rand( )产生的是伪随机数..

Remarks
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.

今天我又连续运行了几次第一个程序,第一个数虽然不是9,但都是2开头的
还有就是第二个程序中,根据后面的随机数并按“1+(int)(10.0*rand()/(RAND_MAX+1.0))”计算的话,前面的1-10之间的数并不正确.这是为什么 如:
30867 按“1+(int)(10.0*rand()/(RAND_MAX+1.0))”计算,前面应该是10啊,而不是8
2008-11-15 20:32
cmx2409
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-11-10
收藏
得分:0 
谢谢5楼沼泽版主的指导..
也谢谢LS的哥们,看来还要多多思考啊
2008-11-17 18:30
快速回复:用rand( )的奇怪现象
数据加载中...
 
   



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

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