logo
Харви Дейтел, Пол Дейтел Как программировать на С++ / 02-Deitel-Стр-115-214

120 Глава 2

//Повторение, управляемое счетчиком, со структурой for #include <iostream.h>

main ()

{

// задание начального значения, условие повторения и // приращение - все это включено в заголовок структуры for for ( int counter = 1; counter <= 10; counter++) cout « counter « endl;

return 0; // успешное окончание }

Рис. 2.17. Повторение, управляемое счетчиком, со структурой for

Имя Конечное значение

управляющей управляющей

переменной переменной

I I

for (int counter ж 1; counter <» 10; countar++)

2ounter « 1; counter <» 10;

Т Т Т

Ключевое Начальное Приращение

слово for значение управляющей

управляющей переменной

переменной

Рис. 2.18. Компоненты типичного заголовка for

Хороший стиль программирования 2.17

Использование конечного значения управляющей переменной в условиях структур while и for и использование операции отношения <= поможет избежать ошибок занижения на единицу. Например, для цикла, используемого при печати чисел от 1 до 10 условие продолжения цикла следует записать counter <= 10, а не counter < 10 (что является ошибкой занижения на единицу) или counter < 11 (что тем не менее корректно).

Общая форма структуры for:

for (выражение!; выражение2; выражениеЗ) опера тор

где выражение! задает начальное значение переменной, управляющей циклом, выражение2 является условием продолжения цикла, а выражениеЗ изменяет управляющую переменную. В большинстве случаев структуру for можно представить эквивалентной ей структурой while следующим образом:

Управляющие структуры 121

выражение!;

while (выражение2) { оператор выражениеЗ;

}

Исключения из этого правила будут рассмотрены в разделе 2.18.

Иногда выражение! и выражениеЗ представляются как списки выраже­ний, разделенных запятой. В данном случае запятая используется как опе­рация запятая или операция последования, гарантирующая, что список вы­ражений будет вычисляться слева направо. Операция последования имеет самый низкий приоритет среди всех операций С++. Значение и тип списка выражений, разделенных запятыми, равны значению и типу самого правого выражения в списке. Операция последования наиболее часто используется в структуре for. Ее основное назначение — помочь программисту использо­вать несколько выражений задания начальных значений и (или) несколько выражений приращения переменных. Например, в одной структуре for может быть несколько управляющих переменных, которым надо задавать начальное значение и которые надо изменять.

Хороший стиль программирования 2.18

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

Выражения в структуре for являются необязательными. Если выраже-ние2 отсутствует, С++ предполагает, что условие продолжения цикла всегда истинно и таким образом создается бесконечно повторяющийся цикл. Иногда может отсутствовать выражение!, если начальное значение управляющей переменной задано где-то в другом месте программы. Может отсутствовать и выражениеЗ, если приращение переменной осуществляется операторами в теле структуры for или если приращение не требуется. Выражение для при­ращения переменной в структуре for действует так же, как автономный опе­ратор в конце тела for. Следовательно, все выражения

counter = counter + 1 counter += 1 ++counter counter++

эквивалентны в той части структуры for, которая определяет приращение. Многие программисты предпочитают форму counter++, поскольку прираще­ние срабатывает после выполнения тела цикла. Поэтому постфиксная форма представляется более естественной. Поскольку изменяемая переменная здесь не входит в какое-то выражение, обе формы инкремента равноправны. В структуре for должны применяться точки с запятой.

Типичная ошибка программирования 2.13

Использование запятых вместо точек с запятой в заголовке структуры for.