Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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




Занятие 5

Операторы цикла

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

Рис. 1 Структурные схемы операторов цикла: a – цикл с предусловием,

б – цикл с постусловием

 

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

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

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

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат операторы break, continue, return и goto. Передавать управление извне внутрь цикла не рекомендуется.

Для удобства, а не по необходимости, в С++ есть три разных оператора цикла – while, do while, for.

Цикл с предусловием (while)

Цикл с предусловием реализует структурную схему, приведенную на рис. 1 а. Такой цикл используется в том случае, когда не известно точное число повторов (итераций). Оператор цикла имеет вид:

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

В качестве выражения допускается использовать любое выражение языка С, а в качестве тела – любой оператор, в том числе пустой или составной. Схема выполнения оператора while следующая:

1) вычисляется выражение

2) если выражение ложно, то выполнение оператора while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполняется тело цикла.

3) процесс повторяется с пункта 1

Важно отметить, что выражение вычисляется до начала и после каждого прохода цикла. Цикл не выполняется ни разу, если выражение ложно (равно 0).

Поскольку в операторе while вначале происходит проверка условия, его удобно использовать в ситуациях, когда тело оператора не всегда нужно выполнять.

Пример 1. Вычисление суммы чисел от 0 до 9

# include <stdio.h>

void main()

{

int i=0, sum=0;

       while (i++ < 10)       //условие выполнения тела цикла

       { //начало тела цикла

                sum+=i; //тело цикла

       }// конец тела цикла

printf(“значение суммы = %d \n”,sum);

}

В выражении (i++ < 10) сначала выполняется операция инкремента i++, а затем – проверка условия i<10.

С помощью оператора while легко организовать бесконечный цикл.

Пример 2. Бесконечный цикл

while (1)

{ операторы цикла

break;

…}

Выражение в скобках (1) подразумевает проверку условия (1==1), которое всегда истинно, поэтом естественного выхода из цикла нет. Такие циклы следует использовать в тех случаях, когда заранее неизвестно условие выхода из цикла, и оно формируется в теле цикла в процессе работы программы.

Цикл с постусловием (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.

 

Пошаговый цикл (цикл с параметром) 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 удобнее использовать в случаях, когда число итераций заранее неизвестно, очевидных параметров цикла нет или модификацию параметров удобнее записывать не в конце тела цикла.

 










Последнее изменение этой страницы: 2018-05-10; просмотров: 218.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...