用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\n", 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\n", 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\n", 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>\n", 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\n", 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语言中的相关函数产生随机数的基本步骤,并给出了一些简单的实例。

posted @ 2020-04-21 20:08  liangliangge  阅读(423)  评论(0编辑  收藏  举报