C语言-rand+srand+time的使用

1.随机数字的生成

rand

随机数字的生成需要rand,这里需要知道的是rand需要头文件是stdlib,也就是#include<stdlib.h>。 这里的循环可以用for

所以我们可以在主函数里面写出

#include<stdio.h>
#include<stdlib.h>//rand头文件

int main()

{

   printf("%d\n",rand());//rand括号里面在第一次打印的时候会生成随机数字,\n换行 

   printf("%d\n",rand());

   return 0;

}

printf("%d\n",rand()),但是这里面需要知道的是rand是数字确实是随机生成的数字,但是不是真正的随机数字,因为如果你打印出来就会发现,只有第一次的数字是随机的,之后的数字不是随机的,也就是说此时的随机生成数字是伪随机。

原因是rand函数是对应一个叫做种子的基准,如果你想改变每次随机的数字,而不是只是第一次的数字,你就要改变种子的基准。

srand

在C语言里面又提供一个函数,叫做srand,是用来初始化随机数的生成器的

下面举例

#include<stdio.h>
#include<stdlib.h>//rand头文件

int main()

{
   srand(1)

   printf("%d\n",rand());// 此时的数字是41

   printf("%d\n",rand());//此时数字是18467

   return 0;
}


#include<stdio.h>
#include<stdlib.h>//头文件

int main()

{
   srand(2)

   printf("%d\n",rand());//此时的数字45 

   printf("%d\n",rand());//此时数字是29216

   return 0;
}
//这里面的是举例数字

此时你需要知道,当srand里面的数字发生变化的时候,rand打印的数字也发生变化,但是我们不可能每次都去手动改变srand是数字。所以C语言里面又引入一个叫做time 的东西

time

什么是time,简单说的就是时间,也就是srand的变化数值和时间有关系。time的意思就是,函数会返回当前的日历时间,简单说就是,返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值,单位是秒。返回类型是time_t,  time_t函数类型本质上就是32或者64位的整数类型。

而如果time是NULL,则就只是返回当前时间的差值。time返回的这个时间差也被成为;时间戳。time需要包含的头文件是time.h

此时举例time的使用

#include<stdio.h>
#include<stdlib.h>//rand头文件

int main()

{
   srand((unsigned int)time(NULL))
//这里面是time(null)也就是之前的时间到当前的时间,
时间每秒都会变化,所以srand也是每次都会变化,为什么
要前面加上unsigned int 因为有些编译器会显示又=有危险,
这时候我们强制转换就可以了。

   printf("%d\n",rand());// 此时的数字是41

   printf("%d\n",rand());//此时数字是18467

   return 0;
}

但是因为此时生成的随机值比较大,总的数值是32767,也就是你取值是从0-32767这个区间取值,如果你需要的猜字游戏只是十几个人或者几百个数字,那怎么办。很简单。此时只需要如下操作就可以任意更改你需要的时间

#include<stdio.h>
#include<stdlib.h>//rand头文件
#include<time.h>//time头文件
1.
printf("%d\n",rand());//把这个代码变成下面的代码
printf("%d\n",rand() % 100);
//%是一个模运算符,表示将 rand() 函数生成的随机数对100取模。
也就是说,无论 rand() 生成的随机数是多少,它都会在0到99之间。

2.
printf("%d\n",rand() % 100+1);//此时随机生成的数字是在0-100之间

3.
printf("%d\n",100 + rand() % 100+1);//此时生成的数字在100-200之间

4.
printf("%d\n",a + rand() % (b-a+1));//随机生成a-b之间的数字

此时随机数值的操作已经完成。

代码1
#include<stdio.h>
#include<stdlib.h>//rand头文件
#include<time.h>//time头文件
int main()

{
   srand((unsigned int)time(null));//直接翻译,随机数字


   printf("%d\n",rand() % 100+1);//取值1-100之间


   return 0;
}




代码2 生成的是10-20的随机数字
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>//rand头文件
#include<time.h>//time头文件
int main()
{
	srand((unsigned int)time(NULL));
		printf("%d\n", 10+rand() % 10 + 1);


	return 0;
}

此时因为没有输入数值,所以直接打印的就是是随机数字。所以此时随机数字的生成就结束了。

此时如果你需要的只是随机抽取一个人对应的座位号,那到这里就结束了。

增加

在C/C++编程中,srand函数用来设置随机数生成器的种子。种子是随机数生成算法的初始值,不同的种子会产生不同的随机数序列。

下面是两个srand函数调用的例子:

  1. srand((unsigned int)time(NULL));
  2. srand(time(0));

这两个调用在功能上是相同的,都是使用当前时间作为种子来初始化随机数生成器。不过,它们在语法上有一些细微的差别:

  • time(NULL)time函数的第一个参数是一个time_t类型的指针,当传入NULL时,表示我们不需要函数返回的时间字符串,只关心获取当前时间的整数值。NULL是一个宏,通常定义为0或者(void *)0,表示一个空指针。
  • time(0):这里的0NULL的简写形式,因为NULL在C/C++中通常定义为0。所以,time(0)time(NULL)在功能上是等价的。

在第一个调用中,将time(NULL)的结果强制转换为unsigned int类型。这个转换通常是多余的,因为time函数返回的已经是time_t类型,它在大多数平台上都是一个无符号整数类型,与unsigned int兼容。这个转换可能是为了显示类型转换的语法,或者是为了确保跨平台的兼容性。

总的来说,这两个srand函数调用在实际效果上没有区别,它们都会使用当前时间作为种子来初始化随机数生成器。然而,第一个调用中的类型转换是不必要的,第二个调用更为简洁。在实际编程实践中,推荐使用srand(time(NULL))或者srand(time(0)),两者都可以,选择哪一个主要取决于个人或团队的编码风格偏好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值