-
srand
鎖定
srand簡介
語法:void srand (unsigned seed);
參數説明:unsigned seed:隨機數產生器的初始值(種子值)。
功能説明:srand設置產生一系列偽隨機數發生器的起始點,要想把發生器重新初始化,可用1作seed值。任何其它的值都把發生器匿成一個隨機的起始點。rand檢索生成的偽隨機數。在任何調用srand之前調用rand與以1作為seed調用srand產生相同的序列。
[1]
包含文件:stdlib. h
返回值:無
相關函數:rand,random ,randomize
srandrand 和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)一次。
srand函數用法
rand函數在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次調用rand函數生成的偽隨機數序列都是一樣的。srand(unsigned seed)通過參數seed改變系統提供的種子值,從而可以使得每次調用rand函數生成的偽隨機數序列不同,從而實現真正意義上的“隨機”。通常可以利用系統時間來改變系統的種子值,即srand(time(NULL)),可以為rand函數提供不同的種子值,進而產生不同的隨機數序列。
srand使用舉例
srand例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);//輸出隨機數 } }
srand例2(C語言)
隨機輸出十個0-100之間的整數
#include<stdlib.h>/*用到了srand函數,所以要有這個頭文件*/ #include<stdio.h> #define MAX 10 int 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; }
srand例3(C語言)
#include<stdlib.h> #include<stdio.h> #include<time.h>/*用到了time函數,所以要有這個頭文件*/ #define MAX 10 int 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; }
srand例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*/