【问题标题】:Problems with C rand()C rand() 的问题
【发布时间】:2019-11-08 14:23:12
【问题描述】:

我是 C 新手。我刚刚遇到了 rand() 函数。该书指出,使用 rand() 返回一个从 0 到 32767 的随机数。它还指出,您可以使用 % (模运算符)来缩小随机数的范围。 下面是一个例子:下面的表达式将一个从 1 到 6 的随机数放入变量 dice

dice = (rand() % 6) + 1;

我想知道为什么你不能使用

dice = (rand() % 7); 

它不会做同样的事情吗?

【问题讨论】:

  • 算一下:x / 6 + 1 与 x / 7 不同!
  • 您想要 0-6 范围还是 1-6 范围?
  • 从 0 到 32767 -> 从 0 到至少 32767。
  • 这本书说使用 rand() 返回一个从 0 到 32767 的随机数。 你的书错了。 (我想知道它还教了你多少其他错误事实?)在 32 位机器上,它通常会返回更大范围内的数字。有一个常量RAND_MAX,它告诉您系统上rand() 的范围。
  • RAND_MAX 的值(rand() 返回的最大值)不一定是 32767。不能更小,但通常要大得多。

标签: c


【解决方案1】:

这更像是一道数学题,而不是一道 C 题。答案在于模算术。如果n 均分x,则任何数字x modulo n 等于0。 实际上,模运算符返回整数除法的余数。 因此范围是从0n - 1。所以如果你想要一个随机数 1-6,你需要执行 (rand() % 6) + 1,因为 rand() % 6 给你的东西在 0-5 的范围内。只需执行 rand() % 7 即可为您提供 0-6 的范围,增加上限,而不是下限。

【讨论】:

    【解决方案2】:

    rand() % 6 是 0-5 区间内的数字。
    如果对该区间内的任意数字加一,就会得到区间 1-6 内的数字。

    另一方面,rand() % 7 是 0-6 区间内的数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-25
      • 2010-11-14
      • 2012-04-20
      • 1970-01-01
      • 2012-04-24
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多