c语言生成1000 9999随机数,产生随机数(rand()函数和srand()函数)

有时候,我们需要随机产生一个在某范围的数,C/C++提供了一个库函数rand()来产生随机数。

函数原型:int rand(void);

功能:返回一个[0,RAND_MAX]间的随机整数。其中RAND_MAX是定义在stdlib.h头文件中的一个常量。

注意: rand()函数包含在头文件stdlib.h中,要使用它必须用#include引入该头文件;

计算机实际上并没有真正做到产生一个随机数,只是在一串预先定义好的数据中选择一个返回给函数。

那么,如何得到一个在a到b的整数呢?有两种方法:

法一:

公式:a+rand()%(b-a+1)

示例:

n=1000+rand()%9000;//随机生成一个四位数返回给n。a+rand()%(b-a+1),四位数即1000-9999,此时a=1000,b=9999

法二:

公式:a+rand()*(b-a+1)/RAND_MAX

示例:

n=+rand()*/RAND_MAX;//随机生成一个四位数返回给n。a+rand()*(b-a+1)/RAND_MAX,四位数即1000-9999,此时a=1000,b=9999

当要产生多个随机数时,rand()会重复调用产生相同的数字序列。如果想要每次执行产生的随机数不同,就需要进行随机初始化。因此引入srand()函数。

函数原型:void srand(unsigned seed);

功能:根据随机数生成器的种子seed的值初始化随机数。

我们当然可以用数组和循环来设置种子的值,那么有没有什么我们可以直接利用的一直变化的值呢?

当然有,时间就是。我们可以借助time.h头文件中的time(NULL)返回机器当前的时间。

函数原型:time_t time(time_t *t)

功能:返回自纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间。当参数为空指针NULL时,返回到当前机器时间的秒数,精度为长整型ld。

注意:要使用time()函数,先要通过#include引入time.h头文件。

示例:

#include

#include

int main ()

{

time_t seconds;

seconds = time(NULL);

printf("自 1970-01-01 起的小时数 = %ld\n", seconds/);

return();

}

现在,将time(NULL)作为srand()函数的随机数产生器种子,即srand(time(NULL))就可以通过不断变化的系统时间得到不同的随机数。

示例:

问题描述:

随机产生一个四位数,同时给出各位数字和。

#include

#include

#include

int main()

{

while()

{

int n,a,b,c,d,s;

srand(time(NULL));

// n=1000+rand()%9000;//a+rand()%(b-a+1),四位数1000-9999,a=1000,b=9999

n=+rand()*/RAND_MAX;

a=n/;

b=n%/;

c=n%/;

d=n%;

s=a+b+c+d;

printf("%d\n",n);

printf("s=%d\n",s);

getchar();

}

return ;

}

运行结果:

b9526405279093426045a253afe49aab.png

可以看出,我们成功得到了随机的四位数。

拓展问题:

1.为什么还会产生连续的相同的随机数?

答:键盘按太快了,函数读取系统时间有一定的延迟,是以秒为单位的,在1秒内按下的多个输入均视为相同时间,随机种子数不变,所以产生了相同的数。

2.1970年到现在已经过去了n秒,n是一个很大的数,是不是比rand()函数参数取的最大值RAND_MAX还大?会不会因为溢出而产生错误?

答:不会。在VC6中,RAND_MAX值是0x7fff,n确实比RAND_MAX大的多,即使n小于RAND_MAX,在未来也必然会有超过RAND_MAX的时刻。此时的随机种子数seed=n mod RAND_MAX,即按RAND_MAX长度为一个周期,取余数赋值给随机种子数seed。

RAND函数和SRAND函数

首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. rand(产生随机数) 表头文件: #include

(转)rand函数和srand函数

转:http://www.cnblogs.com/lenient/articles/1565376.html 首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand ...

C/C++随机数rand()和种子函数srand()

在计算机编程中,常常要产生一个随机数.但是要让计算机产生一个随机数并不那么容易.计算机的执行,是以代码来进行的,所以并不可能像抽牌,扔骰子那样产生一个真正具有随机意义的数.只可能以一定的算法产生一个伪 ...

关于rand()与srand()函数

rand函数功能为获取一个伪随机数(伪随机数的概念下面会有介绍). 一.函数名: rand(); 二.声明: int rand(); 三.所在头文件: stdlib.h 四.功能: 返回一个伪随机数. ...

C语言中生产随机数 rand()函数

参考资料:C语言中产生随机数 一:如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdl ...

sql server 生成随机数 rand函数

https://docs.microsoft.com/en-us/sql/t-sql/functions/rand-transact-sql?view=sql-server-2017 在某一个区间内生 ...

C/C++中产生随机数(rand,srand用法)

计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子.(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535 ...

C++随机数rand(), srand()

c++产生随机数会用到rand(), srand()函数,下面总结两个函数特性和使用. 1. rand() #include #include

C++ 随机数rand()和srand()

标准函数库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h中定义的一个整数,它与系统有关. 例如在我的机器上,RAND_MAX=32767.可以 ...

随机推荐

随堂软工团队小测——git协同

No Bug 031402401鲍亮 031402402曹鑫杰 031402403常松 031402412林淋 031402418汪培侨 031402426许秋鑫 功能模块划分 方法 功能 main( ...

[转]Linux进程间通信——使用信号

转载于:http://blog.csdn.net/ljianhui/article/details/10128731         经典!!! Linux进程间通信——使用信号 一.什么是信号 用过 ...

Linux下基于HTTP协议带用户认证的GIT开发环境设置

Git 的访问可以采用 HTTP 或 SSH 协议安全的访问,通常我们使用 gitlib 进行 Web 管理,但是在 Linux 命令行开发环境下,基本都是使用 SSH 协议,只需要在 gitlib ...

设置input(radio,checkbox)和lable对齐的问题

在做页面的时候几次遇到label和前面的小图标无法对齐的情况,后来发现解决方法不过是 label { display:inline-block; vertical-align:top; line-he ...

hdu1162Eddy's picture

http://acm.hdu.edu.cn/showproblem.php?pid=1162 最小生成树 #include #include

C#基础枚举的设计

枚举分为:简单枚举和标记枚举(为了枚举值位操作) 标记枚举的用法:

bootstrap注意事项(六)按钮

1.预定义样式 使用下面列出的类可以快速创建一个带有预定义样式的按钮

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值