一.练习题
1.写一个程序,让程序生成随机值
示例代码:
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
int main(void)
{
int number = rand();
printf("%d ",number);
system("pause");
return 0;
}
这里我们调用了rand()函数,其函数被定义在头文件 stdlib.h 中,所以调用此函数之前需要进行预处理
#include<stdlib.h> 然后声明一个变量number,将rand()函数生成的随机值赋值给number,最后条用printf()输出,但是我们运行后会发现,程序输出的数字是重复的,第一次是41,程序再次运行后还是41,如图所示:
这时候我们就需要用到另外一个函数 srand() ,srand()函数的作用是配合rand()函数生成伪随机数序列,我们可以把它理解为一个种子值,srand()函数则需要一个值,其值的数据类型为unsigned int
且需要定义在rand()函数前,我们来看一下代码:
这里我们将5传入srand()函数,可以发现值确实从41-->54 但是当我们再次运行程序的时候发现生成的值还是51,并没有达到我们预期的效果,这是因为5这个值是常量,他不会改变,那在我们电脑系统中有什么东西是一直在改变的呢?答案是:时间
这里我们需要了解一个概念:时间戳
我们在网上搜索时间戳,可以看到很多时间戳换算的网站:
我们可以将时间戳换算成日期时间,那这个值又是怎么得出来的呢?
时间戳的计算结果是由1970/1/1日到现在时间所经过的秒数
而我们知道时间是不断改变的,时间戳也会不断改变,所以将时间戳的值传入srand()函数是一个方法
具体实现方法我们可以根据微软文档MSDN中给出的示例:
srand((unsigned int) time(NULL));
我们可以看到语句中调用了time()函数,time()函数在MSDN的解释中其被定义在 time.h 的头文件中所以我们使用此函数的时候需要提前预处理 #include<time.h>
我们将代码改成如下形式:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
srand((unsigned int)time(NULL));
int number = rand();
printf("%d ",number);
system("pause");
return 0;
}
再次运行程序就可以发现程序每次生成的值都是不一样的,如图所示:
这样我们就成功让程序生成了随机值
2023/8/2
王起舟