C语言实现随机数,及猜数字小游戏

怀心之所爱,奔赴山河

前言

最近在复习c的知识,想起之前写过一个猜数字小游戏,所以今天就把自己关于随机数的使用经验分享一下,希望对大家有帮助。

一.rand函数

1.函数的声明如下

可以看到,返回值是int类型,不需要传参,需要调用头文件<stdlib.h>

他会产生一个伪随机数,我们暂将其成为a,a大于等于0且小于等于RADN_MAX

(在大多数编译器下他是32767)。

2.举例

int a=rand()%100;

则a的值是0到99,那我们怎么得到1到100呢?

方法:int a=rand()%100+1;

二srand函数

我们发现,在使用rand()函数时每次运行代码随机值都不变,为什么呢,

我们去搜搜他的相关信息就会发现这一句话

翻译:rand函数返回在0到RAND_MAX范围内的伪随机整数。在调用rand之前,请使用srand函数对伪随机数生成器进行种子初始化。

这里提到了一个名词“种子”,你可以把它理解为创建随机数的基准,不同的种子对应不同的随机数组,默认种子为1,因此我们想实现随机数就要用到不同的种子,那就要用srand函数了

函数定义:

ok可以发现,函数没有返回值,传参类型是unsigned int,头文件是<stdlib.h>

调用它可以为rand设置一个种子,即你传的参数。

3.time函数

为了使种子一直变化我们要引入时间戳了。

时间戳是当前时间与1970年1月1日0时0分0秒的差值,单位是秒,

time函数的声明如下:

time_t   time(time* p);

time_t是32位或64位下的整形

若传入的指针不是空指针则返回值会被存入,若是空指针则函数只返回值,这个值就是时间戳。

综上,我们就可以写出随机数了

srand((unsigned int)time(NULL));
	int a = rand() % 100;

猜数字游戏:

为了让它更像游戏,我们可以给他做个菜单,并用函数封装一下

void menu()
{
	printf("###########################\n");
	printf("########## 开始游戏 ########\n");
	printf("###########################\n");
}

接着创建变量,使用随机数

int count = 10;
	int C = count;
	srand((unsigned int)time(NULL));
	int a = rand() % 100;
int b;

我们规定她输入的数比那个随机数大了,我们就说猜大了

比随机数小就说猜小了

在她成功猜出后告诉他猜了几次猜出来的

在做个小小的惩罚机制,如果超过10次则电脑关机

这里要用到关机指令

system("shutdown -s -t 5");

代码如下

menu();
		printf("你要猜的数大于等于0小于100\n");
		int n;
		while (1)
		{
			scanf("%d", &n);
			if (n == a) {
				count--;
				printf("好好好,用了%d次猜对了\n", C - count);
				count = 5;
				goto again;
			}
			else if (n > a) {
				count--;
				if (!count)
				{
					printf("你的电脑会在5秒后关机\n");
				system("shutdown -s -t 5");
			}
				printf("猜大了,小黑子!就剩%d次了\n", count);
			}
			else
			{
				count--;
				if (!count)
				{
					printf("你的电脑会在5秒后关机\n");
					system("shutdown -s -t 5");
				}

				printf("猜小了,行不行啊小趴菜!就剩%d次了\n", count);

			}
		}

最后,让用户选择是继续玩还是停止

用if else即可

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
void menu()
{
	printf("###########################\n");
	printf("########## 开始游戏 ########\n");
	printf("###########################\n");
}
int main()
{
	int count = 10;
	int C = count;
	srand((unsigned int)time(NULL));
	int a = rand() % 100;
int b;
again:
	printf("玩游戏输入1  不玩输入0\n");
	scanf("%d", &b);
	if (b == 1)
	{
		menu();
		printf("你要猜的数大于等于0小于100\n");
		int n;
		while (1)
		{
			scanf("%d", &n);
			if (n == a) {
				count--;
				printf("好好好,用了%d次猜对了\n", C - count);
				count = 5;
				goto again;
			}
			else if (n > a) {
				count--;
				if (!count)
				{
					printf("你的电脑会在5秒后关机\n");
				system("shutdown -s -t 5");
			}
				printf("猜大了,小黑子!就剩%d次了\n", count);
			}
			else
			{
				count--;
				if (!count)
				{
					printf("你的电脑会在5秒后关机\n");
					system("shutdown -s -t 5");
				}

				printf("猜小了,行不行啊小趴菜!就剩%d次了\n", count);

			}
		}
	}
	else if (b == 0)
	{
		printf("哥哥这莫好玩的的游戏居然不玩,我emo了\n");
		return 0;
	}
	else
		printf("你故意输错是吧,呵男人\n");
	goto again;
}

ok,可以自己试试写写,然后把代码发给朋友让他挑战一下

感觉有用的话就点个赞支持一下吧

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值