C語言問題 srand unsigned time NU

2022-03-04 13:36:11 字數 5726 閱讀 4222

1樓:匿名使用者

srand((unsigned int)time(0))

2樓:匿名使用者

我們知道在產生隨機數的時候,需要一個叫做種子seed的值作為產生隨機數演算法的初始值。

而c/c++庫中的srand就是為這一次的隨機數生成設定種子。s代表的就是seed的意思。

time_t time(time_t *time);該函式返回自計算機計時的某個時刻起到現在所過去的秒數。

一般是返回自2023年1月1日00:00:00以來,到呼叫函式的時刻所累積的秒數。

所以綜上所述:

srand((unsigned)time(null));

這語句的含義就是以自2023年1月1日00:00:00以來,到呼叫函式的時刻所累積的秒數作為

產生隨機數演算法的種子seed。

沒有語句會對程式產生什麼影響:

如果在程式執行時沒有自主設定種子的話,用函式rand產生的隨機數序列會是一樣的。

而用srand設定隨機數種子後,可能產生不同的隨機序列(概率很大)。

之所以說以很大的概率產生不同的隨機數序列,是因為從上面的解釋可以看到,

srand是以秒數為單位的。一旦程式多次執行的時間間隔少於1s。那麼srand設定種子也沒有什麼用處。所以庫函式產生隨機數有一定的缺陷。不知道我解釋明白了沒有!

srand((unsigned)time(null));在c語言中有什麼具體的意思嗎?

3樓:小

如何運用time函式和srand函式生成隨機數#include

#include //srand()、rand()#include //time();

#include

#define n 50

int main()

return 0;}

c語言中srand(time(null))和srand((unsigned)time(null))區別

4樓:金色潛鳥

沒有區別。

不寫 取無符號 它也會自動處理成 無符號。

無符號 是 srand() 引數的要求。

5樓:匿名使用者

從結果上來看是沒有任何區別的,對一個整數取其無符號數之後,儲存在記憶體中的值沒有任何變化。先說結論,稍後給你證明

下面是我寫了一段簡單的測試**,執行環境是32位環境(和作業系統位長無關,只和編譯器定義有關),此時 int 的長度是32位的(sizeof(int)可以獲取當前執行時的int位元組長度,乘以8就是位長,在turboc2.0裡面int是16位的)

#include

void mytest(unsigned n)

void main()

這段程式的結果是:

hex: b669fd2e, dec: 3060399406

hex: b669fd2e, dec: 3060399406

3060399406 == -1234567890 ? 1

可見正負兩個數傳進函式中,值是完全相同的,甚至這兩個數字直接用來做比較都是相等的,因為比較的時候他們會轉換為同種型別。

下面的這段話跟前面的原理無關,我只說一下time這個函式的值。

time返回的確實是距離2023年初至今的秒數,這個秒數現在已經達到了14億多,45年的時間,而有符號型能表示的最大值是 21億多,當秒數到達這個最大值的時候,是2023年的某一天,所以產生了類似千年蟲的2038問題,超過那個時間點,時間就會變成負數,所以就有了你上面看到的函式呼叫,強轉成unsigned型別。應該能撐到2023年左右,那時候就讓孫子們去發愁吧。。。

不過這樣其實也是有問題的,因為2023年以前的時間本身是用負數儲存的,比如2023年12月31日23點59分59秒,儲存的值就是-1,而轉成無符號數的話,就會變成2023年的臨界點的下一秒的時間。所以這不是解決問題的根本方法。更好的方法是用64位長整形來儲存秒,甚至毫秒,這樣臨界點問題就不是我們這個物種該考慮的問題了

c語言中語句srand(time(null))什麼意思。

6樓:八哥說科技

c語言中 srand(time(null)); 的意思是:使用當前時間進行隨機數發生器的初始化。

time_t time(time_t *t); 是c標準庫函式,如果t是空指標(null),直接返回當前時間。如果t不是空指標,返回當前時間的同時,將返回值賦予t指向的記憶體空間。time() 是指返回自 unix 紀元起的當前時間的秒數的函式,主要用來獲取當前的系統時間,返回的結果是一個time_t型別。

srand函式是隨機數發生器的初始化函式。原型:void srand(unsigned int seed); srand和rand()配合使用產生偽隨機數序列。

7樓:匿名使用者

設定隨機種子數,要不然每次程式啟動時用 rand() 取得的隨機數都是一樣的。

8樓:好男人man起來

srand函式是隨機數發生器的初始化函式。原型:void srand(unsigned seed)。

用法:它需要提供一個種子,這個種子會對應一個隨機數,如果使用相同的種子後面的rand()函式會出現一樣的隨機數。如:

srand(1); 直接使用1來初始化種子。不過為了防止隨機數每次重複常常使用系統時間來初始化,即使用 time函式來獲得系統時間,它的返回值為從 00:00:

00 gmt, january 1, 1970 到現在所持續的秒數,然後將time_t型資料轉化為(unsigned)型再傳給srand函式,即還有一個經常用法,不需要定義time_t型t變數,即: srand((unsigned) time(null)); 直接傳入一個空指標,因為你的程式中往往並不需要經過引數獲得的t資料。

srand((int)getpid()); 使用程式的id(getpid())來作為初始化種子,在同一個程式中這個種子是固定的。。

c語言中用#include的標頭檔案,srand((unsigned)time(null)),如何產生隨機小數?

9樓:軍軍

得到整數後再轉化成浮點數,最後除以10、100或1000即可。

程式設計要學會變通,模板函式不可能考慮所有可能的,不然還用你來寫**程式設計幹什麼。

10樓:匿名使用者

這個應該符合你的要求了:

#include

#include

#include

double rnd(void)

return (double)(rand()%900+100)/100;

}int main(void)

執行結果:

6.71

8.54

7.80

3.07

4.24

2.13

3.34

7.84

2.06

4.70

press any key to continue

c語言srand((unsigned)time(null)); 是什麼意思

11樓:加百列

srand()函式用來設定演算法的種子,time(null)返回當前的時間,先呼叫srand(time(null))是把當前的時間作為種子,是程式每次執行產生不同的隨機數序列。

涉及到三個概念:

1、隨機數:數學上產生的都是偽隨機數,真正的隨機數使用物理方法產生的。

2、隨機數種子:隨機數的產生是由算術規則產生的,srand(seed)的隨機數種子不同,rand()的隨機數值就不同,倘若每次的隨機數種子一樣,則rand()的值就一樣。所以要產生隨機數,則srand(seed)的隨機數種子必須也要隨機的。

3、用srand()產生隨機數種子

原型:void srand ( unsigned int seed )。作用是設定好隨機數種子,為了讓隨機數種子是隨機的,通常用time(null)的值來當seed。

擴充套件資料:

c語言其他產生隨機數的方法。

1、函式名: rand

功能: 隨機數發生器

用法: void rand(void);

程式例:

2、函式名: random

功能: 隨機數發生器

用法: int random(int num);

程式例:

3、函式名: randomize

功能: 初始化隨機數發生器

用法: void randomize(void);

程式例:

12樓:離離原上花開

初始化隨機函式種子,srand((unsigned)time(null));是拿系統時間作為種子,由於時間是變化的,種子變化,可以產生不相同的隨機數。

使用時,引數可以是unsigned型的任意資料,比如srand(10);

如果不使用srand

用rand()產生的隨機數,在多次執行,結果是一樣的。

13樓:匿名使用者

設定rand()隨機序列種子。

對於給定的種子seed, rand()會反覆產生特定的隨機序列。

srand( time(null) );

for( i = 0; i < 10; i++ )printf( "random number #%d: %d\n", i, rand() );

14樓:好嘞啊啊啊啊

這個是種子函式 為rand函式提供不同的種子 每次執行程式產生不同的隨機數

不然rand函式每次執行程式產生的隨機數都是一樣的

15樓:小

如何運用time函式和srand函式生成隨機數#include

#include //srand()、rand()#include //time();

#include

#define n 50

int main()

return 0;}

16樓:ju劇烈

srand函式是隨機數發生器的初始化函式。

原型:void srand(unsigned seed);

用法:它需要提供一個種子,這個種子會對應一個隨機數,如果使用相同的種子後面的rand()函式會出現一樣的隨機數。如:

srand(1); 直接使用1來初始化種子。不過為了防止隨機數每次重複,常常使用系統時間來初始化,即使用 time函式來獲得系統時間,它的返回值為從 00:00:

00 gmt, january 1, 1970 到現在所持續的秒數,然後將time_t型資料轉化為(unsigned)型再傳給srand函式,即還有一個經常用法,不需要定義time_t型t變數,即: srand((unsigned) time(null)); 直接傳入一個空指標,因為你的程式中往往並不需要經過引數獲得的t資料。

例子:#include

#include

#include /*用到了time函式,所以要有這個標頭檔案*/#define max 10

int main( void)

;int i;

srand((unsigned) time(null)); /*播種子*/

for(i = 0; i < max; i++)printf("\n");

return 0;}

C語言的問題C語言問題C語言問題

若有說明語句double p,a 則能通過scanf語句正確給輸入項讀入資料的程式段是 解 p a 將a的地址賦值給p,scanf lf p 從鍵盤獲取一個數值賦值給地址p指向的變數 所以選d 有函式fun的定義形式如下。int fun float f 則以下對函式fun的呼叫語句中,不正確的是 a...

C語言問題,c語言問題?

一 c語言規定總是從main 開始執行的 這個函式也叫 主函式 因此,你發來的題目中的 1 6 8 敘述都是錯誤的,都應該選擇f。二 第2題中,c語言對其資料在記憶體中所佔用的實際位元組數,隨著程式中宣告的資料型別以及資料的多少而變化,c語言本身並沒有明確規定。這題應該選f。三 第3題,c語言中強制...

C語言問題,c語言問題?

你這個程式是捕捉0到9的按鍵狀態,按下再鬆開時才會記錄,想要識別所有按鍵,把for迴圈範圍擴大。比如for charch 32 ch 127 ch 這樣就包含了特殊符號及大小寫字母還有數字。但是,這個 是有問題的!一 你這個 需在鍵位已經按下後啟動才能識別,否則啟動時沒有按下對應鍵位,程式就結束了。...