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));
}