C語言中的隨機數問題

2021-06-26 14:09:15 字數 640 閱讀 9002

要知道,只用int mm = rand()%10+0(產生0--9之間的隨機數)是不能產生真正的隨機數的!,結果每次產生的隨機數是一樣的。之所以rand()每次的隨機數都一樣是因為rand()函式使用不正確。各種程式語言返回的隨機數(確切地說是偽隨機數)實際上都是根據遞推公式計算的一組

數值,當序列足夠長,這組數值近似滿足均勻分布。如果計算偽隨機序列的初始數值(稱為種子)相同,則計算出來的偽隨機序列就是完全相同的。這個特

性被有的軟體利用於加密和解密。加密時,可以用某個種子數生成乙個偽隨機序列並對資料進行處理;解密時,再利用種子數生成乙個偽隨機序列並對加密

資料進行還原。這樣,對於不知道種子數的人要想解密就需要多費些事了。當然,這種完全相同的序列對於你來說是非常糟糕的。要解決這個問題,需要在

每次產生隨機序列前,先指定不同的種子,這樣計算出來的隨機序列就不會完全相同了。你可以在呼叫rand()函式之前呼叫srand( (unsigned)time( null ) ),

這樣以time函式值(即當前時間)作為種子數,因為兩次呼叫rand函式的時間通常是不同的,這樣就可以保證隨機性了。

程式例項如下:#include#include#includevoid main()

}

C語言中隨機數相關問題

用c 語言產生隨機數重要用到 rand 函式 srand 函式 及巨集 rand max 32767 它們均在 stdlib.h 中進行了宣告。int rand void 生成乙個隨機數 voidsrand unsigned int seed 為rand 設定 種子 的值 srand 就是給rand...

C語言中隨機數相關問題

用c 語言產生隨機數重要用到 rand 函式 srand 函式 及巨集 rand max 32767 它們均在 stdlib.h 中進行了宣告。int rand void 生成乙個隨機數 voidsrand unsigned int seed 為rand 設定 種子 的值 srand 就是給rand...

C 語言中的隨機數

例子1 include include int main void 例子2 以下是msdn的乙個例子 crt rand.c this program seeds the random number generator with the time,then displays 10 random int...