切换风格
开启辅助访问 切换到窄版

[分享] c语言生成随机数

[复制链接]
作者:ctx 
版块:
Discuz!The Future 编程 c语言 发布时间:2018-10-30 16:31:58
21203
ctx 发表于 2018-10-29 21:13:52 | 显示全部楼层 |阅读模式
求一定范围内的随机数。
如要取[0,10)之间的随机整数,需将rand()的返回值与10求模。

  1. randnumber = rand() % 10;
复制代码


然后你会发现每次生成的随机数都是一样的,这是因为计算机生成的是伪随机数。
关于伪随机数
rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数。是根据一个数(可以称之为种子)为基准以某个递推公式推算出来的一系列数,当这一系列数很多的时候,就符合正态分布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是确定的,除非你破坏了系统。为了改变这个种子的值,c提供了srand()函数


如需生成每次不一样的随机数可以这样做:

事例:生成1到100的随机数每次都不一样
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h> //引入时间函数库

  4. int main()
  5. {
  6.     int x,num;//初始化x,num变量
  7.     srand(time( NULL )); //使用当前时间作为随机数种子
  8.     x =1 + (rand()%100);//生成随机数

  9.     printf("%d",x);//打印随机数

  10.     return 0;
  11. }
复制代码


————————————————————————
如果取的值不是从0开始呢?你只需要记住一个通用的公式。

要取[a,b)之间的随机整数(包括a,但不包括b),使用:

  1. (rand() % (b - a)) + a
复制代码


伪随机浮点数。
要取得0~1之间的浮点数,可以用:

  1. rand() / (double)(RAND_MAX)
复制代码


如果想取更大范围的随机浮点数,比如0~100,可以采用如下方法:

  1. rand() /((double)(RAND_MAX)/100)
复制代码

其他情况,以此类推,这里不作详细说明。

Amber 发表于 2018-10-29 23:08:50 | 显示全部楼层
value = rollDie(6)  value = rollDie(20)
这摘自task3。可他的示例里并没有rolldie()函数?
回复 支持 反对

使用道具 举报

ctx  楼主| 发表于 2018-10-30 16:31:58 | 显示全部楼层
Amber 发表于 2018-10-29 23:08
value = rollDie(6)  value = rollDie(20)
这摘自task3。可他的示例里并没有rolldie()函数? ...

rolldie函数需要你自己去定义,去实现程序功能
回复 支持 反对

使用道具 举报

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

本版积分规则

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