Операторы циклов в языке Си, их назначение, виды. Формат записи, принцип работы и пример использования оператора цикла с предусловием

Операторы циклов – мощное средство записать некоторую последовательность операторов один раз и повторить ее многократно. Благодаря циклам производительность труда программиста повышается во много раз.

В языке Си существует три вида циклов: цикл с параметром или цикл типа for, цикл с предусловием или цикл типа while, цикл с постусловием или цикл типа do . . . while.

Формат записи цикла любого типа состоит из заголовка цикла и тела цикла. В заголовке цикла указывается вид цикла и определяются условия его начала, продолжения и завершения, в теле цикла помещаются операторы, которые требуется выполнить в цикле.

В цикле типа for число повторений известно заранее, в циклах типа while и do ... while число повторений цикла заранее неизвестно, производится проверка условия повторения цикла: в цикле типа while – перед циклом, в цикле типа do ... while – после его окончания.

В циклах типов for и while повторяющаяся часть (тело цикла) состоит из одного оператора, если требуется выполнить в цикле несколько операторов, они заключаются в фигурные скобки, образуя составной оператор. В цикле типа do ... while тело цикла помещается между зарезервированными словами языка do и while, фигурные скобки также требуются, в названии цикла его тело условно обозначается тремя точками.

Во всех типах циклов условие продолжения цикла заключается в круглые скобки. Для цикла типа for заголовок цикла состоит из трех разделов: инициализации (присваивания начальных значений), проверки условия повторения, модификации (изменения параметров). Разделителем между разделами заголовка цикла типа for служит точка с запятой.

Не всегда число повторений цикла известно заранее, в этих случаях применяются циклы с предусловием (проверка условия перед циклом) или с постусловием (проверка условия после цикла).

Формат записи цикла с предусловием:

while (<условие>)<тело цикла>;

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

Условие продолжения цикла записывается после ключевого слова while в круглых скобках. Пока это условие истинно, цикл будет продолжаться, как только условие станет ложным, цикл завершится и произойдет переход к следующему оператору.

Рассмотрим следующий пример. Вводится непустая последовательность натуральных чисел. Признаком конца является ввод нуля. Найти наименьшее число в последовательности и его номер.

Т.к. общее число чисел в последовательности неизвестно, цикл типа for в данном случае непригоден. Наиболее соответствует задаче цикл типа while. Программа, решающая задачу, имеет вид:

//min.c нахождение минимального числа и его номера

#include<stdio.h>

main(){

int x, i, min, k;

printf(“Введите натуральные числа. Признак окончания–ноль.\n”);

scanf(“%d”,&x); k = 1; min = x;

i = 1;

while (x != 0) {

if(x < min) {min = x; k = i;}

scanf(“%d”, &x); i++;

}

printf(“Минимальное число %d , его номер %d\n”, min, k);

return 0;

}

Как видно из программы, записывать чтение очередного числа пришлось дважды: в первый раз мы присваиваем прочитанное число переменной x, а затем переменной min, в которой в конце работы программы будет находиться наименьшее из прочитанных чисел, в цикле мы сравниваем ранее прочитанное число с текущим минимумом min и если ранее прочитанное число меньше min, заменяем текущий минимум и его номер. Далее считываем очередное число (вторая запись чтения числа), увеличиваем текущий номер на 1 и завершаем цикл, если вводится ноль. На экран будет выведено наименьшее число из введенных и его номер.

Отметим, что цикл с предусловием может не выполниться ни разу, если условие нарушено при первом входе в цикл, т.к. проверка выполнения условия проводится перед циклом. Если в приведенной программе ввести первое число 0, цикл типа while не выполнится ни разу, и на экран будет выдано сообщение «Минимальное число 0, его номер 1». Такой ввод противоречит условию задачи, что вводимая последовательность натуральных чисел непуста, т.е. содержит хотя бы одно положительное число, следовательно, ноль не может быть первым вводимым числом.