srand和rand兩個函數配合可以產生偽隨機數序列。rand函數在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次調用rand函數生成的偽隨機數序列都是一樣的。srand(unsigned seed)通過參數seed改變系統提供的種子值,從而可以使得每次調用rand函數生成的偽隨機數序列不同,從而實現真正意義上的“隨機”。通常可以利用系統時間來改變系統的種子值,即srand(time(NULL)),可以為rand函數提供不同的種子值,進而產生不同的隨機數序列。
程序1:
1 #include<stdlib.h>/*用到了srand函數,所以要有這個頭文件*/ 2 #include<stdio.h> 3 #define MAX 15 4 5 int main() 6 { 7 int number[MAX] = {0}; 8 int i; 9 unsigned int seed; 10 printf("手動輸入隨機數種子:\n"); 11 scanf("%d",&seed);/*手動輸入種子*/ 12 srand(seed); 13 printf("產生隨機數如下:\n"); 14 for(i = 0; i < MAX; i++){ 15 number[i] = rand() % 100;/*產生100以內的隨機整數*/ 16 printf("%d\t",number[i]); 17 } 18 printf("\n"); 19 return 0; 20 }
運行結果:
手動輸入隨機數種子: 3 產生隨機數如下: 46 85 68 40 25 40 72 76 1 64 58 24 93 39 2
程序2:
1 #include<stdlib.h> 2 #include<stdio.h> 3 #include<time.h>/*用到了time函數,所以要有這個頭文件*/ 4 #define MAX 15 5 6 int main(void) 7 { 8 int number[MAX] = {0}; 9 int i; 10 srand((unsigned)time(NULL));/*播種子*/ 11 printf("產生隨機數序列如下:\n"); 12 for(i = 0; i < MAX; i++) 13 { 14 number[i] = rand() % 100;/*產生100以內的隨機整數*/ 15 printf("%d\t",number[i]); 16 } 17 printf("\n"); 18 return 0; 19 }
運行結果:
產生隨機數序列如下: 20 29 49 13 33 96 37 18 84 20 10 28 60 62 86