C語言/C++怎樣產(chǎn)生隨機(jī)數(shù):這里要用到的是rand()函數(shù), srand()函數(shù),C語言/C++里沒有自帶的random(int number)函數(shù)。
硯山網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),硯山網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為硯山超過千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的硯山做網(wǎng)站的公司定做!
(1) 如果你只要產(chǎn)生隨機(jī)數(shù)而不需要設(shè)定范圍的話,你只要用rand()就可以了:rand()會返回一隨機(jī)數(shù)值, 范圍在0至RAND_MAX 間。RAND_MAX定義在stdlib.h, 其值為2147483647。
例如:#includestdio.h
#includestdlib.h
void main()
{
for(int i=0;i10;i+)
printf("%d\n",rand());
} (2) 如果你要隨機(jī)生成一個在一定范圍的數(shù),你可以在宏定義中定義一個random(int number)函數(shù),然后在main()里面直接調(diào)用random()函數(shù):例如:隨機(jī)生成10個0~100的數(shù):
#includestdio.h
#includestdlib.h
#define random(x) (rand()%x)
void main()
{
for(int x=0;x10;x++)
printf("%d\n",random(100));
} (3)但是上面兩個例子所生成的隨機(jī)數(shù)都只能是一次性的,如果你第二次運(yùn)行的時候輸出結(jié)果仍和第一次一樣。這與srand()函數(shù)有關(guān)。srand()用來設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時的隨機(jī)數(shù)種子。在調(diào)用rand()函數(shù)產(chǎn)生隨機(jī)數(shù)前,必須先利用srand()設(shè)好隨機(jī)數(shù)種子(seed), 如果未設(shè)隨機(jī)數(shù)種子, rand()在調(diào)用時會自動設(shè)隨機(jī)數(shù)種子為1。上面的兩個例子就是因?yàn)闆]有設(shè)置隨機(jī)數(shù)種子,每次隨機(jī)數(shù)種子都自動設(shè)成相同值1 ,進(jìn)而導(dǎo)致rand()所產(chǎn)生的隨機(jī)數(shù)值都一樣。srand()函數(shù)定義 : void srand (unsigned int seed);
通??梢岳胓eypid()或time(0)的返回值來當(dāng)做seed
如果你用time(0)的話,要加入頭文件#includetime.h例如:
#includestdio.h
#includestdlib.h
#includetime.h
#define random(x) (rand()%x)
void main()
{ srand((int)time(0));
for(int x=0;x10;x++)
printf("%d\n",random(100));
}這樣兩次運(yùn)行的結(jié)果就會不一樣了?。?/p>
c語言隨機(jī)數(shù)函數(shù)是 rand()
若要輸出1~10之間的隨機(jī)數(shù),
可用rand()%10+1。
可以使用庫函數(shù)rand()。
rand聲明于stdlib.h,其原型為
int rand(void);
功能為返回一個隨機(jī)整型值。在C語言中,該值是一個正數(shù)值。
在需要限定獲取到的隨機(jī)數(shù)范圍時,如范圍要求為[m,n] mn且m,n均為整數(shù),可以用
rand()%(n-m+1)+m
的形式進(jìn)行獲取。原理為:
%為取余計(jì)算,當(dāng)%k時,結(jié)果是[0,k-1]之間的數(shù)值;
于是rand()%(n-m+1) ∈ [0, n-m];
所以rand()%(n-m+1)+m ∈ [0+m, n-m+m]=[m,n]。
c語言中產(chǎn)生隨機(jī)數(shù)的相關(guān)函數(shù)主要包括srand和rand函數(shù),兩者配合生成隨機(jī)數(shù)據(jù),測試代碼如下,
#includestdio.h
#include stdlib.h
#include time.h
void main()
{
int i=0,j=0;
int p[5][5]={0};
srand(time(NULL));
for(i=0;i5;i++)
for(j=0;j5;j++)
p[i][j]=rand()%100+1;//產(chǎn)生1-100的隨機(jī)數(shù)存入數(shù)組p中
printf("二維數(shù)組p為:\n");
for(i=0;i5;i++)
{
for(j=0;j5;j++)
printf("%d\t",p[i][j]);
printf("\n");
}
}
一般srand和rand配合使用產(chǎn)生偽隨機(jī)數(shù)序列。rand函數(shù)在產(chǎn)生隨機(jī)數(shù)前,需要系統(tǒng)提供的生成偽隨機(jī)數(shù)序列的種子,rand根據(jù)這個種子的值產(chǎn)生一系列隨機(jī)數(shù)。如果系統(tǒng)提供的種子沒有變化,每次調(diào)用rand函數(shù)生成的偽隨機(jī)數(shù)序列都是一樣的。srand(unsigned seed)通過參數(shù)seed改變系統(tǒng)提供的種子值,從而可以使得每次調(diào)用rand函數(shù)生成的偽隨機(jī)數(shù)序列不同,從而實(shí)現(xiàn)真正意義上的“隨機(jī)”。通??梢岳孟到y(tǒng)時間來改變系統(tǒng)的種子值,即srand(time(NULL)),可以為rand函數(shù)提供不同的種子值,進(jìn)而產(chǎn)生不同的隨機(jī)數(shù)序列。
源程序代碼以及算法解釋如下:
產(chǎn)生1-10隨機(jī)數(shù)程序:
#include iostream
#include time.h
using namespace std;
int main()
{
const int n = 10;//定義隨機(jī)數(shù)個數(shù)
int number[n] = { NULL };//定義隨機(jī)數(shù)存儲的數(shù)組
srand((unsigned)time(NULL));//初始化隨機(jī)函數(shù)
number[0] = rand() % n;//第一個隨機(jī)數(shù)無需比較
cout number[0] " ";
for (int i = 1; i n; i++)//其余隨機(jī)數(shù)循環(huán)產(chǎn)生
{
int j = 0;
number[i] = rand() % n;//產(chǎn)生隨機(jī)數(shù)
while (1)
{
if (number[i] == number[j])//若有相同則繼續(xù)循環(huán)重新安排隨機(jī)數(shù)
{
number[i] = rand() % n;//產(chǎn)生隨機(jī)數(shù)
j = 0;//若遇到相同的就從頭遍歷
continue;
}
if (j == (i - 1))//若遍歷完就跳出
break;
j++;
}
cout number[i] " ";
}
cout endl;
return 0;
}
程序運(yùn)行結(jié)果如下:
擴(kuò)展資料:
利用vector進(jìn)行隨機(jī)數(shù)輸出:
#include iostream
#include vector
#include time.h
using namespace std;
int main()
{
const int n = 10;
int randnum;
vectorint number;
for (int i = 0; i n; i++)
{
number.push_back(i + 1);????//從尾部添加元素
cout number[i] " ";
}
cout endl;
srand((unsigned)time(NULL));
for (int j = 0; j n; j++)?????//其余隨機(jī)數(shù)循環(huán)產(chǎn)生
{
randnum = rand() % (n - j);????//rand函數(shù)生成的隨機(jī)數(shù)是0-(n-1)
cout number.at(randnum) " ";
number.erase(number.begin() + randnum);
}
cout endl;
return 0;
}
本文題目:取隨機(jī)數(shù)函數(shù)c語言,c++取隨機(jī)數(shù)的函數(shù)
本文鏈接:http://aaarwkj.com/article40/dssgiho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站設(shè)計(jì)公司、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站建設(shè)、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)