Трудности с пониманием цикла выполнения во время выполнения на C

#c #do-while

#c #do-while

Вопрос:

Я уже несколько недель программирую на C , и мне трудно понять цикл Do-While. В частности, я не понимаю этот фрагмент кода

 #include<iostream>
using namespace std;

int main()
{
  int sum = 0;

int y = 0;

do

{

   for ( int x = 1; x < 5; x  )
         sum = sum   x;

   y = y 1;

} while ( y < 3);

cout << sum << endl;

return 0;
}
  

и его результат:

 30
  

Я не знаю, как это привело к 30, и было бы неплохо, если бы я мог получить объяснение для этого конкретного блока кода. Спасибо.

Комментарии:

1. Эта программа суммирует числа от 1 до 4 и повторяет это три раза. 1 2 3 4 == 10 , выполнение этого три раза приводит к 30.

2. Попробуйте запустить программу построчно в отладчике.

3. Почему бы вам не попытаться объяснить нам, что, по вашему мнению, он делает? И, может быть, скажите нам, какое число, по вашему мнению, должно было быть результатом?

4. Если вы не знаете, как использовать отладчик, печать разных значений может помочь. Вот так

Ответ №1:

Из того, что я вижу, код переходит в блок do, он видит цикл for, выполняет этот цикл 4 раза, затем вы переходите к увеличению y, а затем процесс выполняется еще 2 раза.

 #include <iostream>

using namespace std;

int main() {
    
    int sum = 0;
    int y = 0;
    
    do {
        
        // the code sees this for loop and executes it 4 times
        for (int x = 1; x < 5; x  )
            sum = sum   x;
        
        y = y   1; // you increment y by 1, then the code goes back up and repeats the process 2 more times
    } while (y < 3); // execute this block 3 times in total
    
    cout << sum << endl;
}
  

Ответ №2:

do ... while (cond) цикл работает таким образом, что условие cond проверяется после первой итерации цикла (так что он проходит хотя бы через одну итерацию). Когда вы сначала вводите этот цикл, вы сталкиваетесь for с циклом, который суммирует все целые числа в диапазоне от 1 до 4. Результат sum после первой итерации внешнего цикла равен 10, а значение y теперь равно 1, поэтому мы переходим к следующей итерации. Снова мы суммируем все числа во внутреннем цикле и добавляем результат к предыдущему результату sum (который был 10), теперь результат равен 20. Мы увеличиваем y , так что оно равно 2, условие y < 3 все еще выполняется, поэтому мы переходим к следующей итерации. Снова мы суммируем числа, sum теперь это 30, и мы увеличиваем y , так что это 3. Условие do ... while цикла больше не выполняется, так как y теперь 3, что не меньше 3. На данный момент sum равно 30, и он выводится на стандартный вывод.

Ответ №3:

Ваша программа выполняет 10 10 10 , потому что вы пишете его так, чтобы он выполнял сумму целых чисел, меньших 5.

И вы сказали сделать это, пока y<3, что означает, что он будет делать это для значений от 0 до 2, так и есть 1 2 3 4==10 для значений 0,1,2, что в 3 раза больше, и даст вам результат 30.