【C语言】猜数字小游戏

😂个人主页: 起名字真南
🤣个人专栏:【数据结构初阶】 【C语言】 【C++】

请添加图片描述

目录

  • 1 随机数的生成
    • 1.1 rand
    • 1.2 srand
    • 1.3 time
    • 1.4 设置随机数范围
  • 2 猜数字游戏实现

前言:我们学习完前面的循环以后可以写一个猜数字小游戏

1 随机数的生成

想要完成猜数字游戏,首先要产生随机数,那么怎么生成随机数呢?

1.1 rand

C语言提供了一个rand函数,这是可以随机生成随机数的,函数原型如下

int rand(void

rand函数会生成一个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是大部分编译器是32767.
rand函数的使用需要包含<stdlib.h>的头文件

#include<stdio.h>
#include<stdlib.h>int main()
{printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());return 0;
}

结果展示:
在这里插入图片描述
再次调用:
在这里插入图片描述
可以看到调用两次的结果都是一样的,这里就是我们提到的伪随机数,虽然这几个数字都是随机的但是每次运行的结果却都是一样的,如果我们深入了解就会发现rand函数生成随机数是依靠一个种子作为基准值来计算并生成随机数,而之所以运行生成的随机数都是一样的是因为默认情况下默认种子是1。

1.2 srand

C语言中又提供了一个函数叫做srand,用来初始化随机数的生成器,代码如下

void srand (unsigned int seed);

程序中在调用rand函数之前要先调用srand函数,通过srand函数的参数来改变rand函数种子的大小,只要种子在变化那么随机数就会发生变化
代码展示:

#include<stdio.h>
#include<stdlib.h>int main()
{printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());srand(2);printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());return 0;
}

结果展示:
在这里插入图片描述
可以看到将种子改为2就会生成另一组新的伪随机数。但是如果我们一直需要不同的随机数就需要一直改变种子的值,有没有什么办法呢?

1.3 time

在程序中我们一般使用程序运行的时间在作为种子,因为时间一直都在发生变化,在C语言中有一个函数叫做time函数,就可以获得这个时间,time函数原型如下

time_t time(time_t* timer);

time函数会返回当前的日历时间,其实返回的是1970年1月1日0时0分0秒到现在程序运行时间的差值,单位是秒,返回类型是time_t(实质上就是32位或64位的整形类型),time函数的参数timer如果是非NULL指针的话,函数也会将这个返回的差值放入到timer指向的内存中。
如果timer是NULL那么将只返回当前程序运行的时间差,也被叫做“时间戳”,time函数使用时需要包含头文件time.h

#include<stdio.h>
#include<stdlib.h>
#include<time.h>int main()
{srand((unsigned)time(NULL));printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());return 0;
}

第一次运行结果:
在这里插入图片描述
第二次运行结果:
在这里插入图片描述

1.4 设置随机数范围

#include<stdio.h>
#include<stdlib.h>
#include<time.h>int main()
{srand((unsigned)time(NULL));printf("%d", rand() % 100);  //余数的范围是 0~99printf("%d", rand() % 100 + 1);  //余数的范围是 1~100printf("%d", 100 + rand() % 101);  //余数的范围是 100~200return 0;
}

2 猜数字游戏实现

代码实现:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>void menu()
{//system("cls");printf("***********************\n");printf("******  1. play  ******\n");printf("******  0. exit  ******\n");printf("***********************\n");
}
void game()
{//生成0~100的随机数srand((unsigned int)time(NULL));int x = rand() % 101;int input = 0;int count = 5;while (count){printf("你还有%d次机会\n", count);printf("请输入数字大小>");scanf("%d", &input);if (input < x){printf("猜小了\n");count--;}else if (input > x){printf("猜大了\n");count--;}else{printf("猜对了!!!\n");break;}if (count == 0){printf("游戏结束数字是%d\n", x);}}}
int main()
{int choose = 0;do{menu();printf("请输入>>");scanf("%d", &choose);switch (choose){case 1:game();break;case 0:printf("游戏结束");break;defult:printf("选择错误,请重新选择0/1");break;}} while (choose);return 0;
}

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

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

相关文章

Java 中的 LinkedHashMap

让我们从一个简单的 Java 代码片段开始&#xff0c;演示如何在 Java 中创建和使用 LinkedHashMap。 import java.util.LinkedHashMap; public class LinkedHashMapCreation { public static void main(String[] args) { // Create a LinkedHashMap of S…

django的路由分发

前言&#xff1a; 在前面我们已经学习了基础的Django了&#xff0c;今天我们将继续学习&#xff0c;我们今天学习的是路由分发&#xff1a; 路由分发是Web框架中的一个核心概念&#xff0c;它指的是将不同的URL请求映射到对应的处理函数&#xff08;视图&#xff09;的过程。…

Ambari搭建Hadoop集群 — — 问题总结

Ambari搭建Hadoop集群 — — 问题总结 一、部署教程&#xff1a; 参考链接&#xff1a;基于Ambari搭建大数据分析平台-CSDN博客 二、问题总结&#xff1a; 1. VMwear Workstation 查看网关 2. 资源分配 参考&#xff1a; 硬盘&#xff1a;master&#xff08;29 GB&#xff…

手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]

有时候&#xff0c;您会被锁定在自己的 Android 设备之外&#xff0c;而且似乎不可能重新进入。 一个例子就是你买了一部二手手机&#xff0c;后来发现无法使用。另一种情况是你忘记了屏幕锁定密码和用于验证密码的 Google 帐户凭据。这种情况很少见&#xff0c;但确实会发生&…

15分钟学 Python 第35天 :Python 爬虫入门(一)

Day 35 : Python 爬虫简介 1.1 什么是爬虫&#xff1f; 网页爬虫&#xff08;Web Crawler&#xff09;是自动访问互联网并提取所需信息的程序。爬虫的主要功能是模拟用户通过浏览器访问网页的操作&#xff0c;从而实现对网页内容的批量访问与信息提取。它们广泛应用于数据收集…

Unity各个操作功能+基本游戏物体创建与编辑+Unity场景概念及文件导入导出

各个操作功能 部分功能 几种操作游戏物体的方式&#xff1a; Center:有游戏物体父子关系的时候&#xff0c;中心点位置 Global/Local:世界坐标系方向/自身坐标系方向 &#xff1a;调试/暂停/下一帧 快捷键 1.Alt鼠标左键&#xff1a;可以实现巡游角度查看场景 2.鼠标滚轮…

MySQL从0到1基础语法笔记(上)

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;Java Web关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 MySQL笔记&#xff1a; 一、注释&#xff1a; 二、SQL四大类&#xff…

在线测径仪都有哪些别称?

在线测径仪广泛运用于电线电缆、输送管、金属丝、PVC管、医疗器械、塑料、金属拉丝、橡胶、高线、圆钢、钢筋、螺纹钢、钢管、轧钢等生产行业&#xff0c;主要用于这些行业生产出的产品的直径、椭圆度&#xff08;双轴及以上测头&#xff09;等的检测。 测径仪为在线检测设备&a…

智能指针详解

目录 智能指针原理 RAII Unique_ptr Shared_ptr Shared_ptr缺点 定制删除器 在C库里提供的智能指针有跟多&#xff0c;如下图所示&#xff0c;使用时需要包含头文件<memory>。下面将详细介绍这些智能指针的底层原理和缺点&#xff0c;还有每个智能指针的应用场景。…

嘉立创EDA中PCB快速画螺旋触摸焊盘或其他不规则形状

常见触摸焊盘 首先需要有CAD软件 使用CAD的原因&#xff1a;能快速编辑线条和不规则形状&#xff0c;在嘉立创EDA中不能快速完成。 画图整体步骤&#xff1a; 1&#xff0c;先在CAD中画出螺旋线&#xff08;HELIX&#xff09; 这里需要设置底部半径&#xff0c;圈数和顶部半…

【MYSQL】mysql约束---自增长约束(auto_increment)

1、概念 在Mysql中&#xff0c;当主键为自增长后&#xff0c;这个主键的值就不再需要用户输入数据了&#xff0c;而由数据库系统根据定义自动赋值。每增加一条记录&#xff0c;主键会自动以相同的步长进行增长。 注意&#xff1a;自增长约束通常与主键放在一起使用。 通过给…

网盘能否作为FTP替代产品?企业该如何进行FTP国产化替代?

近年来&#xff0c;信创的概念引入和高效实践落地让更多的行业企业自发性地进行国产化替代&#xff0c;目前信创国产化替代还多发生在操作系统和应用层面&#xff0c;软件工具等目前还在下一阶段规划&#xff0c;但很多企业未雨绸缪&#xff0c;已经在做调研和尝试。 FTP作为世…

codetop标签双指针题目大全解析(三),双指针刷穿地心!!!!!

复习比学习更重要&#xff0c;更需要投入时间&#xff0c;更需要花费精力 1.字符串的排列2.找出字符串中第一个匹配的下标3.最大连续1的个数II4.数组中的山脉5.移除元素6.两个数组的交集II7.有序数组的平方8.删除有序数组中的重复项II9.寻找重复数10.水果成篮 1.字符串的排列 …

【黑马点评】使用RabbitMQ实现消息队列——3.使用Jmeter压力测试,导入批量token,测试异步秒杀下单

3 批量获取用户token&#xff0c;使用jmeter压力测试 3 批量获取用户token&#xff0c;使用jmeter压力测试3.1 需求3.2 实现3.2.1 环境配置3.2.2 修改登录接口UserController和实现类3.2.3 测试类 3.3 使用jmeter进行测试3.4 测试结果3.5 将用户登录逻辑修改回去 3 批量获取用户…

前端练习小项目 —— 让图片变得更 “色”

前言&#xff1a;相信读者在学习完了HTML、CSS和JavaScript之后已经想要迫不及待的想找一个小型的项目来练练手&#xff0c;那么这篇文章就正好能满足你的 “需求”。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 在开始学习…

基于springboot+小程序的智慧物业平台管理系统(物业1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 智慧物业平台管理系统按照操作主体分为管理员和用户。 1、管理员的功能包括报修管理、投诉管理管理、车位管理、车位订单管理、字典管理、房屋管理、公告管理、缴费管理、维修指派管理、…

Mysql(六) --- 聚合函数,分组和联合查询

文章目录 前言1.聚合函数1.1.常用的函数1.2.COUNT()1.3.SUM()1.4.AVG()1.5.MIN()、MAX() 2.GROUP BY 分组查询2.1.语法2.2.示例2.3.HAVING 子句 3.联合查询3.1.为什么要进行联合查询3.2.那么是如何进行联合查询的3.3.示例&#xff1a;一个完整的联合查询的过程3.4.内连接3.5.外…

C++(异常)

目录 C语言传统的处理错误的方式 传统的错误处理机制 C异常概念 异常的使用 异常的抛出和捕获 异常的抛出和匹配原则 在函数调用链中异常栈展开匹配原则 异常的重新抛出 异常安全 异常规范 自定义异常体系 C标准库的异常体系 异常的优缺点 C异常的优点 C异常的缺…

「自动化测试」Selenium 的使用

使用 Selenium 需要先导入相关依赖 <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.0.0</version> </dependency><dependency><groupId>io.gith…