C语言-猜数游戏

C语言——猜数游戏 用C语言实现猜数游戏 假定一个1~100的数,请设计程序让用户能在有限步后猜到这个正确的数。 #include<stdio.h> #include<stdlib.h> #include<time.h> int main() { srand(time(0)); int number = rand() % 100 + 1; int count = 0; int a = 0; printf("我已经想好了一个1到100之间的数。"); do { pri 阅读详情

目录

1. 随机数的生成

1.1 rand函数

1.2 srand函数

1.3 time函数

1.4 设置随机数的范围

2. 猜数游戏的实现

参考代码1:

参考代码2:


掌握了前面博客学习的这些知识,我们就可以写一些稍微有趣的代码了,比如:
写⼀个猜数字游戏

游戏要求:

  1. 电脑自动生成1~100的随机数
  2. 在玩家猜数字过程中,根据玩家猜测的数据大小给出 大了或者小了 的提示反馈,直到猜对游戏结束。

1. 随机数的生成

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

1.1 rand函数

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

int rand(void);

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

rand函数是使用需要一个头文件是: stdlib.h

那我们就测试一下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());
	return 0;
}

运行两次结果如下:

57483ec8aac942e18921bd7402aacb3e.pnga257aaf80a82415ba13f598eb626d473.png

我们可以看到虽然一次运行中产生的5个数字是相对随机的,但是下⼀次运行程序生成的结果和上一次一模一样,这就说明有点问题。
如果再深入了解⼀下,我们就不难发现,其实rand函数生成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法生成的随机数。真正的随机数的是无法预测下一个值是多少的。

而rand函数是对一个叫 “种子” 的基准值进行运算生成的随机数。
之所以前面每次运行程序产生的随机数序列是⼀样的,那是因为rand函数生成随机数的默认种子是1。
如果要生成不同的随机数,就要让种子是变化的。

接下来我们介绍另一个函数:srand。

1.2 srand函数

C语言中有提供了一种函数是:srand,用来初始化随机数的生成器的,srand的原型如下:

viod srand(unsigned int seed);

程序中在调用 rand 函数之前先调用 srand 函数,通过 srand 函数的参数 seed 来设置rand函数生成随机数的时候的种子,只要种子在变化,每次生成的随机数序列也就变化起来了。
那也就是说给srand的种子是如果是随机的,rand就能生成随机数;在生成随机数的时候又需要⼀个随机数,这就矛盾了。

这时候就该用到了 time (时间)这个函数。

1.3 time函数

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

time_t time (time_t * timer);

time 函数会返回当前的日历时间,其实返回的是1970年1⽉1日0时0分0秒到现在程序运行时间之间的差值,单位是秒。返回的类型是time_t类型的,time_t 类型本质上其实就是32位或者64位的整型类型。

time函数的参数 timer 如果是非NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去。
如果 timer 是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。
time函数的时候需要包含头文件:time.h

//VS2022 上time_t类型的说明

#ifndef _CRT_NO_TIME_T
	#ifdef _USE_32BIT_TIME_T
		typedef __time32_t time_t;
	#else
		typedef __time64_t time_t;
	#endif
#endif


typedef long 		__time32_t;
typedef __int64 	__time64_t;

如果只是让time函数返回时间戳,我们就可以这样写:

time(NULL);  //调用time函数返回时间戳,这里没有接收返回值

那我们就可以让生成随机数的代码改写成:

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

int main()
{
//使用time函数的返回值设置种子
//因为srand的参数是unsigned int类型,我们将time函数的返回值强制类型转换
	srand((unsigned int)time(NULL));
		printf("%d\n", rand());
		printf("%d\n", rand());
		printf("%d\n", rand());
		printf("%d\n", rand());
		printf("%d\n", rand());
	return 0;
}

现在我们运行,看看生成的随机数是否还是伪随机数。

46ba6bba171c4fdbb8fd955e3462843c.png7b672397db84459a83436557066673b0.png

注意:

  1. 每次运行的结果不一定相同
  2. srand函数是不需要频繁调用的,一次运行的程序调用一次就够了。

1.4 设置随机数的范围

如果我们要生成0 ~ 99之间的随机数,方法如下:

rand() % 100; 
//余数范围是0 ~ 99

如果要生成1 ~ 100的随机数,方法如下:

rand() % 100 + 1; 
//%100的余数是0 ~ 99,0 ~ 99的数字 + 1,范围就是1 ~ 100

如果要生成100 ~ 900的随机数,方法如下:

100 + rand()%(900-100+1);
//余数的范围是0~800,加上 100 之后就是100 ~ 900

如此类推,我们可以得到,如果要生成a ~ b的随机数,方法如下:

a + rand()%(b - a + 1);

2. 猜数游戏的实现

参考代码1:

#include <stdlib.h>
#include <time.h>
void game()
{
	int r = rand() % 100 + 1;
	int guess = 0;
	while (1)
	{
		printf("请猜数字>:");
		scanf("%d", &guess);
		if (guess < r)
		{
			printf("猜小了\n");
		}
		else if (guess > r)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

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

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);
	return 0;
}

参考代码2:

还可以加上猜数字的次数限制,如果5次猜不出来,就算失败.

#include <stdlib.h>
#include <time.h>
void game()
{
	int r = rand() % 100 + 1;
	int guess = 0;
	int count = 5;//设置可以猜数的次数
	while (1)
	{
		printf("\n你还有%d次机会\n",count);//提示玩家还有的次数
		count--;//每猜一次减少一次机会
		printf("请猜数字>:");
		scanf("%d", &guess);
		if (guess < r)
		{
			printf("猜小了\n");
		}
		else if (guess > r)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
	if (count == 0)//当次数为0了,宣告游戏失败
	{
		printf("你失败了,正确的值是%d\n",r);
	}
}

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

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);
	return 0;
}

C语言实现的一个简单的猜数小游戏 嘿嘿!本博主第一次发文章,简单的小程序,各位浏览的大佬们随便看看就好了,有BUG的话可以偷偷告诉我哦!(´・ω・`)可能是因为最近有去面试被问到一些代码的完整性以及BUG问题,所以现在写代码也比较严谨了。≖‿≖✧(偷偷告诉你我的用户名不是我的QQ,是注册时随机给的,我也不知道怎么改。ʅ(´◔౪◔)ʃ)首先我定义了一个函数来判断我从终端输入的是不是正确的阿拉伯数字,代码如下:int jud(char... 阅读详情

相关推荐

手把手拆解:储能电站如何实现‘孤岛运行’与‘黑启动’?从SVPWM控制到无缝并网

本文深入解析储能电站的孤岛运行与黑启动技术,从SVPWM控制策略到电网重构实战。通过详细的三环控制架构和黑启动五阶段技术路线,展示储能电站在电网故障时如何快速切换为独立电压源并实现电网重建。文章还探讨了虚拟惯量补偿、多站协同控制等前沿技术,为电力系统应急恢复提供关键解决方案。

weixin_30509393的博客 304

C语言——猜数字游戏(随机数)

猜数字游戏: 1.给玩家提供一个菜单选项(开始游戏/退出游戏) 2.开始游戏,由系统生成一个随机数[1-100] 3.玩家输入一个数字,系统进行比较,提示玩家高了/低了 4.玩家根据提示循环进行猜测,直到猜中,这局游戏结束 注意: 系统生成随机数,这里我们需要用到函数rand rand函数: (1)生成随机数 (2)返回0和之间的范围内的伪随机整数。 (3)该数字由算法生成,该算法在每次调用时返回...

是胖胖没错了的博客 5214

EMGPro 肌肉电手势识别手环传感器

EMG手势识别技术需要进行多方面的工作,包括传感器的设计和布局、EMG信号的采集和预处理、特征提取和分类等。通过对采集到的信号进行特征提取和分类,可以将手势信号与预定义的手势模型进行匹配,从而实现手势识别和控制。通过使用EMG手势识别技术,用户可以更加自由地操纵设备,使得我们的交互方式更加智能和自然。EMG手势识别是利用EMG信号测量肌肉运动的实时性和高精度性,采用机器学习等技术进行数据处理和分析,并将其应用于手势识别领域的一种技术。

m0_68593468的博客 1382

C语言实现猜数字游戏(超详解)

优雅编程,精致生活!

爱德苏的博客 5万+

STM32 伺服电机 指令脉冲+方向位置控制模式 主从定时器 实现PWM脉冲数精确控制

实验室有个项目涉及到多个步进电机以及伺服电机的控制,需要电机得到一个触发信号后精确移动一段距离。 下面以单个伺服电机控制为例,利用伺服电机的指令脉冲加方向位置控制模式实现jing'que ...

phcdd的博客 2万+

Qwen2.5-VL模型微调实战:从零到部署的完整流程(附避坑指南)

本文详细介绍了Qwen2.5-VL视觉语言模型从零开始的完整微调与部署流程。内容涵盖使用LLaMA-Factory进行LoRA微调的关键参数配置与避坑指南,以及如何将训练好的模型权重合并,并最终利用vLLM高性能推理引擎进行部署,为开发者提供了一套可落地的实战方案。

oo7890的博客 589

C语言实现猜数字游戏

利用C语言实现猜数字游戏提示:以下是本篇文章正文内容,下面案例可供参考以上就是猜数字游戏的内容。

weixin_67913271的博客 848

51单片机———UART串口通信

传统理解就是信息的传输与交换。单片机与单片机之间,单片机与电脑之间,以及单片机与各式各样的模块之间都可以进行通信。如果没有通信,那么单片机的功能仅仅局限于它本身,它没办法从其他设备获取有用信息,也无法将自己产生的信息告诉其他设备,这样子单片机与外围器件的合作就会收到限制,没办法完成更多的功能,就像一个没办法拓展业务的公司。:实现我们程序当中写的P0=0xFC,就是一次同时对8位进行信号的输出;习惯上,我们还称P0、P1、P2、P3为单片机的4组并行总线:实现低位先发 高位在后。

m0_74225397的博客 3293

C语言—猜数字小游戏

猜数字游戏

taro_yuan的博客 807

原恒星尘埃生长的三维MHD模拟与湍流效应研究

星际尘埃演化是恒星形成过程中的关键环节,其动力学行为直接影响行星系统的构建。通过磁流体力学(MHD)模拟可以揭示尘埃颗粒从微米级到行星胚胎尺度的生长机制,其中湍流效应通过改变碰撞频率和密度结构发挥双重作用。最新研究采用COALA-RAMSES耦合框架,实现了包含自洽尘埃生长的三维非理想MHD模拟,量化了不同物理环境下尘埃尺寸分布的演化规律。这些发现不仅为解释ALMA观测数据提供理论依据,也对行星形成初期条件约束具有重要意义,特别是在湍流参数化与尘埃生长速率关系方面取得突破。

weixin_30988079的博客 382

OpenClaw终于有了图形界面,一键安装使用你的24小时AI 研究助手!

ClawX是连接强大 AI 智能体与普通用户之间的桥梁。基于OpenClaw构建,它将命令行式的 AI 编排转变为易用、美观的桌面体验——无需使用终端。无论是自动化工作流、连接通讯软件,还是调度智能定时任务,ClawX 都能提供高效易用的图形界面,帮助你充分发挥 AI 智能体的能力。ClawX 预置了最佳实践的模型供应商配置,原生支持 Windows 平台以及多语言设置。当然,你也可以通过设置 → 高级 → 开发者模式来进行精细的高级配置。

Maynor的博客 3389

【C语言】4.分支和循环实践:猜数字游戏

经过C语言分支和循环语句的学习,让我们一起来实现一个猜数字游戏吧~

qq_56251766的博客 5705

095、PCIE物理层测试模式:从信号眼图到误码率实战

本文介绍了PCIe物理层测试模式的调试方法和实战经验。重点解析了环回测试、合规性测试和静默模式的应用场景及配置要点,分享了信号眼图分析、误码率测试和接收端验证的实用技巧。作者结合自身调试经历,强调物理层测试对排查信号完整性问题的重要性,建议在量产前进行基础测试,并提醒注意芯片勘误和测试模式切换等易错点。通过合理使用测试模式,可显著提高PCIe链路调试效率,确保物理层稳定可靠。

z534437748的博客 59

[C语言][小游戏][猜数游戏]

轻松学会猜数字游戏

plj521的博客 1699

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

带登录程序的猜数小游戏(C语言编写)

带登录程序的猜数小游戏(C语言编写)猜数小游戏1.整体流程图2.主要程序2.1 主程序2.2 菜单界面2.3 登录界面2.4 倒计时2.5 猜数比较3 演示效果3.1 登录演示3.2 猜数演示 猜数小游戏 按照一般游戏规则在游戏开始之前首先进行游戏登录,一开始会有3次登录机会,如果在这三次中输入账号密码正确则进入游戏,猜数游戏开始;但是3次登录都错误后,必须等10S后才能在次登录,并且 以后每次登录失败都会有10S延时时间,直到进入游戏。 https://download.youkuaiyun.com/downloa

曾记否@ 7479

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C语言小游戏(一)----猜数游戏

不一样的方式讲解游戏程序,一步一步升级,对于想掌握实际编程能力的初级猿具有极大的帮助!其中干货多多,阅读后必能给你带来极大的收获!

qq_64263760的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

c语言实现猜数游戏

由于猜数游戏需要电脑产生一个随机数,便初次接触使用rand函数和srand函数,先来了解一下这两个函数吧

博客小站 7800

C语言实战之猜数游戏

C语言完成猜数游戏

子夜的个人博客 2002

C语言猜数游戏

本文介绍了一个使用C语言编写的猜数游戏实现。游戏核心功能包括:1)允许用户自定义猜数范围起点、终点和机会次数;2)使用srand()和rand()函数生成指定范围内的随机数;3)通过循环结构实现猜数逻辑,根据用户输入给出"猜大/猜小"提示,并实时显示剩余机会;4)当机会用尽时显示正确答案。文中详细解释了随机数生成原理,包括srand()的种子设置和rand()的范围控制方法。最终代码整合了输入处理、随机数生成和游戏逻辑判断,实现了一个完整的猜数游戏程序。

vbnetcx的博客 3万+

c语言制作猜数游戏教程,C语言实现猜数游戏

本文实例为大家分享了C语言实现猜数游戏的具体代码,供大家参考,具体内容如下代码如下#include#include#includevoid game(){srand((unsigned int)time(NULL)); //srand((time(NULL))设计一个随机种子,每次运行都能保证随机种子不同int x = rand() % 100; //100以内的随机值;rand()函数可以用来...

weixin_35132871的博客 1326

c语言人机猜数,人机猜数游戏程序设计

公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解。话题:人机猜数游戏程序设计回答:可以参考c++语言的,小异。class GuessNumber{const int MaxNumber;public:GuessNumber(int mn=4):MaxNumber(mn){}struct guessState{int num;int pos;guessState(){num=0;pos=0...

weixin_31201481的博客 1064

设计一个猜数游戏(c语言)

设计一个猜数游戏(c语言)猜数游戏rand函数srand函数time函数代码实现合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 通过学习《明解C语言》这本书,我学习到用所学的基本语法知识就可以设计出一些简单的小程序,通过设计这些小程序可以熟

weixin_51942493的博客 3040

C语言程序设计——“猜数游戏”

想起下学期开学第一周的程序设计作业——猜数游戏 猜数游戏 计算机“想”一个数请人猜,如果猜对了,提示“Right!”;否则“Wrong!”,并告诉所猜的数是大还是小,直到猜对结束,最后给出猜测的次数。 可怜的我没有做出来,但是聪明的我用python做出来了,惊不惊喜意不意外。^ > ^ 虽然没有做成要求那样,但是,我可是费了脑子的。。。。 import random secrent1 = random.randint(1,10) secrent2 = random.randint(10,100)

weixin_45871855的博客 3728

c语言猜数游戏错误,C语言实现猜数游戏

本文实例为大家分享了C语言实现猜数游戏的具体代码,供大家参考,具体内容如下代码如下#include#include#includevoid game(){srand((unsigned int)time(NULL)); //srand((time(NULL))设计一个随机种子,每次运行都能保证随机种子不同int x = rand() % 100; //100以内的随机值;rand()函数可以用来...

weixin_32685111的博客 384

猜数游戏高级c语言,带登录程序的猜数小游戏(C语言编写)

带登录程序的猜数小游戏(C语言编写)2020年11月25日|萬仟网IT编程 |我要评论带登录程序的猜数小游戏(C语言编写)猜数小游戏1.整体流程图2.主要程序2.1 主程序2.2 菜单界面2.3 登录界面2.4 倒计时2.5 猜数比较3 演示效果3.1 登录演示3.2 猜数演示猜数小游戏按照一般游戏规则在游戏开始之前首先进行游戏登录,一开始会有3...

weixin_33011357的博客 609

c语言练习:猜数游戏

1.电脑自动生成1-100的随机数;2.猜数字过程中,根据猜测数据的大小给出提示,比如大了还是小了,直到猜对为止。

Soung_ue的博客 1610
上一篇: goto语句
下一篇: 经典算法 (一)---选择排序法
'撒野奔跑.
博客等级 码龄4年 185粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'撒野奔跑.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值