关于c语言中的rand()

为什么我用这随机产生的数字n=rand()%10;n总是1?运行多次n总是1,求解... 为什么我用这随机产生的数字n=rand()%10;
n总是1?运行多次n总是1,求解
展开
 我来答
liu冰歆
推荐于2016-06-18
知道答主
回答量:19
采纳率:0%
帮助的人:10.6万
展开全部
因为随机数种子不变
用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());初始化一下就行
贲鹏飞瓮宁
2019-06-11 · TA获得超过2.9万个赞
知道小有建树答主
回答量:1.1万
采纳率:27%
帮助的人:721万
展开全部
rand()是产生一个随机数,所以整句地意思就是将产生的随机数与
limit
/
(RAND_MAX
+
1)
相乘并将结果强制转换为长整形

+
1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
海狮2D
2012-05-20 · TA获得超过3019个赞
知道大有可为答主
回答量:1904
采纳率:55%
帮助的人:1000万
展开全部
楼上的说的基本正确,不过你只要理解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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逯智伟罕宁
2019-10-05 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:28%
帮助的人:646万
展开全部
(long)rand()*limit/(RAND_MAX+1)+1什么意思,解释下
rand()产生一个伪随机数..
将其强行装换为
long
型的
后面就是
四则运算了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-05-20
展开全部
是不是你的程序后面不注意给n赋值了。你在前面加个srand(unsigned int (time(NULL)));试试看
追问
int n;不算是赋值吧!!!!
追答
。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式