C语言超详细讲解猜数字游戏的实现

目录
  • rand函数
  • srand函数
  • 时间戳
  • 完整代码与程序运行图

rand函数

先看一下下面这张图:

通过这张图我们可以了解到rand函数的返回值是int类型,形参为空,它的头文件<stdlib.h>以及它的返回值范围是0到RAND_MAX. 而RAND_MAX在VS中是0x7fff,转换成二进制就是32767.所以rand返回的随机数的范围就是0到32727。

其实我们用rand函数就可以生成随机数了,那为什么我们还要用到srand函数呢?

因为只有第一次生成的随机数是随机的,如果程序执行多次,那第二次之后生成的随机数就会和第一次生成的一样。这是一种伪随机。

因此只用到rand函数是不够的,我们要用rand函数之前,先用strand函数。

srand函数

看一下strand函数,返回值为void,形参是int类型的数据,要用strand函数,首先要给strand传一个int类型的数据,根据传进去的值不同,生成的随机数也不同。但是这样就矛盾了。生成一个随机数之前首先要传进去一个随机数,为了解决这个问题,就要使用时间戳。

时间戳

我们无法给它一个随机数,但是我们可以用时间作为参数传进去,时间是变的,这样生成的随机数也就是变的。怎么获得时间戳呢?C语言也为我们提供了一个time函数可以帮助我们获得时间戳。

time的头文件是<time.h>,time的函数原型有点复杂,看不懂没关系,会用就行。我们只是要把time的值作为参数传给strand函数。strand的形参是unsigned int类型的,而time的返回值是time_t类型的,我们可以强制类型转换。time的形参是指针类型的参数,我们用NULL就可以了。

srand((unsigned int)time(NULL));

解决完这个问题,我们还要解决rand生成随机数的范围的问题,我们如果要获得一个1~N之间的数的话,就要对生成的随机数对N进行取余+1.为了方便猜数字,生成的随机数范围就控制在1到100.猜数字不是一次就能才对的,猜不对就要一直猜,猜对了才退出。下面是完整代码。

完整代码与程序运行图

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("|-------------------|\n");
	printf("|-----1.玩游戏------|\n");
	printf("|-----0.退出--------|\n");
	printf("|-------------------|\n");
}
void game()
{
	int ret = rand()%100+1;
	int m = 0;
	while (1)
	{
		scanf("%d", &m);
		if (m > ret)
		{
			printf("猜大了!\n");
		}
		else if (m < ret)
		{
			printf("猜小了!\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	int n = 0;
	do
	{
		menu();
		printf("请选择:");
		scanf("%d", &n);
		switch (n)
		{
		case 1:
			printf("开始猜数字\n");
			game();
			break;
		case 0:
			printf("已退出\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while(n);
	return 0;
}

程序运行图如下:

到此这篇关于C语言超详细讲解猜数字游戏的实现的文章就介绍到这了,更多相关C语言猜数字游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言实现猜数字游戏的两种方法

    目录 前言 一.游戏描述 二.代码实现 1.生成游戏菜单 2.构建主函数 3.构建游戏函数 三.二分法实现猜数 前言 猜数字小游戏是我们大多数人学习C语言时都会了解到的一个有趣的C语言小游戏,下面我将详细介绍该游戏的实现和编程逻辑.并用二分法速通该小游戏.玩小游戏的同时,也能对C语言控制语句有更好的认识. 一.游戏描述 游戏内容 顾名思义,该程序让系统随机生成一个0-100的整数,让玩家来猜,玩家猜数字后,系统给予玩家回馈并且统计玩家猜的次数,直到玩家猜对为止. 游戏方法 1.生成游戏菜单 1.

  • 详解C语言实现猜数字游戏

    目录 一:猜数字游戏基本介绍&对程序预期 二:程序设计思路 1.总体思路: 2.菜单部分函数: 3.游戏部分函数 4.主函数部分 5.代码主体 三:总结 前言:本文主要讲解以c语言编写猜数字游戏,目的是介绍C语言中的循环和分支的具体用法. 一:猜数字游戏基本介绍&对程序预期 .猜数字游戏,顾名思义,就是系统随机给出一个数字,玩家对这个数字进行猜测,如果玩家猜测的数字大于给出的数字,则系统会提示猜大了,如果玩家猜测的数字小于给出的数字,则系统会提示猜小了,这样逐步缩小猜测范围,直到玩家猜对为

  • C语言代码实现猜数字游戏

    目录 前言: 一:猜数字游戏基本介绍&对程序预期 二:程序设计思路 1.总体思路: 2.菜单部分函数: 3.游戏部分函数 4.主函数部分 5.代码主体 三:总结 前言: 本文主要讲解以c语言编写猜数字游戏,目的是介绍C语言中的循环和分支的具体用法. 一:猜数字游戏基本介绍&对程序预期 .猜数字游戏,顾名思义,就是系统随机给出一个数字,玩家对这个数字进行猜测,如果玩家猜测的数字大于给出的数字,则系统会提示猜大了,如果玩家猜测的数字小于给出的数字,则系统会提示猜小了,这样逐步缩小猜测范围,直到

  • C语言详解实现猜数字游戏步骤

    目录 前言 一.猜数字游戏是什么 二.使用步骤 总结 前言 本文详细介绍了猜数字游戏的具体实现逻辑 一.猜数字游戏是什么 1.电脑自动生成一个1-100以内的数字 2.我们输入一个我们猜的数字 3.如果我们猜的数字比电脑随机生成的数字大,那么输出(猜大了) 4.如果我们猜的数字比电脑随机生成的数字小,那么输出(猜小了) 5.如此循环往复,猜到正确的数字之后游戏结束 二.使用步骤 1.首先应该打印菜单 代码如下 void menu() { printf("*********************

  • C语言实现简单的猜数字游戏

    本文实例为大家分享了C语言实现简单的猜数字游戏的具体代码,供大家参考,具体内容如下 1.游戏介绍 此游戏是电脑随机生成一个1-99的数字(生成数字范围可自行更改),然后玩家一直猜数字,最终猜对为止.废话不多说,直接上完整代码. 2.游戏完整代码 #include<stdio.h> #include<time.h> #include<stdlib.h>   int juge(int guess,int number) {     int t=0;     if(guess

  • c语言轻松实现猜数字小游戏

    目录 一.前言 二.游戏逻辑 三.思维导图 四.游戏过程 五.代码分析 1.生成随机数的方法 2.设置随机数范围的方法 六.完整代码 一.前言 在学习了循环.分支.和函数之后,可以写一些简单的小游戏来给自己的编程之路增添一份乐趣.不仅提升了编码能力,还可以边学边玩,简直妙哉妙哉! 二.游戏逻辑 1.打印选择菜单(1.play.0.exit) 2.调用rand()函数生成随机数 3.设置随机数范围 4.猜数字 5.判断猜的大小 三.思维导图 四.游戏过程 五.代码分析 1.生成随机数的方法 仅仅使

  • C语言从猜数字游戏中理解数据结构

    目录 1 猜数字游戏-问题描述 2 问题分析 3 问题解决 3.1 猜一次 3.2 直到猜到为止 3.3 限定猜10次 3.4 处理特殊情况 3.5 猜下一个数 1 猜数字游戏-问题描述 这个游戏一点都不陌生,猜价格是一度很火的综艺节目.很多老师也用这个案例作为课堂案例.在这里,我想把重点放到“思维层面上”,即:为什么要这样写代码,就实现了猜数字游戏的功能. 我们先来说真人版的猜数字游戏: A:心里默默出一个数字(约定一个范围,假设[1-100]之间),开始猜把 B猜:50 A: 大了 B猜:2

  • C语言实现简单猜数字小游戏

    本文实例为大家分享了Java实现图片旋转的具体代码,供大家参考,具体内容如下 猜数字游戏是令游戏机随机产生一个100以内的正整数 用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较 并提示大了("Too big"),还是小了("Too small"),相等表示猜到了 如果猜到,则结束程序.程序还要求统计猜的次数,如果1次猜出该数,提示"Bingo!" 如果3次以内猜到该数,则提示"Lucky You!"

  • C语言超详细讲解猜数字游戏的实现

    目录 rand函数 srand函数 时间戳 完整代码与程序运行图 rand函数 先看一下下面这张图: 通过这张图我们可以了解到rand函数的返回值是int类型,形参为空,它的头文件<stdlib.h>以及它的返回值范围是0到RAND_MAX. 而RAND_MAX在VS中是0x7fff,转换成二进制就是32767.所以rand返回的随机数的范围就是0到32727. 其实我们用rand函数就可以生成随机数了,那为什么我们还要用到srand函数呢? 因为只有第一次生成的随机数是随机的,如果程序执行多

  • C语言超详细讲解字符串相乘

    目录 前言 一. 分析思路 二.使用步骤 1.代码如下 2.memset函数 三.总结 前言 我们已经知道,正常的两位整形数据通过*相乘,C语言中int为4字节,32bit(字节),其机器码第一位为符号位,余下31位表示数字,表示范围:-2^31(-2147483648)~2^31-1(2147483647),但超过了这个范围我们该如何做呢? 提示:将数字以字符串的形式进行操作 一. 分析思路 示例: 我们把每一个数都看成是一个字符串,每一个元素为十进制数字所对应的字 符,由于是后面的元素先进行

  • C语言超详细讲解轮转数组

    目录 题目描述 实例 解题思路 1. 先整体逆转 2.逆转子数组[0, k - 1] 3.逆转子数组[k, numsSize - 1] 易错点 代码 题目描述 给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数.OJ链接 实例 1.实例1 输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7

  • C语言超详细讲解数据结构中双向带头循环链表

    目录 一.概念 二.必备工作 2.1.创建双向链表结构 2.2.初始化链表 2.3.动态申请节点 2.4.打印链表 2.5.销毁链表 三.主要功能 3.1.在pos节点前插入数据 尾插 头插 3.2.删除pos处节点数据 尾删 头删 3.3.查找数据 四.总代码 List.h 文件 List.c 文件 Test.c 文件 五.拓展 一.概念 前文我们已经学习了单向链表,并通过oj题目深入了解了带头节点的链表以及带环链表,来画张图总体回顾下: 在我们学习的链表中,其实总共有8种,都是单双向和带不带

  • C语言超详细讲解循环与分支语句基础

    目录 写在开始 1. 分支语句 1.1 if语句 1.2 switch 2. 循环语句 2.1 while()语句 2.2 do while()语句 2.3 for 语句 for语句中表达式的省略 break在循环语句中的作用 continue 在循环语句中的应用 总结: 写在开始 在内容开始之前给大家介绍一下在计算机中如何表示真假 0表示假,非0表示真. 1. 分支语句 分支语句也叫做条件选择语句,主要分为if语句和switch语句. 1.1 if语句 if()…{} else if()…{}

  • C语言超详细讲解指针的概念与使用

    目录 一.指针与一维数组 1. 指针与数组基础 2. 指针与数组 3. 一个思考 二.指针与字符串 三.指针和二维数组 1. 指针数组与数组指针 2. 指针数组 3. 数组指针 一.指针与一维数组 1. 指针与数组基础 先说明几点干货: 1. 数组是变量的集合,并且数组中的多个变量在内存空间上是连续存储的. 2. 数组名是数组的入口地址,同时也是首元素的地址,数组名是一个地址常量,不能更改. 3. 数组的指针是指数组在内存中的起始地址,数组元素的地址是指数组元素在内存中的其实地址. 对于第一点数

  • C语言超详细讲解顺序表的各种操作

    目录 顺序表是什么 顺序表的结构体 顺序表的接口函数 顺序表相关操作的菜单 顺序表的初始化 添加元素 陈列元素 往最后加元素 往前面加元素 任意位置加元素 删除最后元素 删除前面元素 删除任意元素 整体代码(fun.h部分) 整体代码(fun.cpp部分) 整体代码(主函数部分) 结果展示 顺序表是什么 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素.使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数

  • C语言超详细讲解字符串函数和内存函数

    目录 字符串函数 长度不受限制的字符串函数 strlen strcpy strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查找以及错误报告 strstr strtok strerror 内存操作函数 memcpy memmove memcmp 字符串函数 长度不受限制的字符串函数 strlen size_t strlen ( const char * str ) 求字符串长度: 字符串以'\0' 作为结束标志,strlen函数返回的是在

  • C语言超详细讲解结构体与联合体的使用

    目录 结构体 offsetof-宏 位段 枚举 联合体(共用体) 结构体 结构体内存对齐问题: 当我们在计算结构体的大小时,我们便需要清楚的知道结构体内存对齐是什么. 存在内存对齐的原因可细分为两个: 平台原因: 不是所有的硬件平台都能方位任意地址上的任意数据:某些硬件平台只能在某些地址处取某些特定类型的数据,否则会抛出硬件异常. 性能原因: 首先内存对齐可以提高程序的性能,当访问未对其的内存空间时,有时候处理器需要进行两次访问,而当访问对齐的内存时,只需要一次就够了.这同时也被叫做 用空间换取

  • C语言超详细讲解宏与指针的使用

    目录 1.关于define 2.初识指针 (1)内存 (2)示例 (3)指针的使用示例 (4)指针变量的大小 1.关于define define是一个预处理指令,有两种用法,一种是用define定义常量:另外一种是define定义宏. 下面的例子为利用define定义常量 #define _CRT_SECURE_NO_WARNINGS #define MAX 1000 #include <stdio.h> int main() { printf("%d\n",MAX); r

随机推荐