3. Оператор ?:
В языке C++ имеется оператор, который часто может использоваться вместо оператора if else. Его общая форма выглядит следующим образом:
выражение1 ? выражение2 : выражение3
Если выражение1 истинно, то значением всего условного выражения является значение выражения2.
В противном случае значением всего выражения является значение выражения3.
Ниже приведено несколько примеров, в которых демонстрируется работа этого оператора:
5 > 3 ? 10 : 12 //5 > 3 истинно, поэтому значением выражения является число 10
3 = =9 ? 25 : 18 //3 = = 9 ложно, поэтому значением выражения является число 18
По сравнению с последовательностью if else условный оператор более лаконичен, по и то же время имеет менее понятный синтаксис.
Однако он позволяет использовать условное выражение в общем большом выражении. Например. Составить программу для расчета выражения: y=a2 + max(a,b) – b3
Сначала решим пример, обычным способом. Найдем max(a,b) с помощью оператора if.
#include <iostream.h>
#include <conio.h>
#include <math.h>
void main()
{
float a,b,max,c;
clrscr();
cout<<"Введите значения переменных a и b: ";
cin>>a>>b;
if (a>b)
max=a;
else
max=b;
c=pow(a,2)+max+pow(b,3);
cout<<"Функция равна: "<<c;
getch();
return;
}
Теперь найдем max(a,b) с помощью оператора?: Это позволяет сократить текст программы.
#include <iostream.h>
#include <conio.h>
#include <math.h>
void main()
{
float a,b,c;
clrscr();
cout<<"Введите значения переменных a и b: ";
cin>>a>>b;
c=pow(a,2)+(a>b ? a : b)+pow(b,3);
cout<<"Функция равна: "<<c;
getch();
return;
}
Допускается вложение нескольких операторов ?: друг в друга. Например: найдем максимальное из трех чисел.
//подключаем заголовочные файлы
#include <iostream.h>
#include <conio.h>
void main()
{
//описываем переменные
float a,b,c,d;
//очищаем экран
clrscr();
//вводим исходные данные
cout<<"Введите три числа: ";
cin>>a>>b>>c;
//находим максимальное из 3 чисел с помощью оператора ?:
d=(a>b && a>c ? a : (b>a && b>c ? b : c));
//выводи результат
cout<<"Максимальное число равно: "<<d<<"\n";
//делаем паузу для просмотра результата
cout<<"Для продолжения нажмите любую клавишу...";
getch();
return;
} (начало)
4. Оператор switch
В задачах с большим числом условий последовательность if else if else можно расширять до нужного числа веток выполнения программы. Однако оператор switch C++ больше подходит для выполнения выбора из расширенного списка. Общая форма оператора switch выглядит следующим образом:
switch (целочисленное выражение)
{
case метка1 : оператор(ы);
case метка2 : оператор(ы);
. . .
case меткаn : оператор(ы);
default : оператор(ы);
}
Оператор switch в языке C++ действует в качестве переключателя, который указывает компьютеру, какую строку программы нужно выполнять следующей. Встретив ключевое слово switch, программа переходит к строке, помеченной значением, соответствующим значению целочисленного выражения. Значением целочисленного выражения, как следует из его названия, должно быть выражение, при вычислении дающее целочисленное значение. Кроме того, каждая метка должна быть выражением целочисленной константы. Если целочисленное выражение не соответствует ни одной из меток, программа переходит к строке, помеченной меткой default. Эта метка необязательна. Если ее опустить и при этом совпадение с метками отсутствует, программа переходит к оператору, следующему за switch.
Оператор switch существенно отличается от аналогичных операторов таких языков, как Pascal. После того, как программа переходит к конкретной строке в операторе switch, она по порядку выполняет все операторы, которые следуют за этой строкой, если только явно не указано иное. Выполнение операции не останавливается автоматически на следующем варианте. Для остановки выполнения в конце конкретной группы операторов необходимо использовать оператор break. В результате выполнение продолжится с оператора, следующего за switch.
Оператор switch не предназначен для обработки диапазонов. Каждая метка варианта оператора switch должна быть отдельным значением. Кроме того, это значение должно быть целым, поэтому оператор switch не будет выполнять проверку значений с плавающей точкой. И значение метки варианта должно быть константой. Если реализация вариантов требует использования диапазонов, осуществления проверки значений с плавающей точкой или сравнения двух переменных, следует использовать оператор if else.
Чаще всего оператор switch используется для обработки выбора пользователя из меню программы.
Пример. Пусть имеется две переменные a и b. Необходимо выдать на экран меню вида:
1 – сумма
2 – разность
3 – произведение
4 – частное.
В зависимости от выбора пользователя нужно посчитать выбранное значение.
#include <iostream.h>
#include <conio.h>
#include <math.h>
void main()
{
float a=10,b=5,c;
int k=1;
clrscr();
//выдаем меню
cout<<"1 - сумма\n" ;
cout<<"2 - разность\n" ;
cout<<"1 - произведение\n" ;
cout<<"1 - частное\n" ;
//запрашиваем выбор из меню
cout<<"Сделайте выбор - ";
cin>>k;
//обрабатываем выбор из меню
switch (k)
{
//если выбран первый режим
case 1 :
c=a+b;
cout<<"Сумма="<<c;
break;
//если выбран второй режим
case 2 :
c=a-b;
cout<<"Разность="<<c;
break;
//если выбран третий режим
case 3:
c=a*b;
cout<<"Произведение="<<c;
break;
//если выбран четвертый режим
case 4 :
c=a/b;
cout<<"Частное="<<c;
break;
//если выбран неверный режим (не 1, не 2, не 3, не 4)
default:
cout<<"Вы выбрали неверный режим";
}
getch();
return;
}