1樓:匿名使用者
rand()函式可以用來產生隨機數;
rand()會返回一隨機數值,範圍在0至rand_max 間。返回0至rand_max之間的隨機數值,rand_max定義在stdlib.h,(其值至少為32767),運算的結果是乙個不定的數,要看你定義的變數型別,int整形的話就是32767。
在呼叫此函式產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在呼叫時會自動設隨機數種子為1。一般用for語句來設定種子的個數。
2樓:
隨機數產生的範圍是:0-0x7fff(也就是0到32767)#include
#include
#include
#include
using namespace std;
void main()
{ srand( (unsigned)time( null ) ); //時間引數作為種子
for(int i=0;i<32767;i++){ cout<
時間引數種子唯一,然後取的數目不大於32767個,基本能夠保證產生的隨機數唯一
3樓:
0到rand_max,rand_max的值視編譯器而定一般不小於32767,你可以測試一下。可以用當前時間做隨機數的種子保證產生的值不同。在程式開始之前呼叫srand((unsigned)time(null));就行了。
怎麼控制 c++生成隨機數的範圍
4樓:風若遠去何人留
c++的隨機數函式為rand(), 可以獲得乙個非負整數的隨機數。
要讓隨機數限定在乙個範圍,可以採用模除加加法的方式。
要產生隨機數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
5樓:匿名使用者
a=ranf()%33+1
注意:你說「a=rand()%33
這樣可以控制隨機數是在0-33範圍內」是錯的,是0-32讓a和b產生的隨機數不重複可以加條件判斷
6樓:
a = rand()%33
a的範圍是0~32
b = a+1;
b的範圍是1~33
用if語句判斷
如:if(a == b)
continue;
7樓:匿名使用者
a=rand()%33+1;
dowhile(b==a);
8樓:匿名使用者
這是之前經常去的 k a ɲ 3 p ● c ɲ還算可以 不少都是蠻漂亮的女主角;;
;;;;
;長大後驀然回首,你才會知道
相愛就不會永遠不曾有傷痕,幸福就是很簡單的生活好像只能如此了,不敢去奢求,如木棉一般
歌聲繞耳。只是為何入耳卻如此的讓人心殤
你是首長我是兵,你說衝鋒我不敢猶豫
那曾經以為的花好月圓,愛情只是宿命擺下的乙個局。
c++中rand()函式的範圍 10
9樓:匿名使用者
rand函式範圍:在某些平台下(例如 windows)rand_max 只有 32768。如果需要的範圍大於 32768,那麼指定 min 和 max 引數就可以生成大於 rand_max 的數了,或者考慮用 mt_rand() 來替代它。
rand函式不是真正的隨機數生成器,而srand()會設定供rand()使用的隨機數種子。如果你在第一次呼叫rand()之前沒有呼叫srand(),那麼系統會為你自動呼叫srand()。而使用同種子相同的數呼叫 rand()會導致相同的隨機數序列被生成。
c語言srand((unsigned)time(null))則使用系統定時/計數器的值作為隨機種子。每個種子對應一組根據演算法預先生成的隨機數,所以,在相同的平台環境下,不同時間產生的隨機數會是不同的,相應的,若將srand(unsigned)time(null)改為srand(tp)(tp為任一常量),則無論何時執行、執行多少次得到的「隨機數」都會是一組固定的序列,因此srand生成的隨機數是偽隨機數。
庫函式中系統提供了兩個函式用於產生隨機數:srand()和rand()。 原型為:
函式一:int rand(void);
返回乙個[0,rand_max]間的隨機整數。
函式二:void srand(unsigned seed);
引數seed是rand()的種子,用來初始化rand()的起始值。
但是,要注意的是所謂的「偽隨機數」指的並不是假的隨機數。其實絕對的隨機數只是一種理想狀態的隨機數,計算機只能生成相對的隨機數即偽隨機數。計算機生 成的偽隨機數既是隨機的又是有規律的 —— 一部份遵守一定的規律,一部份則不遵守任何規律。
比如「世上沒有兩片形狀完全相同的樹葉」,這體現到了事物的特性 —— 差異性;但是每種樹的葉子都有近似的形狀,這正是事物的共性 —— 規律性。從這個角度講,我們就可以接受這樣的事實了:計算機只能產生偽隨機數而不是絕對的隨機數。
系統在呼叫rand()之前都會自動呼叫srand(),如果使用者在rand()之前曾呼叫過srand()給引數seed指定了乙個值,那麼 rand()就會將seed的值作為產生偽隨機數的初始值;而如果使用者在rand()前沒有呼叫過srand(),那麼系統預設將1作為偽隨機數的初始 值。如果給了乙個定值,那麼每次rand()產生的隨機數序列都是一樣的~~
所以為了避免上述情況的發生我們通常用srand((unsigned)time(0))或者srand((unsigned)time(null))來 產生種子。如果仍然覺得時間間隔太小,可以在(unsigned)time(0)或者(unsigned)time(null)後面乘上某個合適的整數。 例如,srand((unsigned)time(null)*10)
另外,關於time_t time(0):time_t被定義為長整型,它返回從2023年1月1日零時零分零秒到目前為止所經過的時間,單位為秒。
srand()、rand()用法舉例:
#include
#include
#include
void main()}
10樓:匿名使用者
範圍是0~32767。
庫函式中系統提供了兩個函式用於產生隨機數:srand()和rand()。 原型為:
函式一:int rand(void);
返回乙個[0,rand_max]間的隨機整數。
函式二:void srand(unsigned seed);
引數seed是rand()的種子,用來初始化rand()的起始值。
rand函式不是真正的隨機數生成器,而srand()會設定供rand()使用的隨機數種子。如果你在第一次呼叫rand()之前沒有呼叫srand(),那麼系統會為你自動呼叫srand()。而使用同種子相同的數呼叫 rand()會導致相同的隨機數序列被生成。
11樓:張俊瑞
應該都是實數吧,「/1.0」、「/10.0」起碼決定了輸出是實數,當然顯示上如果是整數會捨去小數點。
12樓:匿名使用者
因為精度 前者精度沒有丟失 而後者精度丟失
切 前者只用 0.0 和1.0 後者 有0.0 0.1 0.2 ... ... 1.9 由於精度 後者的小數為很多大於一位
13樓:
srand((int)time(null));
rand()%n;//n以內的隨機數...
c/c++怎樣產生任意指定範圍的隨機數
14樓:匿名使用者
首先呼叫srand以及rand函式產生乙個隨機數。
然後使用%運算取餘數來限定範圍,也就是上限,想要改下限的話%運算後直接加上下限的值就好了。
15樓:匿名使用者
srand(time(null));
之後呼叫rand()即可得到0 ~ 32757範圍的隨機數包含標頭檔案stdlib.h和time.h 或 cstdlib和ctime
#include
#include
或#include
#include
用下列公式即可得到指定範圍[m,n]的隨機數:
r = rand()%(n - m + 1) + m;
注意:n - m 的絕對值不能超過32767網上覆制的,懶得打字了。。。。
c++產生隨機數的
16樓:挖土吃土
1、第一步,先定義int乙個陣列和int乙個指標變數。
2、接著我們選擇讓指標指向陣列的第一元素的位址。
3、接著使迴圈的條件為指標的尾位址。
4、並且因為這段**每次迴圈後指標+1。
5、最後,讓他進行輸出。
6、最後編譯執行完成後,便可以看到執行結果。
17樓:go陌小潔
具體**如下:
#include
#include
#include //用到了time函式
int main()
return 0;
}有以下幾種情況:
(1) 如果你只要產生隨機數而不需要設定範圍的話,你只要用rand()就可以了:rand()會返回一隨機數值, 範圍在0至rand_max 間。rand_max定義在stdlib.
h, 其值為2147483647。
(2) 如果你要隨機生成乙個在一定範圍的數,你可以在巨集定義中定義乙個random(int number)函式,然後在main()裡面直接呼叫random()函式:
例如:rand()%100是產生0-99的隨機數。
(3)但是上面兩個例子所生成的隨機數都只能是一次性的,如果你第二次執行的時候輸出結果仍和第一次一樣。這與srand()函式有關。srand()用來設定rand()產生隨機數時的隨機數種子。
在呼叫rand()函式產生隨機數前,必須先利用srand()設好隨機數種子(seed), 如果未設隨機數種子, rand()在呼叫時會自動設隨機數種子為1。上面的兩個例子就是因為沒有設定隨機數種子,每次隨機數種子都自動設成相同值1 ,進而導致rand()所產生的隨機數值都一樣。
srand()函式定義 : void srand (unsigned int seed);
通常可以利用geypid()或time(0)的返回值來當做seed。如果你用time(0)的話,要加入標頭檔案#include
18樓:墨家子零
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的等差數列:
#include
#include
#include
#include
void main() }
專家解答:
你的程式是有問題的,你每產生乙個隨機數之前,都呼叫一次srand,而由於計算機執行很快,所以你每次用time得到的時間都是一樣的(time的時間精度較低,只有55ms)。這樣相當於使用同乙個種子產生隨機序列,所以產生的隨機數總是相同的。你應該把srand放在迴圈外:
srand( (unsigned)time( null ) );
for(int i=0;i<100000;i++)
如何產生隨機數,要求C 描述
include include srand unsigned int time null int n rand num就是以當前時間為種子 seed 的 偽 隨機數 srand time null printf d n rand 99 1 輸出乙個 1,99 區間內的整數 1 srand time ...
c 中生成隨機數時的種子問題,關於C 的隨機數的種子的設定問題
上上西 先糾正一下錯誤,是srand unsigned int time 0 srand的形參是unsigned int型別的 這句話只要寫一次,一般情況下只能寫一次 隨機數是隨機的數,但計算機不可能產生隨機數,計算機根據你的輸入,再跟一個演算法就產生一個特定的序列.只要你給計算機一個相同的數,計算...
c語言rand怎麼隨機產生浮點型數
問明 include include include define max random 1000 這個是產生隨機數的最大值,但是取浮點數,所以要除去的 define num 2500 double random double a,double b 這個是產生隨機數函式,由於庫函式功能有限,所以要自...