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

Оператор выбора switch

Условный оператор ifelse позволяют легко осуществить выбор между двумя вариантами. В программировании же часто встречается задача выбора одного решения задачи из многих возможных. Это можно сделать с помощью вложенных конструкций 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");

}

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