国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C語言/C++中如何產(chǎn)生隨機(jī)數(shù)

2020-05-23 12:53:52
字體:
供稿:網(wǎng)友

C語言/C++怎樣產(chǎn)生隨機(jī)數(shù):這里要用到的是rand()函數(shù), srand()函數(shù),和time()函數(shù)。

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

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

例子1.1:

復(fù)制代碼代碼如下:

#include<iostream>
using namespace std;
int main()
{
 for(int i=0;i<10;i++)
 {
  cout<<rand()<<endl;
 }
}

 

結(jié)果:

C語言,C++,隨機(jī)數(shù)

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

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

例子2.1:

復(fù)制代碼代碼如下:

#include<iostream>
using namespace std;
int main()
{
 for(int i=0;i<10;i++)
 {
  //產(chǎn)生10以內(nèi)的整數(shù) 
  cout<<rand()%10<<endl;
 }
}

結(jié)果:

 

C語言,C++,隨機(jī)數(shù)

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

例子2.2:

復(fù)制代碼代碼如下:

#include<iostream>
using namespace std;
int main()
{
 for(int i=0;i<10;i++)
 {
  cout<<(rand()%10001)/10000.0<<endl;
 }
}

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

 

結(jié)果:

C語言,C++,隨機(jī)數(shù)

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

這與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);

通常可以利用geypid()或time(0)的返回值來當(dāng)做seed

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

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

例子3.1:

復(fù)制代碼代碼如下:

#include <iostream>
#include <ctime>
using namespace std;

 

void main()
{
 int a;
 a=time(0);//time(0)返回的是系統(tǒng)的時間(從1970.1.1午夜算起),單位:秒
 cout<<a<<endl;
}


例子3.2:
復(fù)制代碼代碼如下:

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
 srand(time(0)); 
 for(int i=0;i<10;i++)
 {
  //產(chǎn)生10以內(nèi)的整數(shù) 
  cout<<rand()%10<<endl;
 }
}

這樣做的話,每次運(yùn)行的結(jié)果就都不一樣了。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 银川市| 永定县| 米脂县| 曲沃县| 泸州市| 伊宁市| 吉林市| 东乌| 额尔古纳市| 稻城县| 手游| 扶风县| 白朗县| 儋州市| 纳雍县| 饶阳县| 连山| 化隆| 唐河县| 青阳县| 新巴尔虎右旗| 青川县| 平阳县| 本溪| 姚安县| 阳原县| 江陵县| 宁陕县| 芒康县| 黔江区| 淮阳县| 彭阳县| 紫金县| 美姑县| 嘉荫县| 彰化市| 周口市| 随州市| 汤阴县| 电白县| 会泽县|