C/C++生成隨機數
阿新 • • 發佈:2020-08-06
一、前言
由於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++也能呼叫