在while循环中递增顺序

时间:2013-09-12 15:47:42

标签: c++

这里我有一个简单的算法,通过将所有奇数等于输入的数字来计算数字的平方,这样:

1 = 1 = 1-squared
1 + 3 = 4 = 2-squared
1 + 3 + 5 = 9 = 3-squared

等等。算法如下:

int triangleSquare(int number) {
    int product = 0;
    int currentOdd = 1;

    while (number--) {
        product += currentOdd;
        currentOdd += 2;
    }

    return product;
}

我的问题是关于细分:

while (number--) { ... }

出于某种原因,我在while (--number)while (number--)之间得到了不同的结果,我认为这是因为--number应该在执行while循环之前先减少(反之亦然{{1} }})。我的问题是,它为什么会有所作为?不管增量顺序如何,while循环是否总是最后执行?我必须遗漏一些明显的东西,但这对我来说似乎很奇怪,几乎就像number--使条件行为像number--循环一样。

3 个答案:

答案 0 :(得分:3)

可以写两个候选循环(相当于):

while (number-- != 0)
while (--number != 0)

考虑在number == 1循环条目时会发生什么:

  1. number的值与零进行比较,然后递减;由于1不是0,因此执行循环体。
  2. number的值递减,然后与零比较;由于00,因此循环体执行。
  3. 这就是区别!

答案 1 :(得分:2)

while (number--)执行以下操作:

  1. 评估while (number)
  2. 然后number--
  3. 另一方面,while (--number)执行此操作:

    1. 计算--number
    2. 然后使用新值
    3. 评估while (number)

      这就是区别。

答案 2 :(得分:1)

这是编写代码的可怕方式,但是......

表达式有两个特征:返回值和side 效果。减量是副作用;这是相同的 适用于--numbernumber--while中的条件, 但是,取决于回报值; --number返回 减量后的价值; number-- 之前的值 减少。当实际减少时 变量上的位置没有真正指定(对于任何一个):一些 前一个序列点之后和之后的时间 一。

换句话说:--number相当于:

int
decr( int& number )
{
    number -= 1;
    int results = number;
    return results;
}

number--相当于:

int
decr( int& number )
{
    int results = number;
    number -= 1;
    return return;
}

在这两种情况下,您都在测试函数的返回值。