首页 > 其他分享 >C语言 分支和循环(下)--随机数的生成和猜数字小游戏的实现

C语言 分支和循环(下)--随机数的生成和猜数字小游戏的实现

时间:2023-07-27 19:32:48浏览次数:39  
标签:rand 函数 -- time C语言 小游戏 随机数 printf 生成

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

一.随机数的生成

1.rand

  • 原型:这个函数可以帮我们生成随机数

C语言 分支和循环(下)--随机数的生成和猜数字小游戏的实现_封装

  • 在这写void的意思是这个函数不需要参数
  • rand函数会返回一个伪函数,这个随机数的范围实在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上的实现的。
  • rand函数的使用条件需要包含一个头文件是:stdlib.h

C语言 分支和循环(下)--随机数的生成和猜数字小游戏的实现_#include_02

  • 两次生成的随机值一样,由此我们可以发现rand函数生成的是伪随机数,真正的伪随机数是无法预测下一个数是多少的。rand函数是对一个叫”种子“的基准值进行运算生成的随机数
  • 之前每一次运行程序所产生的随机数序诗一样的,那是因为rand函数生成的随机数的默认种子是1。
  • 如果要生成不同的随机数,就要让种子是变化的.

2.srand

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

C语言 分支和循环(下)--随机数的生成和猜数字小游戏的实现_封装_03

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

3.time

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

C语言 分支和循环(下)--随机数的生成和猜数字小游戏的实现_#include_04

  • time函数会返回当前的日历时间,返回程序运行当前的时间点和1970年1月1日0分0秒之间的差值。time函数返回的差值叫时间戳。
  • time函数返回的值的类型是time_t,time_t类型本质上是32位或64位的整型类型。其实就是int类型或long long类型。
  • time函数的参数timer如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存
  • 随机数的生成程序如下

C语言 分支和循环(下)--随机数的生成和猜数字小游戏的实现_#include_05

  • 中带回去。

1.4设计随机数的范围

C语言 分支和循环(下)--随机数的生成和猜数字小游戏的实现_#include_06

二.猜数字游戏的实现

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

void menu()//这个就像封装的模块一样,就是把这一段代码的功能封装到一个函数中,当我们用到的这个功能的时候,直接调用就行了
           //就像拼乐高一样,把所有能调用的模块拼装到一起,就完成了这个功能,下面的game函数也是一样的功能
	       //这个函数只需要完成它的功能即可,不需要返回,需要返回的话当然也能返回
{
	printf("**********************\n");
	printf("*****  1. play  ******\n");
	printf("*****  0. exit  *******\n");
	printf("**********************\n");
	
}

void game()
{
	int guess = 0;
	//1.生成随机数
	int r = rand()%100+1;
	//printf("%d\n", r);
	//2.猜数字
	int count = 5;
	while (count)
	{
		printf("请猜数字:>");
		scanf("%d", &guess);
		if (guess > r)
		{
			printf("猜大了\n");
		}
		else if (guess < r)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		count--;
	}
	if (count == 0)
	{
		printf("猜数字失败,正确的值是:%d\n", r);
	}
}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//srand函数只需要调用一次即可,所以我们将他放入主函数
	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;
}

这个猜数字游戏就是对以前所学循环和语句的综合运用的体现

标签:rand,函数,--,time,C语言,小游戏,随机数,printf,生成
From: https://blog.51cto.com/u_16202084/6871722

相关文章

  • Mysql索引优化实战
    Mysql索引优化实战在进行Mysql数据库的查询优化时,索引的优化是至关重要的一环。索引可以大大提高数据库的查询速度,减少查询的资源消耗。本文将介绍Mysql索引的基本原理和常用的索引优化技巧,并提供一些代码示例供读者参考。什么是索引?索引是一种数据结构,可以帮助数据库系统快速定......
  • Mysqldump 导出文件特别大
    Mysqldump导出文件特别大在处理大型数据集时,MySQL数据库备份是一个常见的任务。mysqldump是一个常用的命令行工具,用于导出MySQL数据库的备份。然而,当数据库非常大时,导出的备份文件可能会变得非常庞大,这可能会导致一些问题。本文将介绍如何使用mysqldump导出大型数据库的备......
  • Mysql 存储过程 变量 表名
    Mysql存储过程变量表名实现流程为了实现“Mysql存储过程变量表名”,我们将按照以下步骤进行操作:步骤操作1创建存储过程2定义变量3拼接表名4使用动态SQL语句下面是每一步需要做的具体操作及相关代码:步骤一:创建存储过程使用CREATEPROCEDURE语句......
  • Mysql > <会走索引嘛
    Mysql><会走索引嘛在MySQL中,索引是一种用于提高查询效率的数据结构。通过创建索引,可以加速数据库的查询操作,减少数据库的IO操作,从而提高整体性能。但是,并不是所有的查询都会走索引,有时候即使创建了索引,查询也可能不会使用索引。索引的作用索引在数据库中起到了加快查询的作用,......
  • 手把手叫你用android 调研web services
    StepbyStepMethodtoAccessWebservicefromAndroidByMihiraPrasanna|24Sep2010JavaMobileAndroidHowtoaccesswebservicefromAndroidmobileapplication PartofTheMobileZoneSeeAlsoMorelikethisMoreby......
  • Apache Log4j配置说明
    ApacheLog4j配置说明本文详细介绍Log4j的所有配置属性。author:ZJ 07-3-17Blog: [url]http://zhangjunhd.blog.51cto.com/[/url]1.Log4j简介Log4j是Apache的一个开源项目,它允许开发者以任意间隔输出日志信息。Log4j主要由三大类组件构成:1)Logger-负责输出日志信息,并能够......
  • 正点原子Ubuntu入门015---shell脚本入门
    一、什么是shell脚本shell脚本类似于Windows的批处理文件,shell脚本就是将连续执行的命令写成一个文件shell脚本提供数组、循环、条件判断功能。shell脚本一般是Linux运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握基本的命令即可二、shell脚本的写法shell脚......
  • 何为DDD
     从这一刻开始,请大家忘记自己是一名技术人员,用业务的角度来思考问题。 1、什么是DDDDDD(Domain-drivendesign,领域驱动设计),是一个很好的应用于微服务架构的方法论DDD要求项目全生命周期中,所有岗位人员都基于业务的角度去思考问题,而不是基于技术角度。“......
  • 智能制造:数字化未来,开启工业新纪元!
    随着科技的不断发展和人工智能的日益成熟,智能制造正成为当今工业界的热门话题。智能制造是一种以先进技术为支撑,通过数字化、网络化、智能化手段来提升生产效率、优化生产流程的现代化制造模式。 在智能制造中,物联网、大数据、云计算、人工智能等技术的应用,让设备、工件和工序......
  • 最短路
    无向图Dijkstra(只能解决正权边,单源)它的逻辑可以理解为走当前最近可到达的且无法确定它是不是最短路的一个点,找它的最短路点击查看代码voidsolve(){intn,m,s;cin>>n>>m>>s;memset(dis,0x3f,sizeof(dis));for(inti=1;i<=m;i++){inta,b,c;......