C语言之生成随机数方法(C代码实现猜数字游戏)

news2024/12/27 9:41:59

C语言之生成随机数方法(C代码实现猜数字游戏)
首先先把猜数字游戏的代码给大家暂时出来,然后我们在根据代码的步骤一步一步的推导

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//
//void menu()
//{
//	printf("***************************\n");
//	printf("***** 1.play   0.exit *****\n");
//	printf("***************************\n");
//}
//
void srand (unsigned int seed);
//void game()
//{
//	RAND_MAX;
//	//1. 生成随机数
//	int ret = rand() % 100 + 1;//可以生成随机数,随机数的范围是:0~32767
//	//0~99
//	//2. 猜数字
//	int guess = 0;
//
//	while (1)
//	{
//		printf("请猜数字:>");
//		scanf("%d", &guess);
//		if (guess > ret)
//		{
//			printf("猜大了\n");
//		}
//		else if (guess < ret)
//		{
//			printf("猜小了\n");
//		}
//		else
//		{
//			printf("恭喜你,猜对了\n");
//			break;
//		}
//	}
//}
//
//int main()
//{
//	//打印菜单
//	//1. 玩游戏
//	//0. 退出游戏
//	int input = 0;
//	srand((unsigned int)time(NULL));//要给srand传递一个变化的值,计算机上的时间是时刻发生变化的
//	//time函数可以返回一个时间戳
//	do
//	{
//		menu();
//		printf("请选择:>");
//		scanf("%d", &input);//1 0 
//		switch (input)
//		{
//		case 1:
//			game();
//			break;
//		case 0:
//			printf("退出游戏\n");
//			break;
//		default:
//			printf("选择错误\n");
//			break;
//		}
//	} while (input);
//
//	return 0;
//}
//

在这里插入图片描述
这是我们猜数字游戏的一般思路
首先我们打印一个菜单,选择1就玩游戏,选择0就退出游戏,既不选择1也不选择0,那我们就走到default语句,首先我们的do-while循环一进来,最后的while(input)为0循环就终止,所以大家要搞清楚这里的do-while循环的基本逻辑,我们在switch语句里面加入break的原因是遇到break就停止switch里面的循环,do-while循环只要你不选择0就会一直进行,大家思考一下是不是这个道理如果我们选择case1:,那么如果我们这里输出printf(“开始游戏”)的话,你会发现你好像并不能真正的开始游戏,只能看到一段文字打印在屏幕上,这时我能想一下函数的调用这个知识点,一旦我们选择case1:,我们就进入到game()函数内部正式开始我们的游戏,设置一个随机数,电脑自动生成大小(范围我们在讲完time函数之后会给大家讲解),然后我们输入数字,再设置一个循环,这个时候我们就可以进行猜测,猜对了就退出循环,又再次进入到main函数再次开始我们的do-while循环,这就是我们的猜数字游戏C代码的基本逻辑,好,下面给大家把代码拆分开来讲解一下一些生成随机数的函数的用法以及time.h头文件

rand函数

我们来看一看rand函数的用法
rand函数
在这里插入图片描述
这里给大家分析一下,这里的参数为void(空),返回类型为Int ,return一个伪随机的整数在0到RAND_MAX
有同学就有疑问了,这个RAND_MAX是个什么东西,那我带着大家来看一看

RAND_MAX介绍
在这里插入图片描述
在这里插入图片描述
我们可以看到RAND_MAX表示的最大数为32767,所以RAND_MAX表示的范围为0-----32767

srand函数

srand函数
这里有个C语言的语法规定,就是在设置rand函数之前必须设置一个srand函数,这是C语言语法规定的
在这里插入图片描述
我们这里需要引入一个概念—时间戳,我们来解读一下时间戳的概念
时间戳:当前的时间点和计算机的起始时间(1970年1月1日0时0分)的差值,单位为秒的数字就叫时间戳,那这个时间戳是怎么产生的呢,这里就需要引入一下time函数,大家可能不太了解time函数,我们还是给大家来讲解一下
通常我们使用时间作为随机数生成的种子,因为每次程序运行时间不相同,所以生成的随机数也肯定不相同
好的,大家从time函数那儿回到srand函数这里来
我们来看srand函数的参数,无符号的整型我们就可以写成下面代码

srand((unsigned int)time(NULL));//要给srand传递一个变化的值,计算机上的时间是时刻发生变化的
**```
time函数的参数你不想传任何值,就把他置成空(NULL)
在我们的工程或者项目里面(srand函数执行一次就可以了),我们总不能每玩一次游戏都要设置一个随机数生成的起点吧,所以只有在我们的主函数main当中srand函数就执行一次**
# time函数
[time函数](https://legacy.cplusplus.com/reference/ctime/time/?kw=time)
**![在这里插入图片描述](https://img-blog.csdnimg.cn/3a0ce68fc66c48198178c835e3995107.png)
**time函数的参数是一个指针,如果你不想传任何值,你可以将它置成NULL(空)
time函数可以随机产生一个时间戳****
# 生成随机数范围公式
**现在我们想生成一个1-100的数字我们想一下应该怎么生成呢???
一个数字除以100取模取出来的是0-99的数字,现在我们想生成1-100的数字,我们加一就可以了,我们看一下具体的代码**
```cpp
int ret = rand() % 100 + 1;//可以生成随机数,随机数的范围是:0~32767
	//0~99

这样就可以表示1到100的数字了,希望大家能够理解

v1 = rand() % 100;         // v1 in the range 0 to 99
v2 = rand() % 100 + 1;     // v2 in the range 1 to 100
v3 = rand() % 30 + 1985;   // v3 in the range 1985-2014 
srand((unsigned int)time(NULL));
int ret1 = rand() % 10 + 1;//生成1~10的随机数
int ret2 = rand() % 100 + 1;//生成1~100的随机数
int ret3 = rand() % 34 + 66;//生成66~99的随机数
int ret4 = rand() % (n - m + 1) + m;//生成m~n的随机数

总结

我们将代码运行起来给大家切身体会一下
在这里插入图片描述
这就是猜数字游戏C代码的运行结果,感觉还是比较容易理解,几个比较难的函数(rand/srand/time),我也一一给大家讲解了,本章的重点就在于这几个函数,其实srand函数就是遵循C语言的一般语法形式,你直接这样写就好了,以后遇到这类函数就能迎刃而解了
本章终!

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

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

相关文章

【ChatGPT】一个凭借两百多年历史的公式崛起的巨星

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…

一分钟学一个 Linux 命令 - ps

前言 大家好&#xff0c;我是 god23bin。欢迎来到《一分钟学一个 Linux 命令》系列&#xff0c;每天只需一分钟&#xff0c;记住一个 Linux 命令不成问题。今天要说的是 ps 命令。 什么是 ps 命令&#xff1f; ps 的英文全称是 process status&#xff0c;意思是进程状态。 …

Servlet执行原理和API详解---【创建Servlet项目】

目录 一、Servlet 是什么&#xff1f; 主要工作&#xff1a; 第一个Servlet项目&#xff1a; 编写代码 打包程序 一、Servlet 是什么&#xff1f; Servlet 是一款基于HTTP协议&#xff0c;用来开发Java Web&#xff0c;运行在Tomcat里面的里的框架技术。 一种实现动态页面…

chatgpt赋能python:Python创建文件

Python创建文件 Python是一种高级编程语言&#xff0c;广泛应用于各种领域&#xff0c;尤其在数据分析、机器学习和人工智能方面被广泛使用。在Python中&#xff0c;创建文件是一项基本任务&#xff0c;本文将介绍如何使用Python创建文件。 创建一个空文件 在Python中&#…

3.CSS 的背景

通过CSS背景属性&#xff0c;可以给页面元素添加背景样式。 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。 3.1背景颜色 background-color属性定义了元素的背景颜色 background-color:颜色值;一般情况下元素背景颜色默认值是transparent(透…

【实战】 React 与 Hook 应用:实现项目列表 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表1.新建文件2.状态提升3.新建utils4.Custom Hook 学习内容来源&#xff1a;React React Hook TS 最佳实践-慕课网 相对原教程&#xff0c;我在学习开始时&#xff08;2023.0…

记录好项目D8

记录好项目 你好呀&#xff0c;这里是我专门记录一下从某些地方收集起来的项目&#xff0c;对项目修改&#xff0c;进行添砖加瓦&#xff0c;变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是超市管理系统 技术栈&#xff1a;springbootjavamysqlthyemleafshiro …

数据安全--24--数据安全管理之API管理

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/131274853 一、API管理概述 API是指应用程序编程接口&#xff0c;它的存在主要是为了提高系统各组成单元的内聚性&#xff0c;降低组成单元之间的耦合程度&#xff08;相互依赖程度&#xff09;&#…

[元带你学: eMMC协议详解 18] eMMC的后台操作(Background Operations)

依JEDEC eMMC 5.1及经验辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 所在专栏 《元带你学: eMMC协议详解》 内容摘要 全文 1800 字&#xff0c; 主要内容 1、后台操作/前台操作区别&#xff1f; 2、如何进行手动后台操作&#xff1f; 3、自动后台启动和停止方法&a…

【Redis基础】

Redis基础 Redis基础Note Redis基础1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启1.3.7.wi…

web安全自学笔记

Web 安全方面的基本知识是有很必要的&#xff0c;未必就要深入理解。本文主要介绍常见的网络攻击类型&#xff0c;不作深入探讨。 正文 网络攻击的形式种类繁多&#xff0c;从简单的网站敏感文件扫描、弱口令暴力破解&#xff0c;到 SQL 注入&#xff0c;再到复杂的网络劫持等…

基于Web的影院信息管理系统设计与实现(论文+源码)_kaic

摘要 随着文化产业的发展&#xff0c;电影行业迎来了发展的黄金期&#xff0c;而且人民生活水平的 不断提高&#xff0c;观众对影院的服务要求也越来越高。传统的服务模式&#xff0c;已经不能满足 观众的需求&#xff0c;随着信息技术的发展&#xff0c;越来越多的影院将信息技…

Qt 中动态加载窗口

在编程中&#xff0c;我经常会遇见要根据用户触发按钮&#xff0c;动态生成窗口的情况。在此有两种方法可以动态生成窗口&#xff1a;一&#xff1a;直接在槽函数中调用窗口类。二&#xff1a;将 **.ui 添加到资源文件&#xff0c;通过 QUiLoader 加载。 现将两种方法介绍如下…

LAMPDISCUZ论坛

目录 1.1 LAMP 1.2 LAMP架构搭建 2. 关闭防火墙&#xff0c;将安装Apache所需软件包传到/opt目录下 APache的源码编译安装涉及到的软件包&#xff1a; 2.2 安装环境依赖包 2.3 配置软件模块 2.4 添加httpd系统服务 2.5 修改httpd 服务配置文件 3.编译安装mysqld 服务 3.1 …

1. CSS的三大特性

CSS有三个非常重要的三个特性&#xff1a;层叠性、继承性、优先级 1.1层叠性 相同选择器给设置相同的样式&#xff0c;此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突 的问题 层叠性原则: ●样式冲突,遵循的原则是就近原则,哪个样式离结构近,就执行哪个…

记一次Windows 下Microsoft Store应用权限问题

关键字&#xff1a;windows、 microsoft store 画图 mspaint 终端 terminal Windows11 锁屏界面黑屏 起因 情不知所起&#xff0c;额走错片场了。。。 具体原因无法确定&#xff0c;猜测是由于之前磁盘故障后进行修复导致的权限丢失异常 表象 几乎是所有的Microsoft store的…

Java-反射机制(超详解)

Java反射机制概述 前言一、Java反射机制概述1. Java Reflection2. 动态语言 vs 静态语言二、 Class类的理解1. 类的加载过程1.1 初步了解1.2 类的加载过程图解1.3 了解&#xff1a;什么时候会发生类初始化&#xff1f;1.4 类加载器的作用1.5 JVM中不同类型的类的加载器1.6 代码…

SpringMVC系列-1 使用方式和启动流程

背景 SpringMVC作为SSM组件之一&#xff0c;Java开发有必要了解SpringMVC是如何被集成到Spring框架以及整个项目的启动流程。本文以Tomcat作为Servlet容器进行介绍&#xff0c;默认认为读者使用过Tomcat且对Tomcat内部组件有足够的理解。 1.启动流程 当Tomcat被部署到服务器…

node的安装配置

这个是官网下载地址 推荐选择下载LTS版本的下载&#xff0c;不推荐下载最新版的&#xff0c;下载完成之后&#xff0c;在安装过程中更改安装路径默认是c盘的&#xff0c;如果c盘空间大当我没说&#xff0c;接着一路傻瓜式安装默认点击下一步&#xff0c;直到安装完成。 创建文…

chatgpt赋能python:Python怎样设置字体大小

Python 怎样设置字体大小 作为一名Python工程师&#xff0c;我们经常需要在论文或文档中使用Python进行数据分析&#xff0c;数据可视化和数据科学等方面的工作。在这些文档中&#xff0c;字体大小的设置是非常重要的&#xff0c;因为它直接影响阅读体验和文档的可读性。因此&…