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

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之間隨機數

相關推薦

C語言每日函式2生成隨機數STM32/STM8使用AD獲取隨機數

1、C語言生成偽隨機數 在C語言中,為了生成隨機數,可以使用如下兩個函式: void srand(unsigned int seed); int rand(void); srand()和rand()配合使用產生偽隨機數序列。 srand()函式用來生

C語言每日練——第一題

code print str == break 文件內容 第一題 out () 一、程序功能 程序的功能是:將大於整數m且緊靠m的k個素數存入數組xx。並把in.dat文件的內容輸入到程序,並把輸出結果輸出道out.dat文件夾中例如:若輸入17,5 則應該輸入:19,23

C語言每日練——第四題

圖片 數據文件 () inf fop dat文件 print 數組a open 一、題目要求 已知數據文件in.dat中有300個四位數,並調用readDat()函數把這些數存儲數組a中,編寫函數jsValue(),其功能是:求出所有這些四位數是素數的個數cnt,再把所有滿

C++ Primer每日八】C 風格字串

4.3 C 風格字串 儘管 C++ 支援 C 風格字串,但不應該在 C++ 程式中使用這個型別。C 風格字串常常帶來許多錯誤,是導致大量安全問題的根源。 在前面我們第一次使用了字串字面值,並

Keil C51對C語言的關鍵詞擴充套件 far

far的出現,是Keil 編譯器為了支援新出現的8051家族增強型MCU,這些增強型MCU可能擁有大於64KB的儲存器。使用far可訪問擴充套件的RAM,使用const far可訪問擴充套件的ROM。 NXP 51MX架構51微控制器提供通過通用指標訪問多達8MB的code

Keil C51對C語言的關鍵詞擴充套件 alien

alien關鍵詞主要是為了C51編譯器與PL/M-51編譯器相容。 在C51編譯器中呼叫PL/M-51函式,須使用alien宣告該函式,如下: extern alien char plm_func (int, char); char c_func (void) {

Keil C51對C語言的關鍵詞擴充套件 code

code 指定儲存位置位於程式儲存器。程式儲存器只讀,因此code型別的變數,是無法再次賦值的。 unsigned char code ary[ ] = :"Read only"; /* 陣列ary位於程式儲存器 */ ary[0]='a'; /* 錯誤,不可修改*/

Keil C51對C語言的關鍵詞擴充套件 pdata

外部ram通過一個地址指標暫存器來間接訪問,讀寫效率要低於內部ram。 外部ram容量最大可位64KB。 Keil C51提供兩種外部資料儲存方式,pdata和xdata。 1)xdata儲存型別,指示變數可儲存在外部ram 64KB地址範圍內任意位置。large記憶體模型

Keil C51對C語言的關鍵詞擴充套件 compact

函式的引數和區域性變數儲存在記憶體模型指定的預設區域內。 我們可以通過small,compact 或large 指定一個函式使用何種記憶體模型。 #pragma small /* 預設記憶體模型為small*/ extern int calc (char

python 每日0004題➕file方法簡單版

前文 前幾天考試太多一直沒時間寫今天繼續 正文 路漫漫~今天做的第四題發現好像是蠻簡單的,但是看網上大佬們選擇的方法都是正則表示式,。。。我這裡貼出一個簡單的方法吧。為那些看不懂正則的小白們貼一貼 # -*- coding: utf-8 -*- def main(words): with

C語言實戰105例子——例項2 靈活使用遞增遞減操作符

解析: 1)前置運算:++i、- -i,這種方式的運算規則是,先使變數的值增(或減)1 , 然後再以變化後的值參與其他運算。 2)後置運算:i++,i–,這種方式的運算規則是變數先參與其他運算,然後再使變數的值增(或減)1。 例子 #include<stdio.h>

每日 面試題 幸運巧克力字首和+hash

題目描述 思路: 注意到每個元素都是 x >= 0, 所以該陣列的字首和是遞增的。要找到連續的子序列之和等於k 即找到 sum[i] - sum[j] = k 且 0 <= j < i , 兩重for迴圈會超時,注意到字首和是遞增的,那麼將上式改寫成 s

每日 hiho228周 Parentheses Matching 簡單題

描述 Given a string of balanced parentheses output all the matching pairs. 輸入 A string consisting of only parentheses ‘(’ and ‘)’. The parenthes

每日 hiho228周 Parentheses Matching 簡單題

描述 Given a string of balanced parentheses output all the matching pairs. 輸入 A string consisting of on

Asp.net安全架構2Session hijacking會話劫持

http://www.cnblogs.com/luminji/archive/2012/05/30/2511357.html 原理 會話劫持是指通過非常規手段,來得到合法使用者在客戶端和伺服器段進行互動的特徵值(一般為sessionid),然後偽造請求,去訪問授權使用

c語言指標做函式引數,使用指標地址二級指標在被調函式中修改主調函式的指標。

1.程式碼 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char *prive; int data; } T_

朱有鵬C語言高階---4.9.8-單鏈表--逆序單鏈表的完整程式8

朱有鵬C語言高階---4.9.8-單鏈表--逆序(8)   什麼是連結串列的逆序? 連結串列的逆序又叫反向,意思就是把連結串列中所有的有效節點在連結串列中的順序給反過來。   單鏈表逆序演算法分析 (1)當我們對一個數據結構進行一個操作時,我們就需要一套演

箇中興的面試題,輸入兩個數n和m,從數列1,2,3……n中隨意取幾個數,使其和等於m,要求將其中所有組合列出來程式設計求解c語言遞迴函式分解法

原題目:輸入兩個數n和m,從數列1,2,3……n中隨意取幾個數,使其和等於m,要求將其中所有組合列出來程式設計求解 c語言解法分析:            先判定n和m的大小,如果m小於n,則只需從1,2……m之間找出和為m的組合即可,如果m大於n,則需要判斷1~n的和是否

sqlite學習筆記7C語言中使用sqlite打開數據庫

實例 clas details code 返回 pri san filename stdlib.h 數據庫的基本內容前面都已經說得差點兒相同了。接下看看如何在C語言中使用sqlite。 一 接口 sqlite3_open(const char *filename, s

sqlite學習筆記11C語言中使用sqlite刪除記錄

false done mta ase rom real not null -a ubun 最後一節,這裏記錄下怎樣刪除數據。 前面全部的代碼都繼承在這裏了,在Ubuntu14.04和Mac10.9上親測通過。 #include <stdio.h> #in