C語言和java中生成隨機數的原理和方法

C語言

一.函數
1:int rand(void)
該函數會產生一個[0,RAND_MAX]的僞隨機數,那什麼是僞隨機數?
相當於一個序列a1-an,第一次使用會返回a1, 第二次使用會返回a2….第n次返回an,這樣每次調用rand()都能產生一個不同的數,只要整個序列的規律不明顯,整個函數看起來就是隨機的。
而這個序列是計算機通過調用srand((int)time(NULL))函數隨機產生的。

2:void srand(unsigned seed)

srand((unsigned)time(NULL))則使用系統定時/計數器的值作爲隨機種子。每個種子對應一組根據算法預先生成的隨機數序列,所以,在相同的平臺環境下,不同時間產生的隨機數會是不同的。如果該函數的參數是一個常數,那麼每次生成的隨機數序列都是固定的。
二.函數使用
1.標準使用:

# include <stdio.h>
# include <stdlib.h>
# include <time.h>

int main(void)
{
    srand((int)time(NULL));
    printf("%d\n",RAND_MAX);
    for(int i = 0; i<5; i++)
    {
        printf("%d\n",rand());
     }  
    return 0;
}

結果:

2:如果你想產生在[0, 32767]範圍內的一個範圍的隨機數,可以這樣:

# include <stdio.h>
# include <stdlib.h>
# include <time.h>

int main(void)
{
    int n;
    srand((int)time(NULL));
     printf("你想生成隨機數的最大值是多少?\n");
     scanf("%d",&n); 
    for(int i = 0; i<5; i++)
    {
        printf("%d\n",rand()%n);
     }  
    return 0;
}

結果:


3.如果你還不滿足n的範圍,可以這樣(缺點:n太大精度不好):

# include <stdio.h>
# include <stdlib.h>
# include <time.h>

int main(void)
{
    int n;
    srand((int)time(NULL));
     printf("你想生成隨機數的最大值是多少?\n");
     scanf("%d",&n); 
    for(int i = 0; i<5; i++)
    {
        double t =(double)rand()/32767;//產生一個[0,1]內的隨機數
        double c = t*n;//將他變成你想要的範圍
        printf("%d\n",(int)c);
     }  
    return 0;
}

結果:

三.注意:
1.srand()函數是用來初始化隨機數種子的,種子決定序列,種子相同,序列也就相同,每次產生的隨機數也就相同,而且srand()只需要執行一次,不要在程序中多次使用它,防止產生相同的隨機數。
2.關於time_t time(0):time_t被定義爲長整型,它返回從1970年1月1日零時零分零秒到目前爲止所經過的時間,單位爲秒。
3.如果在程序中沒有使用srand()函數,那麼系統會默認給種子初始爲0,所以每次產生的隨機數序列都是一樣的,這個要注意。

Java

一:函數
1.Math.random()
該函數會默認生成[0,1)內的隨機數,注意1不閉合。所以你要產生某一範圍內的隨機數就要最後加上1.
二:函數的使用

public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("你想要的範圍最大數:");
        java.util.Scanner input = new java.util.Scanner(System.in);
        double n= input.nextDouble();
        for(int i = 0; i<5; i++)
        {
            System.out.println(Math.random()*n+1);
        }
    }
}

結果:
這裏寫圖片描述
這裏寫圖片描述
3.java很方便吧

發佈了27 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章