1. 程式人生 > >C語言中生產隨機數 rand()函式

C語言中生產隨機數 rand()函式

一:如果你只要產生隨機數而不需要設定範圍的話,你只要用rand()就可以了:rand()會返回一隨機數值, 範圍在0至RAND_MAX 間。RAND_MAX定義在stdlib.h, 其值為2147483647。

#include <cstdlib>
#include <cstdio>

int main()
{
    int i;

    for(i = 1; i <= 10; i++)
    {
        printf("%d ",rand());
    }

    printf("\n");

    return 0;
}

二:如果你要隨機生成一個在一定範圍的數,你可以在巨集定義中定義一個random(int number)函式,然後在main()裡面直接呼叫random()函式。
我這裡使用了兩種做法,一種是利用巨集定義,另外一種是利用自己寫的函式。

#include <cstdlib>
#include <cstdio>
#define random1(x) (rand() % x)

int random2(int x)
{
    return rand() % x;
}

int main()
{
    int i;

    for(i = 1; i <= 10
; i ++) { printf("%d ",random1(100)); } printf("\n"); for(i = 1; i <= 10; i ++) { printf("%d ",random2(100)); } return 0; }

三:但是上面兩個例子所生成的隨機數都只能是一次性的,如果你第二次執行的時候輸出結果仍和第一次一樣。這與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 <cstdlib>
#include <cstdio>
#include <ctime>
#define random(x) (rand() % x)

int main()
{
    int i;

    srand((unsigned int) time(0));

    for(i = 1; i <= 10; i ++)
    {
        printf("%d ",random(100));
    }

    return 0;
}