【问题标题】:int and float increment condition in for loop [closed]for循环中的int和float增量条件[关闭]
【发布时间】:2014-07-29 15:32:09
【问题描述】:

我正在做一个涉及整数和浮点数的程序。假设我想计算x={1,1/2,2,3,4} 并想使用 for-loop。但我知道增量的条件

for(x=1;x<=4;x++)

作为x++=x+1

我想在x={1,2,3,4}x={1/2} 找到迭代。但我不知道如何修改 for-loop 语句;增加 0.5 或 1。但如果我设置 0.5,我将得到 5/2 和 7/2 的答案。

【问题讨论】:

  • “两种不同的增量条件”是什么意思?中间只有一个条件,还有初始赋值和步骤赋值
  • 你的问题不是很清楚,你能解释一下你真正想要做什么吗?
  • 对于“两种不同的增量条件”,他可能意味着值 1、2、3 和 4 之间的增量为 1,而从 1 到 0.5 的“增量”为 -0.5。
  • 是的。这是真的@RudyVelthuis。

标签: c++ for-loop floating-point int


【解决方案1】:

这应该可行:

for (int i=1; i<=4; i++) {
    for (float j=i; j<=std::max(1.6, i); j+=0.5) {
        cout << j << endl;
    }
}

以上代码将打印所需的序列。

【讨论】:

  • 如果我这样做了,因为我只需要 a=0.5 的答案,我是否仍然可以获得 a={1.5,2.5,3.5} 的结果?
  • @MazayaJamil 是的,如果没有明确的规则要写下来,你就不能使用不同的步骤。解决这个问题的唯一方法是使用数组(shekhar 的回答)。
  • 然后做for (int i=1; i&lt;=3; i++) doWith(i+0.5);
  • for (float i=1.5; i&lt;4; i+=1)
  • 但我还是会选择 int 版本,因为 float 会累积错误。
【解决方案2】:

如果0.5 是您的数字列表中唯一的异常,则可以使用以下方式完成:

for (float x = 1; x < 5; x += (x < 2 ? .5f : 1))
    std::cout << x << std::endl;

这应该 - 如果我没有犯任何错误 - 打印以下内容:

1 1.5 2 3 4

但是,这确实很难阅读,并且根据您的情况,它可能会变得更加复杂。这不仅使代码难以阅读,还增加了开销并可能减慢处理速度。因此,您应该 - 根据您的价值观 - 真正考虑 shekhar 的解决方案。

除了在for() 的最后部分修改x,您还可以在循环内进行修改以使其更具可读性:

for (float x = 1; x < 5;) {
    std::cout << x << std::endl;
    if (x < 2)
        x += .5f;
    else
        ++x;
}

【讨论】:

  • 我可以知道 (std::cout
  • 它实际上只是将数字打印到控制台(窗口)。
  • 因此这意味着我不必在开始 for-loop 之前声明float x
  • 您可以将其作为第一个参数的一部分(就像我做的那样)。该声明在该块内的任何地方都有效,而不仅仅是在圆括号内。
  • 因此,通过在第一个 for-loop 中声明一次,我不需要在下一个循环中执行相同的命令。这就是你想说的吗?对不起,我学得很慢。 @马里奥
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
相关资源
最近更新 更多