
- •Оператор объявления
- •Оператор присваивания
- •Составной оператор
- •Пустой оператор
- •Условные операторы
- •Условный оператор if
- •Вложенные операторы if
- •Конструкция if…else…if
- •Оператор выбора switch
- •Операторы организации циклов
- •Оператор цикла while
- •Оператор цикла do – while
- •Оператор цикла for
- •Способы организации бесконечных циклов
- •Вложенные циклы
- •Оператор break
- •Оператор continue
Оператор выбора switch
Условный оператор if…else позволяют легко осуществить выбор между двумя вариантами. В программировании же часто встречается задача выбора одного решения задачи из многих возможных. Это можно сделать с помощью вложенных конструкций if...else…if. Однако более удобный способ – использование оператора switch, формат записи которого имеет следующую форму:
switch (выражение){
case константа1: оператор_1; break;
case константа2: оператор_2; break;
…
case константаN: оператор_N; break;
[default: операторы; break;]
}
Оператор switch работает следующим образом. Вычисляется выражение, тип которого должен быть целочисленным. Затем значения констант, указанных в метках case, сравниваются со значением вычисленного выражения. Если совпадение обнаружено, выполняются операторы, следующие за соответствующей меткой case. Если в списке констант не будет константы равной значению выражения, выполняются операторы, записанные после метки default.
Обычно действие каждой ветви заканчивается оператором break. Выполнение этого оператора приводит к выходу из оператора switch. Если break отсутствует, то управление передаётся следующему оператору, помеченному case или default. Подобным образом выполняются все последующие операторы внутри switch, пока не встретится оператор break.
В качестве значений в метках case могут использоваться только целые числовые константы, а также константные (не содержащие переменных) выражения, причем значения, используемые в метках case в пределах одного оператора switch, не должны повторяться. Например:
switch(m){
case 1: x = a + b; break;
case 2: x = a - b; break;
case 3: x = a * b; break;
default: cout<<"Incorrect operation!\n";
}
В качестве значений в метках case также могут использоваться символьные константы, которые в С++ являются целочисленными:
char сh; cin>>сh;
switch(сh){
case '+': x = a + b; break;
case '-': x = a - b; break;
default: cout<<"Incorrect operation!\n";
}
В одной метке case нельзя указать диапазон значений. Это означает, что если, например, для трёх последовательных целых числовых значений необходимо выполнить одни и те же действия, в операторе switch придется записать три отдельные метки case, две из которых будут “пустыми”:
switch(m){
case 1:
case 3:
case 5:
cout<<"!!!";…
}
В отличие от оператора if оператор switch может выполнять операции проверки только строгого равенства, в то время как оператор if в условиях может использовать логические операции и операции сравнения. Например, с помощью switch не удастся проверить, принадлежит ли значение определенному интервалу.
// Пример 4.7. Проанализировать значение переменной mark, которая
// является значением выставленной оценки, используя оператор switch.
#include <iostream>
using namespace std;
int main(){
int mark;
cout<<"Enter the mark = "; cin>> mark;
switch(mark){
case 5: cout<<"оcenka 5\n"; break;
case 4: cout<<"оcenka 4\n"; break;
case 3: cout<<"оcenka 3\n"; break;
case 2: cout<<"оcenka 2\n"; break;
default: cout<<"Error mark\n";
}
system("pause");
}
// Пример 4.8. Составить программу-калькулятор, которая может
// выполнять только четыре действия: +, -, *, /.
// Использовать оператор swith.
#include <iostream>
using namespace std;
int main(){
double a, b, rez;
char oper;
cout<<"Enter a and b:";
cin>>a>>b;
bool flag = true;
cout<<"Enter operation: ";
cin>>oper;
switch(oper){
case '+': rez = a + b; break;
case '-': rez = a - b; break;
case '*': rez = a * b; break;
case '/': if(b == 0) flag = false; // или if (!b) flag = false;
else rez = a / b; break;
default: flag = false;
}
if(flag == true)cout<<'\n'<<a<<' '<<oper<<' '<<b<<'='<<rez<<endl;
else cout<<"Division by zero or incorrect operation.\n";
system("pause");
}