Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
new_mb.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
892 Кб
Скачать
☆

2.1 Ветвление

Ветвление представляет из себя принятие решения о том, в каком направлении продолжать выполнение программы и реализуется двумя конструкциями: «if – else» и «switch».

2.1.1. Конструкция «if – else»

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

Листинг 2.1. Конструкция if-else.

#include <iostream>

using namespace std;

int main (void)

{

bool x;

cin >> x;

cout << (x ? "true" : "false") << endl;

if (x)

cout << "true" << endl;

else

cout << "false" << endl;

return 0;

}

Важным аспектом при использовании данной конструкции является то, что она может быть вложена одна в другую. Также при использовании условной конструкции допустимо опускать определение действия в том случае, если его и не требуется. Однако, в таком случае, необходимо следить за тем, чтобы каждая «else» – часть соответствовала своей «if» – части. Так, если в нижеследующем листинге не использовать «{}» для первого «if», то любое число вне заданного интервала, в том числе и большее десяти, будет определяться, как отрицательное, т.е. «else» – часть будет отнесена ко второму «if».

Листинг 2.2. Вложенность if-else.

#include <iostream>

using namespace std;

int main (void)

{

int y;

cin >> y;

if (y >= 0) {

if (y < 10)

cout << "in range" << endl;

} else {

cout << "negative" << endl;

}

return 0;

}

2.1.2. Конструкция «switch»

В некоторых случаях сравнение ветвления выполняется несколько раз подряд, при этом результат ветвления зависит от значения единственной переменной. Такую сложную для восприятия последовательность «if – else» позволяет заменить конструкция «switch». В листинге данная конструкция идентична каскаду «if – else».

Листинг 2.3. Конструкция switch.

#include <iostream>

using namespace std;

int main (void)

{

int x;

cin >> x;

cout << "if-else: ";

if (x == 0) {

cout << "0" << endl;

} else if (x == 1) {

cout << "1" << endl;

} else if (x == 2) {

cout << "2" << endl;

} else {

cout << "not 0, 1, 2" << endl;

}

cout << "switch: ";

switch (x)

{

case 0:

cout << "0" << endl;

break;

case 1:

cout << "1" << endl;

break;

case 2:

cout << "2" << endl;

break;

default:

cout << "not 0, 1, 2" << endl;

break;

}

return 0;

}

Данная конструкция выполняет инструкции начиная с той, для которой значение константы в строке «case» совпадает со значением используемой переменной, вплоть до первого оператора «break» или, если его нет, до конца конструкции. Т.е. оператор «break» осуществляет выход из самой конструкции. Подобное поведение объясняется тем, что данная конструкция реализуется переходами по меткам, как при использовании инструкции «goto».

Инструкция, следующая за «default», будет выполнена, если не произошло ни одного совпадения. Другими словами, она определяет действие по умолчанию. Любая инструкция может быть заменена заключенной в «{}» группой – блоком.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]