• 用C相关函数产生随机数


    1、前言

    在C语言中,可以使用rand()函数来产生一个随机数,但是这并不是真正意义上的随机数,是一个伪随机数,是通过一个数,也就是种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态分布,从而相当于产生了随机数,当计算机正常开机后,种子的值确定了,C语言中国的srand()函数就可以改变这个种子的值。

     

    2、如何产生随机数

    接下来看看如何使用相关的函数去产生随机数:

    首先是rand()函数,该函数的声明在头文件<stdlib.h>,函数的原型如下:

    int rand(void);

    该函数的功能就是用来产生一个随机数的,返回值是一个随机的整型数,范围在[0, RAND_MAX],其中RAND_MAX的定义在头文件<stdlib.h>中,是一个很大的数。

    例如,我们可以使用下面的代码可以输出10个随机数:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        int i;
    
        for (i = 0; i < 10; i++)
            printf("%d : %d
    ", i, rand());
        
        exit(EXIT_SUCCESS);
    }

    测试源码编写完成后,使用gcc进行编译,然后运行,输出结果如下:

    该代码多次运行后,你将发现输出的随机数是一样的,因为我们并没有改变到随机种子。

    接下来,我们来看看如何使用srand()函数去修改随机种子,srand()函数的声明同样也是在头文件<stdlib.h>中,函数的原型如下:

    void srand(unsigned int seed);

    该函数就是用来去改变随机种子的,形参seed就是我们要设置的随机种子值。

    例如,可以使用下面的代码输出10个随机数,每次运行随机种子都会发生改变:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main(int argc, char *argv[])
    {
        int i;
    
        srand((int)time(0));
    
        for (i = 0; i < 10; i++)
            printf("%d : %d
    ", i, rand());
        
        exit(EXIT_SUCCESS);
    }

    两次运行后,输出结果如下:

    通常我们可以使用函数time(0)的返回值来当做seed,这样每次运行程序时,seed的值都将不一样,注意使用该函数时需要包含头文件<time.h>。

    在上面给出的实例当中,我们产生的随机数都是不固定范围的,都比较大,如果想要产生一个一定范围内的随机数,可以宏定义一个myrandom(int number)函数,如下代码可以产生10个范围在0~1000的随机数:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define myrandom(x) (rand()%x)
    
    int main(int argc, char *argv[])
    {
        int i;
    
        srand(time(0));
    
        for (i = 0; i < 10; i++)
            printf("%d : %d
    ", i, myrandom(1000));
    
        exit(EXIT_SUCCESS);
    }

    将代码编译后运行,输出如下

    接下来,再看多一个随机数产生实例,代码如下所示:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define myrandom(x) (rand()%x)
    
    int main(int argc, char *argv[])
    {
        int j, r, nloops;
        unsigned int seed, range;
    
        if (argc != 4) {
            fprintf(stderr, "Usage: %s <seed> <nloops> <range>
    ", argv[0]);
            exit(EXIT_FAILURE);
        }
    
        seed = atoi(argv[1]);
        nloops = atoi(argv[2]);
        range = atoi(argv[3]);
    
        srand(seed);
        for (j = 0; j < nloops; j++) {
            r = myrandom(range);
            printf("%d : %d
    ", j, r);
        }
    
        exit(EXIT_SUCCESS);
    }

    该代码能通过程序运行的时候传入相关参数,例如:要设置的随机种子、随机数产生的个数以及随机数的范围。

    比如说,如果想要设置随机种子为1,产生的随机个数为12个,随机数的范围是0~100,代码使用gcc编译后,可以使用下面命令进行运行:

    $ gcc -o rand4 rand4.c
    $ ./rand4 1 12 100

    程序运行后,输出结果如下:

    使用C语言产生随机数的基本介绍就到这,还有一些相关的函数,例如random()和srandom()函数等,使用的方法类似,可以自行查看Linux操作系统的Manual page。

    3、小结

    本文主要简单介绍了使用C语言中的相关函数产生随机数的基本步骤,并给出了一些简单的实例。

  • 相关阅读:
    MVP Summit 2008 照片纪实(三) 922公里,目标拉斯维加斯
    Cool 给你的Visual Studio 添加音乐
    DB2 9 使用拓荒(733 考试)认证指南,第 4 部分: 嵌入式 SQL 编程(2)
    DB2 9 运用开拓(733 考试)认证指南,第 3 部分: XML 数据行使(6)
    DB2 9 运用开辟(733 考试)认证指南,第 3 部门: XML 数据独霸(4)
    DB2 9 运用开发(733 考试)认证指南,第 3 部门: XML 数据把持(8)
    DB2 9 运用开拓(733 检修)认证指南,第 6 部分: .NET 编程(3)
    DB2 9 操纵开辟(733 测验)认证指南,第 4 局部: 嵌入式 SQL 编程(5)
    DB2 9 使用启示(733 检验)认证指南,第 3 部分: XML 数据把持(5)
    DB2 9 使用拓荒(733 检验)认证指南,第 4 部分: 嵌入式 SQL 编程(3)
  • 原文地址:https://www.cnblogs.com/Cqlismy/p/12747470.html
Copyright © 2020-2023  润新知