DSP

使用rand()与srand()产生随机数

2019-07-13 17:36发布

在不少的地方我们都需要使用到随机数,会产生随机数还是比较有用的。
工具:
  • VS 2015

开始正文


一、使用rand()函数 C语言中,rand()函数是产生随机数的一个随机函数。rand()的使用需要注意以下几点:
  • 包含头文件:include
#include #include void main() { printf("%d %d ", rand() % 100, rand() % 100); } -------------------------------------------------- 运行结果: 67 41 请按任意键继续. . . 这样的rand()优缺点当然也有好处,比如rand()产生的随机序列必须是可重现的。
二、使用srand()函数
既然rand()不能真正的产生随机数,且两次运行的结果是相同的,那么就可以使用srand()函数来解决这个问题:
  • 函数原型:void srand(unsigned int seed);
srand()称为随机数生成器的初始化器,rand()在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand()根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。srand(unsigned int seed)通过参数seed改变系统提供的种子值。 在下面的程序中,可以改变n的值来产生不同的随机数: #include #include void main() { unsigned int n = 10; srand(12); printf("%d %d ", rand() % 100, rand() % 100); }
三、使用time()函数 为了产生真正的“随机数”,会使用time()来产生不同的seed。将srand()、rand()、time()配合使用就可以产生随机数了。 下面的例子是随机产生10个整数,并输出最大最小值: #include #include #include int main() { srand((unsigned)time(NULL)); /* srand()给rand()提供种子seed,使两次运行产生不同的随机数 */ int max = 1,min = 1000; /* 用来保存随机数里的最大最小值,且赋值以便后面的比较存储值 */ for (int i = 0; i < 10; i++) { int a = 1,b = 1000; int r = (rand() % (b - a + 1)) + a; /* rand()%n会产生0~n-1之间的随机数,这个公式产生a~b之间的随机数 */ if (max < r) max = r; /* 得到最大值 */ if (min > r) min = r; /* 得到最小值 */ printf("%d ", r); } printf(" Maximum number is %d ", max); printf("Minimum number is %d ", min); return 0; }