C語言先通過srand()函數產生隨機數種子,然後調用rand()來生成一個隨機數,因爲C語言產生的隨機數時僞隨機數,並不是真正意義上的隨機數,使用的是固定的算法來得到這些隨機數,所以如果種子seek相同,每次就會產生同一批隨機數。
問題2: 我按照上述方法並不能產生隨機數,僅產生公差爲3或4的等差數列: #include <stdlib.h> #include <iostream.h> #include <conio.h> #include <time.h> void main() { for(int i=0;i<100000;i++) { srand( (unsigned)time( NULL ) ); cout<<rand()<<endl; } } 專家解答: 你的程序是有問題的,你每產生一個隨機數之前,都調用一次srand,而由於計算機運行很快,所以你每次用time得到的時間都是一樣的(time的時間精度較低,只有55ms)。這樣相當於使用同一個種子產生隨機序列,所以產生的隨機數總是相同的。你應該把srand放在循環外: srand( (unsigned)time( NULL ) ); for(int i=0;i<100000;i++) { //相關語句 }