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

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

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

21b814f1f1174c69b5a56b29c80a759d.png

这是我们猜数字游戏的一般思路

首先我们打印一个菜单,选择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函数

4e821afd5c244d109fc536b260e21890.png

这里给大家分析一下,这里的参数为void(空),返回类型为Int ,return一个伪随机的整数在0到RAND_MAX

有同学就有疑问了,这个RAND_MAX是个什么东西,那我带着大家来看一看

RAND_MAX介绍

01d482d017804865bbbe327fcfbcb187.png

1faa55016733430d8bda39f1101eee80.png

我们可以看到RAND_MAX表示的最大数为32767,所以RAND_MAX表示的范围为0-----32767


srand函数

srand函数

这里有个C语言的语法规定,就是在设置rand函数之前必须设置一个srand函数,这是C语言语法规定的

121355d6666f49d4bedc13c526bbbd54.png

我们这里需要引入一个概念—时间戳,我们来解读一下时间戳的概念

时间戳:当前的时间点和计算机的起始时间(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://ucc.alicdn.com/images/user-upload-01/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的随机数

总结

我们将代码运行起来给大家切身体会一下

0d58678c1558447b8509e2532a78088c.png

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

本章终!


相关文章
|
1月前
|
C语言
C语言之斗地主游戏
该代码实现了一个简单的斗地主游戏,包括头文件引入、宏定义、颜色枚举、卡牌类、卡牌类型类、卡牌组合类、玩家类、游戏主类以及辅助函数等,涵盖了从牌的生成、分配、玩家操作到游戏流程控制的完整逻辑。
77 8
|
1月前
|
存储 安全 数据管理
C语言之考勤模拟系统平台(千行代码)
C语言之考勤模拟系统平台(千行代码)
55 4
|
2月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
128 0
|
25天前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
27天前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
45 6
|
1月前
|
存储 安全 物联网
C语言物联网开发之设备安全与代码可靠性隐患
物联网设备的C语言代码安全与可靠性至关重要。一是防范代码安全漏洞,包括缓冲区溢出和代码注入风险,通过使用安全函数和严格输入验证来预防。二是提高代码跨平台兼容性,利用`stdint.h`定义统一的数据类型,并通过硬件接口抽象与适配减少平台间的差异,确保程序稳定运行。
|
26天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
58 1
|
27天前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
45 2
|
1月前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
34 1
|
2月前
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
108 1