存儲類說明符:
auto :表明一個變量具有自動存儲時期,且它只能用在代碼塊作用域的變量聲明中,它主要用來指明意圖,使程序更易讀。
register : 它和auto說明符一樣只能用在代碼塊作用域的變量聲明中,它是將一個變量歸入寄存器存儲類,即把一個變一個寄存器內,經更快地存取。因為變量是存放在寄存器中,所以不能獲得變量的地址。
static :它即可用于聲明代碼塊作用域也可用于聲明文件作用域,當它用于代碼塊作用域聲明時,變量具有靜態存儲時期(即在聲明之后存在并保留其值)和空鏈接。當用于聲明文件作用域時,表明該變量具有內部鏈接,它的存儲時期還是靜態存儲時期
隨機數: rand與srand (srand 初始化隨機種子,rand 產生隨機數)
rand:( 產生隨機數)
定義函數 :int rand(void)
函數說明 :
因為rand的內部實現是用線性同余法做的,他不是真的隨機數,只不過是因為其周期特別長,所以有一定的范圍里可看成是隨機的,rand()會返回一隨機數值,范圍在0至RAND_MAX 間。在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。rand()產生的是假隨機數字,每次執行時是相同的。若要不同,以不同的值來初始化它.初始化的函數就是srand()。
返回值:
返回0至RAND_MAX之間的隨機整數值,RAND_MAX的范圍最少是在32767之間(int),即雙字節(16位數)。若用unsigned int 雙字節是65535,四字節是4294967295的整數范圍。
0~RAND_MAX每個數字被選中的機率是相同的
srand:(設置隨機數種子)
表頭文件:#include<stdlib.h>
定義函數:void srand (unsigned int seed);
函數說明:
srand()用來設置rand()產生隨機數時的隨機數種子。參數seed必須是個整數,通常可以利用geypid()或time(0)的返回值來當做seed。如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。
補充一點就是srand這個函數一定要放在循環外面或者是循環調用的外面,否則的話得到的是相同的數字
總結:
rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數(可以稱它為種子)為基準以某個遞推公式推算出來的一系數,當這系數很大的時候,就符合正態公布,從而相當于產生了隨機數,但這不是真正的隨機數,當計算機正常開機后,這個種子的值是定了的,除非你破壞了系統,為了改變這個種子的值,C提供了 srand()函數,它的原形是void srand( int a) 功能是初始化隨機產生器既rand()函數的初始值,即使把種子的值改成a; 從這你可以看到通過sand()函數,是可以產生可以預見的隨機序列,那如何才能產生不可預見的隨機序列呢?
利用srand((unsign)(time(NULL))是一種方法,因為每一次運行程序的時間是不同的
下一篇 幫助文檔(4)