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
函数调用的例子:
srand((unsigned int)time(NULL));
srand(time(0));
这两个调用在功能上是相同的,都是使用当前时间作为种子来初始化随机数生成器。不过,它们在语法上有一些细微的差别:
time(NULL)
:time
函数的第一个参数是一个time_t
类型的指针,当传入NULL
时,表示我们不需要函数返回的时间字符串,只关心获取当前时间的整数值。NULL
是一个宏,通常定义为0
或者(void *)0
,表示一个空指针。time(0)
:这里的0
是NULL
的简写形式,因为NULL
在C/C++中通常定义为0
。所以,time(0)
和time(NULL)
在功能上是等价的。在第一个调用中,将
time(NULL)
的结果强制转换为unsigned int
类型。这个转换通常是多余的,因为time
函数返回的已经是time_t
类型,它在大多数平台上都是一个无符号整数类型,与unsigned int
兼容。这个转换可能是为了显示类型转换的语法,或者是为了确保跨平台的兼容性。总的来说,这两个
srand
函数调用在实际效果上没有区别,它们都会使用当前时间作为种子来初始化随机数生成器。然而,第一个调用中的类型转换是不必要的,第二个调用更为简洁。在实际编程实践中,推荐使用srand(time(NULL))
或者srand(time(0))
,两者都可以,选择哪一个主要取决于个人或团队的编码风格偏好。