Хочу получить удостоверение. Сколько стоит оплата? |
Операторы выбора
К операторам выбора, называемым операторами управления потоком выполнения программы, относят: условный оператор (if…else) и переключатель (switch). Каждый из них служит для выбора пути выполнения программы.
Синтаксис условного оператора следующий:
if (выражение) оператор_1; else оператор_2;
Здесь нужно пояснить следующее. Выражения, используемые при сравнении двух величин в С++ отличаются от таковых, в других алгоритмических языках.
Описание | Выражение |
---|---|
a больше, чем b | a>b |
a меньше, чем b | a<b |
a равно b | a==b |
a не равно b | a!=b |
a больше или равно b | a>=b |
a меньше или равно b | a<=b |
Так при проверке равенства двух величин нужно использовать ==, а не =, т.к. в противном случае получится оператор присваивания.
При истинности выражения, выполняется оператор_1, в противном случае - выполняется оператор_2. Рассмотрим пример.
x=3; if (x>0) a=15; else a=12;
Как вы, наверное уже догадались, переменная a принимает значение 15.
Операторы могут быть составными (могут объединяться в блоки).
double y=2; if (y>3) {cout<<"\nHow old are you?"; cout<<"\nI am 33"<<endl;} else {cout<<"\nWhat are you doing?"; cout<<"\nI am computing"<<endl;};
Результатом работы этого фрагмента будет выведенная на экран фраза
What are you doing? I am computing
Допустима сокращенная форма условного оператора, когда отсутствует else и оператор_2. В этом случае при ложности выражения ничего не происходит.
double z=5; if (z<3) cout<<"\nHi!";
Данный фрагмент ничего не выполнит.
Нужно сказать, что в свою очередь, оператор_1 и оператор_2 могут быть условными, что позволяет организовать цепочку проверок. В следующем примере показаны некоторые способы использования условных операторов.
//========================================================== // Name : choice.cpp // Author : Marat // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //========================================================== #include <iostream> using namespace std; //Здесь рассматриваются операторы выбора //В этой программе объясняется использование условных //операторов int main() { int x=5; int y=10; cout<<"\nThis program explains 'if' statement using"<<endl; cout<<"\nx= "<<x<<", "<<"y= "<<y<<endl; if (x>y) {cout<<"\n"<<x<<" > "<<y<<" ";} else {cout<<"\n"<<y<<" > "<<x<<" "<<endl;} double a=3.3; double b=2.48; double c=4.65; double d; //Использование логической бинарной операции //&& - конъюнкции (И) if (a>b && c>b) {d=7;} else d=3; //Если а>b и c>b, то d=7, иначе, d=3 cout<<"\na= "<<a<<", "<<"b= "<<b<<", "<<"c= "<<c<<endl; cout<<"\nBecause "<<a<<" > "<<b<<" && "<<c<<" > "<<b<<" So d = "<<d<<endl; double f=1; double g=3; double h=5; double k; if (f>g || h>g) {k=15;} else k=100; //Использование логической бинарной операции //|| - дизъюнкции (ИЛИ) //Если f>g или h>g, то k=15, иначе, k=100 cout<<"\nf= "<<f<<", "<<"g= "<<g<<", "<<"h= "<<h<<endl; cout<<"\nBecause "<<f<<" > "<<g<<" || "<<h<<" > "<<g<<" So k = "<<k<<endl; //При выполнении многочисленных последовательных сравнений //используется оператор if-else-if int st=55; double z; //Введем фрагмент таблицы Стьюдента для 95% вероятности if (st>120) z=1.96;//st больше 120 else if (st==120) z=1.98;//st равно 120 else if (st>=100) z=1.982;//st больше или равно 120 else if (st>=90) z=1.986; else if (st>=80) z=1.989; else if (st>=70) z=1.994; else if (st>=60) z=2; else if (st>=55) z=2.004; else if (st>=50) z=2.008; else if (st>=45) z=2.014; else if (st>=40) z=2.021; else cout<<"\nThats all right!"<<endl;//Действие по умолчанию cout<<"\nt-test ("<<st<<") = "<<z<<endl; return 0; }
Результат:
This program explains 'if' statment using x=5, y=10 10>5 a = 3.3, b = 2.48, c = 4.65 Because 3.3>2.48 && 4.65>2.48 So d = 7 f = 1, g = 3, h = 5 Because 1>3 || 5>3 So k = 15 t-test (55) = 2.004
В следующем примере оператор if - else используется при расчете геометрической прогрессии.
//========================================================== // Name : geometrical_progression.cpp // Author : Marat // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //========================================================== #include <iostream> #include<math.h> //Здесь описываются математические функции (pow - возведение в степень) //Эта программа рассчитывает сумму геометрической прогрессии //S=A+A*Q+A*Q^2+A*Q^3+...+A*Q^N using namespace std; int main() { //Опишем переменные, используемые в программе double s; //Сумма геометрической прогрессии double a; //Первый член прогрессии double q; //Знаменатель прогрессии int n; //Количество последних членов геометрической прогрессии cout<<"\nHi! Let's calculate sum of the geometrical progression!"; cout<<"\nNow enter the first member's value "; cin>>a; cout<<"\nThen enter the base of geometrical progression "; cin>>q; cout<<"\nEnter the number of last members of geometrical progression "; cin>>n; //Используем условный оператор для выбора формулы рассчета суммы прогрессии //в зависимости от того больше единицы основание прогрессии или нет if (q<1) {s=a/(1-q);} else { s=0; for(int i=0;i<n;i++) { s+=pow(q,i); } s=a*(s+1); } cout<<"\nThe sum of geometrical progression is "<<s<<endl; return 0; }
Результат:
Hi! Let's calculate sum of the geometrical progression! Now enter the first member's value 3 Then enter the base of geometrical progression 2 Enter the number of last members of geometrical progression 6 The sum of geometrical progression is 192
Переключатель
Переключатель используется для организации множественного выбора. Синтаксис оператора switch следующий.
switch (переключающее выражение) {case константное_выражение_1: операторы_1; case константное_выражение_2: операторы_2; …………………………………………………… case константное_выражение_n: операторы_n; default: операторы; }
Управляющая конструкция switch передает управление тому из помеченных с помощью case операторов, для которого значение константного выражения совпадает со значением переключающего выражения. Значения константных выражений, помещаемых за служебными словами case, приводятся к типу переключающего выражения. В одном переключателе все константные выражения должны иметь различные значения, но быть одного типа. Любой из операторов, помещенных в фигурных скобках после конструкции switch (...), может быть помечен одной или несколькими метками вида
case константное_выражение:
Если значение переключающего выражения не совпадает ни с одним из константных выражений, то выполняется переход к оператору, отмеченному меткой default:. В каждом переключателе должно быть не больше одной метки default, однако эта метка может и отсутствовать. В случае отсутствия метки default при несовпадении переключающего выражения ни с одним из константных выражений, помещаемых вслед за case, в переключателе не выполняется ни один из операторов.
Сами по себе метки case константное выражение_i: и default: не изменяют последовательности выполнения операторов. Если не предусмотрены переходы или выход из переключателя, то в нем последовательно выполняются все операторы, начиная с той метки, на которую передано управление. Пример программы с переключателем:
//========================================================== // Name : switch.cpp // Author : Marat // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //========================================================== #include <iostream> using namespace std; int main() { int n; cout<<"\nInput integer value between 1 and 7"<<endl; cin>>n; switch (n) { case 1: cout<<"\nToday is Monday"; break; case 2: cout<<"\nToday is Tuesday"; break; case 3: cout<<"\nToday is Wednesday";break; case 4: cout<<"\nToday is Thursday"; break; case 5: cout<<"\nToday is Friday"; break; case 6: cout<<"\nToday is Saturday"; break; case 7: cout<<"\nToday is Sunday"; break; default:cout<<"\nThis number is illegal!"; } cout<<"\n"<<endl; return 0; }
Результат:
Input integer value between 1 and 7 5 Today is Friday
Кроме сказанного о возможностях переключателя, приведенная программа иллюстрирует действие оператора break. С его помощью выполняется выход из переключателя.
Условная операция
В отличие от унарных и бинарных операций условная операция используется с тремя операндами. В изображении условной операции два размещенных не подряд символа '?', и ':' и три операнда-выражения:
выражение_1 ? выражение 2 : выражение 3
Первым вычисляется значение выражения_1. Если оно истинно, т.е. не равно нулю, то вычисляется значение выражения_2, которое становится результатом. Если при вычислении выражания_1 получится 0, то в качестве результата берется значение выражения_3. Пример:
х <0 ? p=4 : z=7;
Если выражение х<0 истинно, то переменная p принимает значение 4, в противном случае переменной z присваивается значение 7.
//========================================================== // Name : conditional_operation.cpp // Author : Marat // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //========================================================== #include <iostream> using namespace std; int main() { double s, t, r; s=5.7; t=-0.237; s<t?r=6:r=10; cout<<"\ns= "<<s<<" t= "<<t; cout<<"\ns < t? r =6 : r =10 "; cout<<"\nSo r = "<<r<<endl; return 0; }
Результат:
s=5.7 t=-0.237 s<t?r=6:r=10 So r = 10