我們平時在做一些分析數據的時候經常會用到隨機數,我們知道,隨機數是一個設備,在利用這個設備生成隨機數時,需要提供一個種子,如果我們不提供,那麼默認會提供一個為1的種子,這時,隨機數生成器生成的並不是真正意義上的隨機數,因為每次那些隨機數都是相同的,例如下面的這個例子:
#include<stdio.h> #include<stdlib.h> #include<time.h> void print_rand(); int main(void) { print_rand(); printf("\n"); } void print_rand() { int a[10], i; for(i = 0; i < 10; i++) { a[i] = rand()%100; } for(i = 0; i < 10; i++) { printf("%d ", a[i]); } }
現在,我把程序改動如下:
#include<stdio.h> #include<stdlib.h> #include<time.h> void print_rand(); int main(void) { print_rand(); printf("\n"); } void print_rand() { int a[10], i; srand(time(NULL)); for(i = 0; i < 10; i++) { a[i] = rand()%100; } for(i = 0; i < 10; i++) { printf("%d ", a[i]); } } #include<stdio.h> #include<stdlib.h> #include<time.h> void print_rand(); int main(void) { print_rand(); printf("\n"); } void print_rand() { int a[10], i; srand(time(NULL)); for(i = 0; i < 10; i++) { a[i] = rand()%100; } for(i = 0; i < 10; i++) { printf("%d ", a[i]); } }
從兩次執行的程序可以看出,第一個程序得到的輸出都是一樣的,因為種子沒有變,始終是1,第二個程序輸出的每一次都不一樣,因為,我用到了這個函數:
srand(time(NULL));
srand(time(NULL)); 這個函數是為 rand()提供種子的,為了使每次提供的種子都不一樣,我把時間作為參數提供給函數,由於時間肯定是每次都不同的,所以,這樣得到的才是真正意義上的隨機數。