【问题标题】:while does this simple c++ program to print powers of 2 work when there are so many things wrong with it?虽然这个简单的 C++ 程序打印 2 的幂,但它有这么多问题吗?
【发布时间】:2019-02-06 20:08:35
【问题描述】:

我写了一些代码来打印 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++;
}
}

这段代码的输出是 2 到 2^40 的幂。

为什么它不应该工作:第二个 while 循环不应该运行,因为 k = 1 和 i = 1 所以 (k

我也在 python 中尝试过这个并得到了相同的结果。

【问题讨论】:

    标签: c++ loops while-loop logic


    【解决方案1】:

    初始值:

    i=1, k=1, j=1
    

    然后我们检查i &lt; 40。真的。然后我们检查k &lt; i。错误的。然后我们增加i。现在:

    i=2, k=1, j=1
    

    检查i &lt; 40。真的。检查k &lt; i。真的。 j=j*2 设置j=2。打印2。增加k。检查是否k &lt; i。错误的。增加i。现在:

    i=3, k=2, j=2
    

    在此之后,对于外循环的每次迭代,内循环最多执行一次。 k &lt; ik++ 行之前为真,然后在i++ 行再次变为真。

    我不确定我是否理解为什么这里首先存在嵌套循环。可以换成

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

    k 的意图是什么?

    【讨论】:

    • 哦,好的,谢谢,一切都清楚了,我只是在看到内部循环没有运行后没有继续关注代码,因为我只是假设代码会结束,现在我也明白为什么变量不需要了更新。
    • 另外,您的实现实际上要简单得多,我不知道为什么,但我只是想到了一种非常糟糕的方法,使用 k 作为计数器变量。
    猜你喜欢
    • 2022-01-01
    • 2018-07-17
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多