1. 程式人生 > >C語言之隨機數函式( rand() )的使用方法

C語言之隨機數函式( rand() )的使用方法

在程式設計中,難免會使用到隨機值函式,其原理與語法大多類似,接下來以C語言為例介紹其隨機值函式 rand() 用法。

原理

引用百度百科,首先,需要包含標頭檔案:

#include <stdlib.h>

rand()函式是按指定的順序來產生整數,因此每次執行上面的語句都列印相同的兩個值,所以說C語言的隨機並不是真正意義上的隨機,有時候也叫偽隨機數,使用 rand() 生成隨機數之前需要用隨機發生器的初始化函式 srand(unsigned seed)(也位於 stdlib.h 中) 進行偽隨機數序列初始化,seed 又叫隨機種子,通俗講就是,如果每次提供的 seed 是一樣的話,最後每一輪生成的幾個隨機值也都是一樣的,因此叫偽隨機數,所以需要每次提供不同的 seed

達到完全的隨機,我們通常用時間函式 time(NULL) 作為 seed ,因為時間值每秒都不同,這個函式需要包含以下標頭檔案:

#include <time.h>

理論太泛,下面用例子分析理解。

舉例分析

先來理解以下偽隨機數,編譯以下程式碼:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    srand(1);
    int i;
    for (i = 0; i < 10; i++)
    printf("%d, "
, rand()%11); }

執行結果

8, 9, 9, 1, 7, 5, 5, 10, 1, 0,

然後無論執行多少次,結果都依然是以上隨機數,不會改變,因為每次設定的種子 seed 都是 1

但是假如把 seed 換成 time(NULL),每次就不一樣了,如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    srand(time(NULL));
    int i;
    for (i = 0; i < 10; i++)
    printf
("%d, ", rand()%11); }

結果是就變了,並且每次都不一樣:

6, 3, 4, 5, 5, 9, 8, 10, 10, 4,
6, 4, 2, 4, 3, 2, 5, 1, 2, 9,

這裡的 time(NULL) 的結果是一個類似於 1524655706 的數字,並且每秒都在遞增 1,也就達成了 srand() 的 seed 不斷變化的目的,不斷生成新的隨機數。

拓展

這裡注意一下例子中函式 rand() 的用法,函式括號內不需要加引數,如果直接呼叫 rand() 的話會生成下面這樣的數:

17163, 2663, 24810, 4875, 26975, 14119, 22193, 11233, 26009, 20105,

所以我們想要生成指定範圍的隨機數的話就需要使用到求餘運算子 %,這裡有個規律:例如我們需要 0–10的隨機數時,就寫成 rand()%11,0–100就寫成 rand()%101,就是運算子後的數字需要比需求範圍極值大 1,當然這也是取餘運算的原理。

技術文章推送
手機、電腦實用軟體分享