導(dǎo)語(yǔ):C語(yǔ)言/C++怎樣產(chǎn)生隨機(jī)數(shù):這里要用到的是rand()函數(shù), srand()函數(shù),和time()函數(shù)。下面讓我們一起了解一下吧!

  需要說(shuō)明的是,iostream頭文件中就有srand函數(shù)的定義,不需要再額外引入stdlib.h;而使用time()函數(shù)需要引入ctime頭文件。

  使用rand()函數(shù)獲取一個(gè)隨機(jī)數(shù)

  如果你只要產(chǎn)生隨機(jī)數(shù)而不需要設(shè)定范圍的話,你只要用rand()就可以了:rand()會(huì)返回一隨機(jī)數(shù)值, 范圍在0至RAND_MAX 間。RAND_MAX定義在stdlib.h, 其值為2147483647。

  例子1.1:

  代碼如下:

  #include

  using namespace std;

  int main()

  {

  for(int i=0;i<10;i++)

  {

  cout<

  }

  }

  結(jié)果:

  使用rand()函數(shù)獲取一定范圍內(nèi)的一個(gè)隨機(jī)數(shù)

  如果想要獲取在一定范圍內(nèi)的數(shù)的話,直接做相應(yīng)的除法取余即可。

  例子2.1:

  代碼如下:

  #include

  using namespace std;

  int main()

  {

  for(int i=0;i<10;i++)

  {

  //產(chǎn)生10以內(nèi)的整數(shù)

  cout<

  }

  }

  結(jié)果:

  我們上面獲取的都是隨機(jī)的整數(shù),那么如何獲取小數(shù)呢?例如:我們可以先獲得10001以內(nèi)的整數(shù)(0~10000),然后再用這個(gè)整數(shù)除以10000得到小數(shù)點(diǎn)后兩位的小數(shù)。

  例子2.2:

  代碼如下:

  #include

  using namespace std;

  int main()

  {

  for(int i=0;i<10;i++)

  {

  cout<<(rand()%10001)/10000.0<

  }

  }

  注意10000.0后面的有個(gè)小數(shù)點(diǎn),表示結(jié)果為浮點(diǎn)數(shù)。

  結(jié)果:

  使用rand函數(shù)和time函數(shù)

  我們上面已經(jīng)可以獲取隨機(jī)數(shù)了,為什么還需要使用time函數(shù)呢?我們通過(guò)多次運(yùn)行發(fā)現(xiàn),該程序雖然生成了10個(gè)隨機(jī)數(shù),但是這個(gè)10個(gè)隨機(jī)數(shù)是固定的,也就是說(shuō)并不隨著時(shí)間的變化而變化。

  這與srand()函數(shù)有關(guān)。srand()用來(lái)設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時(shí)的隨機(jī)數(shù)種子。在調(diào)用rand()函數(shù)產(chǎn)生隨機(jī)數(shù)前,必須先利用srand()設(shè)好隨機(jī)數(shù)種子(seed), 如果未設(shè)隨機(jī)數(shù)種子, rand()在調(diào)用時(shí)會(huì)自動(dòng)設(shè)隨機(jī)數(shù)種子為1。

  上面的例子就是因?yàn)闆](méi)有設(shè)置隨機(jī)數(shù)種子,每次隨機(jī)數(shù)種子都自動(dòng)設(shè)成相同值1 ,進(jìn)而導(dǎo)致rand()所產(chǎn)生的隨機(jī)數(shù)值都一樣。

  srand()函數(shù)定義 : void srand (unsigned int seed);

  通??梢岳胓eypid()或time(0)的返回值來(lái)當(dāng)做seed

  如果你用time(0)的話,要加入頭文件#include

  time(0)或者time(NULL)返回的是系統(tǒng)的時(shí)間(從1970.1.1午夜算起),單位:秒

  例子3.1:

  代碼如下:

  #include

  #include

  using namespace std;

  void main()

  {

  int a;

  a=time(0);//time(0)返回的是系統(tǒng)的時(shí)間(從1970.1.1午夜算起),單位:秒

  cout<

  }

  例子3.2:

  代碼如下:

  #include

  #include

  using namespace std;

  int main()

  {

  srand(time(0));

  for(int i=0;i<10;i++)

  {

  //產(chǎn)生10以內(nèi)的整數(shù)

  cout<

  }

  }

  這樣做的話,每次運(yùn)行的結(jié)果就都不一樣了。

1.《c語(yǔ)言隨機(jī)數(shù) C語(yǔ)言如何產(chǎn)生隨機(jī)數(shù)》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。

2.《c語(yǔ)言隨機(jī)數(shù) C語(yǔ)言如何產(chǎn)生隨機(jī)數(shù)》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/jiaoyu/76776.html