猜数字游戏

CA51F3系列(国产)+低功耗模式 CA51F351P6芯片是基于1T 8051内核的8位微控制器,通常情况下,运行速度比传统的8051芯片快10倍,性能更加优越。内置8K Flash程序存储器,可多次重复编程的特性给用户开发带来了极大的方便。不仅保留了传统8051芯片的基本特性,还集成了12Bit ADC、LCD/LED驱动、Touch Key、16Bit PWM、 UART、RTC、低电压检测(LVD)等功能模块。支持IDLE、STOP和低速运行三种省电模式以适应不同功耗要求的应用。 阅读详情

一. 游戏要求:

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

二. 随机数的生成

2.1 rand

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

int rand (void); 

        rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是⼤部分编译器上是32767。
rand函数的使用需要包含⼀个头文件是:stdlib.h
那我们就测试⼀下rand函数,这里多调用几次,产⽣5个随机数:

#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;
}


我们先运行⼀次,看看结果,再运行一次再看看结果,多运行几次呢?



        我们可以看到虽然⼀次运行中产生的5个数字是相对随机的,但是下⼀次运行程序生成的结果和上⼀次⼀模⼀样。这是因为rand函数生成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法⽣成的随机数。真正的随机数的是无法预测下⼀个值是多少的。⽽rand函数是对⼀个叫“种⼦”的基准值进⾏运算而⽣成的随机数。之所以前面每次运行程序产生的随机数序列是⼀样的,那是因为rand函数⽣成随机数的默认种⼦是1。
        如果要生成不同的随机数,就要让种子是变化的。

2.2 srand

        C语言中又提供了⼀个函数叫srand,用来初始化随机数的生成器的,srand的原型如下:

void srand (unsigned int seed); 

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

        srand函数是不需要频繁调用的,⼀次运行的程序中调用一次就够了。

2.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
        如果只是让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());
    return 0;
}

运行示例: 

 

(注:截图只是当时程序运行的结果,你的运行结果不一定和这个一样) 

2.4 设置随机数的范围

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

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

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

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

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

100 + rand()%(200-100+1)
//余数的范围是0~100,加100后就是100~200

        所以如果要生成a~b的随机数,方法如下:

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

三. 猜数字游戏实现

参考代码:

#include <stdio.h>
#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("请选择:>\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("选择错误,重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

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

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game()
{
	int r = rand() % 100 + 1;
	int guess = 0;
	int count = 5;
	while (count)
	{
		printf("你还有%d次机会\n", count);
		printf("请猜数字>:");
		scanf("%d", &guess);
		if (guess < r)
		{
			printf("猜小了\n");

		}
		else if (guess > r)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			printf("是否继续游戏\n");
			break;
		}
		count--;
		}
		if (count == 0)
		{
			printf("你失败了,正确值是:%d\n", r);
			printf("是否继续游戏\n");
		}
	}
	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("请选择:>\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("选择错误,重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

运行示例:

 


期待

从理论到实践:基于Zemax的高分辨率生物显微镜光学系统仿真与优化指南 本文详细介绍了基于Zemax的高分辨率生物显微镜光学系统仿真与优化全流程。从阿贝分辨率公式、柯勒照明等理论基础出发,逐步讲解Zemax建模、像差优化、制造可行性分析等核心步骤,并提供常见问题解决方案。通过实际案例展示如何将理论设计转化为可制造的优化方案,帮助工程师掌握从仿真到实际应用的关键技术。 阅读详情

相关推荐

从理论到板级:FOC电机驱动硬件电路全链路设计解析

本文从硬件工程师视角,深度解析FOC电机驱动从理论到板级实现的全链路设计。重点剖析了电源保护、核心采样电路、三相逆变桥与驱动电路等关键硬件模块的设计要点与实战经验,强调硬件是FOC算法可靠运行的基石,并提供了PCB布局布线的核心原则,帮助开发者构建高性能、高可靠性的电机驱动硬件平台。

weixin_29240711的博客 332

C语言——猜数字游戏

用C语言写一个简单的猜数字游戏

卷成小麻花的博客 2万+

从模组到集装箱:手把手拆解一个储能BMS的软硬件架构设计与通信组网

本文深入解析储能BMS的软硬件架构设计与通信组网,从电芯采样到系统集成的全链条技术实现。详细介绍了三级硬件架构(AFE、CMU、BMU)的设计要点,以及软件分层实现中的驱动层、应用层核心算法和通信协议栈。通过实战案例分享CAN网络搭建、调试工具链和系统验证测试经验,为储能系统开发提供实用指导。

weixin_30752699的博客 462

【C语言】猜数字游戏

前面学习的这些知识,我们就可以写一些稍微有趣的代码了,这里就来写一个猜数字游戏。电脑自动生成1~100的随机数玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束。

zxctsclrjjjcph的博客 1384

process插件_利用SPSS 插件MLmed检验多水平中介的调节模型

本文介绍一个SPSS插件,用于检验多水平中介的调节,及该方法与Mplus的比较。1 Mlmed 简介及安装Mlmed 简介: Mlmed 由Rockwood 2017年开发,基于SPSS插件计算Multilevel moderated mediation. 可以提供multilevel mediation Monte Carlo 置信区间比如(模拟20000次),以及多水平调节的...

weixin_39976081的博客 5766

STM32F103ZET6驱动57闭环步进电机(连线+代码)

一、设备: 1. STM32F103开发板 (普中F103的板子) 2. 57闭环电机带驱动 3. 24V/3A的直流电源,用于给电机驱动供电 简单说明:使用Keil5编程,主要使用了PWM波,外部中断和时间中断,按键控制电机使能和脱机并且控制PWM的周期,调节周期即调节电机的转速。 二、STM32开发板与电机驱动的连线: 1.PUL-、ENA-、DIR-与STM32的连接方法: 可以参考CSND的这个链接中的说明,使用共阴极接法:STM32F407-用TB6600驱动器驱动57步进电机(代码

baidu_39071234的博客 7428

C语言入门小游戏——猜数字游戏(详解)

在做猜数字游戏之前我们先来了解rand函数:rand函数是专门用来生成随机数的,他对应的头文件是 rand函数返回的是0-rand_MAX(0-32767)之间的一个随机数。

分享学习经历和成果 3509

基于YOLOv8的人群聚集检测系统:含UI界面设计与数据集应用

人群聚集检测是智慧城市、公共安全和疫情防控等领域的重要任务。本文结合YOLOv8最新目标检测技术,设计并实现了一个高效的人群聚集检测系统,支持可视化UI界面操作,方便用户实时检测和分析视频中的人群密度。本文详细介绍了系统设计思路、使用的数据集、YOLOv8模型训练和推理过程,以及UI界面的开发与整合。最后通过实验验证了该系统的实用性和性能表现。更灵活的模型架构强化的特征融合网络(PAN++)自动混合精度训练支持支持多任务学习(目标检测+分类+分割)预训练模型丰富,适应多种应用场景。

YOLO 432

【游戏】猜数字

目录 1.游戏描述 2.游戏设计 1.游戏描述 1.自动产生一个1-100之间的随机数 2.开始猜数字 -->猜对了,游戏结束 -->猜错了,告诉你猜大了还是猜小了,继续猜直到猜对了为止 3.游戏可以一直玩,除非退出游戏 2.游戏设计 第一步:先设计主菜单,也就是你刚开始黑框框内想看到的。进入菜单后,输入1的时候进行猜数字游戏,输入0的时候break,输入其他的时候需要再次打印菜单并且重新输入操作。初始代码如下: void menu() { printf("****

m0_58454229的博客 3052

YOLOv9改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计

实时检测器架构的轻量级设计GsConv。

Limiiiing的博客 1364

YOLOv8改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合

一、本文介绍 本文记录的是基于U-Net V2的YOLOv8目标检测改进方法研究。本文利用U-Net V2替换YOLOv8的骨干网络,UNet V2通过其独特的语义和细节融合模块(SDI),能够为骨干网络提供更丰富的特征表示。并且其中的注意力模块可以使网络聚焦于图像中与任务相关的区域,增强对关键区域特征的提取,进而提高模型精度。本文配置了原论文中pvt_v2_b0、pvt_v2_b1、pvt_v2_b2、pvt_v2_b3、pvt_v2_b4和pvt_v2_b5六种模型,以满足不同的需求。 文章目录一、本文

Limiiiing的博客 1720

七上八下猜数字_猜数字游戏,1到100猜数字游戏规则

注意本程序使用rand函数此函数在此程序中默认随机值为1275可以用来测试程序#include#in...注意本程序使用rand函数此函数在此程序中默认随机值为1275可以用来测试程序#include#in...计算机实习报告面向过程编程用C语言求解实际问题一、问题描述游戏类第15个任务——猜数字游戏任务描述:...计算机实习报告面向过程编程用C语言求解实际问题一、问题描述游戏类第15个任务——猜...

weixin_39746382的博客 1万+

基于STM32F4XX 、HAL库的GXHT30C温湿度传感器驱动应用C语言程序设计

define GXHT30C_STATUS_WRITE_CHK (1 << 0) // 写数据校验状态。#define GXHT30C_STATUS_HUMI_TRACK (1 << 11) // 湿度跟踪报警。#define GXHT30C_STATUS_TEMP_TRACK (1 << 10) // 温度跟踪报警。#define GXHT30C_STATUS_CMD_STATUS (1 << 1) // 命令执行状态。

PP_Cottage的博客 226

Python 猜数字游戏

猜数字游戏 ①给固定的数字来猜数字,此代码给定数值答案为:8 代码如下: print('---------猜数字游戏---------') temp=input('请你猜测一个数字:') guess=int(temp) while guess!=8: temp=input('错了,重新猜测一个数字:') guess=int(temp) if guess==8: ...

ytraister的博客 2122

VC中sqlite的使用

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

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

html实现猜数字游戏

html实现猜数字游戏 实现一个猜数字游戏: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>猜数字游戏</title> </head> <body> <button id="reset">重新开始一局游戏</button> <br> 请输入

weixin_51062428的博客 9473

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

c#语言猜数字游戏,C#实现简易猜数字游戏

本文实例为大家分享了C#实现简易猜数字游戏的具体代码,供大家参考,具体内容如下游戏规则说明:由系统生成一个随机数,玩家有三次猜数字的机会,如果在三次内猜出数字反馈玩家猜对了,否则Game Over!代码设计说明:1.首先设计一个简易的欢迎界面,并提示玩家是否开始游戏;public void Rule(){string symbol;bool flag = false;Console.WriteLi...

weixin_42315701的博客 2158

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

tk猜数字游戏

用tk完成猜数字游戏 import tkinter as tk import random root = tk.Tk() root.title('猜数字游戏') tk.Label(root, text="请输入一个1——100之间的整数:").grid(row=0, column=0) entry1 = tk.Entry(root) entry1.grid(row=0, column=1, padx=10, pady=10) random_num = random.randint(1, 1

maweihao123的博客 3952

java编写猜数字游戏_java编写猜数字游戏

本文实例为大家分享了java实现猜数字游戏的具体代码,供大家参考,具体内容如下用java的循环还有选择做了一个猜数字游戏,挺简单的1.首先我们要猜的数字,当然这里你可以固定一个值,也可以通过随机数产生一定范围的数,这样是比较公平的吧。用随机数产生要猜的数字Random rand = new Random(); //创建一个随机数int GuessNumber = rand.nextInt(100)...

weixin_29589063的博客 3153
上一篇: 逗号表达式与赋值表达式
下一篇: static和extern详解
大力初奇迹
博客等级 码龄3年 1294粉丝 54原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值