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