⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 random.c

📁 标准C实现
💻 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 + -