C語言每日一函數之2:生成隨機數(含STM32/STM8使用AD獲取隨機數)

1、C語言生成僞隨機數

在C語言中,爲了生成隨機數,可以使用如下兩個函數:

  • void srand(unsigned int seed);
  • int rand(void);

srand()rand()配合使用產生僞隨機數序列。

srand()函數用來生成一個種子,rand()函數可以用來產生僞隨機數(不是真正意義上的隨機數)。
原理是根據一個數,我們可以稱它爲種子,爲基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公佈,從而相當於產生了隨機數,但事實上這並不是真正的隨機數。

代碼:
注意:以下代碼在使用srand()函數使用時,一定!要!放!在!循!環!外!,因爲time的時間精度很低,如果放在循環內部等於每次使用同一個種子產生隨機序列,所以會出現產生的隨機數總是相同的情況,即隨機數生成失敗。

//注意包含以下頭文件
#include <stdlib.h>
#include <stdio.h>
#include <time.h> 


//生成1-100以內隨機數
int main(void)
{
    int i;
    int randomData = 0;

    srand((unsigned)time(NULL));//注意該函數一定要放在循環外,原因見代碼最前面【注意】。
    while(1)
    {
        randomData = rand()%100+1;
        printf("%d\n", randomData);
    }
}

2、STM32 or STM8使用AD採集生成隨機數

在STM32或STM8中,爲了使用AD採集獲取隨機數,步驟如下:

  • 1、初始化ADC
  • 2、使用ADC獲取採樣值
  • 3、根據需要對數據進行處理,從而獲取需要範圍內的隨機數序列

代碼:

//初始化AD等詳見 STM32 or STM8 ADC章節
rand = ADC1_GetVOL_HEX_InstantaneousValue()%5 + 2;//2-6之間隨機數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章