Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Програм-е на ЯВУ / Программирование на языках выского уровня, алгоритмические языки.doc
Скачиваний:
63
Добавлен:
11.04.2014
Размер:
1.74 Mб
Скачать

Управляющие операторы

В простейшей программе операторы выполняются последовательно, т.е. ровно один раз и в том порядке, как они встречаются в тексте программы. Однако в реальных программах операторы могут повторяться или выполняться только при определенном условии. Для создания программ нелинейной структуры используются управляющие операторы.

К управляющим операторам относятся следующие операторы:

  • Операторы ветвления:

  • условный оператор – if else – реализует алгоритмические структуры АЛЬТЕРНАТИВА и ВЫБОР (см. Приложение 1);

  • оператор выбора – switch – частично реализует алгоритмическую структуру ВЫБОР (см. Приложение 1);

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

      • цикл с предусловием – while – реализует алгоритмическую структуру ЦИКЛ С ПРЕДУСЛОВИЕМ (см. Приложение 1);

      • цикл с постусловием – do while – реализует алгоритмическую структуру ЦИКЛ С ПОСТУСЛОВИЕМ (см. Приложение 1);

      • цикл с параметром – for – реализует алгоритмическую структуру ПАРАМЕТРИЧЕСКИЙ ЦИКЛ (см. Приложение 1).

Условный оператор (if else)

Условный оператор if используется для разветвления процесса вычислений на два направления, соответственно он реализует алгоритмическую структуру АЛЬТЕРНАТИВА, блок-схема которой выглядит следующим образом:

Формат оператора:

if(<Условие>)

{

<Оператор 1>

}

else

{

<Оператор 2>

}

if(<Условие>)

{

<Оператор 1>

}

Если <Условие> истинно, то выполняется <Оператор 1>, иначе выполняется <Оператор 2>.

Пример использования условного оператора для разветвления процесса вычислений на два направления:

// Вычисление модуля y= |x|

int x, y;

if(x < 0) { y= -x; }

else { y= x; }

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

Использование уловного оператора для реализации алгоритмической структуры ВЫБОР:

if(<Условие 1>)

{

<Оператор 1>

}

if(<Условие 2>)

{

<Оператор 2>

}

...............

if(<Условие M>)

{

<Оператор M>

}

if(<Условие 1>)

{

<Оператор 1>

}

else if(<Условие 2>)

{

<Оператор 2>

}

...............

else if(<Условие M>)

{

<Оператор M>

}

else

{

<Оператор M+1>

}

Пример использования условного оператора для реализации алгоритмической структуры ВЫБОР:

// Вычисление y= sign(x) – более простой способ реализации

if(x < 0) { y= -1; }

if(x == 0) { y= 0; }

if(x > 0) { y= 1; }

// Вычисление y= sign(x) – более эффективный способ реализации

if (x < 0) { y= -1; }

else if(x == 0) { y= 0; }

else if(x > 0) { y= 1; }

Оператор выбора (switch) + оператор прерывания (break)

Оператор switch (выбор) предназначен для разветвления процесса вычислений на несколько направлений. Данный оператор реализует алгоритмическую структуру ВЫБОР. Однако он имеет ограниченное применение, т.к. в нем нельзя задавать произвольные условия. Условия в операторе switch имеют следующую структуру <Выражение> == <Константа>.

Формат оператора:

switch(<Выражение>)

{

case <Константа 1>:

<Оператор 1>

break;

case <Константа 2>:

<Оператор 2>

break;

...

case <Константа M>:

<Оператор M>

break;

default:

<Оператор M+1>

}

Если <Выражение> принимает значение равное <Константа 1>, то выполняется <Оператор 1>; если <Выражение> принимает значение равное <Константа 2>, то выполняется <Оператор 2> и т.д. Если <Выражение> принимает значение отличное от указанных констант, то выполняется <Оператор M+1>.

Пример использования оператора выбора:

// Анализ ответа пользователя

char Answer;

scanf(“%с”, &Answer);

switch(Answer)

{

case ‘1’:

printf(“\nВы нажали 1”);

break;

case ‘2’:

printf(“\nВы нажали 2”);

break;

default:

printf(“\nВы нажали что-то не то”);

}

Оператор break прерывает выполнение оператора switch. Если бы его не было, то все операторы внутри switch выполнялись бы последовательно друг за другом. Например, так:

// Анализ ответа пользователя

char Answer;

scanf(“%с”, &Answer);

switch(Answer)

{

case ‘1’:

printf(“\nВы нажали 1”);

case ‘2’:

printf(“\nВы нажали 2”);

default:

printf(“\nВы нажали что-то не то”);

}

При вводе пользователем символа ‘2’ на экране появятся два сообщения:

“Вы нажали 2”

“Вы нажали что-то не то”

Окончание занятия №16 (лекция)

Оператор цикла с предусловием (while)

Оператор используется для организации многократно повторяющихся вычислений, которые могут не выполниться ни разу. Оператор while реализует алгоритмическую структуру ЦИКЛ С ПРЕДУСЛОВИЕМ, блок-схема которой приведена ниже. Данная алгоритмическая структура используется, когда заранее неизвестно количество итераций (повторений), и возможно отсутствие повторений.

Формат оператора:

while(<Условие>)

{

<Оператор>

}

Сначала проверяется <Условие>. Если <Условие> истинно, то выполняется <Оператор> до тех пор, пока <Условие> не станет ложным. Если <Условие> стало ложным, то управление передается оператору, следующему за циклом. <Условие> – это условие продолжения цикла, <Оператор> – это тело цикла (повторяющееся действие + действие для выхода из цикла).

Замечание. <Оператор> может не выполниться ни разу, если <Условие> изначально ложно.

Пример использования оператора с предусловием:

// Подсчитать количество символов в строке String

char String[]= “Это пример”;

int Count;

Count = 0; // подготовка

while(String [Count]!=‘\0’) // условие продолжения

{ Count++; } // тело цикла (повторяющееся действие +

// действие для выхода из цикла)

В данном примере цикл не выполнится ни разу, если строка String будет пустой.

Рассмотрим еще один пример, в котором используется оператор while, но правильнее использовать оператор do while:

// Ввод русской буквы

char RussianLetter;

scanf(“%c”, &RussianLetter); // подготовка

while((RussianLetter < ‘A’) ||

(RussianLetter > ‘я’)) // условие продолжения

{ scanf(“%c”, &RussianLetter); } // тело цикла (повторяющееся действие + // действие для выхода из цикла)

Оператор цикла с постусловием (do while)

Оператор используется для организации многократно повторяющихся вычислений, которые выполняются хотя бы один раз. Оператор do while реализует алгоритмическую структуру ЦИКЛ С ПОСТУСЛОВИЕМ, блок-схема которой приведена ниже. Данная алгоритмическая структура используется, когда заранее неизвестно количество итераций, но хотя бы одна итерация выполняется всегда (например, если в цикле производится ввод данных).

Формат оператора:

do

{

<Оператор>

}

while(<Условие>);

Сначала выполняется <Оператор>, затем проверяется <Условие>. Если <Условие> истинно, то снова выполняется <Оператор>. Это продолжается до тех пор, пока <Условие> не станет ложным.

Замечание. <Оператор> всегда выполняется хотя бы один раз.

Пример использования цикла с постусловием:

// Запрашиваем у пользователя число от 0 до 10

// подготовка отсутствует

do

{ scanf(“%d”, &Number); } // тело цикла (повторяющееся действие +

// действие для выхода из цикла)

while((Number < 0)||(Number > 10)); // условие продолжения

В примере используется цикл do while, т.к. число сначала вводится, а затем осуществляется его проверка.

Обратите внимание, что после оператора while ставится точка с запятой ;.

Оператор цикла с параметром (for)

Оператор используется для организации многократно повторяющихся вычислений и по своей сути аналогичен циклу while, но имеет более компактную запись. Оператор for реализует алгоритмическую структуру ПАРАМЕТРИЧЕСКИЙ ЦИКЛ, блок-схемы которой приведены ниже. Данная алгоритмическая структура используется, когда заранее известно количество итераций.

Формат оператора:

for(<Оператор инициализации>; <Условие>; <Оператор модификации>)

{

<Оператор>

}

Сначала выполняется <Оператор инициализации> и проверяется <Условие>. Если <Условие> истинно, то выполняется <Оператор>. Затем выполняется <Оператор модификации> и снова проверяется <Условие>. Если <Условие> истинно, то выполняется <Оператор> и т.д. Цикл завершается, когда <Условие> становится ложным.

Замечание. Цикл for как и цикл while может не выполниться ни разу.

Пример использования цикла с параметром:

// Вычисление факториала y = n!

int n= 5;

int y;

int i;

y = 1; // подготовка

for(i= 1; i <= n; i++) // оператор инициал.; условие; оператор модификации

{ y= y*i; } // тело цикла (повторяющееся действие)

В данном примере еще до выполнения цикла известно, что переменная i должна изменяться в диапазоне от 1 до n.

А теперь рассмотрим, как та же задача решается с использованием цикла while:

// Вычисление факториала y = n!

int n = 5;

int y;

int i;

y = 1; // подготовка

i= 1; // подготовка (оператор инициализации)

while(i <= n) // условие продолжения

{

y= y*i; // повторяющееся действие

i++; // действие для выхода из цикла (оператор модификации)

}

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

Окончание занятия №17 (лекция)