1. 程式人生 > 實用技巧 >C/C++生成隨機數

C/C++生成隨機數

一、前言

由於C/C++隨機數令人抓狂,於是我花了一個晚上將它封裝了起來

GitHub地址:https://github.com/Pythonlover2020/zjy_random

不想訪問外網的朋友,這裡有國內下載地址https://www.haolizi.net/example/view_75107.html

二、zjy_random庫的使用

1、匯入

#include "./zjy_random.h"

備註:該庫匯入瞭如下幾個庫,有需要可以不用重複匯入

#include <stdlib.h>
#include <time.h>

2、使用

zjy_random裡定義瞭如下幾個函式(C語言和C++都能呼叫)

(1)randint

int randint(int a, int b);

這個函式會生成a到b之間的隨機整數

例:

 1 //main.c
 2 #include <stdio.h>
 3 #include "./zjy_random.h"
 4 
 5 int main()
 6 {
 7     for (int i = 0; i<10;++i)
 8     {
 9         printf("%d\t",randint(0,10));
10     }
11     return 0;
12 }

編譯執行(Windows):

gcc -c main.c && gcc
-static main.o libzjy_random.lib -o main.exe && main

執行結果:

(2)random

float random(void);

這個函式會生成0到1間的隨機浮點數

例:

 1 //main.c
 2 #include <stdio.h>
 3 #include "./zjy_random.h"
 4 
 5 int main()
 6 {
 7     for (int i = 0; i<10;++i)
 8     {
 9         printf("%.4f\t",random());
10     }
11 return 0; 12 }

編譯執行(Windows):

gcc -c main.c && gcc -static main.o libzjy_random.lib -o main.exe && main

執行結果:

(3)uniform

double uniform(double a, double b);

這個函式會生成a到b間的隨機浮點數,例:

 1 //main.c
 2 #include <stdio.h>
 3 #include "./zjy_random.h"
 4 
 5 int main()
 6 {
 7     for (int i = 0; i<10;++i)
 8     {
 9         printf("%.4f\t",uniform(1.0, 10.5));
10     }
11     return 0;
12 }

編譯執行:

三、實現

1 //randint.c
2 #include "./zjy_random.h"
3 int randint(int a, int b)
4 {
5     srand((unsigned)time(NULL) + rand());
6     return rand() % (b - a + 1) + a;
7 }
 1 //random.c
 2 #include "zjy_random.h"
 3 double random(void)
 4 {
 5     srand((unsigned)time(NULL) + rand());
 6     return (double)(rand() % 10001) / 10000.0;
 7 }
 8 double uniform(double a, double b)
 9 {
10     return (random() * (b - a)) + a;
11 }
 1 //zjy_random.h
 2 #ifndef __ZJY_RANDOM_H__
 3 #define __ZJY_RANDOM_H__
 4 #ifdef __cplusplus
 5 extern "C" {
 6 #endif
 7 #include <stdlib.h>
 8 #include <time.h>
 9 int randint(int a, int b);
10 double random(void);
11 double uniform(double a, double b);
12 #ifdef __cplusplus
13 }
14 #endif
15 #endif

說明:zjy_random.h裡第4、5、6、12、13、14行程式碼是為了讓C++也能呼叫