【C】分支和循环--猜数字游戏
分支和循环
练习:猜数字游戏
游戏要求:
1;电脑自动生成1~100的随机数
2;玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜出,游戏结束
随机数生成
函数rand
int rand(void);
rand函数会返回一个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是大部分编译器上是32767
rand函数的使用需要包含一个头文件是:stdlib.h
那我们就测试一下rand函数,这里多调用几次,产生5个随机数:
#include <stdio.h>#include <stdlib.h>int main(){printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); return 0;
}
生成了三个随机数:

不过,在运行一遍程序之后,会发现得到的三个随机数依然是以上几个
这就说明有点问题
其实rand 函数生成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法生成的随机数。真正的随机数的是无法预测下一个值是多少的。而rand 函数是对一个叫 种子的基准值进行运算生成的随机数
之所以前面每次运行程序产生的随机数序列是一样的,那是因为rand函数生成随机数的默认种子是1,如果要生成不同的随机数,就要让种子是变化的
因此,在使用rand函数之前,要调用一个srand函数,设置随机的种子
函数 srand
void srand (unsigned int seed);
程序中在调用rand 函数之前先调用srand函数,通过 srand函数的参数seed来设置rand函数生成随机数的时候的种子,只要种子在变化,每次生成的随机数序列就会变化
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {srand(1);printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand()); return 0;
}
当srand(1)时,输出如下:

如果使srand的参数值变化:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {srand(2);printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand()); return 0;
}
会发现数字发生了变化:

time
在程序中我们一般使用程序运行的时间作为种子,因为时间时刻在发生变化的
在C语言中有一个函数叫time,就可以获得这个时间
需要头文件time.h
time函数原型如下:
time_t time (time_t* timer);
time函数会返回一个时间戳
时间戳:是一个数字,是当前时间–计算机的起始时间(1970-1-1,0:0:0),单位是秒
srand((unsigned int)time(NULL));//如果不想使用time函数的参数,传递NULL就可以了
生成a~b的随机数:
rand()%(b-a+1)+a;
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//玩家玩一次后,可以继续玩,不需要退出游戏
//1.玩游戏
//0.退出游戏
void menu()
{printf("------------------------------\n");printf("------ 1.玩游戏 --------\n");printf("------ 0.退出游戏 ----------\n");printf("------------------------------\n");
}
void game()
{int guess = 0;//游戏的实现//1.生成随机数int r = rand()%100+1;//2/猜数字while (1) {printf("猜数字:");scanf("%d", &guess);if (guess > r)printf("猜大了\n");else if (guess < r)printf("猜小了\n");else{printf("恭喜你猜对了,随机数是%d\n", r);break;}}
}
int main() {int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏");break;default:printf("选择错误,重新选择");break;}} while (input);return 0;
}
如果将猜的次数限制在5以内:
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//玩家玩一次后,可以继续玩,不需要退出游戏
//1.玩游戏
//0.退出游戏
void menu()
{printf("------------------------------\n");printf("------ 1.玩游戏 --------\n");printf("------ 0.退出游戏 ----------\n");printf("------------------------------\n");
}
void game()
{int guess =0;//游戏的实现//1.生成随机数int r = rand()%100+1;//2/猜数字int count = 5;while (count) {printf("剩余%d次机会",count);printf("猜数字:");scanf("%d", &guess);if (guess > r)printf("猜大了\n");else if (guess < r)printf("猜小了\n");else{printf("恭喜你猜对了,随机数是%d\n", r);break;}count--;}if (count == 0)printf("五次机会使用完,猜数字失败\n");
}
int main() {int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏");break;default:printf("选择错误,重新选择");break;}} while (input);return 0;
}
相关文章:
【C】分支和循环--猜数字游戏
分支和循环 练习:猜数字游戏 游戏要求: 1;电脑自动生成1~100的随机数 2;玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜出,游戏结束 随机数生成 函数…...
Liunx 操作redis
1,到Liunx的redis的安装目录下/home/redis/redis-7.2.3/src 执行命令 ./redis-cli2,执行命令后,出现以下 127.0.0.1:6379>3,输入密码 127.0.0.1:6379> AUTH 你的密码4,切换db库 127.0.0.1:6379> SELECT 55,操作命令 查看当前 db库的缓存 127.0.0.1:63…...
C#教程笔记
C#开发的程序依附.NET平台 编译器->IL中间语言->CLR->机器指令 .NET CORE平台 跨平台 .cs后缀名 快捷键 CtrlKD格式化CtrlL或CtrlX删除一行CtrlY反撤销cwTab快速生成命令行输出Ctrl空格或CtrlJ获取提示///方法注释CtrlMO代码全部折叠CtrlML代码全部展开 上升沿0变1 安…...
Docker 部署 RocketMQ
1.拉取RocketMQ镜像 这里以dockerhub上 RocketMQ 5.2.0版本的镜像为例,介绍部署过程。 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/rocketmq:5.2.02.创建容器共享网络 RocketMQ 中有多个服务,需要创建多个容器,创建 docke…...
linux安装mysql数据库(最完整的yum源安装)
1.下载YUM库 wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm这里介绍一下wegt命令 wget 是一个非常强大的命令行工具,用于从网络上下载文件。它支持HTTP、HTTPS和FTP协议,并且可以通过HTTP代理进行下载。以下是 wget 的…...
工业物联网关-TCP透传
TCP透传功能提供类似于DTU(Data Transmit Unit)的功能,用户在网络端使用TCP协议连接网关,与串口通道绑定,建立起TCP与串口的通道,网关相当于一个中转点。 菜单选择"数据上行-tcp透传",查看当前透传通道列表&…...
sentinel原理源码分析系列(六)-统计指标
调用链和统计节点构建完成,进入统计指标插槽,统计指标在最后执行的,等后面的插槽执行完,资源调用完成了,根据资源调用情况累计。指标统计是最重要的插槽,所有的功能都依靠指标数据,指标的正确与…...
【代理模式使用场景】
一般来说,代理模式使用场景是远程代理、虚拟代理、安全代理等。下面来详细介绍下这三个场景是什么,实现原理和特点。不过在介绍三个场景前,我们还是先来回顾下代理模式。 代理模式 定义 是结构型设计模式,引入一个对象控制对另…...
ARM-8 代码还原动态调试之 pstree 条件表达式
out_string(lvl level - 1 ? last ? sym->last_2 : sym->branch_2 : more[lvl 1] ? sym->vert_2 : sym->empty_2); 条件表达式执行顺利: lvl level - 1 ? last ? sym->last_2 : sym->branch_2 : more[lvl 1] ?…...
Spring Boot技术栈在电影评论网站中的应用
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
DDOS防护
DDoS攻击简介 分布式拒绝服务(DDoS)攻击是一种网络攻击方式,通过控制大量的受感染系统(称为“僵尸网络”)向目标服务器发送大量的网络流量或请求,目的是使目标服务器超载,无法提供正常服务。这…...
【Vue】Vue(九)OptionsAPI与CompositionAPI的区别
文章目录 OptionsAPI与CompositionAPI在代码使用和逻辑上的区别一、代码使用方面的区别(一)组件定义的结构(二)响应式数据的定义与使用(三)逻辑复用的实现方式 二、逻辑方面的区别(一࿰…...
MySQL 【日期】函数大全(四)
目录 1、MAKEDATE() 根据年份和一年中天数创建一个日期并返回。 2、MAKETIME() 指定的时、分、秒创建一个时间并返回。 3、MINUTE() 函数提取并返回时间的分钟部分。 4、MONTH() 函数提取日期的月份部分并作为数字返回。 5、MONTHNAME() 返回给定日期的月份的名字。 6、N…...
Jlink 直接读取单片机数据
1. 驱动版本 因人而异,这里我使用的是 “J-Flash V6.96” 本人驱动链接:夸克网盘 提取码:rgzk 2. 打开软件 3. 创建jlink工程 4. 选择芯片 此处本人使用芯片 “STM32F103VCT6” 5. 连接单片机 连接成功反馈 6. 读取单片机内部数据 …...
VScode运行C语言终端输出中文乱码问题解决方案
VScode运行C语言输出中文乱码问题解决方案 由于 VSCode 的终端是对系统的 cmd 命令行工具的调用,而 cmd 的默认编码为 GBK。当我们在 VSCode 中以 UTF-8 编码进行代码编写且代码里含有中文字符时,在终端运行代码便会出现中文乱码现象。要解决此问题&…...
Leetcode刷题. 贪心算法
贪心算法: 比较传统的解释:将整个问题拆解为几个小问题,找到小问题的最优解,加起来就是整个问题的全局最优解。对于现在的我理解贪心就是一种感觉,给出证明很难,解题思路一般就是认真读题,发掘题…...
强化学习的数学原理-01基本概念
state: T h e s t a t u s o f a g e n t w i t h r e s p e c t t o t h e e n v i r o n m e n t The \quad status \quad of \quad agent \quad with \quad respect \quad to \quad the \quad environment Thestatusofagentwithrespecttotheenvironment (agent 相对于环境的…...
D41【python 接口自动化学习】- python基础之函数
day41 函数参数传递错误 学习日期:20241018 学习目标:函数﹣-54 避坑指南:列表作为参数传递出错了怎么办? 学习笔记: 列表类型的特殊性 list1[x,y,z] tuple1(list1,b,c)# 修改元组中的列表,会…...
思迅商云8修改最大找零金额
执行如下语句前请备份数据库 -POS收银找零金额最大数 --把下面SQL中的 1000.00 改成你想要的金额数,再到查询分析器中执行: --总店 use hbposv8 go insert t_sys_system (sys_var_id, sys_var_value, sys_var_name) values (pos_max_givchg, 1000.00, 最…...
Lumerical学习——分析工具(Analysis tools)
一、分析工具和模拟环境(Analysis tools and the simulation environment) 模拟计算完成后,模拟计算数据紧接着写到模拟工程文件中;甚至当模拟计算提前结束时计算得到的部分数据集也会写到文件中。当模拟完成后单击退出按钮、或者…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
