Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Си++ Занятие 5.doc
Скачиваний:
5
Добавлен:
13.11.2019
Размер:
153.09 Кб
Скачать

1.2 Цикл с постусловием (do while)

Цикл с постусловием реализует структурную схему, приведенную на рис. 1 б и имеет вид:

do тело цикла while (выражение);

Этот оператор цикла проверяет условие окончания в конце цикла, т.е. после каждой итерации, поэтому тело цикла выполняется, по крайней мере, один раз.

Последовательность выполнения оператора do – while:

  1. выполняется тело цикла (которое может быть составным оператором),

  2. вычисляется выражение,

  3. если выражение ложно, то выполнение оператора do – while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с п. 1

Пример 3. Вывести на экран числа от 0 до 10

int x=0;

do

{

printf (“%d\n”,x);

x++;

}

while (x<10);

printf (“вывод закончен!\n”);

Пример 4. Вводить целые числа с клавиатуры, пока их значения лежат в диапазоне от 10 до 150. Вычислить сумму введенных чисел.

const int minvalue=10, maxvalue=150;

int input=0, s=0;

do

{

printf (“введите значение числа”);

scanf(“%d”,&input);

s+=input;

}

while (input < minvalue || input > maxvalue);

printf(“s=%d\n”,s);

Цикл do – while повторяется до тех пор, пока вводимые с клавиатуры числа находятся в диапазоне от minvalue до maxvalue.

1.3 Пошаговый цикл (цикл с параметром) for

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

Пошаговый цикл имеет следующий вид:

for (выражение 1; выражение 2; выражение 3) тело цикла

Выражение 1 обычно используется для установки начальных значений переменных, использующихся в цикле, - это область инициализации данных. В этой части можно записать несколько операторов, разделенных запятой (операцией «последовательное выполнение»), например, так:

for (int i=0, j=2; … )

Областью действия переменных, объявленных в части инициализации цикла, является цикл. Инициализация выполняется один раз в начале исполнения цикла.

Выражение 2 – определяет условие, при котором тело цикла будет выполняться. Если его результат, приведенный к типу bool, равен true, цикл выполняется. Цикл с параметром реализован как цикл с предусловием.

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

Простой или составной оператор представляет тело цикла.

Любая из частей оператора for может быть опущена, но ; надо оставить на своих местах.

Схема выполнения оператора for представлена на рис 2.

Рис. 2 Схема пошагового цикла

Последовательность действий такова:

  1. вычисляется выражение 1 (один раз перед входом в цикл).

  2. Вычисляется выражение 2 (перед каждым проходом цикла).

  3. Если значение выражения 2 – true (отлично от 0), то выполняется тело цикла, иначе (если выражение false) – цикл прекращается и управление передается оператору, следующему за оператором for.

  4. Выполняется тело цикла,

  5. Вычисляется выражение 3 – это модификация данных (после каждой итерации цикла).

  6. Процесс повторяется с п.2

Существенно то, что проверка условия выполняется в начале цикла, это значит, что тело цикла может ни разу не выполниться (если выражение ложно).

Если отсутствует проверка (выражение 2), то считается, что оно истинно (отлично от 0), и в этом случае цикл будет бесконечным.

Пример 5. Из бесконечного цикла можно выйти с помощью оператора break.

for (;;)

{..

break

}

Пример 6. Вычислить сумму квадратов целых чисел от 1 до 20.

main ()

{

const int n=20; //именованная константа n – счетчик цикла

int s=0; //начальное значение для суммы

int i;

for (i=1; i<=n; i++)

s+= i*i;

printf (“\ns=%d”, s);

}

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

i=1 – инициализации переменной i путем присваивания ей начального значения;

i<=n задает условие повтора цикла до тех пор, пока значение переменной i остается меньше или равно n;

i++ - приращение значения переменной i после каждого прохода цикла.

Тело цикла состоит из одного простого оператора s+= i*i. Пока i<=n происходит накопление суммы в переменной s. После выхода из цикла переменная s выводится на экран дисплея.

В данном примере в заголовке можно инициализировать две переменные – i и s. В этом случае программа будет выглядеть т.о.:

int i, s;

for (i=1, s = 0; i<=n; i++)

Та же задача, выполненная с помощью оператора while, выглядит т.о.:

const int n=20;

int i=1, s=0;

while (i<=n)

{

s+= i*i;

i++;

}

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

for (b1; b2; b3) оператор

b1;

while (b2)

{ оператор; b3}

Часто встречающиеся ошибки при программировании циклов – использование в теле цикла неинициализированных переменных и неверная запись условия выхода из цикла.

Чтобы избежать этого, рекомендуется:

- проверить, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого начальные значения (а также возможно ли выполнение других операторов),

- проверить, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла;

- предусмотреть аварийный выход из цикла по достижение некоторого количества итераций,

- и конечно не забывать о том, что если в теле цикла требуется выполнить более одного оператора, нужно заключать из в { }.

Операторы цикла взаимозаменяемы.

Использовать ли циклы while или for – это, в основном, дело вкуса. Цикл for предпочтительнее там, где имеется простая инициализация и модификация, т.к. при этом управляющие циклом параметры оказываются в заголовке цикла, что облегчает понимание происходящего. Например, цикл for применяемый для обработки первых n элементов массива, наглядно демонстрирует начальное (i=0) и граничное (i<n) значение переменной цикла, а также шаг итерации цикла (i++):

for (i=0; i<n; i++)

Управляющая переменная (i) сохраняет свое значение после выхода из цикла, какова бы ни была причина этого выхода.

Один цикл может выполняться внутри другого, при этом говорят, что циклы вложенные. Внутренний цикл целиком выполняется во время каждого прохода внешнего цикла.

Вот некоторые рекомендации по выбору наилучшего вида цикла в каждом конкретном случае:

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

Оператор for предпочтительнее в большинстве остальных случаев (однозначно – для организации циклов со счетчиками).

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]