Практическое занятие 4. Разветвляющиеся алгоритмы

 

Операторы выбора (разветвляющиеся алгоритмы)

 

К операторам выбора, называемым операторами ветвления, относят условный оператор (if …else) бинарного ветвления и оператор-переключатель (switch) m-арного ветвления. Они слу ­ жат для выбора пути выполнения разветвляющейся программы.

 

Синтаксис условного оператора:

 

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

 

выражение должно быть простым (скалярным) и может иметь логический тип, арифметический тип или тип указателя. Если арифметическое выражение не равно нулю (или не есть пустой указатель), то его значение приводится к true, условие считается истинным и выполняется оператор_1. В противном случае, когда выражение равно нулю (false), выполняется оператор_2. В ка ­ честве операторов нельзя использовать описания и определения. Однако могут быть составные операторы и блоки.

Допустима сокращенная форма условного оператора, в которой отсутствует ветвь else и оператор_2. В этом случае при ложном значении выражения выполняется оператор, следующий за условным оператором.

Операторы оператор_1 и/или оператор_2, в свою очередь, могут быть условными (как полными, так и сокращёнными), что позволяет организовать цепочку проверок условий любой глубины вложенности. Синтаксис языка предполагает, что при вложениях условных операторов каждое else соответствует ближайшему к нему предшествующему if.

 

Рассмотрим программу, в которой вводятся с клавиатуры два целых числа. Если второе число отлично от нуля, то выполняется целочисленное деление.

 

// Листинг 4.1

#include <iostream>

using namespace std;

 

int main() {

int a, b;

cout << "Input 2 digits: ";

cin >> a >> b; // Ввод двух чисел с клавиатуры

// Выполнение целочисленного деления

if (b) cout << "a/b = " << a/b << endl;

else cout << "Error!!!\n";

return 0;

}

 

Если b равно 0, то выражение в операторе if является ложным, и выполняется ветвь else. В противном случае условие является истинным, и выполняется деление a/b.

 

Результат выполнения программы:

Input 2 digits: 4 5

a/b = 0

или

Input 2 digits: 10 0

Error!!!

 

Оператор-переключатель является наиболее удобным средством для организации множественного (мульти-) ветвления. Синтаксис переключателя:

 

switch (переключающее_выражение)

{

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

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

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

default: операторы;

}

 

Управляющая конструкция switch передаёт управление тому из помеченных с помощью case операторов, для которого значение константного_выражения совпадает со значением переключающего_выражения. Значение переключающего_вы ­ ражения должно быть целочисленным или приводиться к целому. Значения константных выражений, помещаемых за словами case, также приводятся к целому типу переключающего выражения. В одном переключателе все константные выражения должны быть одного типа и иметь различные значения.

Оператор каждой ветви case и ветви default может быть как отдельным оператором, так и составным или блоком (в нём могут находиться описания переменных, область видимости которых – этот блок). В конце составного оператора каждой ветви следует использовать оператор break, т.к. в противном случае выполнят­ся все операторы всех ветвей, расположенных после выбранной.

Если значение переключающего выражения не совпадает ни с одним из константных выражений, то выполняется переход к оператору, отмеченному меткой default.В каждом переключате­ле должно быть не больше одной метки default, однако эта метка может отсутствовать. В случае отсутствия метки default при не­совпадении переключающего выражения ни с одним из констант­ных выражений, помещаемых вслед за case, в переключателе не выполняется ни один из операторов. Если не предусмотрены переходы или выходы из переключателя, то в нём последова­тельно выполняются все операторы, начиная с той метки, которой передано управление.

После switch() может находиться любой оператор (не обя­зательно составной), помеченный с использованием служебного слова case. Однако без фигурных скобок такой оператор может быть только один, и смысл переключателя теряется: он пре­вращается в разновидность сокращённого условного оператора.

 

Рассмотрим программу, в которой выводятся названия нечётных десятичных цифр, не меньших введённой с клавиатуры.

 

// Листинг 4.2

#include <iostream>

using namespace std;

 

int main() {

int n;

cout << "Enter decimal digit: ";

cin >> n;

switch(n) {

case 0: case 1: cout << "one, ";

case 2: case 3: cout << "three, ";

case 4: case 5: cout << "five, ";

case 6: case 7: cout << "seven, ";

// Выход из переключателя по оператору break

case 8: case 9: cout << "nine\n"; break;

 

default: cout <<"Error! It isn't digit!\n";

} // Конец переключателя

return 0;

}

 

Результат выполнения программы:

Enter decimal digit: 3

three, five, seven, nine

 

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

 

Операции сравнения (отношения)

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

< - меньше, чем;

> - больше, чем;

<= - меньше или равно;

>= - больше или равно;

== - равно (сравнение на равенство);

!= - не равно (сравнение на неравенство);

 

Для двух последних операций введено специальное название "операции сравнения на равенство". Операнды в операциях отношений могут быть арифметических типов или указателями. Результат – логического типа: false (ложь, т.е. 0 в стиле С) или true (истина, т.е. 1 в стиле С). Последние две операции (операции сравнения на равенство) имеют более низкий приоритет по сравнению с остальными операциями сравнения.

 

Рассмотрим программу с использованием операций сравнения и логических операций.

 

// Листинг 4.3

#include <iostream>

using namespace std;

 

int main() {

cout << "3 < 5 equal " << (3 < 5) << '\n';

cout << "3 > 5 equal " << (3 > 5) << '\n';

cout << "3 == 5 equal " << (3 == 5) << '\n';

cout << "3!= 5 equal " << (3!= 5) << '\n';

cout << "3!= 5 || 3 == 5 equal "

<< (3!= 5 || 3 == 5) << '\n';

cout << "3+4 >= 7 && 3+5 > 8 equal "

<< (3+4 >= 7 && 3+5 > 8)<<'\n';

return 0;

}

 

Результат выполнения программы:

3 < 5 equal 1

3 > 5 equal 0

3 == 5 equal 0

3!= 5 equal 1

3!= 5 || 3 == 5 equal 1

3+4 >= 7 && 3+5 > 8 equal 0

 

Тернарная (условная) операция

Условная операция используется с тремя операндами. В выражении с условной операцией используются три операнда и два символа? и:.

Синтаксис условной операции:

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: