免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1906 | 回复: 2
打印 上一主题 下一主题

[函数] C语言随机函数总结 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-30 13:08 |只看该作者 |倒序浏览
(1) rand()函数:
   原型: int rand(void)
   功能: 产生从0到RAND_MAX(0x7fff)之间的随机数。
   头文件: stdlib.h
   例:
   #include <stdio.h>
   #include <stdlib.h>

   int main()
   {
       int k;
       k = rand();
       printf("%d\n", k);
       return 0;
   }
   编译运行,发现他的确产生随机数了,但是,每次运行程序产生的随机数都是一样的,为什么呢?因为随机数取在C语言中采用的是固定序列,所以每次执行所取的是同一个数。那么如何写一个程序,让它每次运行时产生的随机数都不一样呢?往下看:

(2)srand()函数:
   原型: void srand(unsigned seed)
   功能: 产生随机数的起始发生数据,和rand函数配合使用
   头文件: stdlib.h   time.h
   例:
   #include <stdio.h>
   #include <stdlib.h>
   #include <time.h>

   int main(void)
   {
       int i;
       time_t t;
       srand((unsigned) time(&t));
       printf("Ten random numbers from 0 to 99\n\n");
       for (i=0; i<10; i++)
       printf("%d\n", rand()%100);
       return 0;
   }

    这时运行程序,会发现每次产生的随机数都不一样。这是因为这里采用了时间作为种子,而时间在每时每刻都不相同,所以就产生了"随机"的随机数了。所以,要想产生不同的随机数,在使用rand之前需要先调用srand。这样做相当麻烦,有没一个更简单的函数呢?往下看:

(3)randomize()函数:
   原型: int randomize(void)
   功能: 通过time函数来得到一个随机数
   头文件: stdlib.h   time.h

   该函数就相当于srand((unsign)(time(NULL)) 不过应注意的是randomize()的功能要通过time来实现所以在调用它时头文件要包含time.h。

(4)产生一个X到Y的随机数:
    由于rand产生的随机数从0到rand_max,而rand_max是一个很大的数,那么如何产生从X~Y的数呢?
    只要这样写:
    k=rand()%(Y-X+1)+X;
    这样,就可以产生你想要的任何范围内的随机数了。

参考资料

C 语言随机数获取
http://c.chinaitlab.com/example/865775.html

rand函数 - 生成一个伪随机数
http://www.dschool.com.cn/c_standard_function/stdlib/rand.php

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2013-05-30 13:12 |只看该作者
不敢苟同   

论坛徽章:
0
3 [报告]
发表于 2013-05-30 13:53 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP