C语言分支与循环(15) --- 随机值的生成
  uUWKQE7Avyk4 2023年11月02日 50 0

一.练习题

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,如图所示:

C语言分支与循环(15) --- 随机值的生成_C语言

这时候我们就需要用到另外一个函数 srand() ,srand()函数的作用是配合rand()函数生成伪随机数序列,我们可以把它理解为一个种子值,srand()函数则需要一个值,其值的数据类型为unsigned int

且需要定义在rand()函数前,我们来看一下代码:

C语言分支与循环(15) --- 随机值的生成_时间戳_02

这里我们将5传入srand()函数,可以发现值确实从41-->54 但是当我们再次运行程序的时候发现生成的值还是51,并没有达到我们预期的效果,这是因为5这个值是常量,他不会改变,那在我们电脑系统中有什么东西是一直在改变的呢?答案是:时间

这里我们需要了解一个概念:时间戳

我们在网上搜索时间戳,可以看到很多时间戳换算的网站:

C语言分支与循环(15) --- 随机值的生成_时间戳_03

我们可以将时间戳换算成日期时间,那这个值又是怎么得出来的呢?

时间戳的计算结果是由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;
}

再次运行程序就可以发现程序每次生成的值都是不一样的,如图所示:

C语言分支与循环(15) --- 随机值的生成_时间戳_04

C语言分支与循环(15) --- 随机值的生成_时间戳_05

这样我们就成功让程序生成了随机值

                                                                                                            2023/8/2

                                                                                                                王起舟

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
uUWKQE7Avyk4