| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 470 人关注过本帖
标题:关于随机数的问题
只看楼主 加入收藏
enjoylhl
Rank: 1
等 级:新手上路
帖 子:18
专家分:4
注 册:2013-9-23
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:5 
关于随机数的问题
#include<stdio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
#define P_num 30
#define dm 160
double particle[P_num][dm];
void main()
{
    void initial();
    int i,j;
    srand((unsigned)time(NULL));
    initial();
    for(j=0;j<dm;j++)
        printf("%f\n",particle[2][j]);
}

void initial()
{
    int a[160]={0,40,52,76,88,112,124,164,
        40,80,92,116,128,152,164,204,
        80,120,132,156,168,192,204,244,
        120,160,172,196,208,232,244,284,
        160,200,212,236,248,272,284,324,
        200,240,252,276,288,312,324,364,
        240,280,292,316,328,352,364,404,
        280,320,332,356,368,392,404,444,
        320,360,372,396,408,432,444,484,
        360,400,412,436,448,472,484,524,
        400,440,452,476,488,512,524,564,
        440,480,492,516,528,552,564,604,
        480,520,532,556,568,592,604,644,
        520,560,572,596,608,632,644,684,
        560,600,612,636,648,672,684,724,
        600,640,652,676,688,712,724,764,
        640,680,692,716,728,752,764,804,
        680,720,732,756,768,792,804,844,
        720,760,772,796,808,832,844,884,
        760,800,812,836,848,872,884,924};
    int i,j;
    double b0,b1,b2,b3,b4,b5,b6,b7;

    for(j=0;j<dm;j++)
        particle[0][j]=a[j];

    for(i=1;i<P_num;i++)
    {
        while(1)
        {
            b0=particle[0][0];
            b1=particle[0][1]+10*rand()/RAND_MAX;
            b2=particle[0][2]+10*rand()/RAND_MAX;
            b3=particle[0][3]+10*rand()/RAND_MAX;
            b4=particle[0][4]+10*rand()/RAND_MAX;
            b5=particle[0][5]+150*rand()/RAND_MAX;
            b6=particle[0][6]+10*rand()/RAND_MAX;
            b7=particle[0][7]+10*rand()/RAND_MAX;
            if(b1-b0>42&&b1-b0<48&&b2-b1>9&&b2-b1<15&&b3-b2>24&&b3-b2<32&& b4-b3>9&&b4-b3<15&&
            b5-b4>24&&b5-b4<32&&b6-b5>15&&b6-b5<20&&b7-b6>40&&b7-b6<45) break;
        }
        particle[i][0]=b0;
        particle[i][1]=b1;
        particle[i][2]=b2;
        particle[i][3]=b3;
        particle[i][4]=b4;
        particle[i][5]=b5;
        particle[i][6]=b6;
        particle[i][7]=b7;

        for(j=1;j<20;j++)
        {
            while(1)
            {
                b0=particle[0][8*j]+10*rand()/RAND_MAX;
                b1=particle[0][8*j+1]+10*rand()/RAND_MAX;
                b2=particle[0][8*j+2]+10*rand()/RAND_MAX;
                b3=particle[0][8*j+3]+10*rand()/RAND_MAX;
                b4=particle[0][8*j+4]+10*rand()/RAND_MAX;
                b5=particle[0][8*j+5]+10*rand()/RAND_MAX;
                b6=particle[0][8*j+6]+10*rand()/RAND_MAX;
                b7=particle[0][8*j+7]+10*rand()/RAND_MAX;
                if(b1-b0>42&&b1-b0<48&&b2-b1>9&&b2-b1<15&&b3-b2>24&&b3-b2<32&&b4-b3>9&&b4-b3<15&&b5-b4>24&&
                    b5-b4<32&&b6-b5>15&&b6-b5<20&&b7-b6>40&&b7-b6<50
                    &&b0-particle[i][8*j-7]>0&&b0-particle[i][8*j-7]<10
                    &&b6-particle[i][8*j-1]>0&&b6-particle[i][8*j-1]<10)
                    break;
            }
            particle[i][8*j]=b0;
            particle[i][8*j+1]=b1;
            particle[i][8*j+2]=b2;
            particle[i][8*j+3]=b3;
            particle[i][8*j+4]=b4;
            particle[i][8*j+5]=b5;
            particle[i][8*j+6]=b6;
            particle[i][8*j+7]=b7;
        }
    }
}
请教一下,以上程序中随机数的用法对吗??为什么我运行的时候10*rand()/RAND_MAX总是等于一个数;根本不是随机取值。
搜索更多相关主题的帖子: include initial 
2014-05-10 12:46
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:10 
因为rand()是整型的,10*rand()/RAND_MAX  是整除,所以看起来不那么随机。你试一试下面的修改,应该可以了。
10* (float) rand()/RAND_MAX;   <---加上类型转换。
2014-05-10 13:21
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
同意楼上。


[ 本帖最后由 top398 于 2014-5-10 13:24 编辑 ]
2014-05-10 13:22
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
简单一点的话,可加上个初始化srand函数

梦想拥有一台龙芯3A-4000
2014-05-10 13:22
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
本来说应该加 srand(time(NULL)); 不知是楼主改了还是自己看漏了。
2014-05-10 13:27
enjoylhl
Rank: 1
等 级:新手上路
帖 子:18
专家分:4
注 册:2013-9-23
收藏
得分:0 
回复 2 楼 kwxx
太谢谢!
2014-05-10 20:46
快速回复:关于随机数的问题
数据加载中...
 
   



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

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