基本介紹
簡介,rand 和srand,函式用法,使用舉例,例1(C語言),例2(C語言),例3(C語言),例4(C++),
簡介
語法:void srand (unsigned seed);
參數說明:unsigned seed:隨機數產生器的初始值(種子值)。
功能說明:srand設定產生一系列偽隨機數發生器的起始點,要想把發生器重新初始化,可用1作seed值。任何共它的值都把發生器匿成一個隨機的起始點。rand檢索生成的偽隨機數。在任何調用srand之前調用rand與以1作為seed調用srand產生相同的序列。
參數說明:unsigned seed:隨機數產生器的初始值(種子值)。
功能說明:srand設定產生一系列偽隨機數發生器的起始點,要想把發生器重新初始化,可用1作seed值。任何共它的值都把發生器匿成一個隨機的起始點。rand檢索生成的偽隨機數。在任何調用srand之前調用rand與以1作為seed調用srand產生相同的序列。
此函式可以設定rand函式所用的隨機數產生演算法的種子值。任何大於一的種子值都會將rand隨機數所產生的虛擬隨機數序列重新設定一個起始點。
包含檔案:stdlib. h
返回值:無
相關函式:rand,random ,randomize
返回值:無
相關函式:rand,random ,randomize
rand 和srand
函式一:int rand(void);
功能:產生隨機值,從srand (seed)中指定的seed開始,返回一個[seed, RAND_MAX(0x7fff))間的隨機整數。
函式二:void srand(unsigned seed);
參數seed是rand()的種子,用來初始化rand()的起始值。
可以認為rand()在每次被調用的時候,它會查看:
1) 如果用戶在此之前調用過srand(seed),給seed指定了一個值,那么它會自動調用srand(seed)一次來初始化它的起始值。
2) 如果用戶在此之前沒有調用過srand(seed),它會自動調用srand(1)一次。
函式用法
rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次調用rand函式生成的偽隨機數序列都是一樣的。srand(unsigned seed)通過參數seed改變系統提供的種子值,從而可以使得每次調用rand函式生成的偽隨機數序列不同,從而實現真正意義上的“隨機”。通常可以利用系統時間來改變系統的種子值,即srand(time(NULL)),可以為rand函式提供不同的種子值,進而產生不同的隨機數序列。
使用舉例
例1(C語言)
輸出了20個大小範圍為0-99的隨機數
#include<stdlib.h>//頭檔案包含rand和srand函式#include<stdio.h>#include<time.h>void main(){int i,k;srand((unsigned)time(NULL));//選取種子檔案for(i=0;i<20;i++) { k=rand()%100;//%100控制隨機數的範圍 printf("k=%d\n",k);//輸出隨機數}
例2(C語言)
隨機輸出十個0-100之間的整數
#include<stdlib.h>/*用到了srand函式,所以要有這個頭檔案*/#include<stdio.h>#define MAX 10int main(void){int number[MAX] = {0};int i;unsigned int seed;scanf("%d",&seed);/*手動輸入種子*/srand(seed);for(i = 0; i < MAX; i++){number[i] = (rand() % 100);/*產生100以內的隨機整數*/printf("%d\n",number[i]);}printf("\n");return 0;}
例3(C語言)
#include<stdlib.h>#include<stdio.h>#include<time.h>/*用到了time函式,所以要有這個頭檔案*/#define MAX 10int main(void){int number[MAX] = {0};int i;srand((unsigned)time(NULL));/*播種子*/for(i = 0; i < MAX; i++){number[i] = (rand() % 100);/*產生100以內的隨機整數*/printf("%d\n",number[i]);}printf("\n");return 0;}
例4(C++)
#include<iostream>#include<ctime>#include<cstdlib>using namespace std;double random(double,double);int main(){srand( unsigned( time(0) ) );//srand(time(NULL));for(int j = 0; j < 10; j++)cout << "No." << j+1 << ":" << int(random(0,10)) << endl;return 0;}double random(double start,double end){return start + (end - start) * rand() / (RAND_MAX + 1.0);}//從此處採取點斜式子,將返回值範圍限定至0-9//的整數,倘若要生成10,(RAND_MAX+1.0)改成(RAND_MAX)/*運行結果*No.1:3*No.2:9*No.3:0*No.4:9*No.5:5*No.6:6*No.7:9*No.8:2*No.9:9*No.10:6*/