複製鏈接
請複製以下鏈接發送給好友

srand

鎖定
srand函數是隨機數發生器的初始化函數。原型:void srand(unsigned int seed);srand和rand()配合使用產生偽隨機數序列。
外文名
srand
含    義
隨機數發生初始化函數
屬    性
函數
原    型
void srand(unsigned int seed);
用    途
編程

srand簡介

語法:void srand (unsigned seed);
參數説明:unsigned seed:隨機數產生器的初始值(種子值)。
功能説明:srand設置產生一系列偽隨機數發生器的起始點,要想把發生器重新初始化,可用1作seed值。任何其它的值都把發生器匿成一個隨機的起始點。rand檢索生成的偽隨機數。在任何調用srand之前調用rand與以1作為seed調用srand產生相同的序列。 [1] 
此函數可以設定rand函數所用的隨機數產生演算法的種子值。任何大於一的種子值都會將rand隨機數所產生的虛擬隨機數序列重新設定一個起始點。 [2] 
包含文件: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*/

參考資料
  • 1.    宗麗蘋 ,吳倩 ,邦繼明.Microsoft C5.0 優化編譯 庫程序參考手冊 下 第7冊:中國科學院科海培訓中心,2013:351-352
  • 2.    希望圖書創作室.PHP4.0程序員參考:北京希望電子出版社,2000:342-343