为什么我的求和程序表现怪异?

时间:2018-11-01 22:10:20

标签: c for-loop variables while-loop scope

昨天,我不得不做一个数学入门测试,在那里我必须计算一个求和的基数。我懒得写出来,我以为我会写一个小的C程序来解决它。因为我做了很多复杂的程序,所以我有信心这样做会成功,但是我只是无法使它正常工作。

#include <stdio.h>

int main(){

    int i = 1;  
    int n = 2 * i + 1;

    while(n <= 36){
        printf("%d\n", n);
        i++;
    }

    return 0;
}

理论上,应该有序列“ 3、5、7、9,...”,但是我得到的只是“ 3、3、3、3,...”。仅当我使用变量n时才起作用,如果我在i中用while替换了变量,一切都会按预期进行。

我想念什么?

3 个答案:

答案 0 :(得分:3)

此:

int n = 2 * i + 1;

不是n的公式,该公式每次使用n时都会计算。它会在遇到语句时将n设置为2 * i + 1 == 2 * 1 + 1 == 2 + 1 == 3的值,仅此而已。因此n永远不会在循环内部发生变化,而最终会导致无限循环。

将分配移动到循环内:

while(n <= 36){
    printf("%d\n", n);
    i++;
    n = 2 * i + 1;
}

答案 1 :(得分:2)

n循环中的值while没有变化,因此它永远不会失败条件n <= 36。也许你想这样做

while(n <= 36){
    printf("%d\n", n);
    i++;
    n = 2 * i + 1;
}

答案 2 :(得分:2)

它总是给出3的结果,因为您不会在每次迭代时更新nn从头算起。每次n递增时,您应该再次计算i