【C语言初阶(6)】猜数字游戏

news2024/11/16 23:58:01

文章目录

  • 1. 游戏描述
  • 2. 代码结构
    • 2.1 菜单函数
    • 2.2 游戏函数
    • 2.3 主体函数
  • 3. 代码实现

1. 游戏描述

  1. 电脑自动生成一个1-100以内的数字。
  2. 我们输入一个我们猜的数字。
  3. 如果我们猜的数字比电脑随机生成的数字大,那么输出(猜大了),反之输出(猜小了)。
  4. 一直循环到猜到正确的数字为止。

2. 代码结构

2.1 菜单函数

void menu()
{
	printf("**********************\n");
	printf("******* 1.play *******\n");
	printf("******* 0.exit *******\n");
	printf("**********************\n");
}

2.2 游戏函数

void game()//猜数字游戏的整个逻辑
{
	//1. 电脑产生一个 1~100 的随机数 —> rand:生成随机数的函数
	//2. 猜数字

	int guess;
	int ret = rand() % 100 + 1;//生成一个 1~100 之间的随机数

	while (1)//必须要一直循环到猜对为止
	{
		printf("请输入你猜的数字:");
		scanf("%d", &guess);

		if (guess > ret)
		{
			printf("猜大了\n");
		}
		else if (guess < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("猜对了\n");
			break;
		}
	}
}

1. rand 函数

  • 生成一个 0 ~ RAND_MAX(0 ~ 32767) 之间的随机值,引用头文件 stdlib.h
  • 但是在调用 rand 函数之前需要先调用 srand 函数(设置随机数的生成器),否则随机生成的数字在每一次游戏的过程中都相同,这就没有意义了。

在这里插入图片描述

2. srand 函数

  • 设置一个随机的起点,引用头文件 stdlib.h
  • 设置一个随机起点,需要使用整型,但由于整型为固定值,随机值也相同,所以我们需要一个每时每刻都在发生变化的值,那就是:时间戳。
  • 时间戳:(是计算机当前时间 - 起始时间)所得到的差值就是时间戳,使用时间戳来设置随机数的生成起点,使用时间戳要用 time 函数来获取当前时间,srand 函数返回值为unsigned int 类型,那么要将 time 强制类型转换成 unsigned int 类型,time(NULL)为空指针。

3. time 函数

  • 获取当前系统时间,返回一个时间戳
  • 引用头文件 time.h

4. rand 函数为何要 % 100 + 1 ?

  • 因为游戏要我们生成的是 1 ~ 100 之间的数字,但是 rand 函数生成的又是 0~32767 之间的数,所以这时候才需要采用 rand () % 100 + 1的方法;
  • 就像任何数 % 2 的余数肯定在 0 ~ 1 之间,% 3 的余数在 0 ~ 2 之间一样,用 rand 函数生成的随机数 % 100 的结果肯定就在 0 ~ 99 之间;
  • 让 rand 函数生成的随机数 % 100 之后再 + 1,这样就能确保最终生成的随机数在 1~100 之间了。

2.3 主体函数

int main()
{
	int input;
	srand((unsigned)time(NULL));
	//这条语句必须要放在主函数,不然生成的随机数的值有可能相同。
	//不能在每次生成随机数的时候都生成一个起点,整个工程只用生成一次起点就够了。

	do //不管怎样都至少要执行一次循环体把菜单给弄出来。
	{
		menu();//进入选项菜单
		printf("请选择:");
		scanf("%d", &input);

		switch (input)
		{
		case 1:	
			printf("游戏开始!\n");game();break;
		case 0:	
			printf("退出游戏!\n");break;
		default:
			printf("选择错误\n");break;
		}
	}
	while (input);

	return 0;
}

3. 代码实现

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

void menu()
{
	printf("**********************\n");
	printf("******* 1.play *******\n");
	printf("******* 0.exit *******\n");
	printf("**********************\n");
}

void game()//猜数字游戏的整个逻辑
{
	//1. 电脑产生一个 1~100 的随机数 —> rand:生成随机数的函数
	//2. 猜数字

	int guess;
	int ret = rand() % 100 + 1;//生成一个 1~100 之间的随机数

	while (1)//必须要一直循环到猜对为止
	{
		printf("请输入你猜的数字:");
		scanf("%d", &guess);

		if (guess > ret)
		{
			printf("猜大了\n");
		}
		else if (guess < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("猜对了\n");
			break;
		}
	}
}

int main()
{
	int input;
	srand((unsigned)time(NULL));
	//这条语句必须要放在主函数,不然生成的随机数的值有可能相同。
	//不能在每次生成随机数的时候都生成一个起点,整个工程只用生成一次起点就够了。

	do //不管怎样都至少要执行一次循环体把菜单给弄出来。
	{
		menu();//进入选项菜单
		printf("请选择:");
		scanf("%d", &input);

		switch (input)
		{
		case 1:
			printf("游戏开始!\n"); game(); break;
		case 0:
			printf("退出游戏!\n"); break;
		default:
			printf("选择错误\n"); break;
		}
	} while (input);

	return 0;
}

在这里插入图片描述

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

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

相关文章

【MinIO异常】Storage reached its minimum free drive threshold 的解决方案

Storage reached its minimum free drive threshold 的解决方案 一、背景描述二、原因分析三、问题解决 一、背景描述 部署在Linux服务器上的MinIO服务器昨天使用的还正常&#xff0c;包含上传文件&#xff0c;下载文件&#xff0c;登录MinIO浏览器端&#xff0c;然而今天登录…

chatgpt赋能python:同一个python文件能同时运行多次吗?

同一个python文件能同时运行多次吗&#xff1f; Python作为一种高级编程语言&#xff0c;具有丰富的语法和功能。在编写Python程序时&#xff0c;我们常常需要考虑不同的需求。有时我们可能需要使用相同的python文件运行不同的程序&#xff0c;这时候很自然的问题就会出现&…

【机器学习】【期末复习】有关机器学习的简答题可供期末复习参考

本文为学校课程《机器学习》中老师给出的一些有关机器学习的简答题的详细解答&#xff0c;可供复习参考&#xff0c;基本答案全是正确的。 目录 什么是判别式模型和生成式模型&#xff0c;并且举例说明各自包含哪些典型的机器学习模型&#xff1f;L1 和 L2 的正则化的区别数据归…

Node.js 包管理器(Corepack)

目录 1、简介 2、启用Corepack 3、使用Node.js Corepack 4、配置包 5、升级全局版本 6、离线工作流 7、支持的包管理器 8、Node.js Corepack 拦截npm 9、Corepack 常用命令 1、简介 Corepack是一个实验性的工具&#xff0c;可以帮助管理包管理器的版本。它公开的二进制…

C#,数值计算——循环冗余校验和(CRC,Cyclic Redundancy Checksum)的计算方法与源代码

using System; namespace Legalsoft.Truffer { /// <summary> /// 循环冗余校验和 /// cyclic redundancy checksum /// </summary> public class Icrc { private uint jcrc { get; set; } private uint jfill { get; se…

【ISO26262】汽车功能安全第3部分:概念阶段

GB/T34590《道路车辆 功能安全》分为以下部分: 需要文档的朋友,可以和我联系! tommi_wei@163.com GB/T34590的本部分规定了车辆在概念阶段的要求: ———相关项定义; ———安全生命周期启动; ———危害分析和风险评估;及 ———功能安全概念。 危害事件分类 对于每一个…

多网口UDP发包无法收到回包排查与解决

最近几周几乎都是单休&#xff0c;加班很多&#xff0c;也遇到了很多未知的问题&#xff0c;杂事也多时间比较紧张&#xff0c;也没有多少空余来进行一些总结积累。这点让我很是怀念起几年前的日子&#xff0c;任务安排周期长&#xff0c;做技术纯粹又专心。 前几天遇到了一个…

chatgpt赋能python:如何将Python导入PyCharm

如何将Python导入PyCharm 介绍 PyCharm是一个非常流行的Python开发工具&#xff0c;它拥有许多强大的功能和插件&#xff0c;使开发人员能够更高效地编写Python代码。在本篇文章中&#xff0c;我们将介绍如何将Python导入PyCharm。 步骤 1. 安装PyCharm 首先&#xff0c;您…

jupyter-notebook:从记录点回复数据

使用jupyter进行记录数据分析思路时&#xff0c;有时候会莫名出现一些问题。比如这次遇到的保存并关闭之后&#xff0c;隔了一个晚上再次打开文件就成了空文件了&#xff0c;昨天写的分析都没有了&#xff0c;很头疼。解决方法&#xff1a;如果确定是保存了后&#xff0c;每一个…

32 linux 中物理页的 cow

前言 熟悉 linux 进程机制的人都知道 linux 中新建进程是以 fork exec 的形式创建的进程 fork 的时候复制了父进程的相关数据结构, 然后更新了待执行的 binary, 去执行 然后 父子进程之间 内存管理是 基于 copy on write 的 对于某块物理页, fork 之后内存设置为 只读…

JAVA3

文章目录 注释核心机制JVM的功能 优缺点优点缺点 注释 例子&#xff1a; 核心机制 JVM的功能 优缺点 优点 缺点

FreeRTOS入门(二)

目录 什么是RTOS? 嵌入式有哪些常见的RTOS&#xff1f; ✓ VxWorks&#xff08;开源收费&#xff09; ✓ UCOSII&III&#xff08;开源免费&#xff09; ✓ FreeRTOS&#xff08;开源免费&#xff09; ✓ RT_Thread(开源免费) ✓ AliOS(开源收费) ✓ LiteOS FreeR…

微信小程序canvas层级太高,与其他非原生组件层级冲突

官网已经提出新版本以支持同层渲染&#xff0c;但是实际项目中层级还是冲突的。 最后在文档中找到这样一段话&#xff0c;用真机打开&#xff0c;层级就正常了 。所以建议大家&#xff0c;多使用真机调试去测试&#xff01;&#xff01;&#xff01;&#xff01;

redis中常用的命令

1.关于对key操作的命令 keys *: 查看redis中所有的key exists key: 判断指定的key是否存在。存在返回1 否则返回0 del key: 删除指定的key expire key seconds: 为指定的key设置过期时间 2.关于库的命令 默认redis中存在16个库 select n: 选中库 n0~15 flushdb: 清空…

C++中的exec()函数

exec()函数在C中是一个进程控制函数&#xff0c;用于创建新进程执行其他程序或命令行指令。exec()函数可以替换当前进程的代码和数据&#xff0c;创建新的进程运行其他程序。exec()函数有多个版本&#xff0c;例如execl、execv、execle、execve等&#xff0c;根据不同的参数类型…

SAP 区分工单BOM物料是手工删除 还是 Teco后自动关闭需求

SAP 区分工单BOM物料是手工删除 还是 Teco后自动关闭需求 首先 resb表删除标识XLOEK 都为 ‘X’&#xff0c;无法通过其它字段直接区分 1先从前台界面区分 手工删除的&#xff0c;组件界面颜色正常&#xff0c;状态为-REL 删除 Teco自动关闭需求的&#xff0c;颜色不一样&am…

python中调用java函数

python中调用java函数 1. 将java项目打包成jar&#xff08;IDEA&#xff09;2. 在python中调用jar 1. 将java项目打包成jar&#xff08;IDEA&#xff09; 【CtrlShiftAltS】或者“File --> Project Structure --> Project Settings” 选择Artifacts选项卡&#xff0c;点…

[Android Studio]1.2计数器

所有要改的代码如下&#xff1a; MainActivity代码&#xff1a; package com.example.code02;import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; imp…

FPGA第一个程序入门

1、使用正点原子的达芬奇开发板进行第一个FPGA程序设计。 2、启动vivado 2019.2。 3、 新建工程。 File--Project--New&#xff0c;选择RTL Project&#xff08;寄存器传输级&#xff09;。 4、选择器件。 add sources点击next&#xff0c; add constraints点击next&#x…

npm install安装依赖总结

node下载地址&#xff1a;https://nodejs.org/en/download/releases 。可以看到node版本、npm版本、node_module版本 1.npm的全局安装路径 查看默认值&#xff1a; npm get prefix 默认是C:\Users\你的用户名\AppData\Roaming\npm 、 可以通过 npm config prefix 更改全局…