最近在學著用c寫一些小程序,過程中遇到很多問題,在網上查很多大神的講解,以及查閱vs2010的幫助文檔。在此做個筆記,以便今后查閱,備忘。感謝無私奉獻講解的大神們!
一、rand()
rand()函數用來產生隨機數,但是,rand()的內部實現是用線性同余法實現的,是偽隨機數,由于周期較長,因此在一定范圍內可以看成是隨機的。
rand()會返回一個范圍在0到RAND_MAX(32767)之間的偽隨機數(整數)。
在調用rand()函數之前,可以使用srand()函數設置隨機數種子,如果沒有設置隨機數種子,rand()函數在調用時,自動設計隨機數種子為1。隨機種子相同,每次產生的隨機數也會相同。
rand()函數需要的頭文件是:<stdlib.h>
rand()函數原型:int rand(void);
使用rand()函數產生1-100以內的隨機整數:int number1 = rand() % 100;
二、srand()
srand()函數需要的頭文件仍然是:<stdlib.h>
srand()函數原型:void srand (usigned int seed);
srand()用來設置rand()產生隨機數時的隨機數種子。參數seed是整數,通常可以利用time(0)或geypid(0)的返回值作為seed。
使用rand()和srand()產生1-100以內的隨機整數:srand(time(0));
int number1 = rand() % 100;
三、使用rand()和srand()產生指定范圍內的隨機整數的方法
“模除+加法”的方法
因為,對于任意數,0<=rand()%(n-m+1)<=n-m
因此,0+m<=rand()%(n-m+1)+m<=n-m+m
因此,如要產生[m,n]范圍內的隨機數num,可用:
int num=rand()%(n-m+1)+m;
其中的rand()%(n-m+1)+m算是一個公式,記錄一下方便以后查閱。
比如產生10~30的隨機整數:
srand(time(0));
int a = rand() % (21)+10;