如何生成1和3之間的隨機數? 有了這個功能,我得到有時0(我只希望有1,2或3):1和3之間的隨機數
ziehen=rand() % 3 + 1;
爲什麼我要在主程序中添加函數srand(0)? 我已添加
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
到Libaries。這是足夠的還是我需要更多?
如何生成1和3之間的隨機數? 有了這個功能,我得到有時0(我只希望有1,2或3):1和3之間的隨機數
ziehen=rand() % 3 + 1;
爲什麼我要在主程序中添加函數srand(0)? 我已添加
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
到Libaries。這是足夠的還是我需要更多?
該代碼永遠不會返回0. rand()總是返回一個介於0和RAND_MAX之間的數字。
模操作返回一個介於0和2之間的值。加1會得到你想要的結果。 不需要括號。模數等於上述加數。
你不必添加srand(0),但是如果你這樣做,你總會得到相同的數字序列。閱讀文檔。
從技術上講,你稱之爲「模運算」被稱爲「餘數」。它返回-2和2之間的值(提示)。 –
但是我們只有0和RAND_MAX之間的值。這怎麼可能是消極的? – xMRi
是的,我想知道OP如何管理它(並且OP說包含了stdlib.h,它應該提供'rand()'的原型 - 缺少原型是我想到的方法之一) –
您必須從不使用模數來減少輸出的週期性rand()
。原因?這是因爲標準線性同餘發生器的低位比較高位比較不隨機:模數丟棄高位。
最好的辦法是使用(3.0 * rand()/(RAND_MAX + 1.0)) + 1.0;
。通過將輸出分配給整型,隱式將其轉換爲int
。
RAND_MAX
由C標準定義,它的值是依賴於實現
_'or我需要更多?'_是否行得通? –
啊,好老的剩餘技術。請閱讀http://ericlippert.com/2013/12/16/how-much-bias-is-introduced-by-the-remainder-technique/ – harold
獲取rand()的結果副本,並將其用於計算ziehen。當ziehen爲零時打印它的值。看看哪些數值會讓你零。 – cup