昨天,我不得不做一个数学入门测试,在那里我必须计算一个求和的基数。我懒得写出来,我以为我会写一个小的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
替换了变量,一切都会按预期进行。
我想念什么?
答案 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
的结果,因为您不会在每次迭代时更新n
。 n
从头算起。每次n
递增时,您应该再次计算i
。