獲取隨機數函式sand()的用法詳見官方文獻:
1、函式 int sand(void);的返回值為0——rand_max(官方文獻裡此值為32767)之間的隨機數。
2、介紹sand()函式不可避免要介紹void srand(unsigned int seed);函式,此函式的作用有兩個:一、縮小sand()函式的返回值區間大小,執行過srand(unsigned int seed)函式後,sand函式的返回值為[seed,32767)之間的隨機數;二、可以理解為金鑰值,讓每次的sand()執行結果都不同,此時要求seed值必須是變值(金鑰值變化結果才能變化嘛)。sand()函式執行之間不執行srand函式與執行srand(1)的結果是相同的。
3、sand()的一些技巧:
(1)若再想縮小返回值的區間大小就要利用一些方法了,比如若想獲取[0,34)之間的隨機數,我們可以用求餘方法處理:sand() % 34。推廣公式就是: rand() %(m-n) + n,返回區間為[n,m)。
(2)前邊我們提到過如何讓每次的執行結果都不同,我們須把seed的值變化,我們首先想到的肯定是以當前的時間為seed值。
下面是寫的乙個小例子及執行結果:
例子1:不呼叫srand(unsigned int seed);時:
#include#include#includeint main()
result = rand()%16 + 1;
printf("%02d\n",result);
printf("over!\n");
return 0;
}
編譯及執行結果:
$ gcc -o test_rand my_rand.c
$ test_rand
the result is:
09 17 16 26 32 18 03
over!
$ test_rand
the result is:
09 17 16 26 32 18 03
over!
例子2:呼叫srand(1)時:
#include#include#includeint main()
result = rand()%16 + 1;
printf("%02d\n",result);
printf("over!\n");
return 0;
}
編譯及執行結果:
$ gcc -o test_rand my_rand.c
$ test_rand
the result is:
09 17 16 26 32 18 03
over!
$ test_rand
the result is:
09 17 16 26 32 18 03
over!
例子3:呼叫srand(seed),並且seed值一直變化的情況:
#include#include#includeint main()
result = rand()%16 + 1;
printf("%02d\n",result);
printf("over!\n");
return 0;
}
編譯及執行結果:
$ my_rand
the result is:
17 31 14 22 29 12 10
over!
$ my_rand
the result is:
19 24 22 29 25 21 16
over!
(不知道大家注意到rand函式返回值的區間的細節沒呢? 生成隨機數的 sand 與 srand
需要使用 include 標頭檔案中的rand 函式來生成隨機數。這個函式返回乙個在 0 rand max 之間的隨機整數。rand max 是乙個平台決定的常數。例如,在 visual c 中,rand max 是32767.rand 函式生成的是偽隨機數。即每次在同乙個系統上執行這個函式的時候,...
獲取隨機數
c 中提供了隨機數函式rand 但是這個函式其實提供的數字是有限的,大概是0 32767,所以這就導致了兩個問題 1 獲取的的數字並不是隨機的,比如要取0 99的隨機數,那麼一般就是rand 100,由於32767 100 67,所以0 67的數字獲得到的次數會比68 99多一次。2 無法獲取到比3...
隨機數總結
在計算機中並沒有乙個真正的隨機數發生器,但是可以做到使產生的數字重複率很低,這樣看起來好像是真正的隨機數,實現這一功能的程式叫隨機數發生器。無論採用什麼數學演算法產生隨機數發生器,都必須給它提供乙個名為 種子 的初始值。而且這個值最好是隨機的,或者至少這個值是偽隨機的。種子 的值通常是用快速暫存器或...