zoukankan      html  css  js  c++  java
  • 0-1之间的随机数 C/C++

    先贴代码(小数点后6位) vc6.0测试

    #include "stdafx.h"
    #include <time.h>
    #include <stdlib.h>
    
    int main(int argc, char* argv[])
    {
        double d = 0.0;
        int nCount = 0;
    
        srand((int)time(0));
        for(int x=0;x<1000;x++){
            d=((double)rand())/RAND_MAX;
            if (d>=0.300000 && d<=0.500000)    {
                printf("--------d = %f ----------
    ",d);
                nCount++;
            }
            printf("d = %f 
    ",d);
        }
        printf("符合要求的数值有%d个
    ",nCount);
        system("pause");
        return 0;
    }

    以下转载

    http://blog.csdn.net/beyond0824/article/details/6009908

    C/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。
    (1)  如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。
    例如:

    #include<stdio.h>
    #include<stdlib.h>
    void main()
    {
           for(int i=0;i<10;i+)
                 printf("%d/n",rand());
    }

    (2)  如果你要随机生成一个在一定范围的数,你可以在宏定义中定义一个random(int number)函数,然后在main()里面直接调用random()函数:

    例如:随机生成10个0~100的数:
    #include<stdio.h>
    #include<stdlib.h>
    #define random(x) (rand()%x)

    void main()
    {
         for(int x=0;x<10;x++)
               printf("%d/n",random(100));
    }

    (3)但是上面两个例子所生成的随机数都只能是一次性的,如果你第二次运行的时候输出结果仍和第一次一样。这与srand()函数有关。srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1。上面的两个例子就是因为没有设置随机数种子,每次随机数种子都自动设成相同值1 ,进而导致rand()所产生的随机数值都一样。

    srand()函数定义 : void srand (unsigned int seed);
    通常可以利用geypid()或time(0)的返回值来当做seed
    如果你用time(0)的话,要加入头文件#include<time.h>

    例如:
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #define random(x) (rand()%x)

    void main()
    {

         srand((int)time(0));
         for(int x=0;x<10;x++)
               printf("%d/n",random(100));
    }

    这样两次运行的结果就会不一样了!!

    <二>

    标准C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。

    rand()函数没有输入参数,直接通过表达式rand()来引用;例如可以用下面的语句来打印两个随机数:

    printf("Random numbers are: %i %i/n",rand(),rand());

    因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随即并不是正真意义上的随机。

    为了时程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。函数srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。

    例程:

    文件名: rand_srand.c

    /* This program generates and prints ten random integers between 1 and RAND_MAX*/

    #include <stdio.h>

    #includ <stdlib.h>

    int main()

    {

            usigned int seed;        /*申明初始化器的种子,注意时usigned int 型的*/

            int k;

            pringt("Enter a positive integer seed value: /n");

            scanf("%u",&seed);

            srand(seed);

            printf("Random Numbers are:/n");

            for(k = 1; k <= 10; k++)

            printf("%i",rand());

            printf("/n");

            return 0;

    }

    你会发现,当你提供的种子相同时,随机数序列也时相同的。而且当种子为1时,与不使用srand()函数时一样的,也就是说rand()函数默认情况下初始化种子值为1;

    在stdlib.h 中这两个函数的原型是:

    int rand();

    void srand (unsigned int);

    扩充:

            x = rand()%11; /*产生1~10之间的随机整数*/

            y = rand()%51 - 25; /*产生-25 ~ 25之间的随机整数*/

            z = ((double)rand()/RAND_MAX)*(b-a) + a;/*产生区间[a,b]上的随机数*/

  • 相关阅读:
    HDU 2888 Check Corners (模板题)【二维RMQ】
    POJ 3264 Balanced Lineup(模板题)【RMQ】
    poj 3368 Frequent values(经典)【RMQ】
    SPOJ RPLN (模板题)(ST算法)【RMQ】
    UVA 796 Critical Links(模板题)(无向图求桥)
    UVA 315 Network (模板题)(无向图求割点)
    POJ 2029 Get Many Persimmon Trees (模板题)【二维树状数组】
    poj 3067 Japan 【树状数组】
    POJ 2481 Cows 【树状数组】
    POJ 1195 Mobile phones【二维树状数组】
  • 原文地址:https://www.cnblogs.com/Lthis/p/4437986.html
Copyright © 2011-2022 走看看