в то время как эта простая программа на С ++ для печати степеней 2 работает, когда с ней так много вещей? - PullRequest
0 голосов
/ 06 февраля 2019

Я написал некоторый код, который я написал, чтобы напечатать полномочия от 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 не долженt, потому что k = 1 и i = 1, поэтому (k Также я попробовал это в python и получил тот же результат.

1 Ответ

0 голосов
/ 06 февраля 2019

Начальные значения:

i=1, k=1, j=1

Затем мы проверяем i < 40.Правда.Затем мы проверяем k < i.Ложь.Затем мы увеличиваем i.Сейчас:

i=2, k=1, j=1

Чек i < 40.Правда.Проверьте k < i.Правда.j=j*2 комплекты j=2.Печать 2.Приращение k.Проверьте, если k < i.Ложь.Приращение i.Теперь:

i=3, k=2, j=2

После этого внутренний цикл выполняется не более одного раза для каждой итерации внешнего цикла.k < i истинно до строки k++, а затем снова становится истинным в строке i++.

Я не уверен, понимаю ли я, почему здесь изначально находятся вложенные циклы.Его можно заменить на

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

Каково было намерение k?

...