
- •Технология программирования циклических процессов. Арифметические циклы
- •Арифметические циклы с аналитическим заданием аргумента
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма
- •Программирование задачи
- •Операторы цикла
- •Оператор цикла с предусловием
- •Правила записи и выполнения
- •Оператор цикла с постусловием
- •Структура оператора
- •Правила записи и выполнения
- •Оператор пошагового цикла for
- •Структура оператора
- •Правила записи и выполнения
- •Программа по алгоритму цикла с предусловием
- •Программа по алгоритму цикла с постусловием
- •Программа по алгоритму цикла с параметром
- •Арифметические циклы с табличным заданием аргумента
- •Постановка задачи
- •Математическая формулировка
- •Выбор метода решения
- •Составление алгоритма решения
- •Алгоритмизация структурой цикла с предусловием
- •Алгоритмизация структурой цикла с постусловием
- •Алгоритмизация структурой цикла с параметром
- •Программирование задачи
- •Программирование задачи
- •Программа по алгоритму цикла с предусловием
- •Программа по алгоритму цикла с постусловием
- •Программа по алгоритму цикла с параметром
- •Заключение
- •Вопросы для контроля
Программирование задачи
Анализ алгоритмов, реализующих циклы с пред- и пост-условиями, позволяет сделать вывод, что их программирование (выполнение блоков проверки условия) возможно с использованием укороченного оператора условной передачи управления вида if( усл_выр ) goto m.
Однако современный стиль программирования не рекомендует использование оператора безусловной передачи управления. Поэтому составление программ требует использования специальных конструкций языка Си/Си++ – операторов цикла.
Рис.5.4.Цикл Рис.5.5.Цикл Рис.5.6.Цикл
с предусловием с постусловием с параметром
Рис. 5.7. Развёрнутые изображения циклов:
а – с предусловием, б – с постусловием, в – с параметром
-
Операторы цикла
Операторы цикла – конструкции, позволяющие реализовать любую из полученных схем алгоритма – цикл с предусловием, цикл с постусловием, цикл с параметром.
В Си/Си++ существуют три оператора цикла. Каждый из них соответствует основному требованию структурирования – имеет один вход и один выход.
-
Оператор цикла с предусловием
Предназначен для программирования варианта цикла с предусловием – проверки текущего значения параметра цикла на соответствие диапазону изменения с реализацией тела цикла, если условие выполняется, и выходу из цикла при его невыполнении.
Структура оператора:
while( усл_выр )
{
тело
цикла
}
где while – ключевое слово (пока);
усл_выр – выражение, определяющее проверку условия повторения цикла;
( ) – ограничители выражения;
тело цикла – совокупность повторно вычисляемых операторов;
{ } – ограничители тела цикла.
-
Внимание! В операторе цикла while символ окончания ( ; ) не указывается.
Первая строка оператора называется заголовком цикла.
Оператор выполняется следующим образом:
-
вычисляется условное выражение (усл_выр);
-
если выражение истинно (результат не равен нулю) – выполняется тело цикла и управление передается в заголовок для очередной проверки усл_выр;
-
если усл_выр ложно (результат равен нулю) – тело цикла не выполняется и управление передается оператору, записанному под ним.
Естественный (нормальный) – выход из оператора цикла по результатам проверки условного выражения.
Схема выполнения оператора
while( усл_выр )
ЛОЖЬ ИСТИНА
{
тело
цикла
}
Стрелки определяют последовательность работы оператора в зависимости от результатов проверки условного выражения – ИСТИНА или ЛОЖЬ.
Например, фрагмент программы
. . .
while( zi <= b ) /* заголовок цикла */
{
yi = sin( xi ); /* вычисления в */
zi = 2.* yi; /* теле цикла */
}
sum = 0.;
. . .
предписывает повторение вычислений yi и zi пока zi <= b.
Как только условие перестанет выполняться, произойдет нормальный выход из цикла – управление передастся оператору sum = 0.
Правила записи и выполнения
-
В качестве усл_выр могут использоваться любые выражения Си/Си++. Арифметические, например (sin(b)+0.5), (2*c–d/f), (a) или простые (составные) логические выражения, например ( а != b ), ( sin( x ) < b ), ( x <= a && x >= b ).
-
Тело цикла может оформляться одним составным или одним простым оператором, например:
while( yi >= b | | yi <= c ) { yi=2. * cos( xi ); printf(“ %f %f”, xi, yi); } |
while( xi<=a ) xi=sin( ci ); или while( xi<=a ) xi=sin( ci ); |
-
В теле цикла возможно использование специальных операторов break, goto, continue, обеспечивающих искусственный (принудительный) выход из цикла. Оператор break прекращает выполнение цикла и передает управление оператору, записанному непосредственно под телом цикла. Оператор goto m организует выход из цикла с передачей управления оператору, помеченному его меткой. Оператор continue прерывает выполнение тела цикла и возвращает управление заголовку цикла, например:
-
while( a > b )
{
. . .
if( c < a )
break;
. . .
}
d = 15.;
while( a > b )
{
. . .
if( c < a )
goto k;
. . .
}
d = 15.;
. . .
k: d=12.;
while( a > b )
{
. . .
if( c < a )
continue;
. . .
}
d = 15.;
Первый фрагмент предписывает искусственный выход из цикла при выполнении в теле цикла условия c < a с передачей управления оператору d = 15. Второй – нарушает естественный порядок вычисления тела цикла при c < a с передачей управления оператору d=12., помеченному меткой k. Третий прерывает выполнение тела цикла по тому же условию, но управление возвращается заголовку цикла.
-
В теле цикла возможно использование других (вложенных) операторов цикла.
Вывод: оператор while позволяет программировать арифметические циклы с предусловием, например, представленные схемами рис. 5.4 (блоки 5, 6, 7, 8, 9); рис. 5.7а (блоки 5, 6, 7, 8), при условии, что начальное значение параметра цикла (блок 4) задается до входа в цикл, а изменение параметра (блок 8) осуществляется в теле цикла.