srand(time(NULL));//这条指令什么意思?

#include<stdio.h>#include<stdlib.h>#include<time.h>#include<stdbool.h>intmain(){//S:黑... #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>

int main()
{
//S:黑桃 H:红心 C:草花 D:方块
char suits[] = {'S', 'H', 'C', 'D'};
//等级
char ranks[] = {'2','3','4','5','6','7',
'8','9','t','J','Q','K','A'};
int n;//产生几张牌
printf("你要必张牌:");
scanf("%d", &n);
srand(time(NULL));//这条指令什么意思?
bool f[4][13] = {false};
int i;
for(i=0; i<n; i++){
int s = rand()%4;
int r = rand()%13;
if(f[s][r]){
i--;
continue;
}
f[s][r] = true;
printf("%c%c ", suits[s], ranks[r]);
}
printf("\n");
}
展开
 我来答
床前明月儿
高能答主

2019-09-30 · 探索生活中的另一种可能
床前明月儿
采纳数:101 获赞数:171939

向TA提问 私信TA
展开全部

意思是利用系统时间,返回一个随机数。

srand函数是随机数发生器的初始化函数。原型:void srand(unsigned int seed);srand和rand()配合使用产生伪随机数序列。

TIME 返回的小数值为 0(零)到 0.99999999 之间的数值,代表从 0:00:00 (12:00:00 AM) 到 23:59:59 (11:59:59 P.M.) 之间的时间。


扩展资料

srand设置产生一系列伪随机数发生器的起始点,要想把发生器重新初始化,可用1作seed值。任何共它的值都把发生器匿成一个随机的起始点。rand检索生成的伪随机数。在任何调用srand之前调用rand与以1作为seed调用srand产生相同的序列。

此函数可以设定rand函数所用的随机数产生演算法的种子值。任何大于一的种子值都会将rand随机数所产生的虚拟随机数序列重新设定一个起始点。

参考资料来源:百度百科-time函数

参考资料来源:百度百科-srand

幻翼高达Zero
2019-05-27 · TA获得超过1.7万个赞
知道答主
回答量:499
采纳率:0%
帮助的人:7.7万
展开全部

“srand(time(NULL));”这条指令的意思是利用系统时间来初始化系统随机数的种子值,使得每次运行由于时间不同产生而产生不同的随机数序列。

srand函数是随机数发生器的初始化函数。它的原型是“void srand(unsigned int seed);”srand和rand()配合使用产生伪随机数序列。

rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。

srand(unsigned seed)函数通过参数seed来改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。

通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。

扩展资料:

rand()函数的使用注意事项:

1、使用该函数首先应在开头包含头文件stdlib.h。

2、在标准的C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。

3、rand()函数没有输入参数,直接通过表达式rand()来引用。

4、因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以C语言的随机并不是真正意义上的随机,有时候也叫伪随机数。

5、为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过伪随机数生成器提供一粒新的随机种子。函数 srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同,rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。

参考资料来源:百度百科-srand

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
uid37021
推荐于2017-12-15 · TA获得超过685个赞
知道答主
回答量:39
采纳率:0%
帮助的人:43万
展开全部
srand

  srand函数是随机数发生器的初始化函数。
  原型:void srand(unsigned seed);
  用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。srand((int)getpid()); 使用程序的ID(getpid())来作为初始化种子,在同一个程序中这个种子是固定的。
追问
srand(1)直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化//初始化为srand(0)呢?也会随机数重复?你说的重复是 重复出现初始化的数?所以传时间进去,
要是随即时间,传数进去?
上面程序要改成srand((unsigned) time(&t));//直接加上这句就行?
追答
电脑的随机数都是伪随机,也就是通过一定的算法得出一个数列,然后每 rand()一次就取一个数。
而srand()的功能就是就是设置产生随机数的公式的参数(随机数种子),如果使用相同的种子,那么得到的随机数也就是相同的。自然,如果使用不同的种子,得出的随机数序列也是不同的。
不同的种子会得到 固定 的 不同的随机数序列。

例如:
void main()
{
srand(1);
cout<<rand()<<endl;
cout<<rand()<<endl;
srand(1);
cout<<rand()<<endl;
cout<<rand()<<endl;
srand(2);
cout<<rand()<<endl;
cout<<rand()<<endl;
srand(2);
cout<<rand()<<endl;
cout<<rand()<<endl;
}
输出结果:
41
18467
41
18467
45
29216
45
29216
由于通过srand(1)和srand(2)设置了不同的随机数种子
所以产生了两组不同的随机数,这组数与种子相对应。

那么怎么利用rand产生真正的“随机数”呢?
答案是通过srand(time(NULL))使得随机数种子随时间的变化而变化。
PS:time函数可以获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。

参考资料: baidu baike

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9009696ee9f
2020-04-15 · TA获得超过3万个赞
知道小有建树答主
回答量:1.1万
采纳率:31%
帮助的人:640万
展开全部
第一,srand(time(null));
//是以当前时间为种子,产生随意数。其中,time(null)用来获取当前时间,本质上得到的是一个大整数,然后用这个数来随机数。
第二,这个错误应该是代码中写楼了什么东西造成的,最大的可能应该是大括号少了一半或者好多半。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
落枫99521
2020-10-22
知道答主
回答量:1
采纳率:0%
帮助的人:553
展开全部
利用系统时间,返回一个随机数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式