内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

c語(yǔ)言隨機(jī)函數(shù)生成隨機(jī)數(shù) c語(yǔ)言的隨機(jī)數(shù)生成

c語(yǔ)言怎么生成隨機(jī)數(shù)?

你好!

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的漢川網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

完整的代碼,紅圈處就是從上面100個(gè)數(shù)字中抽取到的數(shù)字:

#include?stdio.h

#includestdlib.h??????????????????//生成隨機(jī)數(shù)用?

#includetime.h????????????????????//利用時(shí)間生成種子?

#includemath.h????????????????????

int?main()

{

int?i;

??int?a[100];

srand(?time(NULL)?);?????????//生成種子?

for(i=0;i100;i++)

{

a[i]=rand()%1000+1000;??????//生成一個(gè)小于1000的隨機(jī)數(shù)

???//然后加1000,變成?1000?-?2000之間的數(shù)?

printf("%d??",a[i]);???????//打印?

}

i=rand()%100;??????????????//隨機(jī)抽取其中的一個(gè)數(shù)?

printf("\n抽取到的是:%d\n",a[i]);//打印?

return?0;?

}

c語(yǔ)言,如何產(chǎn)生隨機(jī)數(shù)

本文由青松原創(chuàng)并依GPL-V2及其后續(xù)版本發(fā)放,轉(zhuǎn)載請(qǐng)注明出處且應(yīng)包含本行聲明。\x0d\x0a\x0d\x0aC++中常用rand()函數(shù)生成隨機(jī)數(shù),但嚴(yán)格意義上來講生成的只是偽隨機(jī)數(shù)(pseudo-random integral number)。生成隨機(jī)數(shù)時(shí)需要我們指定一個(gè)種子,如果在程序內(nèi)循環(huán),那么下一次生成隨機(jī)數(shù)時(shí)調(diào)用上一次的結(jié)果作為種子。但如果分兩次執(zhí)行程序,那么由于種子相同,生成的“隨機(jī)數(shù)”也是相同的。\x0d\x0a\x0d\x0a在工程應(yīng)用時(shí),我們一般將系統(tǒng)當(dāng)前時(shí)間(Unix時(shí)間)作為種子,這樣生成的隨機(jī)數(shù)更接近于實(shí)際意義上的隨機(jī)數(shù)。給一下例程如下:\x0d\x0a\x0d\x0a#include \x0d\x0a#include \x0d\x0a#include \x0d\x0ausing namespace std;\x0d\x0a\x0d\x0aint main()\x0d\x0a{\x0d\x0a double random(double,double);\x0d\x0a srand(unsigned(time(0)));\x0d\x0a for(int icnt = 0; icnt != 10; ++icnt)\x0d\x0a cout "No." icnt+1 ": " int(random(0,10)) endl;\x0d\x0a return 0;\x0d\x0a}\x0d\x0a\x0d\x0adouble random(double start, double end)\x0d\x0a{\x0d\x0a return start+(end-start)*rand()/(RAND_MAX + 1.0);\x0d\x0a}\x0d\x0a/* 運(yùn)行結(jié)果\x0d\x0a* No.1: 3\x0d\x0a* No.2: 9\x0d\x0a* No.3: 0\x0d\x0a* No.4: 9\x0d\x0a* No.5: 5\x0d\x0a* No.6: 6\x0d\x0a* No.7: 9\x0d\x0a* No.8: 2\x0d\x0a* No.9: 9\x0d\x0a* No.10: 6\x0d\x0a*/\x0d\x0a利用這種方法能不能得到完全意義上的隨機(jī)數(shù)呢?似乎9有點(diǎn)多哦?卻沒有1,4,7?!我們來做一個(gè)概率實(shí)驗(yàn),生成1000萬個(gè)隨機(jī)數(shù),看0-9這10個(gè)數(shù)出現(xiàn)的頻率是不是大致相同的。程序如下:\x0d\x0a#include \x0d\x0a#include \x0d\x0a#include \x0d\x0a#include \x0d\x0ausing namespace std;\x0d\x0a\x0d\x0aint main()\x0d\x0a{\x0d\x0a double random(double,double);\x0d\x0a int a[10] = ;\x0d\x0a const int Gen_max = 10000000;\x0d\x0a srand(unsigned(time(0)));\x0d\x0a \x0d\x0a for(int icnt = 0; icnt != Gen_max; ++icnt)\x0d\x0a switch(int(random(0,10)))\x0d\x0a {\x0d\x0a case 0: a[0]++; break;\x0d\x0a case 1: a[1]++; break;\x0d\x0a case 2: a[2]++; break;\x0d\x0a case 3: a[3]++; break;\x0d\x0a case 4: a[4]++; break;\x0d\x0a case 5: a[5]++; break;\x0d\x0a case 6: a[6]++; break;\x0d\x0a case 7: a[7]++; break;\x0d\x0a case 8: a[8]++; break;\x0d\x0a case 9: a[9]++; break;\x0d\x0a default: cerr "Error!" endl; exit(-1);\x0d\x0a }\x0d\x0a \x0d\x0a for(int icnt = 0; icnt != 10; ++icnt)\x0d\x0a cout icnt ": " setw(6) setiosflags(ios::fixed) setprecision(2) double(a[icnt])/Gen_max*100 "%" endl;\x0d\x0a \x0d\x0a return 0;\x0d\x0a}\x0d\x0a\x0d\x0adouble random(double start, double end)\x0d\x0a{\x0d\x0a return start+(end-start)*rand()/(RAND_MAX + 1.0);\x0d\x0a}\x0d\x0a/* 運(yùn)行結(jié)果\x0d\x0a* 0: 10.01%\x0d\x0a* 1: 9.99%\x0d\x0a* 2: 9.99%\x0d\x0a* 3: 9.99%\x0d\x0a* 4: 9.98%\x0d\x0a* 5: 10.01%\x0d\x0a* 6: 10.02%\x0d\x0a* 7: 10.01%\x0d\x0a* 8: 10.01%\x0d\x0a* 9: 9.99%\x0d\x0a*/\x0d\x0a可知用這種方法得到的隨機(jī)數(shù)是滿足統(tǒng)計(jì)規(guī)律的。\x0d\x0a\x0d\x0a另:在Linux下利用GCC編譯程序,即使我執(zhí)行了1000000次運(yùn)算,是否將random函數(shù)定義了inline函數(shù)似乎對(duì)程序沒有任何影響,有理由相信,GCC已經(jīng)為我們做了優(yōu)化。但是冥冥之中我又記得要做inline優(yōu)化得加O3才行...\x0d\x0a\x0d\x0a不行,于是我們把循環(huán)次數(shù)改為10億次,用time命令查看執(zhí)行時(shí)間:\x0d\x0achinsung@gentoo ~/workspace/test/Debug $ time ./test \x0d\x0a0: 10.00%\x0d\x0a1: 10.00%\x0d\x0a2: 10.00%\x0d\x0a3: 10.00%\x0d\x0a4: 10.00%\x0d\x0a5: 10.00%\x0d\x0a6: 10.00%\x0d\x0a7: 10.00%\x0d\x0a8: 10.00%\x0d\x0a9: 10.00%\x0d\x0a\x0d\x0areal 2m7.768s\x0d\x0auser 2m4.405s\x0d\x0asys 0m0.038s\x0d\x0achinsung@gentoo ~/workspace/test/Debug $ time ./test \x0d\x0a0: 10.00%\x0d\x0a1: 10.00%\x0d\x0a2: 10.00%\x0d\x0a3: 10.00%\x0d\x0a4: 10.00%\x0d\x0a5: 10.00%\x0d\x0a6: 10.00%\x0d\x0a7: 10.00%\x0d\x0a8: 10.00%\x0d\x0a9: 10.00%\x0d\x0a\x0d\x0areal 2m7.269s\x0d\x0auser 2m4.077s\x0d\x0asys 0m0.025s\x0d\x0a\x0d\x0a前一次為進(jìn)行inline優(yōu)化的情形,后一次為沒有作inline優(yōu)化的情形,兩次結(jié)果相差不大,甚至各項(xiàng)指標(biāo)后者還要好一些,不知是何緣由...

C語(yǔ)言中產(chǎn)生隨機(jī)數(shù)的函數(shù)是什么?

c語(yǔ)言中產(chǎn)生隨機(jī)數(shù)的相關(guān)函數(shù)主要包括srand和rand函數(shù),兩者配合生成隨機(jī)數(shù)據(jù),測(cè)試代碼如下,

#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ù)這個(gè)種子的值產(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ī)”。通常可以利用系統(tǒng)時(shí)間來改變系統(tǒng)的種子值,即srand(time(NULL)),可以為rand函數(shù)提供不同的種子值,進(jìn)而產(chǎn)生不同的隨機(jī)數(shù)序列。

如何用c語(yǔ)言產(chǎn)生一定范圍內(nèi)的隨機(jī)數(shù)?

利用srand((unsigned int)(time(NULL))是一種方法,因?yàn)槊恳淮芜\(yùn)行程序的時(shí)間是不同的。

在C語(yǔ)言里所提供的隨機(jī)數(shù)發(fā)生器的用法:現(xiàn)在的C編譯器都提供了一個(gè)基于ANSI標(biāo)準(zhǔn)的偽隨機(jī)數(shù)發(fā)生器函數(shù),用來生成隨機(jī)數(shù)。它們就是rand()和srand()函數(shù)。這二個(gè)函數(shù)的工作過程如下:

1) 首先給srand()提供一個(gè)種子,它是一個(gè)unsigned int類型,其取值范圍從0~65535;

2) 然后調(diào)用rand(),它會(huì)根據(jù)提供給srand()的種子值返回一個(gè)隨機(jī)數(shù)(在0到32767之間)

3) 根據(jù)需要多次調(diào)用rand(),從而不間斷地得到新的隨機(jī)數(shù);

4) 無論什么時(shí)候,都可以給srand()提供一個(gè)新的種子,從而進(jìn)一步“隨機(jī)化”rand()的輸出結(jié)果。

下面是0~32767之間的隨機(jī)數(shù)程序:

#include stdlib.h

#include stdio.h

#include time.h ? ? ? ? ? // 使用當(dāng)前時(shí)鐘做種子

void main(void)

{int i;

srand((unsigned)time( NULL ) ); ? ? ? ? ?// 初始化隨機(jī)數(shù)

for(i = 0; i 10;i++) ? ? ? ? ? ? ? ? ? ? ? ? ?// 打印出 10 個(gè)隨機(jī)數(shù)

printf("%d\n", rand() );

}

根據(jù)上面的程序可以很容易得到0~1之間的隨機(jī)數(shù):

#include stdlib.h

#include stdio.h

#include time.h

int main( )

{int i;

srand((unsigned)time( NULL ) );

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

printf("%5.2f\n", rand()/32767.0);

}

而產(chǎn)生1~100之間的隨機(jī)數(shù)可以這樣寫:

#include stdlib.h

#include stdio.h

#include time.h

int main( )

{int i;

srand((unsigned)time( NULL ) );

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

printf("%d\n", rand()%100+1);

}

擴(kuò)展資料:

C語(yǔ)言高效編程技巧:

一:以空間換時(shí)間

計(jì)算機(jī)程序中最大的矛盾是空間和時(shí)間的矛盾,那么,從這個(gè)角度出發(fā)逆向思維來考慮程序的效率問題

二:數(shù)學(xué)方法解決問題

數(shù)學(xué)是計(jì)算機(jī)之母,沒有數(shù)學(xué)的依據(jù)和基礎(chǔ),就沒有計(jì)算機(jī)發(fā)展,所以在編寫程序的時(shí)候,采用一些數(shù)學(xué)方法會(huì)對(duì)程序的執(zhí)行效率有數(shù)量級(jí)的提高。

三:使用位操作

實(shí)現(xiàn)高效的C語(yǔ)言編寫的第三招----使用位操作,減少除法和取模的運(yùn)算。

在計(jì)算機(jī)程序中,數(shù)據(jù)的位是可以操作的最小數(shù)據(jù)單位,理論上可以用“位運(yùn)算”來完成所有的運(yùn)算和操作。一般的位操作是用來控制硬件的,或者做數(shù)據(jù)變換使用,但是,靈活的位操作可以有效提高程序運(yùn)行的效率。

參考資料來源:百度百科-C語(yǔ)言

新聞標(biāo)題:c語(yǔ)言隨機(jī)函數(shù)生成隨機(jī)數(shù) c語(yǔ)言的隨機(jī)數(shù)生成
鏈接地址:http://www.rwnh.cn/article30/dopjjso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、品牌網(wǎng)站制作、用戶體驗(yàn)、移動(dòng)網(wǎng)站建設(shè)、ChatGPT、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
邻水| 汝南县| 石楼县| 正安县| 云霄县| 双峰县| 定西市| 额敏县| 安宁市| 鸡东县| 和田市| 昌图县| 响水县| 麻城市| 义马市| 河北区| 黔西县| 海安县| 义马市| 八宿县| 崇明县| 兰州市| 漳平市| 工布江达县| 大新县| 同心县| 汽车| 沙洋县| 安吉县| 临城县| 明光市| 金川县| 永修县| 贵定县| 铜川市| 五莲县| 鄂托克前旗| 陵川县| 华宁县| 光山县| 玉溪市|