欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

c++语言生成一个随机数,C/C++怎么生成“真正的”随机数

发布时间:2025/4/16 c/c++ 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 c++语言生成一个随机数,C/C++怎么生成“真正的”随机数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

C/C++怎么生成“真正的”随机数

C语言中,直接用rand()函数生成随机数的话,会出现一个尴尬的局面,那就是每次运行都会生成相同的一个数,这显然不能满足我们的期望。怎么回事呢?

不管从哲学上说,还是从技术上说,都难以生成绝对随机的随机数,但是我们可以尽可能让那些“伪随机数”更像是“真正的”随机数。

先认识srand()

srand()是随机数发生器的初始化函数。原型函数是srand(unsigned int seed),通过参数seed改变系统提供的种子值。常用的srand((unsigned)time(NULL))就是根据系统的计时器来改变种子值,time(NULL)是用一套预先设定好的算法计算出的随机数,会随着时间变化。

为了清晰地看到seed的值随时间变化的情形,设计了下面几行代码。编译后多次运行,每次都能输出一个不同的值。

#include#includeusing namespace std;

int main()

{

int s=(unsigned)time(NULL);

cout<

再说说seed

系统调用rand()之前会先调用srand(),看用户有没有给seed一个指定的值。如果有,就用这个值作为产生伪随机数的初始值,如果没有,就会用一个固定不变的数作为初始值(这个值与系统有关)。

这就解释了为什么不用srand()给初始值,或是用了srand()但是给一个定值会导致随机数不变的问题。简单的说,只有种子的值变了,随机数才有可能变化。

回归正题

现在,我们貌似能够生成几个像样的随机数了。

#include#include#include#includeusing namespace std;

int main()

{

int a=1,b=50;

srand((unsigned)time(NULL));

for(int i=1;i<=10;++i)

{

int n=a+rand()%(b-a+1);

cout<

上面的代码将生成十个1到50之间的整数随机数。

注:怎么让rand()生成一定范围内的随机整数?

简单说,要生成a到b之间的整数(包含a和b),用a+rand%(b-a+1)就好了。

通俗说,a告诉系统该从哪里开始找随机数,而b-a+1则表示备选范围中一共有多少个整数。

结语

我是个初学者。过去是,现在是,以后还是。

博客有两个目的,一是备忘,虽然是些基础的知识(或是常识),仍然值得回味。二是因为我的水平较低,想多和大家交流,探讨,提升自己的水平。

原创文章,请尊重版权。

总结

以上是生活随笔为你收集整理的c++语言生成一个随机数,C/C++怎么生成“真正的”随机数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。