📄 random.c
字号:
/*
* 实现均匀分布随机数发生器。
*/
#include <stdio.h> /*函数printf需要*/
#include <stdlib.h> /*函数exit需要*/
#include <string.h> /*函数strlen需要*/
#include <time.h> /*函数time需要*/
#define WORDLONG 65536 /*定义16位字长*/
/*
* 函数名称:rand1
* 函数功能:生成一个伪随机数
* 入口参数:int srand--均匀分布随机数发生器的种子。
* 如果种子相同,则生成相同。
* 出口参数:返回值为生成的样本点
* 调用格式: rand1(srand)
* 算法依据:r[n] = (a * r[n-1] + b) mod M
* 其中M为计算机的一个字长,这里取2的16次方,也就是
* 16位长。
*/
unsigned int rand1(unsigned int srand)
{
unsigned int a, b;
a = 2053;
b = 13849;
srand = (a*srand + b) % WORDLONG;
return srand;
}
/*
* 函数名称:rand2
* 函数功能:生成随机样本
* 入口参数:int N--样本容量
* 出口参数:无
* 调用格式: rand2(N);
* 说 明:求r[0]是采用了函数time获取当前时间作为参数,因
* 为当前时间不同,保证了srand不同,两次生成样本
* 就不相同,所以两次样本代表变量相互独立。
*/
void rand2(int N)
{
int i;
unsigned int r[N];
r[0] = rand1((unsigned int)time(NULL));
for (i=1; i<N; i++) {
r[i] = rand1(r[i-1]);
}
for (i=0; i<N; i++) {
printf("%d\n", r[i]);
printf("%04x\n\n",r[i]);
}
}
/*
* 函数名称:count
* 函数功能:将字符串转化为一个整数,作为打印样本的总数。
* 入口参数:int N--样本容量
* char *argv--命令行字符串
* 出口参数:返回值为样本的总数
* 调用格式: count(N, argv);
*/
long count(int N, char *argv)
{
int i = 0;
int w = 1;
int times = 0;
int p[N];
while (N--) {
p[i] = argv[i] - '0'; /*一个字符对应的整数*/
i++;
}
while(i--){
times += p[i] * w; /*计算字符串对应的整数*/
w = w*10; /*其中10为权重*/
}
return times;
}
/*
* 函数名称:main
* 入口参数: 采用从命令行传递参数的方法
* 参数为设定生成样本的总数
* 格式说明: 当没有输入参数时,默认N=10
* 当输入参数时,按照输入值处理
* 不是上述情况,则进行出错处理
* 出口参数:无
*/
int main(int argc, char *argv[])
{
int N;
/*命令行参数处理*/
if (argc == 1) {
N = 10;
}
else if (argc == 2) {
N = count(strlen(argv[1]), argv[1]);
}
else {
printf("Error!\n");
exit(1);
}
/*生成均匀随机数样本*/
rand2(N);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -