#include #include #include using namespace std;
int main(){
srand((unsigned int)time(0)); //使用系統時間來初始化種子
// srand((unsigned int)getpid());//用程序的pid作為種子值seed
cout執行結果
第一次執行
第二次執行
第一次執行
第二次執行
第一次執行
第二次執行
可以看到,不初始化種子,2次執行結果完全一樣,而用時間time(0)或者getpid()來初始化種子則能夠產生我們想要的隨機數,這是為什麼呢?讓我們接著看下一部分解說。
下面對函式rand和srand進行說明
c語言中用來產生乙個隨機數(整型)的函式。
rand函式界限
stdlib.h標頭檔案中有巨集#define rand_max 0x7fff,rand會產生乙個0-0x7fff的隨機數,即最大是32767的乙個數
rand函式原型
#include int rand(void);
rand函式呼叫rand()函式每次呼叫前都會查詢是否呼叫過srand(seed),是否給seed設定了乙個值,如果有那麼它會自動呼叫srand(seed)一次來初始化它的起始值;若之前沒有呼叫srand(seed),那麼系統會自動給seed賦初始值,即自動呼叫srand(1)一次
srand函式是隨機數發生器的初始化函式,原型:
void srand(unsigned int seed);
這個函式需要提供乙個種子,如srand(1),用1來初始化種子。
rand() 產生隨機數時,如果用srand(seed)播下種子之後,一旦種子相同(不指定seed或者指定為無符號整型常量),產生的隨機數將是相同的。當然一般情況下大家自然是想讓rand()產生的隨機數隨機化,所以一般是用時間作種子 srand(time(null)),因為每次執行程式的時間肯定是不相同的,產生的隨機數也就不一樣了。
我們常常使用系統時間來初始化,使用time函式來獲取系統時間,得到的值是乙個時間戳,即從2023年1月1日0點到現在時間的秒數,然後將得到的time_t型別資料轉化為(unsigned int)的數,然後再傳給srand函式,用法如下:
srand((unsigned int)time(null));//我們在使用rand和srand時,主要使用的就是這一種初始化方法
如果仍然覺得時間間隔太小,可以在(unsigned)time(0)或者(unsigned)time(null)後面乘上某個合適的整數。 例如,
srand((unsigned)time(null)*10);
time的引數傳null表示不需要經過傳參得到time_t資料,time函式原型如下
time_t time(time_t *tloc);//time_t型別被定義為乙個長整型
還有另外一種初始化種子的方式如下,用程序的pid作為種子值seed
srand((unsigned int)getpid());
C語言rand 函式產生隨機數
include include int main 產生1 6之間的隨機數 執行結果 函式一 int rand void 返回乙個 0,rand max 間的隨機整數。函式二 void srand unsigned seed 引數seed是srand 的種子,用來初始化srand 的起始值。系統在呼叫...
c 隨機數函式rand
c語言中rand 函式生成隨機數的用法 詳細介紹 1 使用該函式首先應在開頭包含標頭檔案stdlib.h include c 建議使用 include,下同 2 在標準的c庫中函式rand 可以生成0 rand max之間的乙個隨機數,其中rand max 是stdlib.h 中定義的乙個整數,它與...
解決rand函式產生偽隨機數的問題
在猜數問題中,無論程式執行多少次,所產生的數字,始終是42,並未達到,隨機數 的效果。include include intmain while guess magic printf counter d n counter return0 rand 函式纏上的是乙個偽隨機數 每次執行程式,產生的都是...