猜数字游戏

文章介绍了C语言中的rand(),srand(),和time()函数用于生成伪随机数,强调了设置随机数种子的重要性。通过time()获取当前时间作为种子以确保每次运行结果不同,并给出了在猜数字游戏中应用这些函数的实例。
摘要由CSDN通过智能技术生成

目录

玩游戏之前我先介绍3个库函数

一。rand

二。srand

三。time

设置生成随机数的范围

猜数字游戏


玩游戏之前我先介绍3个库函数

一。rand

C语言提供了一个函数叫rand,这个函数可以生成随机数函数

使用这个函数需要包含头文件<stdlib.h>,该函数产生随机数的范围0~32767,但该函数产生的随机数是伪随机的,伪随机数不是真正的随机数,它是通过某种算法生成的随机数。真正的随机数是无法预测下一次生成的值是多少,就像买彩票一样。而rand函数就是对一个叫"种子"的基准值进行运算生成的随机数,运行效果如下:

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

int main()
{
	int i = 0;
	for (i = 1; i <= 5; i++)
	{
		printf("%d\n", rand());
	}
	return 0;
}

我们可以看出来第一次运行的结果和第二次运行的结果一样,不信的可以自己运行一次,之所以我们两次运行的结果是一样的,那是因为rand生成随机数默认种子是1,如果要生成不同的随机数,那就要使其种子发生变化。

二。srand

C语言提供了一个函数叫srand,他可以初始化随机数的生成器,也就是改变种子的基准值。

  1. 无返回型,接收类型是无符号整形
  2. 引用此库函数要包含头文件<stdlib.h>
  3. 该函数在程序运行过程中只需要执行一次

在使用时我们让seed的值变化起来就可以改变rand函数生成随机数的种子,所以如果我们让seed的值是随机数,那么rand生成的数也一定是随机的,那么在生成随机数的时候又需要一个随机数,那不就互相矛盾了,那有没有解决方法?

三。time

我们可以使用time函数的返回值作为生成随机数的种子,因为时间是一直在发生变化

  1. 这个函数使用时需要包含头文件<time.h>
  2. 它的参数类型是time* 我们传个NULL空指针也可以返回时间差
  3. 它的返回值是time_t,而time_t是32位或者64位的整形类型,它返回的是1970年1月1日0时0分0秒到我们现在运行程序时间的差值,单位是秒,这个时间差我们也叫做时间戳 http://shijianchuo.wiicha.com/

改写随机数代码:

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

int main()
{
	//使用time函数返回的时间戳作为种子
	//因为我们srand接收的参数是unsigned int类型,使用我们需要将time函数的返回类型强制转换
	srand((unsigned int)time(NULL));
	int i = 0;
	for (i = 1; i <= 5; i++)
	{
		printf("%d\n", rand());
	}
	return 0;
}

运行结果:

设置生成随机数的范围

如果我们生成的数要在1~100之间我们可以这么写

rand () % 100 + 1;    //  %100的余数是0~99,加1就变成了1~100

那如果我们要生成a~b的数字我们就可以这么写

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

猜数字游戏

游戏要求:

  1. 电脑自动生成1~100的随机数
  2. 玩家猜数字,猜数字的过程中,根据猜测数据的大小给出猜大了或猜小了的反馈,5次机会没猜中就退出,猜对了游戏结束
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//猜数字
void menu()
{
	printf("******************\n");
	printf("******1.play******\n");
	printf("******0.exit******\n");
	printf("******************\n");
}
void game()
{
	int n = rand() % 100 + 1; //生成1到100的数
	int count = 5;//最多猜5次
	int input = 0;
	while (count)
	{
		printf("请输入要猜的数字:");
		scanf("%d", &input);
		if (input > n)
		{
			printf("猜大了往小的猜\n");
		}
		else if (input < n)
		{
			printf("猜小了往大的猜\n");
		}
		else
		{
			printf("恭喜你猜对了\n");
			break;
		}
		//这里一定要--count,因为前置--是先减减后判断
		//如果是count--,那就是先判断后减减
		//那我们count等于1的时候假如猜错了执行if语句
		//那么它就会输出你还有0次机会,而不是输出你失败了,然后显示要猜的随机数
		if (--count) 
		{
			printf("你一共还有%d次机会\n", count);
			printf("--------------------\n");
		}
		//如果count等于0为假,!是取反操作,那么就!count就为真
		//所以当count等于0的时候就可以输出下面的语句
		else if (!count) 
		{
			printf("你失败了,正确的数字是:%d\n", n);
		}
	}
}

运行结果:

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值