随机数

本文详细介绍了C语言中rand()函数的使用方法,包括随机数种子的初始化、随机数范围的调整以及如何生成指定范围内的随机数。并通过自定义函数展示了如何将随机数应用于实际场景。

rand()函数包含于头文件stdlib.h中;

产生的随机数范围是[0,32767]闭区间;

rand()操作产生特定随机数,rand()%1000--99);

rand()/(RAND_MAX-0.0)产生0--1之内的浮点型数据;

2.随机数种子

一般应用都倾向于使用系统时间,所以一般初始化是这样的:

srand((unsigned)time(NULL));

这样一来就要包含time.h文件,也有包含windows.h然后调用windowsAPI来做初始化种子的,有兴趣可以去google之。

初始化随机数种子只需要在调用rand()前执行一次就好了,一种常见错误就是在每次调用rand()前都调用srand()

3.随机数的范围

rand()返回一个0~RAND_MAX的随机数,一般这个不是你想得到的数据范围,需要进行调整,比较常用的是'%''/'操作,如果需要一个0~100的随机数那么就rand()%100好了,很容易理解。如果你需要一个浮点数,可以考虑用除法,注意运算时的数据转换操作,rand()返回的是整数,RAND_MAX也是整数,如果你想得到一个01的浮点数,你这样写rand()/RAND_MAX你就大错特错了,这样的结果是0,原因仔细想想也很简答,基本的C语言运算数据类型提升问题,小数部分的尾巴取整的时候舍掉了,解决方法也很简单rand()/(RAND_MAX-0.0),一个产生指定范围随机数的函数大概是这样的:

double randval(double low, double high)
{
double val;
val = ((double)(rand()/(RAND_MAX-0.0))*(high - low)) + low;
return(val);
}


---------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <time.h>              //需有以上三个头文件
#define RAND_MAX 32767.00
double randa(double low,double high)
{
double randnum;
randnum=rand()/RAND_MAX*(high-low)+low;
return randnum;
}                               //自定义函数,输入范围,输出随机数
main()
{
double num,num1,num2;
scanf("%lf%lf",&num1,&num2);
num=randa(num1,num2);
printf("%lf\n",num);
}

---------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

main()

{
int n,m;
for(n=1;n<=100;n++)
{
m=rand();
printf("%d    ",m);
}
}

产生100个随机数,没有#include<time.h>和srand((unsigned int)time(NULL));

产生的是随机数一次性,两次运行程序结果是一样的。要想不一样添加srand((unsigned int)time(NULL));srand((int)time(0));

rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随即并不是正真意义上的随机。

为了程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子

函数srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值