真隨機c語言
『壹』 c語言中能否產生真正的隨機數,如果可以的話,語句是什麼謝謝!
這是數學問題了。
可以理解的是,計算機作為通用圖靈機,只能儲存有限個狀態,在穩定運行的情況下,對於確定的輸入,輸出是確定的,無法實現「真正」的隨機性。
但是,日常情況下,需要隨機數時,可以用計算機實現。理由是計算機儲存的狀態是一個不確定的大的整數,利用某種偽隨機數演算法可以使輸入和輸出的關聯性被隱藏。這時候,盡管隨機數不是「真正」的,但是對於使用者來說,和「真正」的隨機數看上去並沒有什麼區別。
C語言庫函數提供偽隨機數演算法封裝的庫函數srand()/rand(),隨機性並不強。只要能自己表達出硬體無關(例如要求用量子計算機實現的就不算)的隨機性足夠強的演算法,C語言都可以實現。至於需要多少隨機性,是否實用,就不是設計者能夠完全決定的了。
====
[原創回答團]
『貳』 如何製作隨機數 C語言……
首先使用srand(unsigned
int)
函數
設置種子,然後使用rand()返回一個
隨機數
。
使用這兩個函數時需要包含頭文件
#include <stdlib.h>
1、在標準的C庫中函數rand()可以生成0~RAND_MAX之間的一個隨機數,其中RAND_MAX
是stdlib.h
中定義的一個
整數
,它與系統有關;
2、因為rand()函數是按指定的
順序
來產生整數,因此每次執行上面的
語句
都列印相同的兩個值,所以說C語言的隨機並不是真正意義上的隨機,有時候也叫偽隨機數;
3、通常通過為隨機數
生成器
提供一個新的
隨機種子
來達到使
程序
在每次執行時都能生成一個新
序列
的隨機值的效果。函數
srand()(來自stdlib.h)可以為隨機數生成器播散種子。只要種子不同rand()函數就會產生不同的隨機數序列。srand()稱為隨機數生成器的初始化器;
示例代碼:
#include <time.h> //用到了time函數
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i, number;
srand((unsigned int) time(NULL)); //用時間做種,每次產生隨機數不一樣
for (i=0; i<10; i++)//產生10個隨機數
{
number = rand() % 12 + 1;//產生1-13的隨機數
printf("%d\n", number);
}
return 0;
}
『叄』 c語言中如何生成1個0到1的隨機數
C語言中生成1個0到1的隨機數可以執行語句:float b=rand()/(RAND_MAX+1.0);
解析:
標准C庫中函數rand()可以生成0~RAND_MAX之間的一個隨機數,其中RAND_MAX 是stdlib.h 中定義的一個整數,它與系統有關。rand()函數沒有輸入參數,直接通過表達式rand()來引用;
用函數rand取得的隨機數除以(RAND_MAX+1.0),即可確保得到的結果在0到1之間。ISO IEC 9899 2011 (C11)標准中未規定 RAND_MAX 的具體數值。但該標准規定了RAND_MAX 的值應至少為32767。編程的時候,不應該對 RAND_MAX 的具體數值做任何假設。
(3)真隨機c語言擴展閱讀:
相關說明:
1、因為rand()函數是按指定的順序來產生整數,因此每次執行上面的語句都列印相同的兩個值,所以說C語言的隨機並不是真正意義上的隨機。
2、為了使程序在每次執行時都能生成一個新序列的隨機值,我們通常通過為隨機數生成器提供一粒新的隨機種子。函數 srand()(來自stdlib.h)可以為隨機數生成器播散種子。只要種子不同rand()函數就會產生不同的隨機數序列。srand()稱為隨機數生成器的初始化器。
3、隨機種子(Random Seed)是計算機專業術語,一種以隨機數作為對象的以真隨機數(種子)為初始條件的隨機數。一般計算機的隨機數都是偽隨機數,以一個真隨機數(種子)作為初始條件,然後用一定的演算法不停迭代產生隨機數。
『肆』 怎樣讓c語言中的隨機函數真正隨機
一般就是採用設置種子的方式 實現真隨機
種子往往是由當前時間
比如
srand(time(NULL));
計算機語言中,很難做到真正的隨機。
『伍』 C語言哪個函數才是真正意義上的隨機聽說rand()和srand()都是經過某些復雜的運算得到的結
計算機沒有真正的隨機
『陸』 c語言,如何產生隨機數
1、第一步,先定義int一個數組和int一個指針變數。