突然遇到了隨機(jī)函數(shù)的問題,那出來和大家分享一下 :
srand():用此函數(shù)來獲取隨機(jī)數(shù)的種子,rand()來獲取隨機(jī)數(shù);
rand和srand的用法
首先我們要對rand&srand有個總體的看法:srand初始化隨機(jī)種子,rand產(chǎn)生隨機(jī)數(shù),下面將詳細(xì)說明。
rand(產(chǎn)生隨機(jī)數(shù))
表頭文件 : #include
定義函數(shù) : int rand(void)
函數(shù)說明 :
因?yàn)閞and的內(nèi)部實(shí)現(xiàn)是用線性同余法做的,他不是真的隨機(jī)數(shù),只不過是因?yàn)槠渲芷谔貏e長,所以有一定的范圍里可看成是隨機(jī)的,rand()會返回一隨機(jī)數(shù)值,范圍在0至RAND_MAX間。
在調(diào)用此函數(shù)產(chǎn)生隨機(jī)數(shù)前,必須先利用srand()設(shè)好隨機(jī)數(shù)種子,如果未設(shè)隨機(jī)數(shù)種子,rand()在調(diào)用時會自動設(shè)隨機(jī)數(shù)種子為1.
rand ()產(chǎn)生的是假隨機(jī)數(shù)字,每次執(zhí)行時是相同的。
若要不同,以不同的值來初始化它.初始化的函數(shù)就是srand()。
返回值:
返回0至RAND_MAX之間的隨機(jī)整數(shù)值,RAND_MAX的范圍最少是在32767之間(int),即雙字節(jié)(16位數(shù))。若用unsigned int 雙字節(jié)是65535,四字節(jié)是4294967295的整數(shù)范圍。
0~RAND_MAX每個數(shù)字被選中的機(jī)率是相同的。
srand函數(shù)是隨機(jī)數(shù)發(fā)生器的初始化函數(shù),原型:
void srand(unsigned seed);
建議用下面的方法初始化(獲得隨機(jī)數(shù)種子)
srand( (unsigned)time( NULL ) );
下面是我寫的一個程序,希望多多指教:
#include
#include
#include
int main(int argc, char *argv[])
{
int count = 8;
int num;
int test;
printf("You only 8 chance\n");
srand((unsigned)time(NULL));
test = rand() % 100 + 1;
while(count > 0){
printf("please input number:");
scanf("%d", &num);
if(num > test)
printf("too high\n");
else if(num < test)
printf("too low\n");
else{
printf("correct!\n");
return;
}
count--;
}
return 0;
}
當(dāng)然其中有很多玄機(jī),例如:如果把rand()函數(shù)放在了while中,結(jié)果就不一樣了,有的說法是,只有一個種子,所以每次產(chǎn)生的數(shù)都一樣。。。
當(dāng)然,C算法很廣大,希望大家一起:free open share !!!
相關(guān)推薦:2010年9月計(jì)算機(jī)等級考試精華備考資料匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |