C語言 生成一個隨機數


隨機數的生成

有缺陷的生成方式

生成隨機數可以使用 <stdlib.h> 里的 int rand(void); 函數實現!

注釋:
C語言中還有一個 random() 函數可以獲取隨機數,但是 random() 不是標准函數,不能在 VC/VS 等編譯器通過,所以比較少用。

缺點:
這種隨機數生成方式得到的隨機數往往只有一個不變的數字,那是因為生成隨機數的種子是不變化的導致的!

這個種子在每次啟動計算機時是隨機的,但是一旦計算機啟動以后它就不再變化了

也就是說,每次啟動計算機以后,種子就是定值了,所以根據公式推算出來的結果(也就是生成的隨機數)就是固定的

修補方案(重新播種)

以通過使用 <stdlib.h> 中的 void srand (unsigned int seed); 函數來重新播種。

但是,我們還需要一個實時變化的種子,不然每次生成的隨機數還是固定的!那么,什么種子又簡單有能實時變化呢?

當然,<time.h> 中的 time(); 函數就很好的滿足了我們的需求!(time()函數這里不多做介紹,有興趣的可以自行學習!)

完整代碼

int a; srand((unsigned)time(NULL)); a = rand();

那么,這里的 int 類型變量 a 獲得的就是一個真正的隨機數,可以隨時間的不同生成不同的數!

進階

rand()%(n-m+1)+m 用於生成一個 m <= 隨機數 <= n 的隨機數。

注解(詳細解釋):

0+m <= rand()%(n-m+1)+m <= (n-m) + m

作者

SeaYJ
轉載請注明出處!謝謝~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM