隨機c語言,隨機數c++語言

本文目錄一覽:

C語言如何生成隨機數

在VC中設計到隨機數有兩個函數

srand()

and

rand()

srand()

的作用是是一個種子,提供每次獲得隨機數的基數而已,rand()根據種子而產生隨機數

注意

1:srand()

里的值必須是動態變化的,否則得到的隨機數就是一個固定數

2:其實可以不用寫srand()

,只用rand()就可以了,省事,簡單,例子如下

如果我們想得到一個

0-60的隨機數那麼可以寫成

int

i;

i=rand()%60;

就可以了。

當然最好有個統一的標註如下:

int

i;

srand((unsigned)time(

NULL

));

i=rand()%60;

這樣就OK了。

c語言隨機數怎麼生成

在實際編程中,我們經常需要生成隨機數。在c語言中我們通常使用rand方法生成隨機數,在調用rand前需要調用srand初始化隨機數種子。

電腦:華為MateBook14

系統:Windows10

軟件:notepad++等編輯器、gcc編譯器1.0

1、使用rand函數生成隨機數,rand隨機生成一個位於0 ~ RAND_MAX之間的整數。如下圖中,我們直接使用rand方法生成10個隨機數。

2、程序運行後生成了隨機數,但直接使用rand的問題在於,在下次程序調用時,生成的隨機數與上次一致。所以,rand函數雖然生成隨機數,但可以說是一個偽隨機。因為每次調用時,生成數字順序都是固定的。

3、為了在每次調用時生成不同的隨機數,使用srand函數初始化隨機數種子。只要隨機數種子變化了,那麼生成的隨機數就會改變。通常,srand使用當前時間作為種子。

4、但使用時間作為隨機數種子是否安全呢?我們目前程序執行的速度都太快了,一秒鐘對於計算機來說太漫長了。我們將生成隨機數的操作定義為函數,然後調用函數兩次,看生成的隨機數仍然時一樣。

5、優化函數也比較簡單,在使用時間的基礎上,我們還加上一個定增序號。這樣能保證就算同一秒鐘內多次調用,隨機數的種子都是不一樣的。

6、通常,我們需要獲取一定範圍內的隨機數。所以,在生成隨機數之後我們使用模運算獲取對應範圍內的數據。如生成0到100內的隨機數。

c語言如何實現隨機生成多個數組至少要100個

需要準備的材料分別有:電腦、C語言編譯器。

1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。

2、在test.cpp文件中,輸入C語言代碼:

srand((unsigned)time(NULL));

for (int i = 0;i 100; i++) {

printf(“%d “, rand());

}

3、編譯器運行test.cpp文件,此時成功隨機生成了100個隨機數。

C語言隨機

樓上說的是對的,你的printf裏面用了取地址符是不正確的下面是改過的程序

#includestdio.h

#includestdlib.h

#includetime.h

void main( )

{

int a,b,c,x,f;

char C;

while(1)

{

printf(“請選擇\n”);

printf(“加法請按1\n”);

printf(“減法請按2\n”);

printf(“乘法請按3\n”);

printf(“除法請按4\n”);

printf(“輸入其他退出\n”);

scanf(“%d”,x);

srand( (unsigned)time( NULL ) );

if (x5) switch(x)

{

case 1:a=rand()%100;

b=rand()%100;

printf(“%2d+%2d=\n”,a,b);

printf(“請輸入a+b的答案\n”) ;

scanf(“%d”,c);

if (c==(a+b))printf(“very good\n\n”);

else printf(“需要努力\n答案是%d “,a+b);

break;

case 2:a=rand()%100 ;

b=rand()%100;

if (ab){f=a;a=b;b=f;}

printf(“%d-%d\n”,a,b);

printf(“請輸入a-b的答案\n”) ;

scanf(“%d”,c);

if (c==(a-b)) printf(“very good\n\n”);

else printf(“需要努力\n答案是%d “,a-b);

break;

case 3: a=rand()%100 ;

b=rand()%100 ;

printf(“%d*%d\n”,a,b);

printf(“請輸入a*b的答案”) ;

scanf(“%d”,c);

if (c==(a*b)) printf(“very good\n\n”);

else printf(“需要努力\n答案是%d “,a*b);

break;

case 4: a=rand()%100 ;

b=rand()%100 ;

if (ab)

{f=a;

a=b;

b=f;

}

printf(“%d/%d\n”,a,b);

printf(“請輸入a除b的答案”) ;

scanf(“%d”,c);

if (c==(a/b)) printf(“very good\n\n”);

else printf(“需要努力\n答案是%d “,a/b);

break;

}

else printf(“確定要退出嗎?y/n\n”);

scanf(“%c”,C);

if(C==’y’)break;

}

}

c語言,如何產生隨機數?

本文由青松原創並依GPL-V2及其後續版本發放,轉載請註明出處且應包含本行聲明。\x0d\x0a\x0d\x0aC++中常用rand()函數生成隨機數,但嚴格意義上來講生成的只是偽隨機數(pseudo-random integral number)。生成隨機數時需要我們指定一個種子,如果在程序內循環,那麼下一次生成隨機數時調用上一次的結果作為種子。但如果分兩次執行程序,那麼由於種子相同,生成的「隨機數」也是相同的。\x0d\x0a\x0d\x0a在工程應用時,我們一般將系統當前時間(Unix時間)作為種子,這樣生成的隨機數更接近於實際意義上的隨機數。給一下例程如下:\x0d\x0a\x0d\x0a#include \x0d\x0a#include \x0d\x0a#include \x0d\x0ausing namespace std;\x0d\x0a\x0d\x0aint main()\x0d\x0a{\x0d\x0a double random(double,double);\x0d\x0a srand(unsigned(time(0)));\x0d\x0a for(int icnt = 0; icnt != 10; ++icnt)\x0d\x0a cout “No.” icnt+1 “: ” int(random(0,10)) endl;\x0d\x0a return 0;\x0d\x0a}\x0d\x0a\x0d\x0adouble random(double start, double end)\x0d\x0a{\x0d\x0a return start+(end-start)*rand()/(RAND_MAX + 1.0);\x0d\x0a}\x0d\x0a/* 運行結果\x0d\x0a* No.1: 3\x0d\x0a* No.2: 9\x0d\x0a* No.3: 0\x0d\x0a* No.4: 9\x0d\x0a* No.5: 5\x0d\x0a* No.6: 6\x0d\x0a* No.7: 9\x0d\x0a* No.8: 2\x0d\x0a* No.9: 9\x0d\x0a* No.10: 6\x0d\x0a*/\x0d\x0a利用這種方法能不能得到完全意義上的隨機數呢?似乎9有點多哦?卻沒有1,4,7?!我們來做一個概率實驗,生成1000萬個隨機數,看0-9這10個數出現的頻率是不是大致相同的。程序如下:\x0d\x0a#include \x0d\x0a#include \x0d\x0a#include \x0d\x0a#include \x0d\x0ausing namespace std;\x0d\x0a\x0d\x0aint main()\x0d\x0a{\x0d\x0a double random(double,double);\x0d\x0a int a[10] = ;\x0d\x0a const int Gen_max = 10000000;\x0d\x0a srand(unsigned(time(0)));\x0d\x0a \x0d\x0a for(int icnt = 0; icnt != Gen_max; ++icnt)\x0d\x0a switch(int(random(0,10)))\x0d\x0a {\x0d\x0a case 0: a[0]++; break;\x0d\x0a case 1: a[1]++; break;\x0d\x0a case 2: a[2]++; break;\x0d\x0a case 3: a[3]++; break;\x0d\x0a case 4: a[4]++; break;\x0d\x0a case 5: a[5]++; break;\x0d\x0a case 6: a[6]++; break;\x0d\x0a case 7: a[7]++; break;\x0d\x0a case 8: a[8]++; break;\x0d\x0a case 9: a[9]++; break;\x0d\x0a default: cerr “Error!” endl; exit(-1);\x0d\x0a }\x0d\x0a \x0d\x0a for(int icnt = 0; icnt != 10; ++icnt)\x0d\x0a cout icnt “: ” setw(6) setiosflags(ios::fixed) setprecision(2) double(a[icnt])/Gen_max*100 “%” endl;\x0d\x0a \x0d\x0a return 0;\x0d\x0a}\x0d\x0a\x0d\x0adouble random(double start, double end)\x0d\x0a{\x0d\x0a return start+(end-start)*rand()/(RAND_MAX + 1.0);\x0d\x0a}\x0d\x0a/* 運行結果\x0d\x0a* 0: 10.01%\x0d\x0a* 1: 9.99%\x0d\x0a* 2: 9.99%\x0d\x0a* 3: 9.99%\x0d\x0a* 4: 9.98%\x0d\x0a* 5: 10.01%\x0d\x0a* 6: 10.02%\x0d\x0a* 7: 10.01%\x0d\x0a* 8: 10.01%\x0d\x0a* 9: 9.99%\x0d\x0a*/\x0d\x0a可知用這種方法得到的隨機數是滿足統計規律的。\x0d\x0a\x0d\x0a另:在Linux下利用GCC編譯程序,即使我執行了1000000次運算,是否將random函數定義了inline函數似乎對程序沒有任何影響,有理由相信,GCC已經為我們做了優化。但是冥冥之中我又記得要做inline優化得加O3才行…\x0d\x0a\x0d\x0a不行,於是我們把循環次數改為10億次,用time命令查看執行時間:\x0d\x0achinsung@gentoo ~/workspace/test/Debug $ time ./test \x0d\x0a0: 10.00%\x0d\x0a1: 10.00%\x0d\x0a2: 10.00%\x0d\x0a3: 10.00%\x0d\x0a4: 10.00%\x0d\x0a5: 10.00%\x0d\x0a6: 10.00%\x0d\x0a7: 10.00%\x0d\x0a8: 10.00%\x0d\x0a9: 10.00%\x0d\x0a\x0d\x0areal 2m7.768s\x0d\x0auser 2m4.405s\x0d\x0asys 0m0.038s\x0d\x0achinsung@gentoo ~/workspace/test/Debug $ time ./test \x0d\x0a0: 10.00%\x0d\x0a1: 10.00%\x0d\x0a2: 10.00%\x0d\x0a3: 10.00%\x0d\x0a4: 10.00%\x0d\x0a5: 10.00%\x0d\x0a6: 10.00%\x0d\x0a7: 10.00%\x0d\x0a8: 10.00%\x0d\x0a9: 10.00%\x0d\x0a\x0d\x0areal 2m7.269s\x0d\x0auser 2m4.077s\x0d\x0asys 0m0.025s\x0d\x0a\x0d\x0a前一次為進行inline優化的情形,後一次為沒有作inline優化的情形,兩次結果相差不大,甚至各項指標後者還要好一些,不知是何緣由…

c語言怎麼生成隨機數?

你好!

完整的代碼,紅圈處就是從上面100個數字中抽取到的數字:

#include stdio.h

#includestdlib.h                  //生成隨機數用 

#includetime.h                    //利用時間生成種子 

#includemath.h                    

int main()

{

      int i;

  int a[100];

      srand( time(NULL) );         //生成種子 

      for(i=0;i100;i++)

      {

       a[i]=rand()%1000+1000;      //生成一個小於1000的隨機數

                               //然後加1000,變成 1000 – 2000之間的數 

       printf(“%d  “,a[i]);       //打印 

      }

       i=rand()%100;              //隨機抽取其中的一個數 

       printf(“\n抽取到的是:%d\n”,a[i]);//打印 

      

      return 0; 

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/243386.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:55
下一篇 2024-12-12 12:55

相關推薦

  • Python生成隨機數的應用和實例

    本文將向您介紹如何使用Python生成50個60到100之間的隨機數,並將列舉使用隨機數的幾個實際應用場景。 一、生成隨機數的代碼示例 import random # 生成50個6…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • 如何使用random生成不重複的隨機數

    在編程開發中,我們經常需要使用隨機數來模擬一些場景或生成一些數據。但是如果隨機數重複,就會造成數據的不準確性。這時我們就需要使用random庫來生成不重複且隨機的數值。下面將從幾個…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python生成隨機數的多種方法

    本文將從以下幾個方面詳細介紹如何使用Python生成隨機數。 一、random模塊的使用 Python內置的random模塊能夠生成偽隨機數,使用該模塊,可以生成隨機數、隨機整數等…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28

發表回復

登錄後才能評論