请教高手,我这样编srand为什么不起作用?

供稿:hz-xin.com     日期:2025-01-14
srand怎么用

在c语言里面,两个函数包含在头文件里面,c++里面,标准库(被包含于中).
srand函数是随机数发生器的初始化函数。

原型:void srand(unsigned seed);
rand函数用来产生随机数,当然是伪随机数。
原型:int rand(void)
seed的作用:srand函数的作用是根据参数seed,设置一个随机起始点,而rand函数根据这个起始点,产生随机数序列。默认的随机种子为1。如果随机种子一样,rand函数所产生的随机序列也一样。
因此,为使每次程序运行都能产生不同的随机序列,每次都应产生一个不同的种子参数。

首先,srand/rand生成的是随机序列,不是真正完全不重复,无规则的数,而是基于某个种子数(一般是时间为种子,即time(0))计算的一个序列。当种子相同时,序列完全相同。
其次,srand应该是每组随机数调用一次,不是每次rand之前都调用,也不是调用一次后再也不调用。
第三,rand生成的随机序列是在0到RANDOM_MAX之间随机分布,通常rand() % M得到的0~M之间的随机数很可能不随机分布,正确的做法是
把RANDOM_MAX分成M段,每段有RANDOM_MAX / M + 1个数,rand()/(RANDOM_MAX/M +1)得到第X个分段。

因为运算速度太快,srand((unsigned int)time(0)); 中用的“现在时间”在5次循环中未变,rand()送返的伪随机数序列的第一个数相同。

你应把srand放到循环以外,让rand()依次送返的伪随机数。

或加入延时,使srand送返的种子发生可见的变化。

求c语言中的几个函数的说明(srand(),time(),rand())!!
srand(unsigned int seed);设置rand种子值 rand(void);随机数生成器 int main(void){ int i;time_t t;srand((unsigned) time(&t)); \/*将当前时间设置为rand的种子值*\/ printf("Ten random numbers from 0 to 99\\n\\n");for(i=0; i<10; i++)printf("%d\\n", rand() % 100); \/...

关于C语言编写程序的一个疑问 高手帮忙看看我的程序哪错了
srand( (unsigned)time( NULL ) ); \/\/埋下时间种子 char adj[100][12]={"开心的"}; \/\/补全剩下99个单词 char verb[100][8]={"开炮"}; \/\/补全剩下99个单词 char noun[100][12]={"美女"}; \/\/补全剩下99个单词 char pron[12][12]={"妈妈","爸爸","姐姐","杰杰...

PHP高手帮我解释下这段代码,急!!!
如20090906 mktime(0,0,0,09,06,2009) ,至于mt_srand 和mt_rand 都是产生一个随机码,他的用处主要表现在 表单动态的验证码处理上,不过这两个应经不使用了,从PHP5之后就已经可以自动完成了,利用 range就可以设置获得范围 如 $content=range(a,z) 就是 a-z之间的26个字母至于随机数 ...

keil中如何产生随机数?
这个函数在我一个项目里用过,测试通过,就直接传授给你吧:首先头文件写上:#include "stdlib.h"然后在后边就可调用rand()这个函数了.给你再具体说下吧,这里边还有些细节问题.实际上,随机函数有两个,srand和rand.要实现你说的功能得配合使用.函数一:int rand(void);从srand (seed)中指定的seed...

C语言中srand函数与rand函数产生随机数的问题
这里改一下:printf ("%d\\n", rand()%32767+1);。因为1个整数除以32767的余数肯定是在0~32766之间,加上1便可以保证结果在1~32767之间。

用C语言怎么随机产生10以内的奇数啊?
```- -~C版 include<stdio.h> include include<stdlib.h> define NUM 10 \/*生成多少个这样的数*\/ int main(void){ int i;srand(time(NULL)); \/*time(NULL)是得到当前时间,srand()是取一个种子好生成随机数*\/ for(i=0;i<NUM;i++)printf("\\n%d",rand()%5*2+1);\/*rand()生成...

c语言编写一个猜数字游戏
同学你好!下面是我自己做了一个,运行是成功的。希望对你有所帮助!include<stdio.h> include<stdlib.h> include<math.h> include void main(){ int i,j,cnt,guard=1;while(guard)\/*利用guard来判断是否继续进行游戏*\/ { srand((unsigned)time(NULL));i=rand()%100;\/*随机生成整数*\/ cnt...

C语言中rand函数的原理问题,高手快来~
1、只能产生伪随机数,最多也只是提高模拟的程度而已,rand函数内部管理着一个计数单位,程序每调用一次,它就根据这个计数单位和对应的srand产生种子的值,经过一系列的运算,得到随机值,其实就相当于你传了2个参数给rand(),比如是x是计数器的值,y是srand的值,那么:rand() = x*2 + y \/\/ ...

【c语言】编写一个猜数字游戏
guess the number!\\n");srand((unsigned)time(NULL));while(flag){ int i=rand()%100;\/\/?使用 % 而不是 \/ ,产生的数字在0-100之间,放在循环体内,每次循环都产生一个随机数 circle(i);printf("\\n继续玩请输入 1,退出请输入 0");scanf("%d",&flag);} getchar();return 0;} ...

C语言简单编程题目两道,求高手做一下。高分!!!
第1题 :include <stdio.h> include <stdlib.h> define MAX 200 int main(void){ int a[MAX], i = 0;srand(time(NULL)); \/\/ 时间种子, 保证真随机, 每次不会相同 while (i < MAX) { a[i] = rand() % 10000; \/\/ 随机获得10000以下数字, 0-9999 if (a[i] < 1000) { ...