【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) 模拟计算完成后,模拟计算数据紧接着写到模拟工程文件中;甚至当模拟计算提前结束时计算得到的部分数据集也会写到文件中。当模拟完成后单击退出按钮、或者…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...

Java设计模式:责任链模式
一、什么是责任链模式? 责任链模式(Chain of Responsibility Pattern) 是一种 行为型设计模式,它通过将请求沿着一条处理链传递,直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者,…...