43. Итерационный цикл (for)
Формат записи этой инструкции:
Или, если тело цикла представляет собой одиночную инструкцию:
При запуске цикла однократно выполняется Инициализация параметра (параметров) цикла, после чего осуществляется проверка Условия, определяющего необходимость выполнения тела цикла. После окончания выполнения инструкций тела цикла, на каждой итерации выполняется Модификация параметра (параметров) цикла и снова проверяется Условие. Так продолжается до тех пор, пока Условие не станет ложным (false).
Разделы Инициализации, Условия и Модификации в заголовке цикла разделяются символом ‘;’.
Пример записи (пример из предыдущего параграфа):
int k;
for (k = 0; k <= 9; ++k)
cout << k;
Если параметр k цикла используется только внутри цикла (после выхода из цикла переменная k больше не нужна), эту переменную можно (и лучше) определить непосредственно в разделе Инициализации цикла:
for (int k = 0; k <= 9; ++k)
cout << k;
В разделах Инициализации и Модификации можно управлять сразу несколькими параметрами цикла:
for (int k = 1, n = 10; k <= 10; ++k, --n)
cout << k << “ * ” << n << “ = ” << k * n << endl;
На экран будет выведено:
1 * 10 = 10
2 * 9 = 18
3 * 8 = 24
4 * 7 = 28
5 * 6 = 30
6 * 5 = 30
7 * 4 = 28
8 * 3 = 24
9 * 2 = 18
10 * 1 = 10
Отдельные элементы разделов Инициализации и Модификации отделяются друг от друга символом ‘,’.
Любой раздел заголовка цикла может отсутствовать. Раздел Инициализации, например, может отсутствовать, когда начальные значения параметров цикла устанавливаются вне цикла, перед его началом. Модификация значений параметров цикла может осуществляться внутри тела цикла, а не в его заголовке. При отсутствии Условия продолжения выполнения цикла, цикл становится бесконечным и для выхода из него придется использовать инструкцию break. Однако, какой бы из разделов ни отсутствовал, соответствующие разделительные символы ‘;’ в заголовке цикла должны обязательно присутствовать.
#include <conio.h>
……..
cout << “Для продолжения работы нажмите любую клавишу…” << endl;
for ( ; ! kbhit(); );
……..
В этом примере цикл, в заголовке которого отсутствуют разделы Инициализации и Модификации, используется для приостановки выполнения программы до нажатия на клавиатуре любой клавиши (функция kbhit() возвращает значение false, если на клавиатуре не нажата никакая клавиша, и значение true, если клавиша была нажата – для использования этой функции необходимо включить заголовочный файл conio.h).
Замечание. Приостановку работы программы значительно проще (без использования циклов) можно выполнить с помощью функции getch(), которая ожидает нажатия клавиши на клавиатуре и возвращает символ этой клавиши без отображения этого символа на экране (необходим заголовочный файл conio.h):
#include <conio.h>
……..
cout << “Для продолжения работы нажмите любую клавишу…” << endl;
getch();
……..
Принудительный выход из цикла for осуществляется с помощью инструкции break, а принудительный переход к следующей итерации (шагу цикла) – с помощью инструкции continue.
Тела циклов могут содержать любые инструкции языка C++, в том числе и другие циклы. Подобные конструкции называются вложенными циклами. Использование вложенных циклов является весьма распространенным приемом программирования при решении очень многих задач.
44-45. Инструкция перехода break и continue
По поводу инструкции break следует напомнить, что при вложенных циклах она обеспечивает прекращение того цикла, в теле которого она непосредственно расположена.
Характеризуя инструкции break и continue (ее использование в циклах), следует сказать, что их применение противоречит принципам структурного программирования и приводит к затруднению понимания алгоритмов программ, их отладки и дальнейшей модификации. Однако, несмотря на это, их использование в ряде случаев бывает оправдано. В принципе, как бы ни был сложен алгоритм программы, его всегда можно реализовать без использования этих инструкций. В основном это достигается за счет введения дополнительных логических переменных (флажков) и некоторого усложнения условий продолжения циклов. Однако в некоторых случаях эти “накладные расходы” оказываются чрезмерными и тогда выгоднее все-таки использовать эти инструкции перехода. Как поступать в тех или иных ситуациях во многом зависит от конкретного алгоритма и от внутренних предпочтений программиста. Но, все же, злоупотреблять использованием этих инструкций не следует.
- 2. Структура и основные элементы программы
- 3.Общее понятие типов данных
- 4. Переменные и константы
- 5.Основные типы данных
- 6. Спецификаторы типов данных
- 7. Определение переменных и констант в программе
- 8. Инициализация переменных различных типов
- 9.Целочисленные типы данных
- 10. Вещественные типы данных
- 11. Особенности представления вещественных типов данных
- 12.Логический тип данных
- 13. Символьный тип данных
- 14. Управляющие последовательности
- 15. Операции и выражения
- 16. Операция присваивания, составные операции присваивания
- 17. Понятие l-значения
- 18. Преобразование типов данных
- 19. Арифметические операции
- 20. Операции инкремента и декремента, их разновидности
- 21. Операции отношения
- 22. Логические операции
- 23. Побитовые операции сдвига
- 24. Побитовые логические операции
- 25. Примеры применения побитовых операций
- 26. Условная операция и ее использование
- 27. Определение объема памяти, необходимого для размещения объектов
- 28. Понятие приоритета операций и его влияние на результаты вычислений
- 31.Флаги форматирования потоков ввода-вывода
- 32. Форматирование ввода-вывода с помощью манипуляторов
- 33.Форматирование ввода-вывода с помощью функций потоков ввода-вывода
- 34. Управление шириной поля вывода и выравниванием данных при выводе
- 35. Управление форматом вывода вещественных значений
- 36. Основные понятия структурного программирования
- 37. Базовый набор управляющих структур
- 39.Условная инструкция (if)
- 40. Инструкция множественного выбора (switch)
- 42. Цикл с постусловием (do while)
- 43. Итерационный цикл (for)
- 46. Инструкция перехода goto
- 47. Понятие рекуррентных вычислений, примеры
- 48. Понятие инварианта цикла
- 49. Понятие и определение массива
- 52. Ввод элементов массивов с клавиатуры
- 53. Декларативная и программная инициализация массивов
- 54. Копирование массивов
- 55. Нахождение минимальных и максимальных значений в массивах
- 56. Сдвиг элементов массивов
- 57. Перестановка элементов в массивах
- 58. Поиск данных в массивах
- 59. Сортировка данных в массивах
- 60. Вычисление сумм и произведений элементов массивов
- 61. Представление текстовых строк в виде массива символов
- 62. Ввод-вывод символьных строк
- 63. Определение фактической длины строки
- 64. Копирование символьных строк
- 65. Основные функции обработки строк библиотеки cstring
- 66. Массивы текстовых строк (двумерные массивы символов)
- 67. Указатели Понятие указателя
- Работа с указателями
- 68. Арифметика указателей
- 69. Индексирование указателей
- 70. Ссылки
- 71. Определение функции
- 72. Инструкция return
- 73. Завершение работы функции
- 74. Механизмы передачи данных через параметры функций
- 75. Передача данных по значению
- 76. Передача данных через указатели
- 77. Передача данных по ссылке
- 78. Параметры по умолчанию
- 79. Функции с переменным числом параметров
- 80. Inline функции
- 81. Перегрузка функций
- 82. Рекурсия
- 83. Прототипы функций