當前位置:才華齋>計算機>C語言>

在C語言/C++中如何產生隨機數

C語言 閱讀(2.93W)

C語言功能非常強大、應用廣泛,一旦掌握了後,再自學其他語言就顯得輕而易舉了。在C語言/C++中如何產生隨機數?下面本站小編帶大家一起來看看詳細內容,希望對大家有所幫助!想了解更多相關資訊請持續關注我們應屆畢業生考試網!

在C語言/C++中如何產生隨機數

C語言/C++怎樣產生隨機數:這裡要用到的是rand()函式, srand()函式,和time()函式。

需要說明的是,iostream標頭檔案中就有srand函式的定義,不需要再額外引入stdlib.h;而使用time()函式需要引入ctime標頭檔案。

  使用rand()函式獲取一個隨機數

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

  例子1.1:

複製程式碼 程式碼如下:

#include<iostream>

using namespace std;

int main()

{

for(int i=0;i<10;i++)

{

cout<<rand()<<endl;

}

}

結果:

使用rand()函式獲取一定範圍內的一個隨機數

如果想要獲取在一定範圍內的數的話,直接做相應的除法取餘即可。

  例子2.1:

複製程式碼 程式碼如下:

#include<iostream>

using namespace std;

int main()

{

for(int i=0;i<10;i++)

{

//產生10以內的整數

cout<<rand()%10<<endl;

}

}

  結果:

我們上面獲取的都是隨機的整數,那麼如何獲取小數呢?例如:我們可以先獲得10001以內的整數(0~10000),然後再用這個整數除以10000得到小數點後兩位的小數。

  例子2.2:

複製程式碼 程式碼如下:

#include<iostream>

using namespace std;

int main()

{

for(int i=0;i<10;i++)

{

cout<<(rand()%10001)/10000.0<<endl;

}

}

注意10000.0後面的有個小數點,表示結果為浮點數。

結果:

  使用rand函式和time函式

我們上面已經可以獲取隨機數了,為什麼還需要使用time函式呢?我們通過多次執行發現,該程式雖然生成了10個隨機數,但是這個10個隨機數是固定的,也就是說並不隨著時間的變化而變化。

這與srand()函式有關。srand()用來設定rand()產生隨機數時的隨機數種子。在呼叫rand()函式產生隨機數前,必須先利用srand()設好隨機數種子(seed), 如果未設隨機數種子, rand()在呼叫時會自動設隨機數種子為1。

上面的.例子就是因為沒有設定隨機數種子,每次隨機數種子都自動設成相同值1 ,進而導致rand()所產生的隨機數值都一樣。

srand()函式定義 : void srand (unsigned int seed);

通常可以利用geypid()或time(0)的返回值來當做seed

如果你用time(0)的話,要加入標頭檔案#include<ctime>

time(0)或者time(NULL)返回的是系統的時間(從1970.1.1午夜算起),單位:秒

  例子3.1:

複製程式碼 程式碼如下:

#include <iostream>

#include <ctime>

using namespace std;

void main()

{

int a;

a=time(0);//time(0)返回的是系統的時間(從1970.1.1午夜算起),單位:秒

cout<<a<<endl;

}

  例子3.2:

複製程式碼 程式碼如下:

#include<iostream>

#include<ctime>

using namespace std;

int main()

{

srand(time(0));

for(int i=0;i<10;i++)

{

//產生10以內的整數

cout<<rand()%10<<endl;

}

}

這樣做的話,每次執行的結果就都不一樣了。