1樓:韌勁
1. 基本函式
在c語言中取隨機數所需要的函式是:
int rand(void); void srand (unsigned int n);
rand()函式和srand()函式被宣告在標頭檔案stdlib.h中,所以要使用這兩個函式必須包含該標頭檔案:
#include
2. 使用方法
rand()函式返回0到rand_max之間的偽隨機數(pseudorandom)。rand_max常量被定義在stdlib.h標頭檔案中。其值等於32767,或者更大。
srand()函式使用自變數n作為種子,用來初始化隨機數產生器。只要把相同的種子傳入srand(),然後呼叫rand()時,就會產生相同的隨機數序列。因此,我們可以把時間作為srand()函式的種子,就可以避免重複的發生。
如果,呼叫rand()之前沒有先呼叫srand(),就和事先呼叫srand(1)所產生的結果一樣。
舉個例子,假設我們要取得0~10之間的隨機整數(不含10本身):
/* 例1:不指定種子的值 */
for (int i=0; i<10; i++)
每次執行都將輸出:1 7 4 0 9 4 8 8 2 4
/* 例2:指定種子的值為1 */
srand(1); for (int i=0; i<10; i++)
每次執行都將輸出:1 7 4 0 9 4 8 8 2 4
例2的輸出結果與例1是完全一樣的。
/* 例3:指定種子的值為8 */ srand(8); for (int i=0; i<10; i++)
每次執行都將輸出:4 0 1 3 5 3 7 7 1 5
該程式取得的隨機值也是在[0,10)之間,與srand(1)所取得的值不同,但是每次執行程式的結果都相同。
/* 例4:指定種子值為現在的時間 */ srand((unsigned)time(null)); for (int i=0; i<10; i++)
該程式每次執行結果都不一樣,因為每次啟動程式的時間都不同。另外需要注意的是,使用time()函式前必須包含標頭檔案time.h。
3. 注意事項
求一定範圍內的隨機數。
如要取[0,10)之間的隨機整數,需將rand()的返回值與10求模。
randnumber = rand() % 10;
那麼,如果取的值不是從0開始呢?你只需要記住一個通用的公式。
要取[a,b)之間的隨機整數(包括a,但不包括b),使用:
(rand() % (b - a)) + a
偽隨機浮點數。
要取得0~1之間的浮點數,可以用:
rand() / (double)(rand_max)
如果想取更大範圍的隨機浮點數,比如0~100,可以採用如下方法:
rand() /((double)(rand_max)/100) 其他情況,以此類推,這裡不作詳細說明。
2樓:匿名使用者
您好,您應該匯入,使用rand()函式產生一個0~1的隨機數(前閉後開)
所以您的程式應該這樣寫:
#include
#include
float getrand(float a,float b)一樓沒有按照要求編寫一個函式,而且用時間直接取隨機數並不規範。
3樓:技術變現探索者
rand函式返回值的範圍是: [0,1)
int value =(b-a)*rand();
例如:50到100之間的數
(100-50) * rand()
4樓:匿名使用者
#include
#include
#include
void main()
printf("%f\n",c);}
c語言中獲得隨機數的方法
5樓:匿名使用者
c語言/c++怎樣產生隨機數:這裡要用到的是rand()函式, srand()函式,c語言/c++裡沒有自帶的random(int number)函式。
(1) 如果你只要產生隨機數而不需要設定範圍的話,你只要用rand()就可以了:rand()會返回一隨機數值, 範圍在0至rand_max 間。rand_max定義在stdlib.
h, 其值為2147483647。
例如:#include
#include
void main()
(2) 如果你要隨機生成一個在一定範圍的數,你可以在巨集定義中定義一個random(int number)函式,然後在main()裡面直接呼叫random()函式:例如:隨機生成10個0~100的數:
#include
#include
#define random(x) (rand()%x)
void main()
(3)但是上面兩個例子所生成的隨機數都只能是一次性的,如果你第二次執行的時候輸出結果仍和第一次一樣。這與srand()函式有關。srand()用來設定rand()產生隨機數時的隨機數種子。
在呼叫rand()函式產生隨機數前,必須先利用srand()設好隨機數種子(seed), 如果未設隨機數種子, rand()在呼叫時會自動設隨機數種子為1。上面的兩個例子就是因為沒有設定隨機數種子,每次隨機數種子都自動設成相同值1 ,進而導致rand()所產生的隨機數值都一樣。srand()函式定義 :
void srand (unsigned int seed);
通常可以利用geypid()或time(0)的返回值來當做seed
如果你用time(0)的話,要加入標頭檔案#include例如:
#include
#include
#include
#define random(x) (rand()%x)
void main()
這樣兩次執行的結果就會不一樣了!!
6樓:
問題1: 怎樣獲得一個真正的隨機數?要知道,rand()是不能產生真正的隨機數的!即使不能產生真正的隨機數,也要大概接近呀!而rand()好象每次的隨機都一樣。
專家解答:
之所以rand()每次的隨機數都一樣是因為rand()函式使用不正確。各種程式語言返回的隨機數(確切地說是偽隨機數)實際上都是根據遞推公式計算的一組數值,當序列足夠長,這組數值近似滿足均勻分佈。如果計算偽隨機序列的初始數值(稱為種子)相同,則計算出來的偽隨機序列就是完全相同的。
這個特性被有的軟體利用於加密和解密。加密時,可以用某個種子數生成一個偽隨機序列並對資料進行處理;解密時,再利用種子數生成一個偽隨機序列並對加密資料進行還原。這樣,對於不知道種子數的人要想解密就需要多費些事了。
當然,這種完全相同的序列對於你來說是非常糟糕的。要解決這個問題,需要在每次產生隨機序列前,先指定不同的種子,這樣計算出來的隨機序列就不會完全相同了。你可以在呼叫rand()函式之前呼叫srand( (unsigned)time( null ) ),這樣以time函式值(即當前時間)作為種子數,因為兩次呼叫rand函式的時間通常是不同的,這樣就可以保證隨機性了。
你也可以使用srand函式來人為指定種子數。windows 9x/nt的遊戲freecell就允許使用者指定種子數,這樣使用者如果一次遊戲沒有成功,下次還可以以同樣的發牌結果再玩一次。
問題2: 我按照上述方法並不能產生隨機數,僅產生公差為3或4的等差數列:
#include
#include
#include
#include
void main() }
專家解答:
你的程式是有問題的,你每產生一個隨機數之前,都呼叫一次srand,而由於計算機執行很快,所以你每次用time得到的時間都是一樣的(time的時間精度較低,只有55ms)。這樣相當於使用同一個種子產生隨機序列,所以產生的隨機數總是相同的。你應該把srand放在迴圈外:
srand( (unsigned)time( null ) );
for(int i=0;i<100000;i++)
7樓:風若遠去何人留
可以使用庫函式rand()。
rand宣告於stdlib.h,其原型為
int rand(void);
功能為返回一個隨機整型值。在c語言中,該值是一個正數值。
在需要限定獲取到的隨機數範圍時,如範圍要求為[m,n] m rand()%(n-m+1)+m 的形式進行獲取。原理為: %為取餘計算,當%k時,結果是[0,k-1]之間的數值; 於是rand()%(n-m+1) ∈ [0, n-m]; 所以rand()%(n-m+1)+m ∈ [0+m, n-m+m]=[m,n]。 8樓:匿名使用者 用隨機數函式要區分程式設計環境。tc和vc(vc代表win32編譯器)是不同的。tc下用以下兩個函式初始化隨機數產生器void randomize(void)產生隨機數(max表示 產生從0~max-1的隨機數) int random(int max)例子:int main()vc下也有兩個函式 srand(unsigned long seed) 用於初始化隨機數,引數為隨機數種子,一般使用當前時間作為隨機數種子。 unsigned long rand(void)返回一個隨機數,範圍可用取餘運算控制。 例子:#include int main() 9樓:匿名使用者 在vc中設計到隨機數有兩個函式 srand() and rand() srand() 的作用是是一個種子,提供每次獲得隨機數的基數而已,rand()根據種子而產生隨機數 注意1:srand() 裡的值必須是動態變化的,否則得到的隨機數就是一個固定數 2:其實可以不用寫srand() ,只用rand()就可以了,省事,簡單,例子如下 如果我們想得到一個 0-60的隨機數那麼可以寫成int i; i=rand()%60; 就可以了。 當然最好有個統一的標註如下: int i; srand((unsigned)time( null )); i=rand()%60; 這樣就ok了。 10樓:仙桖珍 c語言生成隨機數需要用到兩個函式,一個是srand(),一個是rand(),首先給srand()提供一個種子,unsigned int型別,其取值範圍從0~65535,srand()根據這個種子會由一個特定的公式生成一個隨機數序列;然後呼叫rand(),它會依次從這個序列中返回一個數(在0到32767之間),而在不指定srand()種子的情況下,它每次都使用預設的種子,因此生成的序列是同一個,你每次執行,當然就取到相同的數字了。 你可以在程式裡新增標頭檔案time.h,用當前時間作為srand的種子,這樣就能保證每次執行時都能取到不同的隨機數序列。如下: time_t t; srand((unsigned) time(&t)); 然後就可以用rand()取隨機數了。 c語言中產生隨機數的相關函式主要包括srand和rand函式,兩者配合生成隨機資料,測試 如下,include include include void main srand time null for i 0 i 5 i for j 0 j 5 j p i j rand 100 1 產生1 100... 巧金蘭嵇嫣 樓上這樣得出的隨機值不準確,不信你執行幾次試試,都是同一個數。正確應該這樣。首先加標頭檔案 include include 然後在主函式裡面寫 inti srand time 0 i rand 100 1 printf d i 隨機數主要有兩個函式 一個種子產生函式 void srand... 冰 vs 霰 strlen是測量字串長度的 char d 和char a china char b 是等價的 是陣列的表示形式 而char c 卻是字元陣列所以並不能得到結果 strlen函式測量字串中字元個數,不包括結尾的 0 字元,你的 char c沒有結尾的 0 不是合法的字串,所以結果不對 ...C語言中產生隨機數的函式是什麼
C語言中產生隨機數,C語言怎樣產生一定範圍的隨機數?
c語言中的strlen函式,C語言中的strlen函式