最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

有關C++中隨機函數(shù)rand() 和srand() 的用法詳解

 更新時間:2017年01月10日 09:34:22   投稿:jingxian  
下面小編就為大家?guī)硪黄嘘PC++中隨機函數(shù)rand() 和srand() 的用法詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、rand()

函數(shù)名:   rand  

功   能:   隨機數(shù)發(fā)生器

用   法:   int rand(void); 

所在頭文件: stdlib.h

函數(shù)說明 :

rand()的內(nèi)部實現(xiàn)是用線性同余法做的,它不是真的隨機數(shù),因其周期特別長,故在一定

的范圍里可看成是隨機的。

rand()返回一隨機數(shù)值的范圍在0至RAND_MAX 間。RAND_MAX的范圍最少是在32767之間(int)。用

unsigned int 雙字節(jié)是65535,四字節(jié)是4294967295的整數(shù)范圍。0~RAND_MAX每個數(shù)字被選中

的機率是相同的。     

用戶未設定隨機數(shù)種子時,系統(tǒng)默認的隨機數(shù)種子為1。

rand()產(chǎn)生的是偽隨機數(shù)字,每次執(zhí)行時是相同的;若要不同,用函數(shù)srand()初始化它。

實例如下:

#include <iostream> 
using namespace std; 
#include  <stdlib.h>   
#include  <time.h>  
#define MIN 1  //隨機數(shù)產(chǎn)生的范圍   
#define MAX 10 
 
int main()   
{  
  int i;  
  srand((unsigned)time(0)); 
  cout<<"Ten random numbers from "<<MIN<< 
     " to "<<MAX<<" :/n"<<endl;   
  for(i=0; i<10; i++)     //產(chǎn)生隨機數(shù) 
  { 
    cout<<MIN + (int)MAX * rand() / (RAND_MAX + 1)<<"/t";  
  } 
  cout<<endl; 
  return  0;   
}  

二、srand()

函數(shù)名:   srand  

功   能:   初始化隨機數(shù)發(fā)生器  

用   法:   void srand(unsigned  int  seed); 

所在頭文件: stdlib.h 

函數(shù)說明:

srand()用來設置rand()產(chǎn)生隨機數(shù)時的隨機數(shù)種子。

參數(shù)seed必須是個整數(shù),通??梢岳胻ime(0)的返回值或NULL來當做seed。

如果每次seed都設相同值,rand()所產(chǎn)生的隨機數(shù)值每次就會一樣。

實例如下:


#include <iostream> 
using namespace std; 
#include  <stdlib.h>   
#include  <time.h>  
#define MIN 0  //隨機數(shù)產(chǎn)生的范圍   
#define MAX 99 
 
int main()   
{  
  int i;  
  srand((unsigned)time(NULL)); 
  cout<<"Ten random numbers from "<<MIN<< 
     " to "<<MAX<<" :/n"<<endl;   
  for(i=0; i<10; i++)     //產(chǎn)生隨機數(shù) 
  { 
    cout<<MIN + rand() % (MAX + MIN - 1)<<"/t";  
  } 
  cout<<endl; 
  return  0;   
}  

三、rand()和srand()的關系

rand()和srand()要一起使用,其中srand()用來初始化隨機數(shù)種子,rand()用來產(chǎn)生隨機數(shù)。

因為默認情況下隨機數(shù)種子為1,而相同的隨機數(shù)種子產(chǎn)生的隨機數(shù)是一樣的,失去了隨機性的意義,所以為使每次得到的隨機數(shù)不一樣,用函數(shù)srand()初始化隨機數(shù)種子。srand()的參數(shù),用time函數(shù)值(即當前時間),因為兩次調(diào)用rand()函數(shù)的時間通常是不同的,這樣就可以保證隨機性了。

四、產(chǎn)生一定范圍隨機數(shù)的通用表示公式

要取得[a,b)的隨機整數(shù),使用(rand() % (b-a))+ a (結果值含a不含b)。

要取得[a,b]的隨機整數(shù),使用(rand() % (b-a+1))+ a (結果值含a和b)。

要取得(a,b]的隨機整數(shù),使用(rand() % (b-a))+ a + 1 (結果值不含a含b)。

(總的來說,通用公式:a + rand() % n ;其中的a是起始值,n是整數(shù)的范圍)

要取得a到b之間的隨機整數(shù),另一種表示:a + (int)b * rand() / (RAND_MAX + 1)。

要取得0~1之間的浮點數(shù),可以使用rand() / double(RAND_MAX)。

五、產(chǎn)生相同的隨機數(shù)的原因

計算機的隨機數(shù)都是由偽隨機數(shù),即是由小M多項式序列生成的,其中產(chǎn)生每個小序列都有一個初始值,即隨機種子。(注意: 小M多項式序列的周期是65535,即每次利用一個隨機種子生成的隨機數(shù)的周期是65535,當你取得65535個隨機數(shù)后它們又重復出現(xiàn)了。) 

我們知道rand()函數(shù)可以用來產(chǎn)生隨機數(shù),但是這不是真真意義上的隨機數(shù),是一個偽隨機數(shù),是根據(jù)一個數(shù)(我們可以稱它為種子)為基準以某個遞推公式推算出來的一系列數(shù),當這系列數(shù)很大的時候,就符合正態(tài)公布,從而相當于產(chǎn)生了隨機數(shù),但這不是真正的隨機數(shù),當計算機正常開機后,這個種子的值是定了的,除非你破壞了系統(tǒng)。

實例如下:

#include <iostream> 
using namespace std; 
#include <stdlib.h> 
#include <time.h> 
 
int main() 
{ 
  int i; 
  for (i=0; i<10; i++)   //產(chǎn)生10個隨機數(shù) 
  { 
    cout<<rand()<<"/t"; 
  } 
  cout<<endl; 
  return 0; 
} 

每次運行得到相同的隨機序列:

41 18467 6334  26500 19169 15724 11478                        

41 18467 6334 26500 19169 15724 11478  29358 26962 24464

為得到不同的隨機數(shù)序列,則需改變這個種子的值。方法:在開始產(chǎn)生隨機數(shù)前,調(diào)用一次srand(time(NULL))(注意:srand()一定要放在循環(huán)外面或者是循環(huán)調(diào)用的外面,否則的話得到的是相同的隨機數(shù))。

程序示例:

#include <iostream> 
using namespace std; 
#include <stdlib.h> 
#include <time.h> 
 
int main() 
{ 
  int i; 
  srand((unsigned)time(NULL)); //初始化隨機數(shù)種子 
  for (i=0; i<10; i++)     //產(chǎn)生10個隨機數(shù) 
  { 
    cout<<rand()<<"/t"; 
  } 
  cout<<endl; 
  return 0; 
} 

每次運行得到不同的隨機序列:

1294 18562 14141 18165 11910 29784 11070 13225 131 24405

1774 25714 18734 16528 20825 17189 9848 8899 2503 5375

以上這篇有關C++中隨機函數(shù)rand() 和srand() 的用法詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C++中綴表達式轉后綴表達式的方法

    C++中綴表達式轉后綴表達式的方法

    這篇文章主要介紹了C++中綴表達式轉后綴表達式的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 關于C語言操作符的那些事(超級全)

    關于C語言操作符的那些事(超級全)

    這篇文章主要給大家介紹了關于C語言操作符的那些事兒,c語言的操作符有很多,包括算術操作符、移位操作符、位操作符、賦值操作符、單目操作符、關系操作符、邏輯操作符、條件操作符、逗號表達式、下標引用、函數(shù)調(diào)用和結構成員,需要的朋友可以參考下
    2021-08-08
  • C語言實現(xiàn)逆序輸出詳細

    C語言實現(xiàn)逆序輸出詳細

    這篇文章主要介紹了C語言實現(xiàn)逆序輸出。主要實現(xiàn)C語言實現(xiàn)對數(shù)組元素依次賦值然后按照逆序輸出,下面文章小編將詳細解說,需要的朋友可以參考一下
    2021-10-10
  • C++如何使用new來初始化指向類的指針

    C++如何使用new來初始化指向類的指針

    這篇文章主要介紹了C++如何使用new來初始化指向類的指針問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C++ OpenCV實現(xiàn)圖像修復功能

    C++ OpenCV實現(xiàn)圖像修復功能

    這篇文章主要介紹了通過C++ OpenCV中提供的inpaint API實現(xiàn)對有瑕疵的圖像進行修復,文中的方法講解詳細,感興趣的同學可以跟隨小編一起學習一下
    2022-01-01
  • C語言函數(shù)調(diào)用底層實現(xiàn)原理分析

    C語言函數(shù)調(diào)用底層實現(xiàn)原理分析

    這篇文章主要介紹了C語言函數(shù)調(diào)用底層實現(xiàn)原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C語言 以字符形式讀寫文件詳解及示例代碼

    C語言 以字符形式讀寫文件詳解及示例代碼

    本文主要介紹C語言 以字符形式讀寫文件,這里整理了讀寫文件的一些資料并附示例代碼,供大家學習參考,有需要的小伙伴可以參考下
    2016-08-08
  • 在std::thread中創(chuàng)建并管理QEventLoop的全面解析

    在std::thread中創(chuàng)建并管理QEventLoop的全面解析

    QEventLoop的工作原理可以簡單地理解為一個無限循環(huán),它會不斷地檢查是否有新的事件需要處理,如果有,就將事件從事件隊列中取出,然后找到相應的事件處理器進行處理,這篇文章主要介紹了在std::thread中創(chuàng)建并管理QEventLoop的全面指南,需要的朋友可以參考下
    2023-06-06
  • C++ Strassen算法代碼的實現(xiàn)

    C++ Strassen算法代碼的實現(xiàn)

    這篇文章主要介紹了C++ Strassen算法代碼的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • C語言使用libZPlay錄制聲音并寫到文件的方法

    C語言使用libZPlay錄制聲音并寫到文件的方法

    這篇文章主要介紹了C語言使用libZPlay錄制聲音并寫到文件的方法,實例分析了C語言操作音頻文件的相關技巧,需要的朋友可以參考下
    2015-06-06

最新評論

黄大仙区| 宕昌县| 尚义县| 无极县| 岳普湖县| 溆浦县| 中山市| 乌鲁木齐县| 佛教| 米脂县| 彭州市| 武城县| 常宁市| 富源县| 溧水县| 闽侯县| 莲花县| 筠连县| 兴安县| 康马县| 太康县| 开原市| 定结县| 莆田市| 屏南县| 乐业县| 宕昌县| 广平县| 丹东市| 乌海市| 南平市| 江永县| 富川| 泸州市| 称多县| 济源市| 通道| 永靖县| 兴城市| 灵石县| 陵川县|