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 ----------\n",d);
            nCount++;
        }
        printf("d = %f \n",d);
    }
    printf("符合要求的數值有%d個\n",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]上的隨機數*/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM