代码之家  ›  专栏  ›  技术社区  ›  Ameen Izhac

当这个简单的C++程序打印2的功时,有这么多的问题吗?

  •  -1
  • Ameen Izhac  · 技术社区  · 7 年前

    我写了一些代码,我写了打印2的权力,像39或40 idk,但它的dm。无论如何,我编写了它,而不是运行代码,因为逻辑错误而无法工作,我运行代码,发现它可以工作,然后发现一些逻辑错误,表明代码不应该工作。代码如下:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    int i = 1;
    int j = 1;
    int k = 1;
    while (i < 40)
    {
        while (k < i)
        {
            j = j * 2;
            cout << j <<"\n";
            k++;
        }
        i++;
    }
    }
    

    有人能解释一下为什么尽管有这些逻辑错误,代码仍然有效吗?

    我也在python中尝试了这个方法,得到了相同的结果。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Welbog    7 年前

    i=1, k=1, j=1
    

    然后我们检查一下 i < 40 . 符合事实的然后我们检查一下 k < i . 错误的然后我们增加 i . 现在:

    i=2, k=1, j=1
    

    检查 我<40 . 符合事实的检查 . 符合事实的 j=j*2 设置 j=2 . 打印 2 . 定期的加薪 k k<我 . 错误的定期的加薪 . 现在:

    i=3, k=2, j=2
    

    接下来,对于外部循环的每次迭代,内部循环最多执行一次。 k<我 直到 k++ 行,然后在 i++

    我不确定我是否理解为什么这里首先会有嵌套循环。它可以被替换为

    while (i < 40) {
      j = j * 2;
      count << j << "\n";
      i++
    }
    

    K ?