Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка-ТП-С++.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
661.5 Кб
Скачать

4.7.2. Цикл for

Цикл for является одним из основных видов циклов, которые имеются во всех универсальных языках программирования, включая С++. Однако, версия цикла for, используемая в С++, как вы увидите, обладает большей мощностью и гибкостью.

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

void main ();

{

char *msg;

int indx;

msg = "Здравствуй, мир";

for(indx = 1; indx <= 10; indx++)

printf("Время #%2d: %s\n", indx, msg);

}

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

Теперь приведем основной формат цикла for:

for (выр1; выр2; выр3)

оператор;

Так же, как и в цикле while, “оператор” в теле цикла for обычно является одним из операторов программы, но может использоваться и составной оператор, заключенный в фигурные скобки ({...}).

Заметим, что параметры цикла for, заключенные в скобки, должны разделяться точкой с запятой (позиционный параметр), которая делит, в свою очередь, пространство внутри скобок на три сектора. Каждый параметр, занимающий определенную позицию, означает следующее:

выр1 – обычно задает начальное значение индексной переменной;

выр2 – условие продолжения цикла;

выр3 – обычно задает некоторую модификацию (приращение) индексной переменной за каждое выполнение цикла.

Основной вариант цикла for эквивалентен следующей конструкции, выраженной с помощью цикла while:

выр1;

while (выр2)

{

оператор;

выр3;

}

Вы можете опускать одно, несколько или даже все выражения в операторе for, однако о необходимости наличия точек с запятой вы должны помнить всегда. Если вы опустите “выр2”, то это будет равносильно тому, что значение выражения “выр2” всегда будет иметь значение 1 (истина) и цикл никогда не завершится (такие циклы известны еще как бесконечные).

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

void main();

{

char *msg;

int up, down;

msg = "Здравствуй, мир";

for(up = 1, down = 9; up <=10; up++, down--)

printf("%s: %2d растет, %2d уменьшается \n",

msg, up, down);

}

Заметьте, что и первое, и последнее выражение в этом цикле for состоят из двух выражений, инициализирующих и модифицирующих переменные up и down. Вы можете сделать эти выражения сколь угодно сложными.

4.7.3. Цикл do...While

Последним видом цикла является цикл do...while. Модифицируйте RATIO.CPP следующим образом:

void main()

{

float a, b, ratio;

char ch;

do

{

printf("Введите два числа: ");

scanf("%f %f", &a, &b);

if(b == 0.0)

printf("\nВнимание! Деление на ноль! ");

else

{

ratio = a/b;

printf("\nРезультат деления двух чисел: %f",

ratio);

}

printf("\nНажми ‘q’ для выхода или любую клавишу

для продолжения")

}

while((ch = getch()) != ‘q’);

}

Эта программа вычисляет результат деления одного числа на другое. Оба числа вводятся по запросу программы с клавиатуры. Если вы введете символ q, то выражение в операторе цикла while в конце программы примет значение ”ложь” и цикл (а значит и программа) завершится. Если вы введете какой-либо другой символ, отличный от q, то выражение будет иметь значение “истина” и цикл повторится.

Формат цикла do...while можно представить в виде:

do оператор while (выр);

Основным отличием между циклом while и циклом do...while в том, что операторы внутри do...while всегда выполняются хотя бы один раз (т.к. проверка условия выполнения цикла осуществляется после выполнения последовательности операторов составляющих тело цикла). Это похоже на цикл repeat...until в Паскале с одним, однако, различием: цикл repeat выполняется до тех пор (until), пока его условие станет истинно; а цикл do...while выполняется пока (while) его условие истинно.