C語言/C++產生隨機數要用到的是rand()函數,srand()函數,C語言/C++裡沒有自帶的random(int number)函數。
先從程序上去認識吧。
#include <stdio.h> #include <stdlib.h> #include <time.h> #define random(x) (rand()%x) main() { int length, i; int wait; int array[10]; // 定義一個數組 srand(time(NULL)); // 讓每次產生的隨機數都不一樣 length = sizeof(array) / sizeof(array[0]); // 給數組賦值 for(i = 0; i < 10; i++) array[i] = random(100); // 輸出數組 for(i = 0; i < 10; i++) printf("%d\n", array[i]); printf("%d", length); scanf("%d", &wait); }
C語言中和生成隨機數有關的兩個函數是 srand(),rand(),包含在頭文件stdlib.h中
void srand( unsigned seed );
函數srand()用來設置rand()產生隨機數時的隨機數種子。參數seed必須是個整數,通常可以利用time(0)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。
int rand()
函數srand接受一個無符號的參數,為rand設置隨機數種子。
rand()會返回一隨機數值,范圍在0至RAND_MAX 間。RAND_MAX定義在stdlib.h,其值為2147483647。在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。
典型用法:
srand(time(NULL)); for( i = 0; i < 10; i++ ) printf( "Random number #%d: %d\n", i, rand() );
這樣因為每次設置的種子不同,所以多次運行時,不會產生相同的隨機數。
然而下面代碼,多次運行時,產生的隨機數是完全相同的。
srand(100); for(int i = 0; i < 10; i++ ) printf( "Random number #%d: %d\n", i, rand() );
如果你只要產生隨機數而不需要設定范圍的話,你只要用rand()就可以了:rand()會返回一隨機數值,范圍在0至RAND_MAX 間。RAND_MAX定義在stdlib.h,其值為2147483647。 例如:
#include<stdio.h> #include<stdlib.h> void main() { for(int i=0;i<10;i+) printf("%d\n",rand()); }
如果你要隨機生成一個在一定范圍的數,你可以在宏定義中定義一個random(int number)函數,然後在main()裡面直接調用random()函數:
#include<stdio.h> #include<stdlib.h> #define random(x) (rand()%x) void main() { for(int x=0;x<10;x++) printf("%d\n",random(100)); }
但是上面兩個例子所生成的隨機數都只能是一次性的,如果你第二次運行的時候輸出結果仍和第一次一樣。這與srand()函數有關。srand()用來設置rand()產生隨機數時的隨機數種子。在調用rand()函數產生隨機數前,必須先利用srand()設好隨機數種子(seed), 如果未設隨機數種子, rand()在調用時會自動設隨機數種子為1。上面的兩個例子就是因為沒有設置隨機數種子,每次隨機數種子都自動設成相同值1 ,進而導致rand()所產生的隨機數值都一樣。
srand()函數定義 : void srand (unsigned int seed); 通常可以利用geypid()或time(0)的返回值來當做seed,如果你用time(0)的話,要加入頭文件#include <time.h>
#include<stdio.h> #include<stdlib.h> #include<time.h> #define random(x) (rand()%x) void main() { srand((int)time(0)); for(int x=0;x<10;x++) printf("%d\n",random(100)); }