«

»

C++. Условные операторы if и switch

Одна из основных конструкций алгоритма — разветвляющийся процесс. Он реализован в языке C++ двумя условными операторами: if и switch. Рассмотрим каждый из них.

Условный оператор if

Для организации вычислений в зависимости от какого-либо условия в C++ предусмотрен условный оператор ifкоторый в общем виде записывается следующим образом:

if (условие) оператор_1; else оператор_2;

Здесь условие — это логическое выражение, переменная или константа.

Работает условный оператор следующем образом. Сначала вычисляется значения выражения, записанного в виде условия. Если оно имеет значение истина (true), выполняется оператор_1. В противном случае (значение ложное (false) ) оператор_2. 

Например, чтобы сравнить значения переменных a и b нужно написать следующую часть  программного кода:

 

1
2
3
4
5
int a, b;
cin>>a;
cin>>b;
if (a==b) cout<<"a equal b";
else cout<<"a not equal b";

[important]Не путайте знак проверки равенства == и оператор присваивания =.[/important]

Если в задаче требуется, чтобы в зависимости от значения условия выполнялся не один оператор, а несколько, их необходимо заключить в фигурные скобки, как составной оператор.

if (условие) { оператор_1;  оператор_2; … }

else { оператор_1; оператор_2; … }

Альтернативная ветвь else в условном операторе может отсутствовать, если в ней нет необходимости.

 Оператор варианта switch

Он необходим в тех случаях, когда в зависимости от значений переменной надо выполнить те или иные операторы:

switch (выражение)
{
case значение_1: операторы_1; break;
case значение_2: операторы_2; break;
case значение_3: операторы_3; break;

case значение_n: операторы_n; break;
default: операторы; break;
}

Оператор работает следующем образом. Вычисляется значение выражения. Затем выполняются операторы, помеченные значением, совпадающим со значением выражения. То есть если, выражение принимает значение_1, то выполняются операторы_1 и т.д.. Если выражение не принимает ни одного из значений, то выполняются операторы, расположенные после слова default.

Ветвь default может отсутствовать, тогда оператор имеет вид:

switch (выражение)
{
case значение_1: операторы_1; break;
case значение_2: операторы_2; break;
case значение_3: операторы_3; break;

case значение_n: операторы_n; break;
}

Оператор break необходим для того, чтобы осуществить выход из операторы switch. Если он не указан, то будут выполняться следующие операторы из списка, несмотря на то, что значение, которым они помечены, не совпадает со значением выражения.

Некоторые вещи могут быть непонятны, и поэтому для ясности давайте рассмотрим пример несложной задачи.

 Задача

Необходимо вывести на название дня недели, соответствующее заданному числу D, при условии, что в месяце 31 день и 1-е число — понедельник.

Для решения задачи воспользуемся операцией %, позволяющей вычислить остаток от деления двух чисел. Программа будет выводить название дня недели в зависимости от заданного нами числа.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
using namespace std;
int main ()
{
unsigned int D, R; //описанны целые положительные числа
cout<<"D=";
cin>>D;
R=D%7;
switch (R)
{
case 1: cout<<"Monday \n"; break;
case 2: cout<<"Theusday \n"; break;
case 3: cout<<"Wednesday \n"; break;
case 4: cout<<"Thursday \n"; break;
case 5: cout<<"Friday \n"; break;
case 6: cout<<"Saturday \n"; break;
case 0: cout<<"Sunday \n"; break;
}
system ("pause");
return 0;
}

Вот скриншот результата работы кода

Логические операции (и, или, не)

В C++ присутствуют логические операции, при помощи которых удобно проверять несколько условий. Давайте познакомимся с каждой из них.

  • И (&&) — логическая конъюнкция (умножение). Возвращает истину только в том случае, когда истинны два простых условия, находящиеся по бокам от нее. Например:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{setlocale(LC_ALL,"Rus");
int one, two;
cin>>one>>two;
if ((one==1) && (two==2))
cout<<"true";
else cout<<"false";
system("pause>>void");
return 0;
}

Эта программа выводит true только в том случае, если оба простых условия верны. Первое условие оказалось ложным! — второе не проверяется.

Те кто изучали логику знают, что конъюнкция принимает логическое значение 1 (истина), лишь тогда, когда все выражения истинны.

  • Или (||) — логическая дизъюнкция (сложение). Внешнее условие будет истинно в том случае, когда хотя бы одно из внутренних условий верно. Посмотрим на примере предыдущего кода:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{setlocale(LC_ALL,"Rus");
int one, two;
cin>>one>>two;
if ((one==1) || (two==2))
cout<<"true";
else cout<<"false";
system("pause>>void");
return 0;
}

Для возвращения true достаточно выполнения одного из условий.

В математической логике дизъюнкция возвращает значение 0, лишь тогда, когда «сравниваются» нули.

  •  не (!) — логическая инверсия (отрицание). Возвращает истину тогда, когда выполняется условие с частицей не. Условие в программе ниже, выполняется в том случае, если переменная one не равна 1.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{setlocale(LC_ALL,"Rus");
int one;
cin>>one;
if (one!=1)
cout<<one<<" - не единица ";
else cout<<one<<" - единица";
system("pause>>void");
return 0;
}

 

Конечно, Вы можете не использовать логические операции, но тогда код будет выглядеть заметно грубее и безобразнее!

2 комментария

  1. О2о

    У меня заместо русских букв выводит крякозябры, как быть?

    1. А. С. Третьяков

      В данном уроке для корректного вывода русских букв, используется функция setlocale, заместо нее Вы можете попробовать воспользоваться функциями SetConsoleCP(1251); SetConsoleOutputCP(1251);, при этом подключив библиотеку windows.h.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вы можете использовать эти теги HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Проверка на человечность *