【C语言】猜数字小游戏(并讲解随机数相关知识)

前言

一、游戏菜单

二、游戏逻辑

1.用户选择

2.开始游戏

2.1 生成1~100的随机数

总结


前言

本文讲解使用C语言写一个猜数字小游戏(1~100),涉及到的语法为:循环、分支、随机数、函数


一、游戏菜单

一个游戏的最开始,往往是一个菜单,我们只需利用print函数,打印出一个简易菜单即可。

//游戏菜单
void menu()
{printf("******欢迎进入猜数字游戏******\n");printf("*********1、开始*************\n");printf("*********0、退出*************\n");printf("****************************\n");
}

二、游戏逻辑

1.用户选择

打印完菜单后,用户开始选择,在游戏逻辑中,无论是否开始游戏,都会运行一遍菜单,因此在这里使用do...while循环是最合适的。

int input = 0;
do
{menu(); //打印游戏菜单printf("请选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("无该选项\n");break;}
} while (input);

2.开始游戏

调用game()函数,在该函数可以分为两步:1、生成1~100的随机数;2、开始猜数字

2.1 生成1~100的随机数

生成随机数函数:rand();C语言规定,使用该函数需先定义一个随机数生成器:srand()

在MSDN上查找rand() 与 srand() 函数,看看它们的结构:

可以看到Remarks: The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand。意思为rand函数返回一个介于0到rand MAX范围内的伪随机整数。在调用rand之前,使用srand函数为伪随机数生成器提供种子。

rand()函数会生成0~rand_MAX之间的数,我们可以看看rand_MAX是什么:

RAND_MAX为32767的数,因此rand()会生成0~32767之间的数,我们再看看srand()函数:

该函数的参数,需要传递一个unsigned int 种子,这个种子需要是一个变化的值。我们来看看官方给的例子:

srand( (unsigned)time( NULL ) );

time()函数需要传递的参数为指针,返回值为一个time_t的指针,该指针为时间戳,下面我们看看时间戳的概念:

时间戳:当前时间点和计算机起始时间的一个差值,然后转换成秒

当然,使用这三个库函数也要包含对应的头文件:

stdlib.h --> rand、srand

time.h --> time

解释清楚后,我们该如何编写代码呢?

//游戏逻辑
void game()
{printf("游戏开始\n");//1、生成随机数//rand()函数(包含stdlib.h头文件) --> 生成随机数 --> 使用此函数需要先定义一个随机数生成器// srand(unsigned int 变化的数)int number = rand() % 100 + 1; //rand() % 某数 --> 0~某数-1 -->再进行+1 --> 1~某数int Num = 0;//2、猜数字while (1){printf("请输入:>");scanf("%d", &Num);if (Num > number){printf("猜大了!\n");}else if (Num < number){printf("猜小了!\n");}else{printf("恭喜你,猜对了!\n");break;}}
}

srand()函数生成一次就够了。当需要多次rand()时,不需要每一次都进行srand。如果每次rand都srand,则会导致生成的随机数不够随机,因此将srand定义在调用循环之前。

还有一点需要注意,关于生成1~100范围的随机数,对rand() % 最大范围 操作,可以生成0~最大范围-1 之间的数,再进行+1 则生成1~最大范围 的数。当需要自定义生成某一个范围之间的数时,可以这样做。

rand() % 100 +1

总结

好了,这就是用c语言简易版的猜数字小游戏,下面是完整代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>//游戏菜单
void menu()
{printf("******欢迎进入猜数字游戏******\n");printf("*********1、开始*************\n");printf("*********0、退出*************\n");printf("****************************\n");
}
//游戏逻辑
void game()
{printf("游戏开始\n");//1、生成随机数//rand()函数(包含stdlib.h头文件) --> 生成随机数 --> 使用此函数需要先定义一个随机数生成器// srand(unsigned int 变化的数)int number = rand() % 100 + 1; //rand() % 某数 --> 0~某数-1 -->再进行+1 --> 1~某数int Num = 0;//2、猜数字while (1){printf("请输入:>");scanf("%d", &Num);if (Num > number){printf("猜大了!\n");}else if (Num < number){printf("猜小了!\n");}else{printf("恭喜你,猜对了!\n");break;}}
}
//猜数字游戏
//范围1~100
int main()
{int input = 0;// srand往往只需调用一次,在一个程序调用多次会让随机数不够随机//包含stdlib.h头文件srand((unsigned int)time(NULL)); //time()-->包含time.h头文件函数会返回时间戳,是变化的do{menu(); //打印游戏菜单printf("请选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("无该选项\n");break;}} while (input);return 0;
}

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

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

相关文章

Jetpack Bluetooth——更优雅地使用蓝牙

Jetpack Bluetooth——更优雅地使用蓝牙 蓝牙是安卓开发中非常常用的操作&#xff0c;但安卓经过这么多年的迭代&#xff0c;蓝牙的相关接口都经过了很多修改需要适配&#xff0c;还有的接口需要实现一堆函数。。。整套操作虽说不算复杂&#xff0c;但难免感觉不太舒服。 之前…

专题【双指针】【学习题】刷题日记

题目列表 11. 盛最多水的容器 42. 接雨水 15. 三数之和 16. 最接近的三数之和 18. 四数之和 26. 删除有序数组中的重复项 27. 移除元素 75. 颜色分类 167. 两数之和 II - 输入有序数组 2024.04.06 11. 盛最多水的容器 题目 给定一个长度为 n 的整数数组 height 。有 n 条垂…

PHP实现网站微信扫码关注公众号后自动注册登陆实现方法及代码【关注收藏】

在网站注册登陆这环节&#xff0c;增加微信扫码注册登陆&#xff0c;普通的方法需要开通微信开发者平台&#xff0c;生成二维码扫码后才能获取用户的uinonid或openid&#xff0c;实现注册登陆&#xff0c;但这样比较麻烦还要企业认证交费开发者平台&#xff0c;而且没有和公众号…

【SQL】1890. 2020年最后一次登录(简单写法;窗口函数写法)

前述 sql 中 between 的边界问题 ---- between 边界&#xff1a;闭区间&#xff0c;not between 边界&#xff1a;开区间 在 sql 中&#xff0c; between 边界&#xff1a;闭区间not between 边界&#xff1a;开区间 题目描述 leetcode题目&#xff1a;1890. 2020年最后一…

【leetcode面试经典150题】16.接雨水(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

aardio教程五) 写Python风格的aardio代码(字符串篇)

前言 熟悉一个新的语言最麻烦的就是需要了解一些库的使用&#xff0c;特别是基础库的使用。 所以我想给aardio封装一个Python风格的库&#xff0c;Python里的基础库是什么方法名&#xff0c;aardio里也封装同样的方法名。 这样就不需要单独去了解aardio里一些方法的使用细节…

Lanelets_ 高效的自动驾驶地图表达方式

Lanelets: 高效的自动驾驶地图表达方式 附赠自动驾驶学习资料和量产经验&#xff1a;链接 LaneLets是自动驾驶领域高精度地图的一种高效表达方式&#xff0c;它以彼此相互连接的LaneLets来描述自动驾驶可行驶区域&#xff0c;不仅可以表达车道几何&#xff0c;也可以完整表述车…

AIGC实战——ProGAN(Progressive Growing Generative Adversarial Network)

AIGC实战——ProGAN 0. 前言1. ProGAN2. 渐进式训练3. 其他技术3.1 小批标准差3.2 均等学习率3.3 逐像素归一化 4. 图像生成小结系列链接 0. 前言 我们已经学习了使用生成对抗网络 (Generative Adversarial Network, GAN) 解决各种图像生成任务。GAN 的模型架构和训练过程具有…

真实的招生办对话邮件及美国高校官网更新的反 AI 政策

这两年 ChatGPT 的热度水涨船高&#xff0c;其编写功能强大&#xff0c;且具备强大的信息整合效果&#xff0c;所以呈现的内容在一定程度上具备可读性。 那么&#xff0c;美国留学文书可以用 ChatGPT 写吗&#xff1f;使用是否有风险&#xff1f;外网博主 Kushi Uppu 在这个申…

基于卷积神经网络的天气识别系统(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

功能演示&#xff1a; 天气识别系统&#xff0c;vgg16&#xff0c;mobilenet卷积神经网络&#xff08;pytorch框架&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的天气识别系统是在pytorch框架下实现的&#xff0c;系统中有两个模型可选…

vue+elementUI实现表格组件的封装

效果图&#xff1a; 在父组件使用表格组件 <table-listref"table":stripe"true":loading"loading":set-table-h"slotProps.setMainCardBodyH":table-data"tableData":columns"columns.tableList || []":ra…

基于Springboot的Java学习平台

采用技术 基于Springbootjava学习平台的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 系统功能模块 后台管理 用户注册 课程信息 作业信息 资料信息…

电工技术学习笔记——正弦交流电路

一、正弦交流电路 1. 正弦量的向量表示法 向量表示方法&#xff1a;正弦交流电路中&#xff0c;相量表示法是一种常用的方法&#xff0c;用于描述电压、电流及其相位关系。相量表示法将正弦交流信号表示为复数&#xff0c;通过复数的运算来描述电路中各种参数的相互关系 …

java中的正则表达式和异常

正则表达式&#xff1a; 作用一&#xff1a;用来校验数据格式是否合法 作用二&#xff1a;在文本中查找满足要求的内容 不用正则表达式&#xff1a;检验QQ号是否合法&#xff0c;要求全部是数字&#xff0c;长度在6-20&#xff0c;不能以0开头 public class test {public stat…

【Linux实践室】Linux高级用户管理实战指南:创建与删除用户组操作详解

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux创建用户组命令2.1.1 知识点讲解2.1.2…

亲手开发全国海域潮汐表查询微信小程序详情教程及代码

最近在做一个全国海域潮汐表查询&#xff0c;可以为赶海钓鱼爱好者提供涨潮退潮时间表及潮高信息。 下面教大家怎么做一个这样的小程序。 主要功能&#xff0c;根据IP定位地理位置&#xff0c;自动查询出省份或城市的港口&#xff0c;进入后预测7天内港口潮汐表查询。 步骤&…

全坚固笔记本丨工业笔记本丨三防笔记本相较于普通笔记本有哪些优势?

三防笔记本和普通笔记本在设计和性能方面存在显著差异&#xff0c;三防笔记本相较于普通笔记本具备以下优势&#xff1a; 三防笔记本通常采用耐磨、耐摔的材料&#xff0c;并具有坚固的外壳设计&#xff0c;能够承受恶劣环境和意外碰撞&#xff0c;有效保护内部组件不受损坏。相…

【Linux】进程初步理解

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 冯诺依曼体系结构1.1 认识冯诺依曼体系结构1.2 存储金字塔 2. 操作系统2.1 概念2.2 结构2.3 操作系统的管理 3. 进程3.1 进程描述3.2 Linux下的PCB 4. task_struct本身内部属性4.1 启动4.2 进程的创建方式4.2.1 父…

C/C++预处理过程

目录 前言&#xff1a; 1. 预定义符号 2. #define定义常量 3. #define定义宏 4. 带有副作用的宏参数 5. 宏替换的规则 6. 宏和函数的对比 7. #和## 8. 命名约定 9. #undef 10. 命令行定义 11. 条件编译 12. 头文件的包含 13. 其他预处理指令 总结&#x…

谷歌在生成式人工智能领域的挑战与机遇:内部纷争与市场压力下的战略调整

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…