C语言随机数的生成1.随机数的生成-rand()函数注意: rand() 函数的使用需要调用 库文件
语法:
int rand ( void );
功能:
函数返回一个在零到 RAND_MAX 之间的伪随机整数。
生成范围:
0~RAND_MAX(32767)
也可以对rand的取模操作,从而控制生成自己想要生成的范围
eg:
代码语言:javascript复制v1 = rand() % 100; // v1 生成的范围是 0 to 99
v2 = rand() % 100 + 1; // v2 生成的范围是 1 to 1002.伪随机数 通过运行上述代码,我们发现确实生成了一个随机数,其值为41;
但是我们多次进行代码运行测试发现,每次运行的结果都是41。
这说明我们rand()函数 生成的 是一个 伪随机数!!!
伪随机并不是真实意义上的随机,而是具有一定规律的随机的随机
计算机会通过对应的随机数算法,随机数表中固定开始读取,且每次开始读取位置都相同,所以无论怎样生成的随机数都相同。
3.srand()函数 语法:
void srand (unsigned int seed);
头文件:
#include
功能:
设置rand()随机序列种子。对于给定的种子seed, rand()会反复产生特定的随机序列。
srand函数是随机数发生器的初始化函数,其内部需要一个 unsigned int类型的种子来
注: 很多人并不明白为什么srand函数需要一个种子才能运行:
这是因为计算机的一切行为,都需要对其进行输入数据 才能 输出数据。在没有输入的情况下
计算机是无法凭空给出一系列的数字,更不用说是随机数了。
一旦种子相同,产生的随机数也将是相同的。
代码测试:srand(1); 和srand(2);
代码语言:javascript复制#include
#include
int main()
{
srand(1);
int v1 = 0;
for (int i = 0; i < 10; i++)
{
v1 = rand() % 100;
printf("%d ", v1);
}
srand(2);
printf("\n");
for (int i = 0; i < 10; i++)
{
v1 = rand() % 100;
printf("%d ", v1);
}
return 0;
}srand(1);没有使用srand(2);
代码语言:javascript复制#include
#include
int main()
{
srand(1);
int v1 = 0;
for (int i = 0; i < 10; i++)
{
v1 = rand() % 100;
printf("%d ", v1);
}
//srand(2);
printf("\n");
for (int i = 0; i < 10; i++)
{
v1 = rand() % 100;
printf("%d ", v1);
}
return 0;
}4.time()函数的引入很多时候我们刻意让rand()产生的随机数随机化,这个时候就需要一个 能够不断变化的种子
而我们的电脑时间正好是不断变化的;
用时间作种子 srand(time(NULL)),这样每次运行程序的时间肯定是不相同的,产生的随机数肯定就不一样了。
头文件:
#include
语法:
time_t time (time_t* timer);
功能:
返回当前时间戳,如果发生错误返回零。如果给定参数time ,那么当前时间存储到参数time中。
//这里我们不需要存储时间信息,我们只需要通过时间变化来让种子随机变化 ,所以 time()里只需要NULL
用法:srand( (unsigned int ) time(NULL) )
//注:这里的time_t 类型 强制类型转换成了 unsigned int 类型(无符号整数) 因为srand()函数 内参数类型为unsigned int类型
5.总结想要生成一个真随机的随机数
需要:
头文件:
代码语言:javascript复制#include
#include
代码语言:javascript复制srand( (unsigned int ) time (NULL) );
int ret = rand(); //ret用来接收随机数代码演示:
代码语言:javascript复制#include
#include
#include
int main()
{
int i = 0;
srand((unsigned int)time(NULL));
for (i = 0; i < 10; i++)
{
int ret = rand() % 50 + 1; //生成十个范围在 1~50的随机数
printf("%d\n",ret);
}
return 0;
}