c語言中的隨機函數為rand(),但是rand生成的值得大小主要相對一個變量才產生的一定有含義的數,這個相對的變量我們可以再srand()函數中進行設置,srand函數是void類型,內部含一個無符號整形
定義如下
如果我們不定義的話
重復執行下面的代碼產生的效果可能是同一個數

我們知道有一個函數time(),這個值是不斷的改變的,我們可以將其嵌入在srand中,那么每次產生rand值就會是不同的
time()的返回是一個_int64 類型的數,time的定義是 time——t time(time_t *timer)
我們在定義的時候可以不使用返回類型time_t,我們只是調用time(time_t *timer)
那么我們的產生的隨機值就存放在了*timer里面,后面我們可以通過只用指針*timer來調用我們產生的值
其中time產生的值就是unix的時間戳,產生的值是以秒為單位來進行計算的,時間的計算就是目前的時間與1970年1月1日0時0分0秒之間的決定值
只不過是用秒來表示,
同時里面的參數可以不為*timer,可以為NULL,也可以直接用0來代替,

srand()是void類型,我們在srand()里面嵌套不斷變化的函數time(0),那么我們產生的隨機數每時每刻的相對值都是不同的,所以產生的隨機數也就是不同的
rand()函數是有返回值的,,至於要求產生多大范圍內的數需要自己控制;
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-—————————
華麗的分割線
如果上面的理解了,下面是比較官方的解釋方法
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
rand()函數是產生隨機數的一個
隨機函數。C語言里還有 srand()函數等。
(1)使用該函數首先應在開頭包含頭文件
stdlib.h
#include<stdlib.h>
(C++建議使用#include<cstdlib>,下同)
(2)在標准的c庫中rand可以產生於一個0~rand_max之間的一個隨機數,rand_max是stdlib中定義的一個數,與系統有關
(3)因為rand每次都是按照順序產生固定的隨機數,所以對於同一個程序,我們多次調用執行,會產生同樣的數,也就是產生同樣的效果,所以我們有時候也管隨機數叫做偽隨機數,
(4)為了使得每次隨機數生成時都生成一個不同的隨機數,也就是不同的隨機數序列,所以我們每次都為隨機數生成器提供一個新的隨機種子,我們可以通過使用srand()產生種子進行散播種子,只要種子不同,我們通過調用rand就會生成不同的隨機數,
srand成為隨機數生成器的初始化器
1 /* This program generates and prints ten random integers between 1 and RAND_MAX*/ 2 #include <stdio.h> 3 #include <stdlib.h> 4 int main() 5 { 6 unsigned int seed; /*申明初始化器的種子,注意是unsigned int 型的*/ 7 int k; 8 printf("Enter a positive integer seed value: \n"); 9 scanf("%u",&seed); 10 srand(seed); 11 printf("Random Numbers are:\n"); 12 for(k = 1; k <= 10; k++) 13 { 14 printf("%i",rand()); 15 printf("\n"); 16 } 17 return 0; 18 }
當種子為1的時候,我們可以不使用srand,因為系統默認·的種子為1
在
stdlib.h 中這兩個函數的原型是:
int rand();
void srand (unsigned int);
srand(time(0)); i=rand();
或者srand(time(NULL));
這樣就是一個偽隨機數。
rand()產生
偽隨機數,srand函數提供種子,種子不同產生的隨機數序列也不同,所以通常先調用srand函數 time()返回的是系統的時間(從1970.1.1午夜算起),單位:秒,種子不同當然產生的隨機數相同幾率就很小了。
用rand()隨機生成在[x,y]內的整數
int k;
k=x+rand()%(y-x+1)/*k即為所求范圍內隨機生成的數,rand()%a的結果最大為a-1*/