继之前的C语言一系列文章之后,博主又进行了深耕,接下来我们就要进行C语言进阶的一些相关知识。关注博主不迷路!
一、rand函数:生成随机数
这个函数生成的随机数是 int 型的整数。在所有编程环境中其最小值都为0,但最大值则取决于编程环境,所以我们用<stdlib.h>头文件将其定义成一个名为RAND_MAX的对象宏(obiect-likemacro),其定义的示例如下所示:
#define RAND_MAX 32767 /*定义的示例:值根据编疆环境而有所差别,RAND_MAX的值根据规定不得低于32767*/
二、srand函数:设置用于生成随机数的种子
rand 函数是对一个叫作“种子”的基准值加以运算来生成随机数的。之所以先前每次运行程序都会生成同一个随机数序列,是因为 rand 函数的默认种子是常量1。要生成不同的随机数序列,就必须改变种子的值。
比如,假设我们调用了 srand(50)。这样一来,之后调用的 rand 函数就会利用设定的新种子值50来生成随机数。
rand 函数生成的是叫作伪随机数的随机数。伪随机数看起来像随机数,却是基于某种规律生成的。因为能预测接下来会生成什么数值,所以才叫作伪随机数。真正的随机数是无法预测接下来会生成什么数值的。
我们一般使用的方法是把运行程序时的时间当作种子 。
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int retry; /*再运行一次?*/
srand(time(NULL)); /*根据当前时间设定随机数的种子*/
printf("在这个编程环境中能够生成0~%d的随机数。\n",RAND_MAX);
do{
printf("\n生成了随机数%d。\n",rand());
printf("再运行一次?···(0)否(1)是:");
scanf("%d",&retry);
}while (retry==1);
return 0;
}
三、随机设定目标数字
rand函数生成的值范围是0~RAND_MAX话虽如此,但我们需要的随机数不会每次都恰好在这个范围内。
一般情况下,我们需要的是某个特定范围内的随机数。如果我们需要“大于等于0且小于等于10”的随机数,可以像下面这样求出:
rand()%11 \*生成大于等于0且小于等于10的随机数*\
这里使用的方法是把非负整数值除以 11,就得到余项(余数)为0,1...,10
大家注意不要把非负整数值错除以10。用10除得到的余数是0,1,,9,无法生成10。