LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3435|回复: 18

简单问题(关于产生随机数)

[复制链接]
发表于 2003-6-1 08:54:54 | 显示全部楼层 |阅读模式
我现在想要一个随机数,不知道liux底下c产生随机数的函数是什么,请大侠给我一个产生随机数的简单例子看看,不胜感激!!
发表于 2003-6-1 10:15:15 | 显示全部楼层
应该也是sand();或用srand()吧!
srand()是种种子的!
发表于 2003-6-1 10:22:40 | 显示全部楼层
you can write a random number generate function .if you need look:http://www.linuxsir.cn/forum.php?mod=viewthread&tid=42273
it's a random number generate function I copy from a book.
 楼主| 发表于 2003-6-1 10:58:05 | 显示全部楼层
sand()和srand()产生的随机数在什么范围以内??
希望给我个小例子给我理解理解
3x
发表于 2003-6-1 10:59:51 | 显示全部楼层
看看manpage。
发表于 2003-6-1 11:27:05 | 显示全部楼层
一般是你要求的范围
EG:
你要产生随机数在1-10之间.
可以用           
                 int a;
                 srand(unsigned(time(0));//time(0)为rand()种下种子.
                 a=rand()%10+1;
                 这样变量a 就是1-10之间的有机数.
如果你不指定要产生的范围,它会用头文件定义的一个最大随机数来产生.你可以看看相关头文件它的定义!
如果不用srand();种下种子它产生的只是假随机数.并没有真正的实现随机机制.你可以看到每次运行程序产生的数据都一样.用srand()种下种子后就实现真正的随机了.
 楼主| 发表于 2003-6-1 22:36:44 | 显示全部楼层
thanks a lot~
发表于 2003-12-7 13:43:20 | 显示全部楼层
最初由 Andy84920 发表
一般是你要求的范围
EG:
你要产生随机数在1-10之间.
可以用           
                 int a;
                 srand(unsigned(time(0));//time(0)为rand()种下种子.
                 a=rand()%10+1;
                 这样变量a 就是1-10之间的有机数.
如果你不指定要产生的范围,它会用头文件定义的一个最大随机数来产生.你可以看看相关头文件它的定义!
如果不用srand();种下种子它产生的只是假随机数.并没有真正的实现随机机制.你可以看到每次运行程序产生的数据都一样.用srand()种下种子后就实现真正的随机了.


如果我需要用for循环生成一下生成60个随机数的话,使用time(0)作为seed,结果生成的随机数全部为同一值.请问有没有解决的办法啊!
time(0)是不是返回值以一秒为单位变化啊!不明白time()函数的用法!
发表于 2003-12-7 16:30:30 | 显示全部楼层
srand() and  rand()

example:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
                                                                                                
int main( void )
  {
    int i;
                                                                                                
    srand( 982 );
    for( i = 1; i < 10; ++i ) {
      printf( "%d\n", rand() );
    }
                                                                                                
    /* Start the same sequence over again. */
                                                                                                
    srand( 982 );
    for( i = 1; i < 10; ++i ) {
      printf( "%d\n", rand() );
    }
    /*
     Use the current time as a seed to
     get a different sequence.
    */
                                                                                                
    srand( (int) time( NULL ) );
    for( i = 1; i < 10; ++i ) {
      printf( "%d\n", rand() );
    }
                                                                                                
    return EXIT_SUCCESS;
  }
发表于 2003-12-8 01:56:42 | 显示全部楼层
感谢home兄台的帮助,你给的源码运行结果:a893127101
a268730810
a1469892836
a1783959097
a425792908
a1784233009
a1082454221
a1487369185
a2093026644
b893127101
b268730810
b1469892836
b1783959097
b425792908
b1784233009
b1082454221
b1487369185
b2093026644
298243550
916553538
1324596272
1734429037
1230579479
1013496136
1510644258
659896584
276852381
当然a和b是我自己加上去的,方便查看.
你不是说:/* Start the same sequence over again. */
怎么偏偏/* Start the different sequence over again.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表