【问题标题】:Why does my summation program behaves weird? [closed]为什么我的求和程序表现得很奇怪? [关闭]
【发布时间】:2018-11-01 22:10:19
【问题描述】:

昨天,我必须做一个数学介绍测试,我必须计算求和的基数。我懒得把它写出来,我想我只需要写一个小 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 时,它才不起作用,如果我在 while 中将其替换为 i,则一切正常。

我错过了什么?

【问题讨论】:

  • 因为你的期望很奇怪。你用哪种语言做过更复杂的程序?由于对语言工作方式的这种明显误解,您不会用任何复杂的 C 语言编写太多内容。我看不出用i 替换n 会如何产生输出3, 5, 7, 9, ...;它肯定会产生1, 2, 3, 4, ..., 36吗?如果您尝试过替代代码,您应该包含该代码而不是“描述”它。
  • 看来我忘了写我是个初学者。我所说的“复杂”是指我编写了更长、更复杂的不同的小型 C 程序(在某种程度上也使用 javascript 和 python)。 PS:感谢您的格式化,但是为什么您将“行为怪异”更改为“行为怪异”的原因是什么?
  • 我没有碰过格式,也不记得碰过标题,但我已针对该编辑登录。恢复了,但它仍然是一个糟糕的标题;它的行为一点也不奇怪。 Python 和 Javascript 的行为都不像您在这里所期望的那样。
  • 我想我开始修复标题并分心,让它“被破坏”

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


【解决方案1】:

这个:

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;
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      它总是给出3 作为结果,因为您不会在每次迭代时更新nn 在开始时计算一次。每次增加i 时,您应该重新计算n

      【讨论】:

        猜你喜欢
        • 2013-04-11
        • 2021-10-11
        • 2018-09-09
        • 2014-07-03
        • 1970-01-01
        • 1970-01-01
        • 2014-02-05
        • 2023-01-07
        • 1970-01-01
        相关资源
        最近更新 更多