rand函式可以產生乙個隨機數,rand() 標頭檔案為,其函式原型為:
int
rand
(void
);
rand() 會返回乙個0~rand_max 之間的整數,但是一段程式執行多次,rand返回的值始終是一樣的。這是因為rand返回的隨機值是乙個偽隨機值,就是說看起來返回的值是乙個隨機值,實際上這個返回值是由公式推導出來的,推導隨機數的公式依賴於乙個數,這個數就叫做種子。種子和返回的隨機數之間的關係是一種正態分佈關係。
而且種子在系統啟動的時候就是乙個確定的值,所以每次程式執行的隨機值都是根據這個種子來算的,要想在程式執行期間改變隨機值,就要從根源入手,即改變種子的值。
也就是說!!!種子一定,產生的隨機數就是一定的!要改變隨機數,就要改變種子!!!
通過 srand() 函式來改變種子的值,也叫播種,其函式原型如下:
void
srand
(unsigned
int seed)
;
我們可以通過改變種子的值來改變隨機值。
可以看出,雖然產生了隨機數,但是每次持續執行產生的隨機數都是一樣的,這是因為每次srand的值都是一樣的,雖然改變了,但是相對每次執行,種子還沒變。
參考:c語言隨機數生成教程,c語言rand和srand用法詳解 (biancheng.net)
下面會介紹解決這種問題的方法!
利用time() 函式可以得到當前的時間,時間是精確到秒的,利用這個動態變化的時間,可以來動態改變srand中的種子的值,達到了產生真正的隨機值的作用。其函式原型如下:
#include
time_t time (time_t *timer)
;
經常配合srand使用如下:
srand((
unsigned
)time
(null))
;
因為time(null)是以毫秒為單位的,所以一般還是可以產生隨機數的。
在c語言巨集定義中,經常用到#
與##
其中#
的作用是把乙個巨集引數變為字串
##
的作用是把兩個巨集引數連線在一起
如下:
linux中一切皆檔案,所以檔案系統至關重要,檔案系統分為三部分,第一部分是vfs,後面兩部分就是cache和真正的檔案系統。
linux的檔案系統框架如圖:
每日一練4
員工表emp 員工編號eid,姓名ename,工作職位title,僱傭日期hiretime,工資salary,獎金bonus,部門depart 部門表dept 部門編號did,名稱dname,部門領導leader 員工資料 1001,張三 銷售 1999 12 1 3000.0,1100.0,102...
每日一練25
請描述 mysql 從安裝到配置的全部詳細過程 確保一台新電腦可以順利使用 mysql mysql安裝嚮導啟動,按 next 繼續 選擇安裝型別,有 typical 預設 complete 完全 custom 使用者自定義 三個選項,我們選擇 custom 有更多的選項,也方便熟悉安裝過程 選擇配置...
每日一練 13
談談你對ajax 的理解?概念 特點 作用 select 教師號,sum case when 星期號 1 and 是否有課 有 then 1 else 0 end as 星期一,sum case when 星期號 2 and 是否有課 有 then 1 else 0 end as 星期二,sum c...