ЦИКЛЫ 1. Понятие цикла 2. Виды циклов 3. Задачи ПОНЯТИЕ ЦИКЛА Циклы используются для того, чтобы повторить некоторую инструкцию или группу инструкций определенное число раз. Вход Инструкция Повторить требуемое число раз Цикл Выход С циклом связаны понятия: - заголовок цикла; - тело цикла; - управляющая переменная (или переменные). ВИДЫ ЦИКЛОВ. Условные циклы В условных циклах тело цикла выполняется или перестает выполняться в зависимости от заданного условия, проверяемого при каждом проходе цикла. Проверка может происходить перед выполнением тела цикла или после него (или даже внутри тела цикла). УСЛОВНЫЕ ЦИКЛЫ. Цикл с предусловием Цикл с предусловием – цикл, который выполняется, пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла. Вход Вход Выражение 1 (инициализация управляющей переменной) Условное выражение Ложно Истинно Выход Ложно Условное выражение 2 Тело цикла Истинно Выход Повторяющаяся последовательность операторов Выражение 3 (модификация управляющей переменной) Цикл с предусловием реализуется в языке С конструкцией while (выражение) тело_цикла; Тело цикла где тело_цикла может быть одним оператором или являться составным оператором {...}. УСЛОВНЫЕ ЦИКЛЫ. Цикл с предусловием Особенности цикла с предусловием: 1). Необходимо обязательно инициализировать управляющую переменную до выполнения оператора while. 2) В зависимости от значения выражения в операторе while цикл с предусловием может быть не выполнен ни разу. 3) Необходимо в теле цикла не забыть модифицировать управляющую переменную или выполнить действия, которые могут привести к изменению условия выхода их цикла. 4) После выхода из цикла последнее значение переменной, используемой в качестве управляющей переменной, сохраняется и его можно использовать в программе. УСЛОВНЫЕ ЦИКЛЫ. Цикл с предусловием Пример. Ввести с клавиатуры 2 вещественных числа: a и b (a>1). Получить и вывести на экран (по одному в строке) все члены последовательности a, a2, a3, ..., меньшие числа b. int main() { float a, b, c; scanf("%f %f", &a, &b); c = a; while (c<b) { printf("%f\n", c); c = c*a; } return 0; } УСЛОВНЫЕ ЦИКЛЫ. Цикл с постусловием Цикл с постусловием – цикл, в котором условие проверяется после выполнения тела цикла. В языке С и его "потомках" условие такого цикла трактуется как условие продолжения (цикл завершается, когда условие ложно). Вход Цикл с постусловием реализуется в языке С конструкцией Тело цикла do Условное выражение Истинно тело_цикла; while (выражение); Ложно Выход где тело_цикла может быть одним оператором или являться составным оператором {...}. УСЛОВНЫЕ ЦИКЛЫ. Цикл с постусловием Особенности цикла с постусловием: 1). Значение управляющей переменной можно присваивать и модифицировать внутри тела цикла – главное сделать это до оператора while. 2) Цикл с постусловием будет всегда выполнен хотя бы один раз! 3) После выхода из цикла последнее значение переменной, используемой в качестве управляющей переменной, сохраняется и его можно использовать в программе. 4) Один из наиболее употребительных вариантов использования цикла с постусловием – обязательное однократное выполнение какого-либо алгоритма и, при необходимости, повторное (возможно, многократное) его повторение по запросу пользователя. УСЛОВНЫЕ ЦИКЛЫ. Цикл с постусловием Пример. Ввести с клавиатуры 2 вещественных числа: a и b. Вывести их сумму на экран. Выдать на экран сообщение с вопросом "Еще раз?". Если пользователь ввел символ 'Y' или 'y', то повторить процедуру. Иначе – завершить работу. int main() { float a, b; char choice; do { scanf("%f %f", &a, &b); printf("%f\nOne more?\n", a+b); scanf("%c", , &choice); } while ((choice=='Y') || (choice=='y')); return 0; } ЦИКЛЫ ПО СЧЕТЧИКУ Цикл со счётчиком – цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым заданным шагом. Цикл по счетчику реализуется в языке С конструкцией for (выражение1; выражение2; выражение3) тело_цикла; где: тело_цикла может быть одним оператором или являться составным оператором {...}. выражение1 – для присвоения начального значения управляющей переменной; выражение2 – для проверки выполнения условия продолжения цикла (цикл повторяется, пока условие истинно); выражение3 – для изменения управляющей переменной. ЦИКЛЫ ПО СЧЕТЧИКУ Особенности цикла по счетчику: 1) Тело (!) цикла не содержит операторов для модификации управляющей переменной – правило ее изменения задается в заголовке цикла, а выполняется модификация автоматически всегда в конце цикла. Следует избегать принудительной (дополнительной) модификации счетчика внутри цикла по счетчику. 2) Любое из трех выражений в операторе for может отсутствовать, но точки с запятыми должны оставаться. 4) После выхода из цикла последнее значение переменной, используемой в качестве управляющей переменной, сохраняется и его можно использовать в программе. 5) В некоторых языках программирования значение переменной цикла после завершения цикла по счетчику не определено стандартом языка и зависит от конкретного компилятора (может быть непредсказуемым, а может сохранить последнее значение). Хорошим стилем программирования считается не использовать значение переменной цикла по счетчика вне тела цикла. 6) Поскольку в цикле по счетчику условие повторения вычисляется в начале цикла, то возможен вариант, когда цикл не будет выполнен ни разу. 8) Цикл по счетчику следует использовать в тех случаях, когда количество итераций цикла известно к моменту начала выполнения цикла. Если же количество итераций заранее неизвестно и зависит от действий, выполняемых внутри цикла, то следует использовать условные циклы. ЦИКЛЫ ПО СЧЕТЧИКУ Пример. Ввести с клавиатуры число N (1N10). Вычислить N! int main() { int N, p, i; } int main() { int N, p, i; p = 1; p = 1; for (i=1; i<=N; i++) p = p * i; for (i=N; i>=1; i--) p = p * i; printf("%d", p); printf("%d", p); return 0; return 0; }