一篇文章带你搞懂随机数

c语言作为java c++等语言的基层语言,其无可避免的有许多缺点,比如内存的操作过于复杂,随机数的调用麻烦等。

这里我们帮大家梳理以下随机数的产生和调用

·rand函数与其相伴的srand函数

              ·srand();的原理

·time()函数的引用

·srand与time的结合

·随机数的范围控制

目录

·rand函数与其相伴的srand函数

              ·srand();的原理

·time()函数的引用

·srand与time的结合

·随机数的范围控制


·rand函数与其相伴的srand函数

        Rand函数是的作用是我随机产生一个数,这个数说起来是随机的,但他本质上是基于srand函数的,如果我们不是用srand函数,只使用rand函数来生成数字,则会生成一串有规律的整数,这是因为srand函数被默认为一个常数(这里方便理解,我们记为1);

        每一个srand产生的数,在进入rand函数时就是产生一系列算法计算,来生成rand中的数。

这种指数倍增的方法可以提高访问速度,减小内存使用。

(灵魂画手警告)

上面是srand生成的数(记为A),下面是基于A说生成的一串数字;

·srand();的原理

Srand函数服务于rand函数,目的在于为rand函数提供一个常数来激发其产生字符

其使用方法为:srand();里面放的是一个数,由这个数激发rand产生数,由这个产生的数再激发rand产生字符。

 ·time()函数的引用

    我们前面提到过,srand需要一个数来激发他,这个数必须是完全随机的,这里我们才用time时间戳;

    时间戳,是指当前系统时间与计算机的诞生时间 1971.1.1间的距离差值,是一个以秒为单位的整型,每时每刻都不一样

Time(null);表示返回一个差值数;

·srand与time的结合

Srand((unsigned int)time(Null));

根据上面所讲的,这里通过time为srand产生了一个数,也就为rand产生了一串数字

 

(再次灵魂画手)

·随机数的范围控制

再产生数字后,我们要想办法控制他的范围

我们才用%取模的方法,A%B

取模算的是余数,也就是从这个A数中,拿走n个B,拿到剩下的数都小于B为至,因此利用这个特性,我们可以控制rand的范围

Int ret =rand()%100; //控制rand产生的数为 0 到 99(拿不走100)了;

·代码整理

#include <stdio.h>
#include <stdlib.h> //rand函数的头文件
#include <time.h> //time头文件
Int main()
{
srand((unsigned int)time(null));
Int red = rand()%100; //控制为 0~99
return 0;
}

·项目实战

猜数字小游戏

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu();
void playgame();
int main()
{
	int sc = 0;
	int flag = 0;
	srand((unsigned int)time(NULL));
	do 
	{
		menu();
		scanf_s("%d", &sc);
		switch (sc)
		{
		case 1:
			printf("游戏开始\n");
			playgame();
			break;
		case 2:
			flag = 1;
			break;
		default:
			printf("输入错误,请重新输入\n");
		}
		if (flag)
		{
			printf("结束游戏,正在退出");
			break;
		}
		system("PAUSE");//系统PAUSE
		system("CLS");//清屏
		system("PAUSE");//系统PAUSE
	} while (1);
	return 0;
}
void menu()
{
	printf("---------------------\n");
	printf("******1、Play  ******\n");
	printf("******2、Exit  ******\n");
	printf("---------------------\n");
}
void playgame()
{
	int red = rand() % 100 + 1; //生成 1~100
	int n = 0;
	while (1)
	{
		printf("请输入您所猜的数>\n");
		scanf_s("%d", &n);
		if (n < red)
			printf("猜小了\n");
		else if (n > red)
			printf("猜大了\n");
		else if (n == red)
			break;
	}
	printf("恭喜您猜中了,游戏结束\n");
	
}

谢谢大家!关注嘉然,顿顿解馋! 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值