C语言学习day13:for循环练习(生成随机数)

题目:

通过程序随机一个1-100的数,用户通过键盘输入数字  看是否匹配,匹配成功则跳出循环,失败则继续循环。

思路:

  • 然后生成一个随机数
  • 需要写成死循环,同时需要有其他的出口
  • 可以写一个提示,比如输入的数字较大/较小

涉及知识:rand()、srand()函数和time()函数

time()函数:

        会返回系统的当前日历时间,自 1970 年 1 月 1 日以来的秒数。如果系统没有时间,则返回         -1。该返回值也被称为 Unix 时间戳。

time(NULL):

        获取当前时间,以秒为单位,从1970年1月1日(即UNIX纪元)开始计算。

区别:

        如果你传递一个指针,那么time()函数会把当前的时间戳写入这个指针指向的内存位置,并            且返回这个时间戳。

        如果你传递NULL,那么time()函数不会尝试写入任何东西,只会返回当前的时间戳。

如果非要形象的解释:可以想象成time()time(NULL)都是时间的魔术师。他们都可以告诉你从1970年1月1日到现在已经过去了多少秒。他们的区别在于,time()喜欢与人互动,他希望你给他一个空间,他可以在那里写下他的答案。你可以把这个空间想象成一个空白的纸条,你把纸条给time(),然后time()会在纸条上写下答案,并把纸条还给你。而time(NULL)则更喜欢单独工 作,他不需要你给他任何东西,他只是静静地告诉你答案,就像一个神秘的预言家。这就是  time()time(NULL)的区别,他们都是时间的魔术师,只是他们的表演方式略有不同。

        

 srand()函数:

         是一个随机数种子,如果不使用srand()函数,而直接使用rand()函数,那么,每次生             成的随机数都会是一样的

        同时,srand()函数中不能给一个固定的值,否则 rand()函数中的随机数会一直是同一个         数

rand()函数:

        rand()函数会根据随机数种子(srand()函数 )来获取一个随机数

代码:

int main() {
	/**
    产生随机数
	1.导入头文件 time.h  stdlib.h
		时间的开始是从1970/01/01 00:00:00 开始 和现在当前时间的一个差值
	2.添加随机数种子
		若不添加随机数种子,那么每次生成的随机数都会是一样的
	3.获取随机数
    **/
	srand((unsigned int)time(NULL));//先将time函数的返回类型转换成无符号类型,在生成一个随机数        
    种子,使每次随机数不一样
	/**for (int i = 0; i < 10; i++) {
        会生成10个随机数
		int value = rand() % 10;//生成一个0-9的随机数,赋值给value 取余的值不会大于除的值
		printf("%d\n", value);
	}**/

	int value = rand() % 100;
	int num;
	for (;;) {
		printf("请输入数字\n");
		scanf("%d", &num);
		if (num>value) {
			printf("输入的数字较大\n");
		}else if(num < value) {
			printf("输入的数字较小\n");
		}
		else {
			printf("正确");
			break;
		}
	}
	return 0;
}

解释:

srand((unsigned int)time(NULL))

        现在我们开始拆解:

  • time(NULL):用于获取当前的系统时间,表示为从 1970 年 1 月 1 日(即 UNIX 纪元)以来的秒数。
  • (unsigned int):将time_t类型(time()的返回值类型)转换成一个无符号整型
  • srand():用以生成一个随机数种子
  • 所以srand((unsigned int)time(NULL)):这行代码的作用是用当前的系统时间作为种子来设置随机数生成器。由于系统时间是持续变化的,所以每次运行程序时,种子都会不同,生成的随机数序列也就会不同。

结果:

第一次运行:

 第二次运行:

第三次运行

 这篇的重点在于随机数和随机数种子,如果有不懂可以留言或评论,看见了会回

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/388589.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

书生浦语大模型实战营-课程作业(3)

下载sentence_transformer的代码运行情况。sentence_transformer用于embedding&#xff08;转向量&#xff09; 本地构建持久化向量数据库。就是把txt和md文件抽取出纯文本&#xff0c;分割成定长&#xff08;500&#xff09;后转换成向量&#xff0c;保存到本地&#xff0c;称…

压缩PDF的大小-Adobe Acrobat Pro

经常遇到上传的pdf太大&#xff0c;无法成功上传。 今天找到一个方法&#xff1a; 打开Adobe Acrobat Pro软件 → 文件 → 另存为其他&#xff08;H&#xff09;... →缩小大小的PDF 版本选择 4.0 最低的版本。 文件由9M变为1.5M。

Vi 和 Vim 编辑器

Vi 和 Vim 编辑器 vi 和 vim 的基本介绍 Linux 系统会内置 vi 文本编辑器 Vim 具有程序编辑的能力&#xff0c;可以看做是 Vi 的增强版本&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计。 代码补完、编译及错误跳转等方便编程的功能特别丰富&…

C++ bfs反向搜索(五十七)【第四篇】

今天我们来学习bfs的反向搜索。 1.反向搜索 反向搜索&#xff1a;是从目标状态出发进行的搜索&#xff0c;一般用于终点状态唯一&#xff0c;起点状态有多种&#xff0c;且状态转移是可逆的&#xff08;无向边&#xff09;情况。 例题&#xff1a;在一个长度为 n 的坐标轴上&a…

备战蓝桥杯---图论之最短路dijkstra算法

目录 先分个类吧&#xff1a; 1.对于有向无环图&#xff0c;我们直接拓扑排序&#xff0c;和AOE网类似&#xff0c;把取max改成min即可。 2.边权全部相等&#xff0c;直接BFS即可 3.单源点最短路 从一个点出发&#xff0c;到达其他顶点的最短路长度。 Dijkstra算法&#x…

大学建筑专业的搜题软件?大学搜题工具中的高级搜索功能有哪些? #学习方法#微信#经验分享

学习和考试是大学生生活中不可避免的一部分&#xff0c;而在这个信息爆炸的时代&#xff0c;如何快速有效地获取学习资源和解答问题成为了大学生们共同面临的难题。为了解决这个问题&#xff0c;搜题和学习软件应运而生。今天&#xff0c;我将为大家介绍几款备受大学生青睐的搜…

AJAX——接口文档

1 接口文档 接口文档&#xff1a;描述接口的文章 接口&#xff1a;使用AJAX和服务器通讯时&#xff0c;使用的URL&#xff0c;请求方法&#xff0c;以及参数 传送门&#xff1a;AJAX阶段接口文档 <!DOCTYPE html> <html lang"en"><head><meta c…

《数电》理论笔记-第3章-常用组合逻辑电路及MSI组合电路模块的应用

一&#xff0c;编码器和译码器 1&#xff0c;编码器 编码:用由0和1组成的代码表示不同的事物。 编码器:实现编码功能的电路&#xff0c; 常见编码器:普通编码器、优先编码器、二进制编码器二-十进制编码器等等 1.1 三位二进制普通编码器和三位二进制优先编码器 1分58秒开始 …

Cocos2dx-lua ScrollView[一]基础篇

一.ScrollView概述 cocos游戏中ScrollView控件大量使用,95%以上的项目都会使用ScrollView,个别游戏可能全部使用翻页的滑动效果。如果想要精通Cocos的UI开发,精通ScrollView控件非常关键,因此对ScrollView的使用进行总结很有必要。 下文缩写说明:sv = ScrollView, item代…

具有集中目录服务器的 P2P 工作方式

P2P 工作方式概述 在 P2P 工作方式下&#xff0c;所有的音频/视频文件都是在普通的互联网用户之间传输。 具有集中目录服务器的 P2P 工作方式 Napster 最早使用 P2P 技术&#xff0c;提供免费下载 MP3 音乐。 Napster 将所有音乐文件的索引信息都集中存放在 Napster 目录服务…

【AIGC】Stable Diffusion的ControlNet参数入门

Stable Diffusion 中的 ControlNet 是一种用于控制图像生成过程的技术&#xff0c;它可以指导模型生成特定风格、内容或属性的图像。下面是关于 ControlNet 的界面参数的详细解释&#xff1a; 低显存模式 是一种在深度学习任务中用于处理显存受限设备的技术。在这种模式下&am…

VueCLI核心知识3:全局事件总线、消息订阅与发布

这两种方式都可以实现任意两个组件之间的通信 1 全局事件总线 1.安装全局事件总线 import Vue from vue import App from ./App.vueVue.config.productionTip false/* 1.第一种写法 */ // const Demo Vue.extend({}) // const d new Demo()// Vue.prototype.x d // 把Dem…

2024,欢迎来到性价比时代

「不是XX买不起&#xff0c;而是YY更有性价比。」——翻开过去一年的商业消费史&#xff0c;这句话几乎可以贯穿始终。年轻消费者们追求性价比的眼光一旦定型&#xff0c;一些品牌过去被品质生活、消费升级包装出来的华丽外壳&#xff0c;很容易一击就碎。 胜出的「性价比之王…

多模态基础---BERT

1. BERT简介 BERT用于将一个输入的句子转换为word_embedding&#xff0c;本质上是一个transformer的Encoder。 1.1 BERT的两种训练方法 预测被遮挡的单词预测两个句子是否是相邻的句子 1和2是同时训练的 1.1 BERT的四种用法 预测句子的类别&#xff1a;输入一个句子&…

redis为什么使用跳跃表而不是树

Redis中支持五种数据类型中有序集合Sorted Set的底层数据结构使用的跳跃表&#xff0c;为何不使用其他的如平衡二叉树、b树等数据结构呢&#xff1f; 1&#xff0c;redis的设计目标、性能需求&#xff1a; redis是高性能的非关系型&#xff08;NoSQL&#xff09;内存键值数据…

SpringMVC-入门

1.概念 SpringMVC是一种软件架构思想&#xff0c;把软件按照模型(Model)、视图(View)、控制器(Controller)这三层来划分。Model&#xff1a;指的是工程中JavaBean&#xff0c;用来处理数据View&#xff1a;指的是工程中的html、jsp等页面&#xff0c;用来展示给用户数据Control…

STM32物联网(ESP-01S模块及STM32和ESP-01S通信方式介绍)

文章目录 前言一、ESP-01S模块介绍二、STM32和ESP-01S通信方式介绍三、什么是AT指令四、创建基础工程总结 前言 本篇文章我们开始正式进入STM32物联网的专栏&#xff0c;在这个专栏中将会带大家学习使用STM32进行联网&#xff0c;联网模块的话主要就是使用到了ESP-01S WIFI模块…

在JavaScript中的防抖函数 - 通过在React中构建自动完成功能来解释

当你将一个新应用推向生产环境时&#xff0c;你希望确保它用户友好。网站的性能是用户体验的关键部分。每个用户都希望网站及其内容能够快速加载。每一秒都是宝贵的&#xff0c;可能导致用户再也不会访问你的网站。 在本指南中&#xff0c;我们将了解JavaScript中一个非常重要…

免费chatgpt使用

基本功能如下&#xff1a; https://go.aigcplus.cc/auth/register?inviteCode3HCULH2UD

【机器学习笔记】3 逻辑回归

分类问题 分类问题监督学习最主要的类型&#xff0c;主要特征是标签离散&#xff0c;逻辑回归是解决分类问题的常见算法&#xff0c;输入变量可以是离散的也可以是连续的 二分类 先从用蓝色圆形数据定义为类型1&#xff0c;其余数据为类型2&#xff1b;只需要分类1次&#x…