rand函數(shù)也是調(diào)用dos的時鐘,進(jìn)行的偽隨機(jī)函數(shù)。
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括西崗網(wǎng)站建設(shè)、西崗網(wǎng)站制作、西崗網(wǎng)頁制作以及西崗網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,西崗網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到西崗省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
你也可以使用時鐘來模擬隨機(jī)函數(shù)。
可以試用gettime這個函數(shù):
long int MyRand(int x)
{
struct time t1,t2,t3;
gettime(t1);
int y1=t1.ti_hund;//取1/100s作為基數(shù)
gettime(t2);
int y2=t2.ti_hund;//取1/100s作為基數(shù)
gettime(t3);
int y3=t3.ti_hund;//取1/100s作為基數(shù)
return y1*y2*y3;//產(chǎn)生的隨機(jī)數(shù)0~99*99*99
}
============================
LZ我真的佩服你,都已經(jīng)給你寫到這個份上了,
產(chǎn)生0~1的很簡單嘛:
float y;
y=(MyRand()%100)/100.00;//這不是產(chǎn)生了0~1的隨機(jī)數(shù)嗎?
rand函數(shù)會返回一個 [0, RAND_MAX] 間的隨機(jī)整數(shù),RAND_MAX至少為32767。
如下代碼,生成一個隨機(jī)整數(shù)數(shù)組
#include?stdio.h
#include?stdlib.h
#include?time.h
#include?conio.h
#define?ARR_LEN?255?/*?數(shù)組長度上限?*/
#define?elemType?int?/*?元素類型?*/
/*?生成n項(xiàng)min~max范圍的隨機(jī)數(shù)并存入數(shù)組randArr?*/
void?randomArray?(elemType?randArr[],?int?n,?elemType?min,?elemType?max)?{
int?i;
srand?((unsigned)time(NULL));?/*?用時間做種,每次產(chǎn)生隨機(jī)數(shù)不一樣?*/
for?(i=0;?in;?i++)
randArr[i]?=?rand()?%?(max-min+1)+min;?/*?產(chǎn)生min~max的隨機(jī)數(shù)?*/
}
/*打印數(shù)組*/
/*?elemType?arr[]:?打印目標(biāo)數(shù)組;?int?len:?元素個數(shù)?*/
void?printArray?(elemType?arr[],?int?len)?{
int?i;
for?(i=0;?ilen;?i++)
printf?("%d\t",?arr[i]);
putchar?('\n');
}
int?main?(void)?{
elemType?arr[ARR_LEN];
randomArray?(arr,?10,?1,?50);?/*?隨機(jī)生成10項(xiàng)1~50的數(shù)組?*/
printArray?(arr,?10);
getch?();?/*屏幕暫留*/
return?0;
}
是的,頭文件stdlib.h里包含了srand和rand函數(shù)。如果沒有調(diào)用srand,那么rand將產(chǎn)生相同的隨機(jī)數(shù)“序列”——就是說如果第一次循環(huán)調(diào)用rand產(chǎn)生的隨機(jī)數(shù)序列是88,2,33,55……的話,第二次啟動循環(huán)調(diào)用rand產(chǎn)生的隨機(jī)數(shù)序列仍然是88,2,33,55……產(chǎn)生這一問題的根本原因是偽隨機(jī)序列發(fā)生器的初始狀態(tài)沒有發(fā)生變化造成的。srand函數(shù)的功能就是來改變偽隨機(jī)序列發(fā)生器的初始狀態(tài)。srand向偽隨機(jī)序列發(fā)生器的初始狀態(tài)寄存器寫入不同的值(狀態(tài)字),就能使rand函數(shù)產(chǎn)生不同的序列,就解決了“序列重復(fù)”的問題。顯然,人為安排狀態(tài)字是不現(xiàn)實(shí)的,因?yàn)榘才帕司妥儾涣肆?。所以用NULL來調(diào)用time函數(shù)獲致系統(tǒng)時鐘值轉(zhuǎn)換成無符號整數(shù)數(shù)作為srand的參數(shù),這樣每調(diào)用一次srand都會寫入不同的初始狀態(tài)字(因?yàn)闀r鐘每時每刻都是變化的),就達(dá)到目的了。
那就算了吧!我不知道與哪個長得像,這里沒有一個像的,也沒有一個真正講出要用srand的原因。我寫的時候誰的都沒有參考,別說是復(fù)制。如果可以,把認(rèn)為復(fù)制的答案弄出來我看看。