获取随机数一般很容易,只需要
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i;
// 使用系统时间作为种子(初始化随机数,用于确定随机数生成器生成随机数序列的起点),确保每次运行产生不同的随机数序列,函数time返回从1970.1.1以来经历的秒数
srand(time(NULL));
for (i = 0; i < 10; i++) {
int random_num = rand();
printf("%d\n", random_num);
}
return 0;
}
本文探讨使用静态随机变量实现伪随机数生成——LCG算法
先给代码(两个文件):
// 文件:main.c
#include <stdio.h>
#include <time.h>
#define N 100
void mysrand(unsigned);
unsigned myrand();
int main() {
int i, head = 0, reverse = 0;
mysrand(time(NULL));
for (i = 0; i < N; i++)
{
if (myrand() % 2) head++;
else reverse++;
}
printf("%d%d\n", head, reverse);
return 0;
}
// 文件:rand.c
#define INITIAL_SEED 17
#define MULTIPLIER 25173
#define INCREMENT 13849
#define MODULUS 32767
static unsigned long seed = INITIAL_SEED; // 种子
unsigned myrand()
{
seed = (seed * MULTIPLIER + INCREMENT) % MODULUS;
return seed; // 0~MODULUS的随机整数
}
void mysrand(unsigned x)
{
seed = x; // 用形参x初始化随机数的种子
}
使用static定义静态随机变量可以让seed只被当前文件内的函数使用,不会被其它文件误使用。

文章介绍了如何使用LCG(线性同余法)生成伪随机数,包括关键参数的选择和算法原理。通过示例代码展示了如何在C语言中实现这一算法,并讨论了确保最大周期的条件,如C和M互质,以及A、C、seed与M的关系等。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



