c语言作为java c++等语言的基层语言,其无可避免的有许多缺点,比如内存的操作过于复杂,随机数的调用麻烦等。
这里我们帮大家梳理以下随机数的产生和调用
·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");
}
谢谢大家!关注嘉然,顿顿解馋!