(1)單純使用rand重復調用n次,就會得到一個0-RAND_MAX之間的偽隨機數,如果需要調整范圍,可以得到隨機數序列后再進行計算。
(2)單純使用rand來得到偽隨機數序列有缺陷,每次執行程序得到的偽隨機序列是同一個序列,沒法得到其他序列
(3)原因是因為rand內部的算法其實是通過一個種子(seed,其實就是一個原始參數,int類型),rand內部默認是使用1作為seed的,種子一定的算法也是一定的,那么每次得到的偽隨機序列肯定是同一個。
(4)所以要想每次執行這個程序獲取的偽隨機序列不同,則每次都要給不同的種子。用srand函數來設置種子。
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/time.h> int main(int argc ,char ** argv) {struct timeval tv={0};struct timezone tz ={0};/* if(argc!=2){printf("usage:%s num\n",argv[0]);return -1;} *///srand(atoi(argv[1]));gettimeofday(&tv,&tz);//獲取微妙數 srand(tv.tv_usec);printf("rand max%d\n",RAND_MAX);for ( int i =0 ; i<6 ; i++){printf(" %d ",rand()%20); }printf("\n"); return 0; }
?