Chinaunix首页 | 论坛 | 博客
  • 博客访问: 66656
  • 博文数量: 30
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 256
  • 用 户 组: 普通用户
  • 注册时间: 2015-09-10 17:54
个人简介

成功,总是从一点一滴小事做起!!!

文章分类

全部博文(30)

文章存档

2016年(5)

2015年(25)

我的朋友

分类: C/C++

2015-11-12 00:34:48

C/C++随机数的定义:


1.如果你只要产生随机数,而不需要规定范围,那么那么你只要用rand()就可以了:
rand()会返回一随机数,范围在0到RAND_MAX间。而rand函数在stdlib.h中,
RAND_MAX值为2147483647.
例如:
#include
#include
int main()
{
   for(int i=0;i<10;i++)
printf("%d\n",rand());
}




2.如果你要随机生成一个在一定范围的数,你可以在宏定义中定义一个random(int number)
函数,然后在main()里面直接调用random()函数:
例如:随机生成10个0~100的数:
#include
#include
#define random(x) (rand()%x)


int main()
{
     for(int x=0;x<10;x++)
           printf("%d\n",random(100));
}




3.上面的这两个例子所生成的随机数都是一次性的,如果你第二次运行上面的程序的话,那么你会发现
你的结果和第一次的一样,而这里的原因就与srand()函数有关了。srand()用来设置rand()产生随机数
时的随机种子。在调用rand()函数产生随机数前,必须现有srand()设好随机种子(seed),如果未设
随机种子,rand()在调用的时候会自动设为1。而上面就是默认设置为1的情况,每次都是相同值1,进而
导致rand()所产生的随机数都一样。
srand()函数定义:
void srand(unsigned int seed);
通常可以利用geypid()或time(0)的返回值来当做seed
如果你用time(0)的话,要加入头文件#include
例如1:
#include
#include
#include
#define random(x) (rand()%x)


int main()
{
     srand((int)time(0));
     for(int x=0;x<10;x++)
           printf("%d\n",random(100));
}


例如2:标准C库中的输出,可以控制srand()的大小
#include
#include
int main()
{
        unsigned int seed; /*申明初始化器的种子,注意时usigned int 型的*/
        int k;
        printf("Enter a positive integer seed value: \n");
        scanf("%u",&seed);
        srand(seed);
        printf("Random Numbers are:\n");
        for(k = 1; k <= 10; k++)
            printf("%i\n",rand());//记得%i和%d都是表示有符号十进制整数
//区别在于,%i可以自动将输入的八进制(或者十六进制)转换为十进制,而%d则不会进行转换。
        printf("\n");
        return 0;
}






4.对rand()范围的扩充说明:
x = rand()%11; /*产生1~10之间的随机整数*/
y = rand()%51 - 25; /*产生-25 ~ 25之间的随机整数*/
z = ((double)rand()/RAND_MAX)*(b-a) + a; /*产生区间[a,b]上的随机数*/
以及在stdlib.h中这两个随机函数的原型:
int rand();
void srand (unsigned int);






























阅读(1278) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~