[c语言]猜数字游戏

 一男子学了分支与循环后,觉得的不够得劲,于是半夜打开浏览器查询了相关的学习资料,发现了猜数字这款游戏,然后他被这游戏深深的吸引毅然决然完成了这道题,玩了几把后并表示这比金铲铲、原神等游戏都要好玩。

猜数字:编程先由计算机“想”一个1到100之间的整数请人猜,如果猜对了,则结束游戏,并在屏幕上输出猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则结束游戏。
提示:
(1)程序编制要点:
①由计算机生成一个随机数;
②用do…while语句,for语句或者while语句实现循环;
③if语句的嵌套。
(2)该题目涉及的知识点和难点:
①使用srand,rand,time函数;
②使用随机函数得到一个1到100的随机数;
③循环语句的输入与使用;
④if语句的嵌套使用。 

一.随机数的生成

猜数字的前提是需要一个随机数,rand这个函数刚好可以帮我们生成一个随机数,但这个不是一个正真的随机数,是伪随机的,它是通过算法实现的。

int rand(void);

rand函数会返回一个随机数,这个随机数的范围是在0~RAND_MAX之间,RAND_MAX的大小是依赖编译器上实现的,但是大部分的编译器上是32767。

rand函数对一个叫“种子”的基准值进行运算生成的随机数,rand函数生成随机值的默认种子是1。

而当我们调用rand函数的时候,调用srand函数就可以改变它的基准值。

例如将rand()的基准值改为2就可以这样写:

srand(2);
printf(“%d”,rand());

要想使得rand()发生改变只要“种子”发生变化就可以了。而程序的运行时间是变化的,正好可以作为我们的“种子”,在c语言中time函数就可以返回一个时间戳(说白了就是,表示某一刻的时间)。又因为srand需要unsigned int的值所以我们需要将time(NULL)强制类转换。

#include<time.h>
srand((unsigned int)time(NULL))
printf("%d",rand());

二.游戏的开始与结束 、游戏菜单的生成

(1)思路:

我们可以设置一个命令来控制游戏的开始与结束,然后制作一个菜单告诉玩家怎么去操作游戏。

(2)具体操作:

首先写一个循环然后通过输入1(或0)去控制循环的开始(或结束),其中循环一开始就得生成一个菜单,所以我们可以选择用do...while循环来实现这些功能。因为输入1进入游戏,输入0结束游戏,按其它键我们就要告诉玩家“输入错误请重新输入”,这时候我们在do.while循环内部调用switch语句来可以实现这些功能。

三.游戏的执行

(1)思路:

当我们按1开始游戏时就需要执行游戏了,首先由程序生成一个随机数,然后由玩家去猜测,为了使玩家可以更精准的猜测答案我们可以用玩家猜测的数字与随机数相比较,让程序去提醒玩家猜大了(或猜小了)。

(2)具体操作:

如果玩家没有猜对就要继续进行游戏,猜对了就要就结束游戏,所以我们要先写一个循环函数

当没有猜对就继续循环猜测,猜对了我们就用break跳出循环,while循环就可以实现这一功能,然后我们在while循环中用if语句去提醒玩家猜数字的情况。

四.游戏优化

为了让游戏更具有挑战性,我们可以设定猜测的次数,当猜够某一次数时我们将会认定玩家猜测挑战失败,然后结束这次游戏。这时我们可以用 i -- 的形式加入循环中,当i减为零时将会跳出循环,为了让玩家知道自己还剩几次机会我们还可以在while循环中打印i的值。前面对rand()函数的讲解我们已经rand()的取值范围是0~32767,为了使我们生成的随机数是1~100的值我们可以将rand()% 100 + 1就可以了。

完整代码 

#include<stdio.h>
#include<time.h>
void game()
{
	srand((unsigned int)time(NULL));
	int i = 0;
	int ret = rand() % 100 + 1;
	int count = 10;
	while (count)
	{
		printf("你还有 %d 次机会\n",count);
		scanf("%d", &i);
		if (i == ret)
		{
			printf("恭喜你,猜对了!!!\n");
			break;
		}
		else if (i <= ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("猜大了\n");
		}
		count--;
		if (count == 0)
		{
			printf("很遗憾你猜错了");
		}
	}
	
}
void menu()
{
	printf("***********************\n");
	printf("**** 1.开始游戏  ****\n");
	printf("**** 0.结束游戏  ****\n");
	printf("***********************\n");

}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择");
		}
	} while (input);  
	return 0;
}

效果图: 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从Demo理解Thrift Thrift和Dubbo的区别

文章目录 安装demo尝试Thrift协议栈Thrift 与 Dubbo 的区别 字节里的RPC框架都是用的Thrift&#xff0c;我猜这主要原因有2: Thrift是Facebook开源的项目&#xff0c;平台中立Thrift支持跨语言调用&#xff0c;这非常适合字节Java、Go语言都存在的环境&#xff0c;语言中立 但…

苹果电脑清理内存 怎么清理删不掉的软件

苹果电脑是很多人的首选&#xff0c;因为它有着优秀的性能和设计。但是&#xff0c;随着时间的推移&#xff0c;你可能会发现你的苹果电脑变得越来越慢&#xff0c;或者出现一些奇怪的问题。这可能是因为你的电脑内存不足&#xff0c;或者有一些删不掉的软件占用了你的空间和资…

非常非常实用!不能错过,独家原创,9种很少人听过,但却实用的混沌映射!!!以鲸鱼混沌映射为例,使用简便

很多人在改进的时候&#xff0c;想着增加混沌映射&#xff0c;增加初始种群的多样性&#xff0c;可是&#xff0c;大多数论文中常见的映射&#xff0c;都被别人使用了&#xff0c;或者不知道被别人有没有使用&#xff0c; 本文介绍9种很少人知道&#xff0c;但非常实用混沌映射…

完成源示例

本主题演示如何创作和使用自己的完成源类&#xff0c;类似于 .NET 的 TaskCompletionSource。 completion_source 示例的源代码 下面的列表中的代码作为示例提供。 其目的是说明如何编写自己的版本。 例如&#xff0c;支持取消和错误传播不在此示例的范围内。 #include <w…

isis实验

根据要求制作大概&#xff1a; 使用isis配置路由器&#xff1a; 配置好物理接口地址后配置isis 为实现r1访问r5的环回走r6,需要在r6上制作路由泄露&#xff1a; 在r5上产生r1的路由明细&#xff1a; 全网可达&#xff1a;

竞赛练一练 第28期:GESP和电子学会相关题目练习

CIE一级2023.03_足球射门练习 1. 准备工作 &#xff08;1&#xff09;选择背景Soccer&#xff0c;Soccer 2&#xff1b; &#xff08;2&#xff09;保留默认小猫角色&#xff0c;添加角色&#xff1a;Soccer Ball&#xff1b; &#xff08;3&#xff09;给Soccer Ball添加声…

【C++】“Hello World!“

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Visual Studio 2022 ​ 2024.1.14 纪念一下自己编写的第一个C程序 #include<iostream>int main() {/*我的第一个C程序*/std::cout << "Hello world!:>" <<std::endl;ret…

vscode打开c_cpp_properties.json文件的一种方式

步骤一 点击win32 步骤二 点击json 自动生成了

小程序开发公司哪家好?哪家最好?

小程序具有轻量、聚焦、快捷等特点&#xff0c;这有别于 web 端类和移动端 app 类产品。 小程序的第一印象非常关键&#xff0c;因此对于首页设计&#xff0c;关键要加强注意力表达&#xff0c;给予用户尽可能直观的信息感知&#xff0c;加快建立其对于业务价值的兴趣&#xf…

C++ Webserver从零开始:基础知识(三)——Linux服务器程序框架

目录 前言 一.服务器编程基础框架 C/S模型 主要框架 二.I/O模型 阻塞I/O 非阻塞I/O 异步I/O 三.两种高效的事件处理模式 Reactor Proactor 四.模拟Proactor模式 五.半同步/半异步的并发模式 六.有限状态机 七.其他提高服务器性能的方法 池 数据复制 上下文切换…

前端性能优化之数据存取,存储以及缓存技术

无论是哪种计算机语言&#xff0c;说到底它们都是对数据的存取与处理。若能在处理数据前&#xff0c;更快地读取数据&#xff0c;那么必然会对程序执行性能产生积极的作用。 一般而言&#xff0c;js的数据存取有4种方式。 直接字面量:字面量不存储在特定位置也不需要索引&…

WEB前端人机导论实验-实训3超链接与多媒体文件应用

1.项目1 设计简易灯箱画廊 A.题目要求&#xff1a; 编程实现简易灯箱画廊&#xff0c;鼠标单击任一个图像超链接&#xff0c;在底部浮动框架中显示大图像&#xff0c;效果如下的页面。 B.思路: &#xff08;1&#xff09;CSS样式&#xff1a; a.在样式中对body元素进行居中…

力扣-盛最多水的容器

11.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜…

性能篇:深入源码解析和性能测试arraylist和LinkedList差异!

嗨&#xff0c;大家好&#xff0c;我是小米&#xff01;今天我们要谈论的是 Java 中两个常用的集合类&#xff1a;ArrayList 和 LinkedList。大家都知道&#xff0c;这两者在新增和删除元素的操作上有一些差异&#xff0c;那么它们究竟在性能上有何表现呢&#xff1f;我们通过深…

Linux系统SSH远程管理服务概述

目录 一.SSH协议 1.定义 2.优点 &#xff08;1&#xff09;加密 &#xff08;2&#xff09;压缩 3.SSH的客户端与服务端 &#xff08;1&#xff09;客户端 &#xff08;2&#xff09;服务端 4.原理 5.实验&#xff1a;使用ssh远程登录 二.OpenSSH服务器 1.概念 2.…

自动执行 Active Directory 清理

Active Directory &#xff08;AD&#xff09; 可帮助 IT 管理员分层存储组织的资源&#xff0c;包括用户、组以及计算机和打印机等设备&#xff0c;这有助于管理员集中创建基于帐户和组的规则&#xff0c;并通过创建不合规的自动日志来强制执行和确保合规性。 不时清理AD是保…

详解SpringCloud微服务技术栈:认识微服务、服务拆分与远程调用

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;首期文章 &#x1f4da;订阅专栏&#xff1a;微服务技术全家桶 希望文章对你们有所帮助 在此之前&#xff0c;耗时半个月&#x…

哈希表的实现(2):拉链法实现哈希表

一&#xff0c;拉链法 在使用线性探测法实现哈希表时&#xff0c;会发生哈希冲突。这个时候就得向后找位置给新插入的值。这个过程无疑会对哈希表的效率有很大的影响。那我们能不能通过另一种方式来实现哈希表&#xff0c;让哈希表不会发生哈希冲突呢&#xff1f;答案当然是可以…

第二十八周:文献阅读笔记(弱监督学习)+ pytorch学习

第二十八周&#xff1a;文献阅读笔记&#xff08;弱监督学习&#xff09; 摘要Abstract1. 弱监督学习1.1. 文献摘要1.2. 引言1.3. 不完全监督1.3.1. 主动学习与半监督学习1.3.2. 通过人工干预1.3.3. 无需人工干预 1.4. 不确切的监督1.5. 不准确的监督1.6. 弱监督学习的创新点 2…

Vue-14、Vue绑定style样式

1、对象写法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>绑定css样式</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/v…