Операторы циклов с условием
Оператор while организует выполнение тела цикла пока условие истинно. Условие проверяется до выполнения тела цикла.
while (условие)
<
тело цикла
>
условие – логическое выражение;
тело цикла – операторы которые повторяются.
Тело цикла размещается между < и >. Если условие ложно при первом входе, то тело цикла не выполнятся ни разу.
Перед использованием цикла while необходимо объявить переменную, которая будет проверяться в условии цикла и изменять значение в теле цикла.
Логика выполнения оператора while :
- Проверяется условие. Если результат ИСТИНА, переход к шагу 2, если результат ЛОЖЬ – переход к шагу 4.
- Выполняется тело цикла.
- Переход к шагу 1.
- Конец оператора.
Пример. Цикл выполняется до тех пор, пока вводится 0. При вводе другого числа цикл завершается.
Цикл с постусловием
Оператор цикла с постусловием do..while организует выполнение тела цикла до тех пор, пока условие истинно.
do
<
тело цикла
> while (условие);
условие – логическое выражение;
тело цикла – операторы которые повторяются.
Тело цикла помещается между ключевыми словами do и while . Если результатом проверки условия является ЛОЖЬ, выполнение цикла завершается.
У цикла do..while тело цикла выполняется раньше, чем произойдет проверка условия. Это значит, что в любом случае тело цикла выполнится хотя бы раз, если даже условие первоначально является ложным.
Логика выполнения оператора do..while :
- Выполняется тело цикла.
- Проверяется условие. Если результат ИСТИНА, переход к шагу 1, если результат ЛОЖЬ – переход к шагу 3.
- Конец оператора.
Пример. Цикл выполняется до тех пор, пока вводится 0. При вводе другого числа цикл завершается.
Пример. В цикле определить четность введенных чисел. Цикл завершается, если вводится число 0
Разберем данный пример:
- В строке 3: объявили переменную x. В этой переменной будет храниться число, которое пользователь будет вводить.
- В строке 4 — 5: сообщаем пользователю правила ввода.
- В строке 7: считываем первое число в переменную x.
- В строке 8: в цикле do. while:
- В строках 10 — 12: проверяем введенное пользователем числа на четность, с помощью оператора условного ветвления if-else.
- В строке 14: снова считываем введенное число.
- В строке 15: проверяем условие продолжения цикла x ≠0. Если пользователь ввел число 0, то цикл прекращает свою работу.
Игра «Угадай число»
- Программа создает случайное целое число от 10 до 99.
- Игрок должен угадать число, которое создала программа, вводя числа.
- Программа будет делать подсказки:
- Ваше число больше!
- Ваше число меньше!
- Угадали!
Исходный код программы
Операторы break и continue
Оператор break организует принудительный выход из цикла, даже когда условие цикла — истинно. Оператор break удобно использовать, когда необходимо выйти из цикла при особых обстоятельствах.
Оператор continue используется, если необходимо пропустить какой-то блок кода, но при этом не прекращать работу цикла.
Рис. 5 — http://cppstudio.com/post/319/ —>
Циклы
for — параметрический цикл (цикл с заданным числом повторений).
Цикл с предусловием while
Общая форма записи:
Операции в цикле будут выполняться до тех пор, пока условие будет верно.
При построении цикла while в блок операций необходимо включить конструкции, изменяющие величину проверяемого выражения, так, чтобы в конце концов оно стало ложным. Иначе выполнение цикла будет осуществляться бесконечно(бесконечный цикл).
Рассмотрим цикл с предусловием
Этот цикл выполняется до тех пор, пока истинно условие. Тело цикла — это две строки, одна выводит число, вторая изменяет его. Очевидно, что этот цикл будет выполнен 10 раз и выведет на экран это:

while — цикл с предусловием, поэтому вполне возможно, что тело цикла не будет выполнено ни разу, если в момент первой проверки проверяемое условие окажется ложным.
Выход из цикла while
Как мне выйти из бесконечного цикла while внутри цикла for?
К сожалению, в отличие от Джавы, C и C++ не поддерживают механизм вроде break label , поэтому самый чистый вариант — использовать goto:
Также можно использовать флаг:
Большой разницы между этими вариантами нет.
Помимо этого случая, goto также используется в хорошем стиле C для обработки ошибок:
В C++ подобное не нужно, т.к. есть RAII, но из циклов по-прежнему выходят через goto .
Как выйти из while c
Циклы позволяет выполнить одно действие множество раз в зависимости от определенного условия. В языке Си есть следующие типы циклов:
Цикл for
Цикл for имеет следующее формальное определение:
заголовок цикла состоит из трех частей. Первая часть — инициализация выполняется один раз при начале выполнения цикла и представляет установку начальных условий, как правило, это инициализация счетчиков — специальных переменных, которые используются для контроля за циклом.
Вторая часть — условие , при соблюдении которого выполняется цикл. Зачастую в качестве условия используется операция сравнения, и если она возвращает ненулевое значение (то есть условие истинно), то выполняется тело цикла, а затем вычисляется выражение_3 .
Третья часть — приращение задает изменение параметров цикла. Обычно здесь происходит увеличение счетчиков цикла.
Рассмотрим стандартный цикл for и для этого выведем числа с 0 до 5 на консоль:
Первая часть объявления цикла — int i = 0 — создает и инициализирует счетчик i. Счетчик необязательно должен представлять тип int. Это может быть и другой числовой тип, например, float. И перед выполнением цикла его значение будет равно 0. В данном случае это то же самое, что и объявление переменной.
Вторая часть — условие, при котором будет выполняться цикл. В данном случае цикл будет выполняться, пока i не достигнет 6.
И третья часть — приращение счетчика на единицу. Опять же нам необязательно увеличивать на единицу. Можно уменьшать: i—. Можно изменять на другое значение: i+=2.
В итоге блок цикла сработает 6 раз, пока значение i не станет равным 6. И каждый раз это значение будет увеличиваться на 1.
Каждый отдельный проход цикла называется итерацией. То есть в примере выше было 6 итераций.
Усложним цикл и выведем квадраты чисел от 0 до 8:
Здесь блок цикла сработает 9 раз, пока значение i не станет равным 9. И каждый раз это значение будет увеличиваться на 1.
Необязательно указывать все три выражения в определении цикла, мы можем одно или даже все их них опустить:
Формально определение цикла осталось тем же, только теперь первое и третье выражения в определении цикла отсутствуют: for (; i < 9;) . Переменная-счетчик определена и инициализирована вне цикла, а ее приращение происходит в самом цикле.
Можно определять вложенные циклы. Например, выведем таблицу умножения:
Цикл do..while
В цикле do..while сначала выполняется код цикла, а потом происходит проверка условия в инструкции while . И пока это условие истинно, то есть не равно 0, то цикл повторяется.
Здесь код цикла сработает 6 раз, пока i не станет равным нулю. Но важно отметить, что цикл do гарантирует хотя бы единократное выполнение действий, даже если перед первым выполнением условие в инструкции while не будет истинно. То есть мы можем написать:
Хотя у нас переменная i меньше 0, цикл все равно один раз выполнится.
Цикл while
В отличие от цикла do цикл while сразу проверяет истинность некоторого условия, и если условие истинно, то есть не равно 0, то код цикла выполняется:
Например, выведем на консоль все числа от 6 до 1:
Здесь, пока истинно условие i > 0 , будут выполняться действия цикла — printf(«%d \n», i) и i—
Операторы continue и break
Иногда возникает необходимость выйти из цикла до его завершения. В этом случае можно воспользоваться оператором break . Например:
Здесь когда значение переменной i достигнет 5, осуществляется выход из цикла с помощью оператора break .
В отличие от оператора break , оператор continue производит переход к следующей итерации. Например, нам надо посчитать сумму только нечетных чисел из некоторого диапазона:
Чтобы узнать, четное ли число, мы получаем остаток от целочисленного деления на 2, и если он равен 0, то с помощью оператора continue переходим к следующей итерации цикла. А если число нечетное, то складываем его с остальными нечетными числами.