srand() 函数怎么用.?

zhou_zc 2011-05-17 07:55:20
我知道他需要一个种子..

但是不理解跟rand()什么关系。

比如要随机 产生100个1-10之间的整数

rand()%10+1;

什么时候用 srand()?


额... 表达能力不好,不知道怎么说, 你们能明白我说的什么意思吗?
...全文
764 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhou_zc 2011-05-19
  • 打赏
  • 举报
回复
谢谢大家哦, 我明白了。
firefoxbug 2011-05-18
  • 打赏
  • 举报
回复
我们在产生随机数的时候,如果单纯地用rand产生的只是伪随机数,每次程序执行的时候其实都只是在重复这些顺序,所以就需要随机化,可以采用srand来实现,先unsigned seed然后在
srand(seed),将种子随机化,便可以尝试随机数。
我真的是琦琦 2011-05-18
  • 打赏
  • 举报
回复
srand()产生一个随机数种子~~~~
zhou_zc 2011-05-18
  • 打赏
  • 举报
回复
唉, 看的一知半解的。[Quote=引用 2 楼 yangsen600 的回复:]

用rand()之前用srand()呀。。。
[/Quote]
alang512 2011-05-18
  • 打赏
  • 举报
回复
也就是说: 只使用rand函数,则 每次运行主函数,产生第一个随机数的种子一直都不更新,所以产生随机数都不变。在rand函数基础上,再使用srand函数,每次运行主函数,产生第一个随机数的种子不断的更新,产生随机数就发生变化。 种子利用一个魔术般的公式来产生随机数。
alang512 2011-05-18
  • 打赏
  • 举报
回复

今晚 我整理好 这个资料 ,再告诉你
QQ515311445 2011-05-18
  • 打赏
  • 举报
回复
srand();
rand();
赵4老师 2011-05-18
  • 打赏
  • 举报
回复
记住srand只在程序初始化时调用1次,千万不要在调用rand的循环中再调用第二次了。
赵4老师 2011-05-18
  • 打赏
  • 举报
回复
产生0~0x7FFFFFFFL之间的随机整数偶用
unsigned long RL;
RL=((unsigned long)rand()<<16)|(((unsigned long)rand()<<8)&0x0000FF00UL)|((unsigned long)rand()&0x000000FFUL);
xspace_time 2011-05-18
  • 打赏
  • 举报
回复
运行了下老邓的程序,看起来不错
cqltwslt 2011-05-17
  • 打赏
  • 举报
回复
srand一般与rand配套用,在前面有#include<time.h>再将
srand(time(NULL))加入源文件中。
老邓 2011-05-17
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define RANDOM_MAX 0x7FFFFFFF

static long my_do_rand(unsigned long* value)
{
/*
这个算法保证所产生的值不会超过(2^31 - 1)

这里(2^31 - 1)就是 0x7FFFFFFF。而 0x7FFFFFFF

等于127773 * (7^5) + 2836,7^5 = 16807。

整个算法是通过:t = (7^5 * t) mod (2^31 - 1)

这个公式来计算随机值,并且把这次得到的值,作为

下次计算的随机种子值。
*/
long quotient, remainder, t;
quotient = *value / 127773L;
remainder = *value % 127773L;
t = 16807L * remainder - 2836L * quotient;
if (t <= 0)
t += 0x7FFFFFFFL;
return ((*value = t) % ((unsigned long)RANDOM_MAX + 1));
}

static unsigned long next = 1;

int my_rand(void)
{
return my_do_rand(&next);
}

void my_srand(unsigned int seed)
{
next = seed;
}

int main()
{
int i;
my_srand((unsigned)(time(NULL)));
for (i = 0; i < 100; i++)
{
if (i % 10 == 0)
printf("\n");
printf("%d\t", my_rand() % 99 + 1);
}
system("pause");
return 0;
}
老邓 2011-05-17
  • 打赏
  • 举报
回复
看看这个源码,有何感想?
#include <stdio.h>
#include <stdlib.h>

#define RANDOM_MAX 0x7FFFFFFF

static long my_do_rand(unsigned long *value)

{

/*

这个算法保证所产生的值不会超过(2^31 - 1)

这里(2^31 - 1)就是 0x7FFFFFFF。而 0x7FFFFFFF

等于127773 * (7^5) + 2836,7^5 = 16807。

整个算法是通过:t = (7^5 * t) mod (2^31 - 1)

这个公式来计算随机值,并且把这次得到的值,作为

下次计算的随机种子值。

*/

long quotient, remainder, t;

quotient = *value / 127773L;

remainder = *value % 127773L;

t = 16807L * remainder - 2836L * quotient;

if (t <= 0)

t += 0x7FFFFFFFL;

return ((*value = t) % ((unsigned long)RANDOM_MAX + 1));

}

static unsigned long next = 1;

int my_rand(void)

{

return my_do_rand(&next);

}

void my_srand(unsigned int seed)

{

next = seed;

}

#include <time.h>

int main()

{

int i;

my_srand((unsigned)(time(NULL)));

for (i = 0; i < 100; i++)

{

if (i % 10 == 0)

printf("\n");

printf("%d\t", my_rand() % 99 + 1);

}

system("pause");

return 0;

}
千杯不醉-sen 2011-05-17
  • 打赏
  • 举报
回复
用rand()之前用srand()呀。。。
king_ss_ 2011-05-17
  • 打赏
  • 举报
回复
srand是用来设置随机时间的种子,一般与rand()结合使用。否则直接用rand()的话,每次运行程序的结果都相同。
原型:int srand (unsigned int seed);
srand((unsigned) time(&t));此句的参数使用time()函数获得系统时间作为种子,并且把获得的时间强制转换为unsigned。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧