程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言隨機數生成

C語言隨機數生成

編輯:關於C語言

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved