如何在C語言中生成一定範圍內的隨機數

2021-03-07 04:27:13 字數 6085 閱讀 5944

1樓:蘋果

srand((int)time(null));設定隨機數種子rand()%100;產生0-99的隨機數。

高階點的,假如要產生16-59之間的數,你可以這樣寫:rand()%44+16(這裡44由59-16+1得到)。其他情況如法炮製!

c語言中用rand()函式產生20-90的隨機整數20-90共有71個數字,所以是rand()%71+20 ;

用rand()生成-20-20的隨機數

-20-20共有41個數字,所以是rand()%41-20;

需要注意的是,在執行以上**之前最好設定一下:

srand(time(null));//用系統當前時間設定rand()隨機序列種子,保證每次執行隨機序列不一樣

2樓:喬澈旁季

用rand函式吧久用c語言太記貌似int

a=rand()%

x(x即範圍)偽隨機數

#include

srand(time(null));使用前用條語句初始化使用int

a=rand()

/rand_max*n;

真隨機數

c語言怎樣產生一定範圍的隨機數?

3樓:hk_孤獨的心

編譯環境為:vs2013

產生1到3的整型隨機數的**如下:

#include

#include

#include

#define max 3   //這個函式的意義為:隨機生成最大的數為3

#define min 1    //這個函式的意義為:隨機生成最小的數為1

int main()

4樓:愛夏的你呀

在c語言中,rand()函式可以用來產生隨機數,但是這不是真真意義上的隨機數,

是乙個偽隨機數,是根據乙個數,可以稱它為種子。

為基準以某個遞推公式推算出來的一係數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數。

c語言產生一定範圍的隨機數的源**如下:

#include

#include

int main()

return 0;

}擴充套件資料

1、如果要隨機生成乙個在一定範圍的數,你可以在巨集定義中定義乙個random(int number)函式,然後在main()裡面直接呼叫random()函式。

2、在對rand()的前三次呼叫中,並且此後得到的返回值仍然是在對rand()的第一批呼叫中所得到的其餘的返回值。因此,只有再次給srand()提供乙個隨機的「種子」值,才能再次得到乙個隨機數。

5樓:匿名使用者

c語言的獲取隨

機數的函式為rand(), 可以獲得乙個非負整數的隨機數。要呼叫rand需要引用標頭檔案stdlib.h。

要讓隨機數限定在乙個範圍,可以採用模除加加法的方式。

要產生隨機數r, 其範圍為 m<=r<=n,可以使用如下公式:

rand()%(n-m+1)+m

其原理為,對於任意數,

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

6樓:哇哎西西

利用srand((unsigned int)(time(null))是一種方法,因為每一次執行程式的時間是不同的。

在c語言裡所提供的隨機數發生器的用法:現在的c編譯器都提供了乙個基於ansi標準的偽隨機數發生器函式,用來生成隨機數。它們就是rand()和srand()函式。

這二個函式的工作過程如下:

1) 首先給srand()提供乙個種子,它是乙個unsigned int型別,其取值範圍從0~65535;

2) 然後呼叫rand(),它會根據提供給srand()的種子值返回乙個隨機數(在0到32767之間)

3) 根據需要多次呼叫rand(),從而不間斷地得到新的隨機數;

4) 無論什麼時候,都可以給srand()提供乙個新的種子,從而進一步「隨機化」rand()的輸出結果。

下面是0~32767之間的隨機數程式:

#include

#include

#include // 使用當前時鐘做種子

void main(void)

根據上面的程式可以很容易得到0~1之間的隨機數:

#include

#include

#include

int main( )

而產生1~100之間的隨機數可以這樣寫:

#include

#include

#include

int main( )

7樓:溫柔_儂渲芷

srand((int)time(null));設定隨機數種子

rand()%100;產生0-99的隨機數。高階點的,假如要產生16-59之間的數,你可以這樣寫:rand()%44+16(這裡44由59-16+1得到)。其他情況如法炮製!

下面是搜回來的:

問題1: 怎樣獲得乙個真正的隨機數?要知道,rand()是不能產生真正的隨機數的!即使不能產生真正的隨機數,也要大概接近呀!而rand()好象每次的隨機都一樣。

專家解答:

之所以rand()每次的隨機數都一樣是因為rand()函式使用不正確。各種程式語言返回的隨機數(確切地說是偽隨機數)實際上都是根據遞推公式計算的一組數值,當序列足夠長,這組數值近似滿足均勻分布。如果計算偽隨機序列的初始數值(稱為種子)相同,則計算出來的偽隨機序列就是完全相同的。

這個特性被有的軟體利用於加密和解密。加密時,可以用某個種子數生成乙個偽隨機序列並對資料進行處理;解密時,再利用種子數生成乙個偽隨機序列並對加密資料進行還原。這樣,對於不知道種子數的人要想解密就需要多費些事了。

當然,這種完全相同的序列對於你來說是非常糟糕的。要解決這個問題,需要在每次產生隨機序列前,先指定不同的種子,這樣計算出來的隨機序列就不會完全相同了。你可以在呼叫rand()函式之前呼叫srand( (unsigned)time( null ) ),這樣以time函式值(即當前時間)作為種子數,因為兩次呼叫rand函式的時間通常是不同的,這樣就可以保證隨機性了。

你也可以使用srand函式來人為指定種子數。windows 9x/nt的遊戲freecell就允許使用者指定種子數,這樣使用者如果一次遊戲沒有成功,下次還可以以同樣的發牌結果再玩一次。

問題2: 我按照上述方法並不能產生隨機數,僅產生公差為3或4的等差數列:

請採納答案,支援我一下。

8樓:a羅網天下

srand((int)time(null));設定隨機數種子

例子如下:

直接編譯,程式執行結果如下圖所示:

9樓:匿名使用者

#include

#include

#include

int main(void)

10樓:匿名使用者

要生成[a,b]範圍內隨機數:rand()%(b-a+1)+a30~120之間:rand()%(120-30+1)+30即rand()%91+30

rand()%91會生成0~90之間隨機整數rand()%91+30會生成30~120之間整數

11樓:ll我在這等你

一、第一種:

(1)#include

(2)#include

(3)#include

(4)int main(void)

(5)二、第二種:

(1)語言的獲取隨機數的函式為rand(), 可以獲得乙個非負整數的隨機數。要呼叫rand需要引用標頭檔案stdlib.h。

(2)要讓隨機數限定在乙個範圍,可以採用模除加加法的方式。

要產生隨機數r, 其範圍為 m<=r<=n,可以使用如下公式:

rand()%(n-m+1)+m

(3)其原理為,對於任意數,

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

12樓:慢冰片

也要大概接近呀,因為兩次呼叫rand函式的時間通常是不同的,則計算出來的偽隨機序列就是完全相同的。各種程式語言返回的隨機數(確切地說是偽隨機數)實際上都是根據遞推公式計算的一組數值;

for(int i=0;100000;i++)參考資料.h>time,而由於計算機執行很快;i

問題1;設定隨機數種子

rand()%100,需要在每次產生隨機序列前。

13樓:匿名使用者

前幾位把常規方法都說了,我補充一種更前衛的方法。用boost的random庫,專業隨機數生成器

14樓:匿名使用者

1.此方法並不保證 每個數字是等可能的

//在程式中初始化隨機種子 乙個程式只需一次srand((unsigned int)time(null));

//再用rand()返回的值%範圍的大小

//rand()%(b-a);

//比如要求100~10000之間的隨機數rand()%(10000-100)+100;

2.//注意1的方法不能求範圍超過65535的隨機數//在程式中初始化隨機種子

srand((unsigned int)time(null));

//rand()/(65536.0)*(b-a)+a;

//比如要求10~100000000之間的隨機數rand()/(65535.0)*(100000000-10)+10;

15樓:

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()

這樣兩次執行的結果就會不一樣了!!

excel中怎樣才能使一定範圍內的數值有不同顏色

在excel工作表 bai中,設定一du定範圍內的數值為某zhi特定的顏色的操作方法參dao考如下 1 打回開excel工作答表,找到樣式選項框裡的條件格式。2 選擇突出顯示單元格規則。3 選擇 介於 選項。4 輸入需要設定值的範圍。5 選擇一種顏色後儲存即可。設定條件格式 格式 條件格式 條件1 ...

如何將在c語言中生成的資料儲存到文字檔案中

主要通過fprintf格式化輸出函式實現,主要 如下,程式功能,將10 12.345000 testinfo 寫入test.txt檔案 include int main int argc,char argv fprintf pf,d f s n m,f,str 寫入,test.txt檔案內容為10 ...

什麼煙抽起來一定範圍內都有一股濃濃的味道,不像是菸草味,白色煙嘴

估計是中南海吧,中南海和無香的萬寶路都有這種情況,抽的人感覺不出來,但是旁邊的飄出來的煙有種臭腳味,萬寶路白嘴的沒見過,估計就是中南海,以上答案真是我生活中一點點積累的啊,望採納。加香料的。例如鳳凰。一般過濾嘴上都寫有名字。520.白色嘴,白色煙幹,味道清香 什麼煙抽起來味道特別香 貴菸 國酒香 3...