一、rand函式
想要獲取亂數,肯定需要利用函式,rand函式在C語言中的作用就是產生一個亂數,

通過cplusplus網站查找,可以發現呼叫本函式時,不需要引數即可回傳亂數,且所產生亂數的范圍是0~32767,且本函式的呼叫需要包含頭檔案stdlib.h,
知道了這些,就撰寫個程式測驗一下它是否能完成任務吧,
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ch = 0;
while (ch = getch() != EOF)
{
int a = rand();
printf("%d\n", a);
}
return 0;
}
只要我們在鍵盤上的輸入值不為EOF,就可以產生一個亂數,運行一遍試試看:
可以看到螢屏上真的出現了五個亂數!那么任務是否真的完成了呢?關閉本次程式,再運行一次,奇怪的事情發生了,新生成的‘亂數’居然與之前的一模一樣!
再仔細看看之前查到的檔案,原來在使用rand函式之前,需要呼叫srand函式配置生成亂數的起點,為了能正確地獲取到亂數,接下來只能再學習下srand函式該如何配置了,
二、srand函式

同樣,通過與網站查找,我們知道了srand函式需要一個型別為unsigned int的引數 ,通過賦予不同的引數就可以獲得不同的亂數生成起點,
細心的同學就會問了,如果每次都要生成亂數,那么srand函式每次的引數應當不能相同,否則還會出現之前的情況,那豈不是得將引數賦為隨機值,這不是自相矛盾了嗎?
其實要解決這個問題也非常簡單,我們需要學習額外的一項工具——時間戳,
所謂時間戳,就是將每一時刻的時間轉化成唯一的一個數字,也就是說每一秒鐘的時間戳都是不相同的,因此,采用時間戳來作為srand函式引數,不就剛好能夠解決這個問題了嗎?
想要在C語言中獲取時間戳也非常簡單,首先包含頭檔案<time.h>,隨后呼叫函式time()即可,還需要注意兩點:1.time()的回傳值是長長整型,因此需要強制轉換為無符號整型,2.time需要一個指標作為引數,這里我們只需配置為空指標NULL,
三、產生亂數
有了這些預備知識,我們終于可以編程來產生亂數了,
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand((unsigned int)time(NULL));
int ch = 0;
while (ch = getch() != EOF)
{
int a = rand();
printf("%d\n", a);
}
return 0;
}
第一次運行產生的結果:

第二次運行產生的結果:
兩組亂數各不相同很好的完成了預計任務,
四、產生可控的亂數
有了亂數,又會隨之帶來新的問題:如果產生的亂數不滿足我們所需要的范圍該怎么辦?
這一問題很好解決,只需要利用算數運算即可,
例如,當我們需要1~9以內的數字,只需要使用rand()%9 + 1,
只要是在0~32767以內的數字范圍,均可以采用先取模再加減的方法,即便是超出了這一范圍,也可以采用算數方法得到解決,需要多去嘗試
五、亂數的用處
亂數的用處很廣泛,對于新手來說,在使用C語言撰寫一些小游戲時就可以用到亂數,如:猜數字游戲獲取亂數、三子棋游戲獲取隨機坐標、掃雷游戲隨機布雷……想要了解這些小游戲的同學可以看看我之前的博客~
這里將網址貼出:
三子棋小游戲
掃雷小游戲
自此,本次講解到此結束,謝謝大家的觀看!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292271.html
標籤:其他
上一篇:拼多多服務端研發工程師筆試
