1.6. Селективные конструкции
1.6.1 Селективные конструкции. Пример определения оценки в зависимости от количества баллов (пример 6)
Селективные конструкции позволяют осуществлять выбор блока операторов, который
будет выполняться в зависимости от условий. Селективную конструкцию можно
реализовать при помощи операторов if – if else – else или при помощи оператора
switch.
if( условие 1 )
{
блок операторов 1;
}
else if( условие 2 )
{
блок операторов 2;
}
else
{
блок операторов 3;
}
|
|
switch ( переменная )
{
case константа 1:
{
блок операторов 1;
break;
}
case константа 2:
{
блок операторов 2;
break;
}
default:
{
блок операторов 3;
}
}
|
|
Рассмотрим пример определения оценки в зависимости от количества баллов
/////////////////////////////////////////////////////////////////////////////
// Прикладное программирование
// Пример 6. Пример определения оценки в зависимости от количества баллов
//
// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru
// Университет ИТМО
/////////////////////////////////////////////////////////////////////////////
// подключение библиотеки ввода-вывода
#include <iostream>
// подключение строковой библиотеки
#include <iostream>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы
void main()
{
// количество баллов
int studentGrade;
// оценка (строка символов)
string studentMark;
// ввод баллов
cout<<"Please, input your grade: ";
cin>>studentGrade;
// определение оценки
if ( studentGrade >= 90 ) // 90 и более баллов - оценка 5А
studentMark="5А";
else if ( studentGrade >= 83 ) // 83-89 - оценка 4В
studentMark="4А";
else if ( studentGrade >= 74 ) // 74-83 - оценка 4С
studentMark="4С";
else if ( studentGrade >= 67 ) // 67-74 - оценка 3D
studentMark="3D";
else if ( studentGrade >= 60 ) // 60-67 - оценка 3D
studentMark="3E";
else // менее 60 - не сдано
studentMark="FX";
// вывод оценки на экран
// для вывода строки необходимо преобразовать ее в набор символов при помощи функции c_str()
cout<<"Your mark is "<<studentMark.c_str()<<endl;
}
/////////////////////////////////////////////////////////////////////////////
В этом примере условие проверяется последовательно – вначале больше ли studentGrade
чем 90, если нет – проверяется следующее условие. Если ни одно из условий
не выполнено, выполняется блок else.
Если пропустить последний блок else – возможна ситуация когда
ни одно из условий не выполнится.
1.6.2 Оператор Switch. Пример меню с выбором действия (пример 7)
Оператор множественного выбора switch упрощает выполнение нескольких различных
действий в зависимости от возможных значений переменной или выражения. Каждое
действие выполняется в зависимости от значения некоторого целого значения,
которое может принимать переменная или выражение, проверяемое в операторе
switch.
/////////////////////////////////////////////////////////////////////////////
// Прикладное программирование
// Пример 7. Пример работы оператора switch - меню с выбором действия
//
// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru
// Университет ИТМО
/////////////////////////////////////////////////////////////////////////////
// подключение библиотеки ввода-вывода
#include <iostream>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы
void main()
{
// описание переменных
double a,b; // два вещественных числа для вычислений
int menu_number; // номер выбранного пункта меню
// ввод данных
cout<<"Enter two numbers: "; // запросить ввод
cin>>a>>b; // прочитать два введенных числа
// вывод меню
cout<<endl<<endl<<"Enter number of menu item: ";
cout<<"1. a+b"<<endl;
cout<<"2. a-b"<<endl;
cout<<"3. a*b"<<endl;
cout<<"4. a/b"<<endl;
// ввод номера пункта меню
cin>>menu_number;
// оператор выбора по номеру пункта меню
switch(menu_number)
{
// если menu_number==1
case 1:
{
cout<<"a+b="<<a+b<<endl;
// выход из оператора switch
break;
}
// если menu_number==2
case 2:
{
cout<<"a-b="<<a-b<<endl;
// выход из оператора switch
break;
}
// если menu_number==2
case 3:
{
cout<<"a*b="<<a*b<<endl;
// выход из оператора switch
break;
}
// если menu_number==2
case 4:
{
cout<<"a/b="<<a/b<<endl;
// выход из оператора switch
break;
}
// если ни один из предыдущих case не сработал
default :
{
cout<<"Wrong menu item"<<endl;
// оператор break не нужен, т.к. switch закончился
}
}
}
/////////////////////////////////////////////////////////////////////////////
Когда поток управления достигает оператора switch, программа оценивает следующее
за switch управляющее выражение (в данном случае menu _
number). Оператор switch сравнивает значение управляющего выражения с каждой
из меток case. Оператор break заставляет программу перейти к первому оператору
после оператора switch.
Если в операторе switch не найдется ни одной метки case, совпадающей со
значением управляющего выражения, исполняется вариант default. В операторе
switch, не содержащем варианта default, программное управление в этом случае
просто перешло бы к первому оператору после switch.
Те же самые действия можно было бы описать и при помощи операторов if –
else if – else:
switch(menu_number)
{
case 1:
{
cout<<"a+b="<<a+b<<endl;
break;
}
case 2:
{
cout<<"a-b="<<a-b<<endl;
break;
}
case 3:
{
cout<<"a*b="<<a*b<<endl;
break;
}
case 4:
{
cout<<"a/b="<<a/b<<endl;
break;
}
default :
{
cout<<"Wrong menu item"<<endl;
}
}
|
if(menu_number==1)
{
cout<<"a+b="<<a+b<<endl;
}
else if(menu_number==2)
{
cout<<"a-b="<<a-b<<endl;
}
else if(menu_number==3)
{
cout<<"a*b="<<a*b<<endl;
}
else if(menu_number==4)
{
cout<<"a/b="<<a/b<<endl;
}
else
{
cout<<"Wrong menu item"<<endl;
}
|
Без операторов break всякий раз, когда в операторе switch обнаруживается
соответствие, будут исполняться операторы и всех последующих меток case,
пока не встретится оператор break или не будет достигнут конец switch.
switch(menu_number)
{
case 1:
{
cout<<"a+b="<<a+b<<endl;
}
case 2:
{
cout<<"a-b="<<a-b<<endl;
break;
}
case 3:
{
cout<<"a*b="<<a*b<<endl;
break;
}
case 4:
{
cout<<"a/b="<<a/b<<endl;
break;
}
default :
{
cout<<"Wrong menu item"<<endl;
}
}
|
if(menu_number==1)
{
cout<<"a+b="<<a+b<<endl;
}
if(menu_number==1 || menu_number==2)
{
cout<<"a-b="<<a-b<<endl;
}
else if(menu_number==3)
{
cout<<"a*b="<<a*b<<endl;
}
else if(menu_number==4)
{
cout<<"a/b="<<a/b<<endl;
}
else
{
cout<<"Wrong menu item"<<endl;
}
|
|