Rand随机数函数的使用

it2023-07-08  68

Rand随机数函数的使用

Rand()函数简介

Rand函数返回值

0~C++中所能表示的无穷大

Rand函数返回值类型

Unsigned int型无符号整型变量

Rand函数的参数

Rand()函数如何产生指定范围内的随机数?

#include <iostream>   using namespace std;      int main()   {       unsigned int random = rand() % 100; // 由取余的性质可知,这会产生0~99之间的任意无符号整型数值       cout << random << endl;   }  

 

问题来了,我们每次运行得到的结果都一样,难道这个不是随机数吗?为什么没有随机的性质?

Srand()初始化随机数种子函数的使用

#include <iostream>   #include <stdlib.h>   using namespace std;      int main()   {       srand(2);       unsigned int random = rand() % 100; // 由取余的性质可知,这会产生0~99之间的任意无符号整型数值       cout << random << endl;   }  

 

我们会发现,改变srand(InputVar)中输入参数的值,可以产生不同的随机数结果,但是问题又来了:每一个随机数种子对应一个特定的随机数,这样的随机数也不具有随机的属性呀?

Time函数的使用

#include <iostream>   #include <stdlib.h>   #include <ctime>   using namespace std;      int main()   {       srand(time(NULL));       unsigned int random = rand() % 100; // 由取余的性质可知,这会产生0~99之间的任意无符号整型数值       cout << random << endl;   }  

 

这样我们所输出的random才是真正的随机数,这是为什么呢?

Time(NULL)的作用

返回从1970年1月1日0时0分0秒到现在的秒数

因此,当时间每分每秒的过去,我们的time(NULL)返回值也会出现不同,由于返回值不同,srand(InputVar)产生的随机数种子也不同。

如何产生0~1的随机数?

我们有以上程序可以得到0~a之间的任意随机无符号整数,那么我们可以通过除以10^n的形式,将整数转化为小数:

#include <iostream>   #include <stdlib.h>   #include <ctime>   using namespace std;      int main()   {       srand(time(NULL));       float random = (float)(rand() % 100) / 100; // 由取余和除法的性质可知,这会产生0~1之间的任意无符号小数       cout << random << endl;   }  

 

但是我们需要注意的是:我们必须要将rand()%a进行强制类型转换,否则默认返回值为unsigned int型。

最新回复(0)