C语言中产生随机数
2012-08-14 20:34
141 查看
C语言中产生随机数
C语言中是怎样产生随机数的呢?这就要用到rand()函数和srand()函数啦!那接下来就分几种情况看看在C语言中到底是怎么产生随机数的。
1、如果你只是要产生随机数,而不需要设定随机数的范围的话,这里你之需要用rand()函数就行啦!
举例:
结果:
在这里,你也会有两个疑问:(1)、为什么我设定范围,产生的随机数就这么大?
(2)、产生的不是随机数吗,为什么运行两次产生的随机数都是相同的呢?
第一个问题呢,这就要问stdlib.h啦!因为当调用rand()函数时,rand()会返回一个随机数值,而这个随机数的数值的范围实在0~RAND_MAX之间,但是RAND_MAX定义在stdlib.h中,且其值为2147483647。所以才导致产生随机数的值才那么大呀!
第二个问题呢,接下来才会讲,这里先透露一下,是因为随机数种子(seed)没有设置的原因呀!
2、如果你需要产生一个在一定范围内的随机数,你可以在函数中定义一个random(int number)函数,然后在main()函数里面直接调用random()函数就可以啦(当然random()函数的函数名是随便定义的啦,也可以取别的函数名,不过要便于阅读哟~)
举例:
结果:
很神奇吧!那它为什么就能把范围限定在0~15呢?这就得问问“#define random() (rand()%x)”啦,random()函数表示的意思是,把rand()产生的随机数对x取余数,这样就使得产生的随机数设置在0~x的范围内。
3、现在就来讨论1中的第二个问题啦,每次运行产生的随机数都是一样的,那样的话产生随机数的意义不就是不复存在啦吗?这就与srand()函数有关啦,srand()函数是用来设置rand()产生随机数时的随机数种子的;如果在调用rand()函数产生随机数之前,使用srand()设置一下随机数种子,那每次产生的随机数就不一样啦!由于上面两个例子中都没哟设置随机数种子,而rand()在调用时会自动的把随机数种子设置为1,从而导致rand()所产生的随机数值都是一样的呀!
在这里,你就会问:那我怎么设置随机数种子呢?一般,都是用当前的时间作为随机数种子,这样就能保证每次运行时都能取到不同的随机数序列。如:time_t t ;srand( (int) time(&t));
举例:
结果:
C语言中是怎样产生随机数的呢?这就要用到rand()函数和srand()函数啦!那接下来就分几种情况看看在C语言中到底是怎么产生随机数的。
1、如果你只是要产生随机数,而不需要设定随机数的范围的话,这里你之需要用rand()函数就行啦!
举例:
#include <stdio.h> #include <stdlib.h> int main() { int i = 0; for(i = 0; i < 10; i++) printf("%d\n",rand()); return 0; }
结果:
在这里,你也会有两个疑问:(1)、为什么我设定范围,产生的随机数就这么大?
(2)、产生的不是随机数吗,为什么运行两次产生的随机数都是相同的呢?
第一个问题呢,这就要问stdlib.h啦!因为当调用rand()函数时,rand()会返回一个随机数值,而这个随机数的数值的范围实在0~RAND_MAX之间,但是RAND_MAX定义在stdlib.h中,且其值为2147483647。所以才导致产生随机数的值才那么大呀!
第二个问题呢,接下来才会讲,这里先透露一下,是因为随机数种子(seed)没有设置的原因呀!
2、如果你需要产生一个在一定范围内的随机数,你可以在函数中定义一个random(int number)函数,然后在main()函数里面直接调用random()函数就可以啦(当然random()函数的函数名是随便定义的啦,也可以取别的函数名,不过要便于阅读哟~)
举例:
#include <stdio.h> #include <stdlib.h> #define random(x) (rand()%x) int main() { int i = 0; for(i = 0; i < 10; i++) printf("%d\n",random(16)); return 0; }
结果:
很神奇吧!那它为什么就能把范围限定在0~15呢?这就得问问“#define random() (rand()%x)”啦,random()函数表示的意思是,把rand()产生的随机数对x取余数,这样就使得产生的随机数设置在0~x的范围内。
3、现在就来讨论1中的第二个问题啦,每次运行产生的随机数都是一样的,那样的话产生随机数的意义不就是不复存在啦吗?这就与srand()函数有关啦,srand()函数是用来设置rand()产生随机数时的随机数种子的;如果在调用rand()函数产生随机数之前,使用srand()设置一下随机数种子,那每次产生的随机数就不一样啦!由于上面两个例子中都没哟设置随机数种子,而rand()在调用时会自动的把随机数种子设置为1,从而导致rand()所产生的随机数值都是一样的呀!
在这里,你就会问:那我怎么设置随机数种子呢?一般,都是用当前的时间作为随机数种子,这样就能保证每次运行时都能取到不同的随机数序列。如:time_t t ;srand( (int) time(&t));
举例:
#include <stdio.h> #include <stdlib.h> #include <time.h> #define random(x) (rand()%x) int main() { int i = 0; srand((int)time(NULL)); for(i = 0; i < 10; i++) printf("%d\n",random(16)); return 0; }
结果:
相关文章推荐
- C语言/C++中如何产生随机数
- C语言产生随机数
- 使用C语言产生任意分布的随机数
- C语言/C++中如何产生随机数
- C语言随机数的产生
- C语言如何产生一个随机数,rand函数的使用
- C语言产生随机数
- c语言中利用rand()time()srand()....产生随机数【4-5】猜数游戏
- C语言,如何产生随机数(各种转载)
- c语言产生随机数
- c语言 模拟骰子实验 产生随机数
- C语言/C++产生随机数
- C语言中随机数产生
- c语言之产生随机数详解
- C语言产生随机数的函数
- C语言/C++中怎样产生随机数
- C语言产生一个[M, N]区间上的随机数
- 使用C语言产生正太分布的随机数之四
- C语言产生随机数
- C语言/C++中怎样产生随机数