Структура повторения do/while
В структуре do/while проверка условия продолжения циклов производится после того, как тело цикла выполнено, следовательно тело цикла будет выполнено по крайней мере один раз. Когда do/while завершается, выполнение программы продолжается с оператора, следующего за предложением while.
Предложение псевдокода
ВЫПОЛНЯТЬ
число заменить на целую часть половины числа
ПОКА число нечетное
описывает повторные действия замены числа на новое значение (под числом понимается значение переменной целого типа). Осуществляется действие «число заменить на целую часть половины числа». Затем проверяется истинность условия «число нечетное» . Действие будет повторяться до тех пор, пока условие остается истинным.
Блок-схема на рис. Б.3 иллюстрирует управляющую логику структуры повторения do/while.
Рис.Б.3-Блок-схема структуры повторения do/while
Выполнение подобной структуры повторения никогда не прервется, если в теле структуры do/while не предусмотрено действие, приводящее условие к ложному значению.
Оператор с постусловием (do/while) записывается так:
do
оператор;
while (условие);
Слово while является зарезервированным словом С++. В структуре do/while нет необходимости использовать фигурные скобки, если тело состоит только из одного оператора. Но фигурные скобки обычно все же ставят, чтобы избежать путаницы между структурами while и do/while.
do {
оператор;
} while (условие);
На рис Б.4 приведен программный код описанной выше структуры. В примере используется переменная целого типа value, которой в результате выполнения очередной итерации цикла присваивается новое значение. Комбинированная операция /= уменьшает значение переменной value в два раза. В условии (value & 1) используется бинарная операция (битовое умножение), результат которой «истинно» если число нечетное. Действие в цикле выполнится хотя бы один раз.
-
int main()
{
int value;
cout << "Задайте числo: ";
cin >> value;
do
{
value /= 2; /* value = value / 2; */
} while (value & 1);
cout << "Результат: "<< value << endl;
return 0;
}
Рис.Б.4-Пример оператора цикла с постусловием
Структура повторения for
Часто приходится решать задачи, в которых организуется повторение, управляемое счетчиком. При этом требуется задать (рис Б.5):
Имя управляющей переменной (счетчика цикла);
Начальное значение управляющей переменной;
Приращение (или уменьшение), на которое изменяется управляющая переменная в каждом цикле.
Условие проверки, не достигнуто ли конечное значение управляющей переменной (т.е. надо ли продолжать циклы)
Рассмотрим программу, которая печатает числа от 1 до 10 (рис.Б.6)
В качестве счетчика используется переменная counter. Значение счетчика увеличивается на 1 при каждом выполнении цикла. Выполнение цикла заканчивается, когда значение управляющей переменной превысит 10.
Программа может быть сделана более компактной, если переменной counter задать значение 0 и заменить структуру while следующей
while (++counter <= 10)
cout << counter << " ";
Операция инкремент выполняется непосредственно в условии структуры while до того, как это условие проверяется.
В С++ существует специальная структура повторения for, которая содержит все элементы, необходимые для повторения, управляемого счетчиком.
for (начальное_выражение; условие; увеличение_счетчика)
оператор;
#include
<iostream.h>
int main( )
{
int
counter = 1;
while
(counter <= 10)
{
cout << counter << " ";
++counter;
}
cout << endl;
return 0;
}
|
|
|
Рис.Б.5-Блок-схема структуры повторения управляемого счетчиком |
|
Рис.Б.6-Повторение, управляемое счетчиком |
Начальное_выражение предназначено для инициализации переменной-счетчика цикла, причем тут же можно объявлять переменную. Условие записывается точно так же, как и в других операторах цикла. Увеличение_счетчика — это именно то, что делает в наших циклах оператор ++i;. Естественно, вместо единственного оператора в теле цикла мы можем писать составной оператор в фигурных скобках. Этот оператор цикла работает так:
вычисляется начальное_выражение; это происходит единственный раз при первом выполнении оператора for;
проверяется условие; если условие истинно, то выполняется заданный оператор в теле цикла; если условие ложно, то происходит выход из цикла и выполняется следующий после цикла оператор;
после выполнения заданного оператора производится увеличение_счетчика;
происходит переход к проверке условия.
Таким образом, при первой итерации выполняются первые два «пункта» в круглых скобках, а при последующих — второй и третий, только в обратном порядке: сначала выполняется увеличение_счетчика, а затем — проверка условия.
В программе (см. рисунок А.6) можно заменить структуру while на структуру for (рис.Б.7).
Когда структура for начинает выполняться, управляющей переменной counter задается начальное значение 1. Затем проверяется условие продолжения цикла counter<=10. Условие истинно, оператор тела структуры выводит значение counter равное 1. Затем управляющая переменная counter увеличивается на 1 в выражении counter++ и цикл опять начинается с проверки условия его продолжения.
int main() {
for (int
counter = 1; counter <= 10; counter++) cout
<< counter << " "; cout
<< endl;
return
0; }
Рис.Б.7-Повторение, управляемое счетчиком, со структурой for
Во избежание ошибок, управляйте количеством повторений цикла с помощью целой переменной.
