Тема 4 Управление программным потоком (1). Инструкция безусловного перехода Инструкции условного перехода Инструкции циклов Обработка исключительных ситуаций
Скачать 178.99 Kb.
|
Тема 4. Управление программным потокомИнструкции управления программным потоком Инструкция безусловного перехода Инструкции условного перехода Инструкции циклов Обработка исключительных ситуаций Инструкция условного ветвления if else используется для разветвления процесса вычислений на два направления if (условие) инструкция_1; [else инструкция_2;] Сначала вычисляется логическое условие в скобках. Если условие истинно, то выполняется следующая инструкция или блок кода. Если условие ложно, то выполняется инструкция или блок кода, следующий за else. if(условие) //принимает значение true или false { блок кода } else { блок кода } Блок выполняется если условие равно «true» Блок выполняется если условие равно «false» Одна из ветвей может отсутствовать: как правило, опускают вторую ветвь с ключевым словом else. if(условие) //принимает значение true или false { блок кода } Блок выполняется если условие равно «true» Если условие равно «false» управление передается на инструкцию следующую за if Блок схемы для условного переходаинструкция 1 true false условие инструкция 2 true false инструкция условие полная форма ветвления неполная форма ветвления Примеры инструкции if-elseПримеры кода int a; int b; ... int c; if(a >= b) c = a; else c = b; int d = c; int a; int b; ... if(a >= b) { a /= 2; //a=a/2 b *= 2; //b=b*2 } else { a *= 2; //a=a*2 b /= 2; //b=b/2 } Примеры инструкции ifПримеры кода int a; int b; ... if(a < b) { int c = a; a = b; b = c; } int d = a; bool a; bool b; ... bool c = false; if(a == true && b == false || b == true && a == false) c = true; bool d = c; Вложение if-else-ifС помощью ключевых слов if и else можно составлять так называемые if-else-if конструкции, которые могут осуществить проверку сразу нескольких условий. Синтаксис вложенных инструкций if(условие 1) инструкция 1; else if(условие 2) инструкция 2; else if(условие 3) инструкция 3; else инструкция 4; if(условие 1) { if(условие 2) инструкция 1; else инструкция 2; } else { if(условие 3) инструкция 3; else инструкция 4; } Пример вложения if-else-ifПример кода int a; ... if(a >= 1000) cout << "Очень много!" << endl; else if(a >= 100 && a < 1000) cout << "Много!" << endl; else if(a >= 10 && a < 100) cout << "Мало!" << endl; else cout << "Очень мало!" << endl; //точка выхода из if-else-if Тернарный оператор ?:Тернарный условный оператор ?: имеет 3 аргумента и возвращает результат первого выражения, если условие равно true, или результат второго выражения, если условие равно false. (Условие) ? Выражение1 : Выражение2; Пример кода int b, c; cin >> b >> c; //ввод двух целых чисел bool a = (b > c) ? true : false; cout << "a = " << ((a) ? "true" : "false"); ((a) ? b : c) = 10; Замена оператора ?: на if-elseПример кода int b, c; cin >> b >> c; //ввод двух целых чисел bool a; if (b > c) a = true; else a = false; if (a) cout << "a = true"; else cout << "a = false"; if (a) b = 10; else c = 10; Инструкция выбора switchУправление передается в точку программы, где целочисленное выражение совпало с case-константой и выполняется до оператора break. Если ни с одной из case-констант совпадения нет, то управление передается на конструкцию с default-меткой, при условии ее наличия, в противном случае ни один из операторов не выполняется. Синтаксис switch(выражение) { case CONST1: ... break; case CONST2: ... break; default: ... } Блок «по умолчанию» Целочисленное выражение Блок выполняется если выражение равно «CONST1» Блок выполняется если выражение равно «CONST2» Примеры инструкции switchПример кода int note; cin >> note; //ввод целого числа switch(note) //целочисленное выражение { case 1: case 2: cout << "Неудовлетворительно\n";break; case 3: cout << "Удовлетворительно\n"; break; case 4: cout << "Хорошо\n"; break; case 5: cout << "Отлично\n"; break; default: cout << "Ошибка\n"; //необязательно } //точка выхода из switch Замена инструкции switch на if-elseПример кода int note; cin >> note; //ввод целого числа if(note == 1 || note == 2) cout << "Неудовлетворительно\n"; else if(note == 3) cout << "Удовлетворительно\n"; else if (note == 4) cout << "Хорошо\n"; else if (note == 5) cout << "Отлично\n"; else cout << "Ошибка\n"; } Итерации и циклыИтерация — это повторение процесса для получения последовательности результатов. Каждое повторение процесса представляет собой одну итерацию, и результат каждой итерации является отправной точкой следующей итерации. В математике и информатике итерация является стандартным элементом алгоритмов. Циклы представляют собой наиболее распространенные языковые конструкции для выполнения итераций. Цикл whileЦикл while является циклом с предпроверкой условия. Тело цикла будет многократно выполняться, пока условие будет иметь значение true. Синтаксис while(условие) { тело цикла } true false тело цикла условие принимает значение либо true, либо false Пример с циклом whileПример кода int a = 10; while(a--) //тело цикла отработает 10 раз { cout << "Повторять пока a != 0" << endl; } //точка выхода из while Цикл do-whileЦикл do-while является циклом с постпроверкой, условие проверяется после выполнения тела цикла. Следовательно, блок кода в цикле do-while выполнится хотя бы один раз. Цикл завершится, когда условие будет иметь значение равное false. Синтаксис do { тело цикла } while(условие); true false тело цикла условие принимает значение либо true, либо false Пример с циклом do-whileПример кода bool a = false; do { cout << "Цикл выполняется хотя бы один раз!"; } while(a); //точка выхода из do-while Цикл forЦикл for является циклом с предпроверкой условия. В цикле могут инициализироваться переменные до начала его выполнения, проверяться условие и выполняться выражение после каждого выполнения тела цикла. Синтаксис for(инициал.;условие;выражение) { тело цикла } true false тело цикла условие выражение инициализация Пример с циклом forПример кода int N = 10; long f = 1; for(int i = 1; i <= N; i++) f *= i; // f = f * i; cout << "f = " << f << endl; Сравнение двух цикловПример c циклом while double x = 5; double y = 1; int n = 10; int i = 0; while(i < n) { y *= x; //y=y*x; i++; } cout << "y = " << y; Пример с циклом for double x = 5; double y = 1; int n = 10; for(int i = 0; i < n; i++) y *= x; //y=y*x; cout << "y = " << y; Инструкция continueИнструкция continue пропускает все инструкции, оставшиеся до конца тела цикла, и начинает новую итерацию. Пример кода int N = 10; long S = 0; for(int i = 1; i <= N; i++) { if(i%2) continue; //прерывание итерации S += i; // S = S + i; } cout << "Значение S: " << S << endl; Инструкция breakИнструкция break завершает выполнение цикла и передает управление на следующую за циклом инструкцию. Пример кода int N = 10; long S = 0; for(int i = 1; i <= N; i++) { if(S > 5) break; //выход из цикла S += i; // S = S + i; } cout << "Значение S: " << S << endl; Инструкция безусловного перехода gotoИнструкция goto позволяет реализовать передачу программного управления из одной точки программы в другую, отмеченную меткой. Метка состоит из идентификатора и завершающего двоеточия. Пример кода ... a = b + c; goto M5; ... M5: d = e - a; ... «Обоснованное» применение инструкции gotoПример кода while(true) { int N; cin >> N; long S = 0; for(int i = 0; i <= N; i++) { S += i; //S = S + i; if(S > 100) goto L1; } cout << "Значение S: " << S << endl; } L1: // выход из двойного цикла «Избавление» от инструкции gotoПример кода while(true) { int N; cin >> N; long S = 0; for(int i = 0; i <= N; i++) { S += i; //S = S + i; if(S > 100) break; //выход из цикла for } if(S > 100) break; //выход из цикла while cout << "Значение S: " << S << endl; } |