srand((int)time(NULL));設(shè)定隨機(jī)數(shù)種子
創(chuàng)新互聯(lián)公司是專業(yè)的阜平網(wǎng)站建設(shè)公司,阜平接單;提供網(wǎng)站建設(shè)、做網(wǎng)站,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行阜平網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
rand()%100;產(chǎn)生0-99的隨機(jī)數(shù)。
高級點(diǎn)的,假如要產(chǎn)生16-59之間的數(shù),你可以這樣寫:rand()%44+16(這里44由59-16+1得到)。其他情況如法炮制!
C語言中用rand()函數(shù)產(chǎn)生20-90的隨機(jī)整數(shù)
20-90共有71個(gè)數(shù)字,所以是rand()%71+20 ;
用rand()生成-20-20的隨機(jī)數(shù)
-20-20共有41個(gè)數(shù)字,所以是rand()%41-20;
需要注意的是,在運(yùn)行以上代碼之前最好設(shè)定一下:
srand(time(NULL));//用系統(tǒng)當(dāng)前時(shí)間設(shè)置rand()隨機(jī)序列種子,保證每次運(yùn)行隨機(jī)序列不一樣
c語言的獲取隨機(jī)數(shù)的函數(shù)為rand(),
可以獲得一個(gè)非負(fù)整數(shù)的隨機(jī)數(shù)。要調(diào)用rand需要引用頭文件stdlib.h。
要讓隨機(jī)數(shù)限定在一個(gè)范圍,可以采用模除加加法的方式。
要產(chǎn)生隨機(jī)數(shù)r,
其范圍為
m=r=n,可以使用如下公式:
rand()%(n-m+1)+m
其原理為,對于任意數(shù),
0=rand()%(n-m+1)=n-m
于是
0+m=rand()%(n-m+1)+m=n-m+m
即
m=rand()%(n-m+1)+m=n
利用srand((unsigned int)(time(NULL))是一種方法,因?yàn)槊恳淮芜\(yùn)行程序的時(shí)間是不同的。
在C語言里所提供的隨機(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(),它會根據(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語言高效編程技巧:
一:以空間換時(shí)間
計(jì)算機(jī)程序中最大的矛盾是空間和時(shí)間的矛盾,那么,從這個(gè)角度出發(fā)逆向思維來考慮程序的效率問題
二:數(shù)學(xué)方法解決問題
數(shù)學(xué)是計(jì)算機(jī)之母,沒有數(shù)學(xué)的依據(jù)和基礎(chǔ),就沒有計(jì)算機(jī)發(fā)展,所以在編寫程序的時(shí)候,采用一些數(shù)學(xué)方法會對程序的執(zhí)行效率有數(shù)量級的提高。
三:使用位操作
實(shí)現(xiàn)高效的C語言編寫的第三招----使用位操作,減少除法和取模的運(yùn)算。
在計(jì)算機(jī)程序中,數(shù)據(jù)的位是可以操作的最小數(shù)據(jù)單位,理論上可以用“位運(yùn)算”來完成所有的運(yùn)算和操作。一般的位操作是用來控制硬件的,或者做數(shù)據(jù)變換使用,但是,靈活的位操作可以有效提高程序運(yùn)行的效率。
參考資料來源:百度百科-C語言