Управляющие структуры и основные конструкции языков программирования. Управляющие структуры в Visual Basic

Структурированные операторы - это конструкции, построенные по опреде­ленным правилам из других операторов. К структурированным операторам относятся:

Составной оператор

Условный оператор

Операторы выбора

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

Оператор with

1.Составной оператор

Составной оператор представляет собой группу из произвольного числа лю­бых операторов, отделенных друг от друга точкой с запятой, и ограниченную операторными скобками begin и end.

Формат составного оператора:

begin <Оператор1>; ... ; <ОператорN>;

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

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

2.Условный оператор

Условный оператор обеспечивает выполнение или невыполнение некоторых операторов в зависимости от соблюдения определенных условий.

Формат условного оператора:

If then <Оператор1> ;

Условие представляет собой выражение логического типа. Оператор работа­ет следующим образом: если условие истинно (имеет значение True), то вы­полняется оператор1, в противном случае выполняется оператор2. Оба оператора могут быть составными.

Условный оператор может быть записан в сокращенной форме, когда слово else и оператор2 после него отсутствуют.

Для организации разветвлений на три направления и более можно исполь­зовать несколько условных операторов, вложенных друг в друга. При этом каждое else соответствует тому then, которое непосредственно ему предше­ствует. Из-за возможных ошибок следует избегать большой вложенности условных операторов друг в друга.

3.Оператор выбора

Оператор выбора является обобщением условного оператора и позволяет сделать выбор из произвольного числа имеющихся вариантов. Этот оператор состоит из выражения, называемого селектором, списка вариантов и необя­зательной ветви else, имеющей тот же смысл, что и в условном операторе.

Формат оператора выбора:

case<Выражение-селектор> of

<Список1> : <Оператор1>;

<СписокN> : <ОператорN>

Выражение-селектор должно быть порядкового типа. Каждый вариант пред­ставляет собой список констант, отделенных двоеточием от относящегося к данному варианту оператора. Список констант выбо­ра состоит из произвольного количества значений и диапазонов, отделен­ных друг от друга запятыми. Границы диапазона записываются двумя кон­стантами через разделитель «..». Тип констант должен соответствовать типу выражения-селектора.

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

1. Вычисляется значение выражения селектора.

2. Производится последовательный просмотр вариантов на предмет совпа­дения значения селектора с константами и значениями из диапазонов соответствующего списка.

3. Если для очередного варианта этот поиск успешный, то выполняется оператор этого варианта. После этого выполнение оператора выбора заканчивается.

4. Если все проверки оказались безуспешными, то выполняется оператор, стоящий после слова else (при его наличии).

Пример. Оператор выбора

caseNumberDay of

1..5: strDay:= "Рабочий день";

6..7: strDay:= "Выходной день"

else strDay:="";

В зависимости от значения целочисленной переменной NumberDay, содер­жащей номер дня недели, строковой переменной strDay присваивается со­ответствующее значение.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// Вычисление 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>

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

<Оператор 2>

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

<Оператор M>

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

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

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

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

scanf(“%с”, &Answer);

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

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

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

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

scanf(“%с”, &Answer);

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

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

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

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

“Вы нажали 2”

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

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

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

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

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

<Оператор>

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

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

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

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

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

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

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

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

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

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

char RussianLetter;

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

while((RussianLetter < ‘A’) ||

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

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

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

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

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

<Оператор>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<Оператор>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

операторы if , if-else и switch , являются важнейшими средствами управления выполнением программы на языке Си . Они должны использоваться для реализации общей структуры программы. Три оператора, рассматриваемые ниже, обычно рассматриваются реже, поскольку слишком частое их использование ухудшает читаемость программы, увеличивает вероятность ошибок и затрудняет ее модификацию. Никлаус Вирт дал определение структурного программирования, как программирования без goto .

Оператор break

Оператор break используется для выхода из оператора while , do , for , switch , непосредственно его содержащего. Управление передается на оператор, следующий за оператором, из которого осуществлен выход. Оператор break имеет форму

while((ch=getchar()) != EOF) /* читается символ ch=getchar(). Если он не совпадает с EOF, выполняется тело оператора while */ { if(ch=="\n") break; putchar(ch); }

Работа цикла полностью прекращается, как только при вводе встречается символ "новая строка".

Оператор continue

Оператор continue служит для пропуска оставшейся части выполняемой итерации цикла, непосредственно его содержащего. Если условиями цикла допускается новая итерация , то она выполняется, в противном случае цикл завершается. Оператор continue имеет следующую форму:

while((ch=getchar()) != EOF) /* читается символ ch=getchar(). Если он не совпадает с EOF, выполняется тело оператора while */ { if(ch=="\n") continue; putchar(ch); }

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

Оператор goto

Оператор goto предназначен для безусловной передачи управления к оператору с указанной меткой. Он имеет следующую форму:

goto метка;

Керниган и Ритчи считают оператор goto "чрезвычайно плохим" средством и предлагают применять его как можно реже или не применять совсем. Приведем пример записи оператора:

Чтобы этот оператор выполнялся правильно, необходимо наличие другого оператора, имеющего метку part1 . В этом случае запись оператора начинается с метки, за которой следует двоеточие:

part1: printf("точка перехода\n");

Если без операторов goto , break , continue , return никак не обойтись, то при использовании goto переходите вперед по коду, а не назад.

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

Оператор continue нежелательно использовать для модификации логики циклов.

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

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


Поделитесь работой в социальных сетях

Если эта работа Вам не подошла внизу страницы есть список похожих работ. Так же Вы можете воспользоваться кнопкой поиск


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

2.1 Базовые конструкции структурного программирования

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

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

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

Цикл задает многократное выполнение оператора.

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

Рисунок 2.1 – Базовые конструкции структурного программирования

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

Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении выражения.

2.2 Операции отношения и логические операции

Операции отношения (<, <=, >, >=, ==, !=) сравнивают первый операнд со вторым. Операнды могут быть арифметического типа или указателями. Результатом операции является значение true или false . Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения. Например: x >=0, y != 10, z == 0.

ВНИМАНИЕ! Обратите внимание на разницу между операцией проверки на равенство (== ), результатом которой является true или false , и операцией присваивания (= ), результатом которой является значение, присвоенное левому операнду.

Логические операции (&& , || , ^ ). Операнды логических операций И (&& ), ИЛИ (|| ), ИСКЛЮЧАЮЩЕЕ ИЛИ (^ ) должны иметь тип, допускающий преобразование к типу bool , при этом операнды в одной операции могут быть различных типов. Результатом операции является true или false .

Результат операции логическое И имеет значение true только если оба операнда имеют значение true . Результат операции логическое ИЛИ имеет значение true , если хотя бы один из операндов имеет значение true . Результат операции логическое ИСКЛЮЧАЮЩЕЕ ИЛИ имеет значение true , если один из операндов имеет значение true , а второй – false . Логическое отрицание (!) дает в результате значение false , если операнд есть true , и значение true , если операнд равен false . Операнд может быть арифметического типа. В этом случае выполняется неявное преобразование в тип bool . Логические операции выполняются слева направо. Если значения первого операнда достаточно, чтобы определить результат операции, второй операнд не вычисляется.

Таблица результатов операций И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, НЕ

(A и B – операнды)

A && B

A || B

A ^ B

Примеры выражений с логическими операциями:

x > 0 && y <=10

(a < -1 && b > 0) || c != 100

Условная операция (? :). Эта единственная в С++ тернарная операция (имеет три операнда), ее формат:

операнд_1 ? операнд_2: операнд_3

Операнды вычисляются слева направо. Результат вычисления первого операнда должен быть типа, который можно преобразовать к типу bool . Если результат равен true , то результатом выполнения всей условной операции будет значение второго операнда, иначе – третьего операнда. Их типы могут быть различными.

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

i = (i < n) ? i + 1: 1;


2.3 Операторы ветвления. Условный оператор if

Условный оператор if используется для разветвления процесса вычислений на два направления. Схема алгоритма оператора приведена на рисунке 2.1. Формат оператора:

if (выражение) оператор_1; [ else оператор_2;]

Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю, т.е. равно true , то выполняется первый оператор, иначе – второй. После этого управление передается на оператор, следующий за условным. Одна из ветвей может отсутствовать.

Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок. Блок может содержать любые операторы, в том числе описания и другие условные операторы.

Примеры :

if (a < 0) b = 1;

if (a < b && (a >d || a == 0))

B++;

else

{ b *= a; a = 0;}

if (a < b)

if (a < c )

M = a;

else

M = c;

else

If (b < c )

M = b;

else

m = c ;

В примере 1 отсутствует ветвь else . Подобная конструкция называется "пропуск оператора", поскольку присваивание либо выполняется, либо пропускается в зависимости от выполнения условия.

Если требуется проверить несколько условий, их объединяют знаками логических операций . Например, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие a < b и одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом – ИЛИ.

Оператор в примере 3 вычисляет наименьшее значение из трех переменных.

По синтаксису оператора if в его ветвях должно быть не более одного оператора. Если же их больше, то они должны быть объединены в блок с помощью фигурных скобок или с помощью операции «запятая» (,).

Пример. Производится выстрел по мишени, изображенной на рисунке 3.2. Определить количество очков .

Рисунок 3.2 – Мишень

#include

int main()

float x, y;

int kol;

Printf ("\ n Введите координаты выстрела ");

Scanf ("%f", &x);

Scanf ("%f", &y);

If (x * x + y * y < 1)

Kol = 2;

Else

If (x*x + y*y < 4)

kol = 1;

else

kol = 0;

printf ("\n Очков : %d", kol);

2.4 Операторы ветвления. Оператор множественного выбора switch

Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений. Формат оператора:

switch (выражение)

Case константное_выражение_1: операторы 1;

Case константное_выражение_2: операторы 2;

...

Case константное_выражение_n: операторы n;

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

Все константные выражения должны иметь разные значения, но быть одного и того же целочисленного типа . Несколько меток могут следовать подряд. Если совпадения не произошло, выполняются операторы, расположенные после слова default (а при его отсутствии управление передается следующему за switch оператору).

Если в какой-то из case -меток отсутствует оператор break , то выполнятся также операторы в следующей case -метке и так далее до тех пор, пока где-то не встретится оператор break .

Пример (программа реализует простейший калькулятор на 4 действия):

#include

int main()

int a, b, res;

char op;

printf ("\ n Введите 1-й операнд: ");

scanf ("% d ", & a );

printf ("\ n Введите знак операции: ");

scanf ("% c ", & op );

printf ("\ n Введите 2-й операнд: ");

scanf ("% d ", & b );

bool f = true ;

Switch (op)

Case "+": res = a + b; break;

Case "-": res = a - b; break;

Case "*": res = a * b; break;

Case "/": res = a / b; break;

default : printf ("\n Неизвестная операция"); f = false;

if (f )

printf ("\ n Результат: % d ", res );

Выход из переключателя обычно выполняется с помощью операторов break или return .

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

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

Для организации цикла необходима переменная, называемая параметр цикла или управляющая переменная цикла . Любой цикл состоит из:

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

Рисунок 3.3 – Два вида циклов

Один проход цикла называется итерацией . Целочисленные параметры цикла, изменяющиеся на целое число на каждой итерации , называются счетчиками цикла .

Нельзя передавать управление извне внутрь цикла. Выход из цикла возможен как при выполнении условия выхода, так и по операторам break , return или безусловного перехода goto .

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

Цикл с предусловием реализует схему алгоритма

while (выражение) оператор;

Например:

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

значений функции y=x 2 +1 во введенном диапазоне):

#include

int main()

float Xn, Xk, Dx;

float X = Xn; //начальные установки цикла

While (X <= Xk) //проверка условия выхода

Printf ("\n %5.2f %5.2f", X, X*X + 1); // тело

X += Dx; //модификация

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

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

do оператор while выражение;

Сначала выполняется простой или составной оператор , составляющий тело цикла, а затем вычисляется выражение. Если оно не равно 0 (истинно), тело цикла выполняется еще раз, и так далее, пока выражение не станет равным нулю (ложно) или в теле цикла не будет выполнен какой-либо оператор передачи управления . Тип выражения должен быть арифметическим или приводимым к нему.

Пример (программа осуществляет проверку ввода):

#include

int main()

char answer;

printf ("\ n Купи слоника!");

scanf ("% c " , &answer) ;

while (answer != "y");

2.8 Цикл for

Цикл for реализует схему алгоритма, приведенную ниже, и имеет вид:

for (блок инициализации; блок проверки условия; блок модификации)

Тело цикла;

Пример :

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

Блок проверки условия определяет условие выполнения цикла: если оно не равно 0 (истинно), цикл выполняется.

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

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

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

S += i; // сумма чисел от 1 до 100

Пример (программа печатает таблицу значений функции y=x 2 +1 во введенном диапазоне):

#include

int main()

float Xn, Xk, Dx;

printf ("Введите диапазон и шаг изменения аргумента: ");

scanf ("%f%f%f", &Xn, &Xk, &Dx);

For (float X = Xn; X <= Xk; X += Dx)

Printf ("\n %5.2f %5.2f", X, X*X + 1);

2.9 Вложенные циклы

Каждый из операторов цикла может быть вложен в любой другой в произвольной последовательности. Глубина вложенности циклов не ограничена. Она определяется только алгоритмом решаемой задачи.

Ниже приведён пример вложенных циклов for

Этот фрагмент программы работает следующим образом. Для одного значения параметра внешнего цикла i (например, i = 1 ) параметр внутреннего цикла j изменяется в диапазоне от минимального до максимального значения (от 1 до M ). Только после этого параметр i увеличивается на единицу. Таким образом, тело цикла выполнится N * M раз.

Другие варианты вложенных циклов работают аналогично: параметр внешнего цикла меняется медленно, а внутреннего быстро. Их рекомендуется освоить самостоятельно. Для этого схему алгоритма внутреннего цикла необходимо вставить целиком вместо блока тело цикла.

2.10 Операторы передачи управления

В С++ есть пять операторов, изменяющих естественный порядок выполнения вычислений:

  • оператор выхода из цикла и переключателя break ;
  • оператор перехода к следующей итерации цикла continue ;
  • оператор возврата из функции return ;
  • оператор безусловного перехода goto ;
  • оператор генерации исключения throw .

Оператор выхода break используется для немедленного завершения оператора цикла или switch . Выполнение передается следующему после завершенного оператору.

Рассмотрим его использование на примере открытого итеративного цикла for . На примере вычисления суммы чисел от 1 до 100.

int i = 1, sum = 0;

for (; ;)

If(i > 100) break;

sum += i ;

i ++;

Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла , и передает управление на модификацию параметров цикла (в случае цикла for ) и начало следующей итерации .

Рассмотрим его использование на примере вычисления суммы 1 / x , если x изменяется в диапазоне [-5, 5].

#include

int main()

float X, Sum = 0;

for (X = -5; X <= 5; X++)

If(X == 0)

Continue;

Sum = Sum + 1 / X;

Printf ("\n Sum = %f", Sum);

Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Мы рассмотрим его вместе с функциями в соответствующей теме.

Оператор безусловного перехода goto имеет формат:

goto метка;

В теле той же функции должна присутствовать ровно одна конструкция вида:

метка: оператор;

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

Использование оператора безусловного перехода оправдано в двух случаях:

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

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

Исключительную ситуацию (или просто исключение ) генерирует либо программист с помощью оператора throw , либо сама среда выполнения. Это происходит, когда во время выполнения программы возникают какие-либо ошибки, например, деление на ноль или переполнение . Механизм обработки исключений , реализованный в С++ , позволяет реагировать на подобные ошибки и таким образом избегать аварийного завершения программы. Он будет рассмотрен в другой теме.

Другие похожие работы, которые могут вас заинтересовать.вшм>

2784. Операторы условия и выбора 16 KB
Оператор условия If. Поэтому Вы уже можете записать следующие операторы присваивания: Koren:=Sqrtxy; Modul:=bsxy. Для реализации таких условных переходов в языке Паскаль используют операторы If и Else а также оператор безусловного перехода Goto. Рассмотрим оператор If.
2750. Операторы Write и WriteLn 12.34 KB
Write англ. Оператор WriteLn выполняет то же самое действие но так как у него есть еще окончание Ln line англ. Общий вид: Write список выражений WriteLn список выражений Процедуры Write и WriteLn используются не только для вывода результата но и для вывода различных сообщений или запросов.
6706. Структурированный язык запросов – SQL: история, стандарты, основные операторы языка 12.1 KB
Структурированный язык запросов SQL основан на реляционном исчислении с переменными кортежами. Язык SQL предназначен для выполнения операций над таблицами создание удаление изменение структуры и над данными таблиц выборка изменение добавление и удаление а также некоторых сопутствующих операций. SQL является непроцедурным языком и не содержит операторов управления организации подпрограмм ввода вывода и т.

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

Управляющие структуры и основные конструкции языков программирования

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

Состоянием некоторых ячеек памяти, понимаемых нами как переменные;

Активной точкой программы, то есть той командой программы, которая выполняется данный момент.

Следовательно, можно выделить и два основных класса действий, которые может выполнять вычислительная система:

Действия, выделяющие область памяти под переменные программы (описания).

Действия, меняющие точку выполнения программы (операторы, инструкции, конструкции).

Различные совокупности действий второго класса также называют управляющими структурами.

Обычно операторы в программе выполняются один за другим в порядке их записи. Это называется последовательным выполнением. Различные операторы языка С, которые мы скоро будем обсуждать, дают программисту возможность указать, что следующий оператор, подлежащий выполнению, может отличаться от очередного в последовательности. Это называется передачей управления.

В 60-е годы стало ясно, что в основе большинства трудностей, испытываемых группами разработки программного обеспечения, лежало бесконтрольное использование передачи управления. Вина была возложена на оператор goto, который позволяет программисту передавать управление в программе по одному из возможных адресов в очень широком диапазоне. Понятие так называемого структурного программирования стало почти синонимичным «исключению оператора goto».

Исследование Бома и Якопини показало, что программирование возможно и при полном отсутствии операторов goto. Смена стиля программирования на «программирование без goto» стала для программистов эпохальным девизом. Но только в 70-е годы широкие круги профессиональных программистов начали принимать структурное программирование всерьез. Результаты оказались впечатляющими, поскольку группы разработки программного обеспечения сообщали об уменьшении времени разработки, более частой поставке систем в срок и завершении проектов в рамках бюджета. Ключом к успеху является попросту то, что программы, созданные на основе методов структурного программирования, более понятны, их проще отлаживать и модифицировать и, самое главное, более вероятно, что они написаны без ошибок.
Работа Бома и Якопини в 1966 году показала, что все программы могут быть написаны с использованием всего трех управляющих структур, а именно: последовательной структуры, структуры выбора и структуры повторения. Этот результат установлен Бомом и Якопини в 1966 г. путем доказательства того, что любую программу можно преобразовать в эквивалентную, состоящую только из этих структур и их комбинаций. При этом последовательная структура, по существу, является встроенной в язык С. Если не указано иначе, компьютер автоматически выполняет операторы С один за другим в порядке их записи.

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

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

· структура следования;

· структура ветвления;