关于c语言中的rand()
5个回答
展开全部
因为随机数种子不变
用srand设置一个不同的随机数种子即可
例程
/* rand example: guess the number */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
int iSecret, iGuess;
/* initialize random seed: */
srand ( time(NULL) );
/* generate secret number: */
iSecret = rand() % 10 + 1;
do {
printf ("Guess the number (1 to 10): ");
scanf ("%d",&iGuess);
if (iSecret<iGuess) puts ("The secret number is lower");
else if (iSecret>iGuess) puts ("The secret number is higher");
} while (iSecret!=iGuess);
puts ("Congratulations!");
return 0;
}
用srand设置一个不同的随机数种子即可
例程
/* rand example: guess the number */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
int iSecret, iGuess;
/* initialize random seed: */
srand ( time(NULL) );
/* generate secret number: */
iSecret = rand() % 10 + 1;
do {
printf ("Guess the number (1 to 10): ");
scanf ("%d",&iGuess);
if (iSecret<iGuess) puts ("The secret number is lower");
else if (iSecret>iGuess) puts ("The secret number is higher");
} while (iSecret!=iGuess);
puts ("Congratulations!");
return 0;
}
追问
没能完全理解,估计这是利用时间来定义种子而产生随机数对吗?
追答
对
使用rand前用srand(time());初始化一下就行
展开全部
rand()是产生一个随机数,所以整句地意思就是将产生的随机数与
limit
/
(RAND_MAX
+
1)
相乘并将结果强制转换为长整形
在
+
1
limit
/
(RAND_MAX
+
1)
相乘并将结果强制转换为长整形
在
+
1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的说的基本正确,不过你只要理解rand是伪随机数就好了,rand是存在循环节的,时间长了会重复。
srand是设置开始的位置,所以一定记住,程序中只能用一次srand,用多了绝对不随机。
附,一个可能的srand/rand的源代码
static unsigned long next = 1;
int myrand(void) /* RAND_MAX assumed to be 32767. */
{
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned seed)
{
next = seed;
}
srand是设置开始的位置,所以一定记住,程序中只能用一次srand,用多了绝对不随机。
附,一个可能的srand/rand的源代码
static unsigned long next = 1;
int myrand(void) /* RAND_MAX assumed to be 32767. */
{
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned seed)
{
next = seed;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(long)rand()*limit/(RAND_MAX+1)+1什么意思,解释下
rand()产生一个伪随机数..
将其强行装换为
long
型的
后面就是
四则运算了
rand()产生一个伪随机数..
将其强行装换为
long
型的
后面就是
四则运算了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-05-20
展开全部
是不是你的程序后面不注意给n赋值了。你在前面加个srand(unsigned int (time(NULL)));试试看
追问
int n;不算是赋值吧!!!!
追答
。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询