硬汉嵌入式论坛

 找回密码
 立即注册
查看: 7004|回复: 1
收起左侧

[客户分享] 用C函数库产生伪随机数和随机种子的产生方法

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107527
QQ
发表于 2014-4-11 09:57:08 | 显示全部楼层 |阅读模式
1. 概述
rand()函数是产生随机数的一个随机函数。C语言里还有 srand()函数等。
2. 详述
1)使用该函数首先应在开头包含头文件stdlib.h
    #include<stdlib.h>(C++建议使用#include<cstdlib>,下同)
(2)在标准的C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。
(3)rand()函数没有输入参数,直接通过表达式rand()来引用;例如可以用下面的语句来打印两个随机数:
    printf("Random numbers are: %i %i\n",rand(),rand());
(4)因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,
    有时候也叫伪随机数
(5)为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。函数 srand()(来自stdlib.h)
     可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器
3. 例子
  1. /* This program generates and prints ten random integers between 1 and RAND_MAX*/
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. unsigned int seed; /*申明初始化器的种子,注意是unsigned int 型的*/
  7. int k;
  8. printf("Enter a positive integer seed value: \n");
  9. scanf("%u",&seed);
  10. srand(seed);
  11. printf("Random Numbers are:\n");
  12. for(k = 1; k <= 10; k++)
  13. {
  14. printf("%i",rand());
  15. printf("\n");
  16. }
  17. return 0;
  18. }
复制代码
当提供的种子相同时,随机数序列也是相同的。而且当种子为1时,与不使用srand()函数时一样的,也就是说rand()函数默认情况下初始化种子值为1;
stdlib.h 中这两个函数的原型是:
  1. int rand();
  2. void srand (unsigned int);
  3. srand(time(0)); i=rand();
  4. 或者srand(time(NULL));
复制代码
这样i就是一个真正意义上的随机数。
rand()产生伪随机数,srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数 time()返回的是系统的时间(从1970.1.1午夜算起),单位:秒,种子不同当然产生的随机数相同几率就很小了。
用rand()随机生成在[x,y]内的整数
int k;
k=x+rand()%(y-x+1)/*k即为所求范围内随机生成的数,rand()%a的结果最大为a-1*/
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107527
QQ
 楼主| 发表于 2014-4-11 09:57:53 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-5 03:21 , Processed in 0.165226 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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