C 语 言 --- 猜 数 字 游 戏

C 语 言 --- 猜 数 字 游 戏

  • 代 码 全 貌 与 功 能 介 绍
  • 游 戏 效 果 展 示
  • 游 戏 代 码 详 解
    • 头 文 件 引 入
    • 菜单函数
    • 游 戏 逻 辑 函 数 game
      • rand 函 数 详 解
      • 逻 辑 函 数 game
    • 主 函 数
  • 总结

💻作 者 简 介:曾 与 你 一 样 迷 茫,现 以 经 验 助 你 入 门 C 语 言
💡个 人 主 页:@笑口常开xpr 的 个 人 主 页
📚系 列 专 栏:C 启新程
✨代 码 趣 语:代 码 要 像 诗 一 样 优 雅,而 不 是 像 神 秘 的 咒 语。
💪代 码 千 行,始 于 坚 持,每 日 敲 码,进 阶 编 程 之 路。
📦gitee 链 接:gitee

在这里插入图片描述

       在 编 程 的 世 界 里,每 一 行 代 码 都 可 能 隐 藏 着 无 限 的 可 能 性 。你 是 否 想 过,一 个 小 小 的 程 序 究 竟 能 改 变 什 么?它 可 以 是 解 决 复 杂 问 题 的 工 具 ,也 可 以 是 实 现 梦 想 的 桥 梁。今 天,就 让 我 们 一 起 走 进 C 语 言 的 世 界,探 索 它 的 无 限 潜 力。

代 码 全 貌 与 功 能 介 绍

       我 们 先 来 整 体 看 一 下 这 段 C 语 言 代 码。它 实 现 了 一 个 简 单 而 经 典 的 猜 数 字 游 戏,程 序 启 动 后,会 展 示 一 个 菜 单,提 供 两 个 选 项:1. 玩 游 戏 和 0. 退 出 游 戏。选 择 1 进 入 游 戏,玩 家 需 要 在 规 定 次 数 内 猜 出 一 个 1 到 100 之 间 的 随 机 数 字;选 择 0 则 退 出 游 戏。如 果 玩 家 输 入 了 其 他 无 效 选 项,程 序 会 提 示 选 择 错 误。

下 面 展 示完整代码

读 者 可 以 将 这 段 代 码 复 制 到 自 己 的 编 译 器 中 运 行:

#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;int count = 5;//1.生成随机数int r = rand() % 100 + 1;//1 ~ 100//2.猜数字printf("请输入你猜数字的次数:");scanf("%d", &count);while (count){printf("目前还有%d次机会\n", count);printf("请猜数字:>");scanf("%d", &guess);if (guess < r){printf("猜小了\n");}else if (guess > r){printf("猜大了\n");}else{printf("恭喜你,猜对了\n");break;}count--;}if (count == 0){printf("很遗憾,%d次机会使用完成,没能猜出数字,结果是:%d\n",count,r);}
}
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("退出游戏\n");break;default:printf("选择错误\n");break;}}while (input);
}

游 戏 效 果 展 示

         在 猜 数 字 游 戏 里,对 猜 数 字 次 数 的 限 制 是 关 键 的 游 戏 规 则 设 定。程 序 为 玩 家 设 定 了 一 定 数 量 的 猜 测 机 会 , 在 规 定 的 这 几 次 机 会 里,玩 家 需 要 凭 借 对 数 字 大 小 的 判 断 不 断 尝试。一 旦 在 这 有 限 的 次 数 内 未 能 成 功 猜 出 正 确 数 字,程 序 便 会 判 定 游 戏 失 败。此 时,系 统 会 清 晰 地 告 知 玩 家 游 戏 结 果,并 展 示 出 正 确 数 字,让 玩 家 了 解 最 终 答 案。

在这里插入图片描述

游 戏 代 码 详 解

头 文 件 引 入

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

         这 里 引 入 了 三 个 重 要 的 头 文 件。stdio.h 提 供 了 标 准 输 入 输 出 函 数,比 如 我 们 在 程 序 中 用于 输 入 的 scanf 和 用 于 输 出 的 printf。stdlib.h 包 含 了 一 些 通 用 的 工 具 函 数,其 中 rand 函 数 就 来 自 这 个 头 文 件,用 于 生 成 随 机 数。time.h 则 用 于 获 取 系 统 时 间,在 我 们 的 程 序 中,它 与srand 函 数 配 合 ,确 保 每 次 运 行 程 序 时 生 成 的 随 机 数 不 同 。

菜单函数

void menu()
{printf("**************************************\n");printf("*******   1.猜数字      ***************\n");printf("*******   0.退出游戏    ***************\n");printf("**************************************\n");
}

         menu 函 数 的 作 用 很 直 观,就 是 在 控 制 台 打 印 出 游 戏 的 菜 单 界 面。这 种 格 式,使 菜 单 看 起 来 清 晰 明 了,方 便 玩 家 做 出 选 择。

游 戏 逻 辑 函 数 game

rand 函 数 详 解

在这里插入图片描述

         在 猜 数 字 游 戏 中,rand 函 数 负 责 生 成 玩 家 需 要 猜 测 的 随 机 数。rand 函 数 定 义 在 stdlib.h 头 文 件 中,因 此 在 使 用 该 函 数 前,我 们 必 须 包 含 这 个 头 文 件:#include <stdlib.h>。

         rand 函 数 不 需 要 传 入 任 何 参 数,每 次 调 用 它 时,都 会 返 回 一 个 介 于 0( 包 括 )和 RAND_MAX 之 间 的 整 数。RAND_MAX 是 一 个 在 stdlib.h 中 定 义 的 常 量,其 值 通 常 是 一 个 非 常 大 的 整 数,具 体 数 值 因 编 译 器 而 异,但 常 见 的 取 值 是 32767。

例 如,在 我 们 的 猜 数 字 游 戏 代 码 中:
int r = rand() % 100 + 1;

       这 里 通 过 rand() 获 取 一 个 随 机 整 数,然 后 对 100 取 模(即 求 余 数),得 到 的 结 果 范 围 是 0 到 99。再 加 上 1 后,r 的 值 就 被 限 定 在 了 1 到 100 之 间,这 正 是 我 们 希 望 玩 家 猜 测 的 数 字 范围。需 要 注 意 的 是 ,rand 函 数 生 成 的 并 不 是 真 正 意 义 上的 随 机 数 , 而 是 伪 随 机 数。这 意 味 着 如 果 程 序 的 初 始 条 件 相 同 , 每 次 运 行 时 rand 函 数 生 成 的 随 机 数 序 列 都 是 一 样 的。为 了 避 免 这 种 情 况 ,让 每 次 运 行 程 序 时 生 成 的 随 机 数 不 同 ,我 们 需 要 使 用 srand 函 数 来 设 置 随 机 数 种 子。在 我 们 的 主 函 数 main 中:

在这里插入图片描述

srand((unsigned int)time(NULL));

         这 里 使 用 time(NULL) 获 取 当 前 系 统 时 间,将 其 转 换 为 unsigned int 类 型 后 作 为 参 数 传 递 给 srand 函 数。由 于 每 次 运 行 程 序 时 的 系 统 时 间 几 乎 不 可 能 相 同,这 样 就 保 证 了 每 次 运 行 程 序 时 随 机 数 种 子 不 同 ,从 而 使 rand 函 数 生 成 不 同 的 随 机 数 序 列 。并 且,srand 函 数 只 需 在 程 序 开 始 时 调 用 一 次 即 可。

在这里插入图片描述

逻 辑 函 数 game

void game()
{int guess = 0;int count = 5;//1.生成随机数int r = rand() % 100 + 1;//1 ~ 100//2.猜数字printf("请输入你猜数字的次数:");scanf("%d", &count);while (count){printf("目前还有%d次机会\n", count);printf("请猜数字:>");scanf("%d", &guess);if (guess < r){printf("猜小了\n");}else if (guess > r){printf("猜大了\n");}else{printf("恭喜你,猜对了\n");break;}count--;}if (count == 0){printf("很遗憾,%d次机会使用完成,没能猜出数字,结果是:%d\n",count,r);}
}

         初 始 化 变 量:在 game 函 数 内 部,首 先 定 义 了 两 个 变 量 guess 用 于 存 储 玩 家 猜 测 的 数 字,count 初 始 化 为 5,表 示 玩 家 初 始 有 5 次 猜 测 机 会。不 过,这 里 有 个 小 亮 点,玩 家 可 以 自 己 输 入 猜 测 的 次 数,这 增 加 了 游 戏 的 灵 活 性 和 趣 味 性。

         生 成 随 机 数:通 过 rand 函 数 生 成 一 个 0 到 RAND_MAX( 一 个 很 大 的 整 数 )之 间 的 随 机 数,然 后 对 100 取 模 并 加 1,这 样 就 得 到 了 一 个 1 到 100 之 间 的 随 机 整 数 r,这 就 是 玩 家 需 要 猜 测 的 目 标 数 字。

         猜 数 字 循 环:使 用 一 个 while 循 环,只 要 count 大 于 0,就 会 持 续 进 行 游 戏。在 每 次 循 环 中,先 提 示 玩 家 剩 余 的 猜 测 次 数,然 后 让 玩 家 输 入 猜 测 的 数 字。接 着 通 过 if - else 语 句 判 断 玩 家 猜 测 的 数 字 与 目 标 数 字 的 大 小 关 系 , 并 给 出 相 应 的 提 示 。 如 果 猜 对 了 ,打 印 “ 恭 喜 你 ,猜 对 了 ” 并 使 用 break 语 句 跳 出 循 环;如 果 猜 错 了,count 减 1。当 count 变 为 0 时, 循 环 结 束 ,此 时 如 果 玩 家 还 没 有 猜 对,会 打 印 出 遗 憾 的 提 示 信 息 ,并 告 知 目 标 数 字。

主 函 数

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("退出游戏\n");break;default:printf("选择错误\n");break;}}while (input);
}

         随 机 数 种 子 设 置:在 main 函 数 开 头 ,通 过 srand((unsigned int)time(NULL)) 设 置 随 机 数 种 子。 这 里 使 用 系 统 当 前 时 间 作 为 种 子,并 且 只 调 用 一 次,这 样 就 能 保 证 每 次 运 行 程 序 时 生 成 的 随 机 序 列 不 同 , 增 加游 戏 的 新 鲜 感 。

         菜 单 选 择 循 环:使 用 do - while 循 环,先 调 用 menu 函 数 打 印 菜 单,然 后 让 玩 家 输 入 选 择。 通 过 switch 语 句 根 据 玩 家 的 输 入 执 行 相 应 的 操 作。如 果 选 择 1,调 用 game 函 数 开 始 游 戏; 如 果 选 择 0,打 印 “ 退 出 游 戏 ” 并 结 束 循 环;如 果 输 入 其 他 无 效 选 项,提 示 “ 选 择 错 误 ”。只 要 玩 家 输 入 的 不 是 0,循 环 就 会 继 续,程 序 会 不 断 提 供 菜 单 供 玩 家 选 择,直 到 玩 家 选 择 退 出 游 戏。

在这里插入图片描述

总结

       通 过 这 个 简 单 的 猜 数 字 游 戏,我 们 不 仅 实 践 了 C 语 言 中 的 基 本 语 法,如 变 量 定 义、循 环 结 构、条 件 判 断 和 函 数 调 用,还 学 习 了 如 何 使 用 随 机 数 生 成 函 数 和 输 入 输 出 函 数。希 望 这 篇 博 客 能 帮 助 你 更 好 地 理 解 C 语 言 编 程,激 发 你 在 编 程 世 界 中 不 断 探 索 和 创 新 的 热 情 。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费分享一个软件SKUA-GOCAD-2022版本

若有需要&#xff0c;可以下载。 下载地址 通过网盘分享的文件&#xff1a;Paradigm SKUA-GOCAD 22 build 2022.06.20 (x64).rar 链接: https://pan.baidu.com/s/10plenNcMDftzq3V-ClWpBg 提取码: tm3b 安装教程 Paradigm SKUA-GOCAD 2022版本v2022.06.20安装和破解教程-CS…

记录一次Spring事务失效导致的生产问题

一、背景介绍 公司做的是“聚合支付”业务&#xff0c;对接了微信、和包、数字人民币等等多家支付机构&#xff0c;我们提供统一的支付、退款、自动扣款签约、解约等能力给全国的省公司、机构、商户等。 同时&#xff0c;需要做对账功能&#xff0c;即支付机构将对账文件给到…

IntelliJ IDEA集成MarsCode AI

IntelliJ IDEA集成MarsCode AI IDEA中安装插件 安装完毕之后登录自己的账号 点击链接&#xff0c;注册账号 https://www.marscode.cn/events/s/i5DRGqqo/ 可以选择不同的模型

FPGA学习篇——Verilog学习4

1.1 结构语句 结构语句主要是initial语句和always语句&#xff0c;initial 语句它在模块中只执行一次&#xff0c;而always语句则不断重复执行&#xff0c;以下是一个比较好解释的图: (图片来源于知乎博主罗成&#xff0c;画的很好很直观&#xff01;) 1.1.1 initial语句 ini…

并发编程(线程池)面试题及原理

1. 执行原理/核心参数 1.1 核心参数 核心参数 corePoolSize 核心线程数目maximumPooISize 最大线程数目 &#xff08;核心线程&#xff0b;救急线程的最大数目&#xff09;keepAliveTime 生存时间- 救急线程的生存时间&#xff0c;生存时间内没有新任务&#xff0c;此线程资…

Java 大视界 -- Java 大数据在智慧交通信号灯智能控制中的应用(116)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

1.15-16-17-18迭代器与生成器,函数,数据结构,模块

目录 15&#xff0c;Python3 迭代器与生成器15-1 迭代器15-1-1 基础知识15-1-2 迭代器与for循环工作原理 15-2 生成器&#xff08;本质就是迭代器&#xff09;15-2-1 yield 表达式15-2-2 三元表达式15-2-3 列表生成式15-2-4 其他生成器&#xff08;——没有元祖生成式——&…

如何同步this.goodAllData里面的每一项给到row

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

react中如何使用使用react-redux进行数据管理

以上就是react-redux的使用过程&#xff0c;下面我们开始优化部分&#xff1a;当一个组件只有一个render生命周期&#xff0c;那么我们可以改写成一个无状态组件&#xff08;UI组件到无状态组件&#xff0c;性能提升更好&#xff09;

基于qt的桌面宠物——纳西妲源码纯享

本专栏会不定时更新&#xff0c;如果有有趣的C代码或者编程可以在评论区留言&#xff0c;我会尽量满足粉丝的要求&#xff0c;同时还希望看到的朋友点个赞/收藏&#xff08;感谢/感谢&#xff09; 代码 main.cpp: #include "widget.h"#include <QApplication&g…

用于管理 Elasticsearch Serverless 项目的 AI Agent

作者&#xff1a;来自 Elastic Fram Souza 由自然语言驱动的 AI 代理&#xff0c;可轻松管理 Elasticsearch Serverless 项目 - 支持项目创建、删除和状态检查。 这个小型命令行工具让你可以用简单的英语管理你的无服务器 Elasticsearch 项目。它通过AI&#xff08;这里是 Ope…

C语言_图书管理系统_借阅系统管理

✨✨ 欢迎大家来到小伞的大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 小伞的主页&#xff1a;xiaosan_blog 本文所需对顺序表的理解&#xff1a; 注&#xff1a;由于顺序表实现图书…

车辆运维管理行业洞察与竞品分析

1. 前言 车辆运维管理是指对车辆进行日常维护、故障处理、性能监测、成本控制等一系列活动的管理。随着物联网、大数据、人工智能等技术的发展&#xff0c;车辆运维管理软件和解决方案的市场竞争日益激烈。 2. 确定目标 通过产品差异化定位&#xff0c;找到竞争者的差异&…

Spring源码分析のAOP

文章目录 前言一、wrapIfNecessary1.1、getAdvicesAndAdvisorsForBean1.1.1、findCandidateAdvisors1.1.2、findAdvisorsThatCanApply 1.2、createProxy 二、invoke2.1、getInterceptorsAndDynamicInterceptionAdvice2.1.1、getInterceptors 2.2、proceed2.2.1、invoke 三、Asp…

LINUX网络基础 [一] - 初识网络,理解网络协议

目录 前言 一. 计算机网络背景 1.1 发展历程 1.1.1 独立模式 1.1.2 网络互联 1.1.3 局域网LAN 1.1.4 广域网WAN 1.2 总结 二. "协议" 2.1 什么是协议 2.2 网络协议的理解 2.3 网络协议的分层结构 三. OSI七层模型&#xff08;理论标准&#xff09; …

React学习笔记10

一、Redux与React-提交action传参 需求&#xff1a;组件中有两个按钮&#xff0c;点击add to 10和add to 20将count的值修改到对应的数字&#xff0c;目标count值是在组件中传递过去的&#xff0c;需要提交action的时候传递参数 实现思路&#xff1a;在reducers的同步修改方法中…

Docker概念与架构

文章目录 概念docker与虚拟机的差异docker的作用docker容器虚拟化 与 传统虚拟机比较 Docker 架构 概念 Docker 是一个开源的应用容器引擎。诞生于 2013 年初&#xff0c;基于 Go 语言实现。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xf…

HarmonyOS Next~应用开发入门:从架构认知到HelloWorld实战

HarmonyOS应用开发入门&#xff1a;从架构认知到HelloWorld实战 一、HarmonyOS架构解析 1.1 分布式能力三要素 &#xff08;1&#xff09;软总线&#xff08;SoftBus&#xff09; HarmonyOS的核心神经中枢&#xff0c;通过统一的分布式通信协议实现设备间的自动发现和组网。…

相控阵扫盲

下图展示天线增益 在仰角为0度的情况下随着方位角的变化而变化。需要注意到的是在天线视轴方向上的高增益主瓣上还有几个低增益旁瓣 阵列因子乘以新的阵元方向图会形成指向性更强的波速

[QT]开发全解析:从概念到实战

文章目录 Qt 框架入门与应用开发指南一、Qt 框架概述1.1 什么是 Qt1.2 Qt 的发展史1.3 Qt 支持的平台1.4 Qt 版本1.5 Qt 的优点1.6 Qt 的应用场景1.7 Qt 的成功案例 二、Qt 的开发工具概述Qt CreatorVisual StudioEclipse 三、认识 Qt Creator3.1 Qt Creator 概览3.2 使用 Qt C…