Условные конструкции и операторы в C
Невозможно создать сложную программу, используя линейные алгоритмы. Ведь условия дают возможность создавать ветвления в алгоритмах. Благодаря условию, количество вариантов решения какой-либо задачи увеличивается.
К примеру, если пользователь ввел число больше максимального, то программа оповестит его о некорректности ввода, в ином случае — начнет выполняться расчет. То есть, условия позволяют не только скорректировать работу приложения, но и увеличить количество путей решаемой задачи в зависимости от действий пользователя, что является условием.
Другими словами, если условие выполнено, то программа делает одно, если не выполнено, то делает другое. Выполнение условия выражается булевым значением true, невыполненное — false.
Условные операторы и конструкции
Язык Си предоставляет множество операторов для объявления условия. Делятся они на несколько категорий:
Операторы условия
- if(){} (если), if(){} else{} (если, в ином случае),
- if(){} elseif(){} else {}(если, тогда если, в крайнем случае),
- switch() case: (если так или так или так),
- ()?: (тернарный оператор)
Сравнения (отношения)
- == (равно),
- === (идентично),
- <(меньше),
- > (больше),
- <= (меньше или равно),
- >= (больше или равно),
- != (неравно);
Логические
- && (true если оба значения true),
- ! (true если значение равно false),
- || (true если одно из двух значений true).
Чтобы понять смысл всех этих операторов, необходимо рассмотреть их работу на примерах.
Синтаксис условных конструкций
Самая простая условная конструкция имеет следующий синтаксис:
if (true){
\\ если true, тогда выполняются эти операторы
}else {
если условие false, тогда выполняются операторы в этом блоке
}
Рассмотрим на примере:
int x = 50; объявлена переменная
if(x == 50){ // проверка равенства, действительно, переменная x обладает значением 50, значит, условие выполнено
printf(«true»);
}else{ // если бы переменная не была равна
printf(«false»);
}
Теперь сложнее:
int x = 50; объявлена переменная
if(x > 50){ // х не больше 50, поэтому этот блок пропускается
printf(«true»);
}elseif (x < 50){ // х не меньше 50, пропускается
printf(«true»);
}else {
printf(«x notbiggerandnotless, butequal 50»); // ни одно условие не совпало, поэтому выполняется то, что в else
}
Как видно, их трех вариантов выполнится последний, так как ни одно условие не было выполнено. На экран выведется «x notbiggerandnotless, butequal 50», поскольку при невыполнении всех предоставленных условий, гарантированно выполнятся команды в else блоке.
Стоит отметить, что если в блоке условия предусмотрено выполнение одно оператора, то фигурные скобки можно не ставить. Также блок else не обязателен. Если его не будет, то программа продолжит выполняться после игнорирования блока if, если он вернул false.
Изменим самый первый пример:
int x = 50
if(x == 50) printf(«true»);
elseprintf(«false»);
Логические операторы служат для одновременного сравнения двух условий. Условие становится true, если выполняются одно или несколько условий.
Пример:
int x = 50
if(x == 50 && x < 100) printf(«true»);
elseprintf(«false»);
Оператор && (и) отвечает за выполнение выполнение двух условий. Сначала выполняется левое, затем правое от него. Если хоть одно условие не выполнится, то полное условие считается false и выполняется блок else. То есть, true = (true&&true).
Оператор || (или) отвечает за выполнение одного из двух условий. Если хоть одно условие true (любое), то все условие также будет true. То есть, true = (true || false) или (false || true) или (true || true).
Пример:
int x = 50
if(x == 50 || x < 100) printf(«true»);
elseprintf(«false»);//Выведет true, поскольку x==50 совпало с условием.
Оператор отрицания ! (not) осуществляет конверсию. То есть true= !(false).
Пример:
int x = 50
if !(x == 50) printf(«true»);
elseprintf(«false»);// Выведет false
Здесь,оператор !(not) проверяет условие — если false, значит результат true и наоборот. Поэтому его называют оператором инверсии.
Также можно комбинировать операторы:
int x = 50
if (((x == 50) && (x<100)) || ((x < 50) && (x != 60))) printf(«true»);
elseprintf(«false»);// Выведет true
Здесь первым делом проверяется два условия через оператор&&, затем проверяются два условия через второй оператор &&. Если хоть один из изних возвращает true, то главный || также возвращает true.
Вложенные блоки с условиями
Рассмотрим такой пример:
int x = 150;
int y = 40;if(x== 150) {
if(y<40) printf(«true true»);
elseprintf(true false);
} else printf(«false flse»);// Выведет true false
Пояснение:
- Сначала проверяется условие (x==50).
- Если первое условие true, тогда проверяется условия в блоке — в нашем случае false и выполняется вложенный else.
- Главный else не выполняется так как главное условие true.
Условный оператор выбора switch()
Данный оператор отлично подходит для проверки большого количества вариантов. Рассмотрим на примере.
Пример:
int x = 150;
switch(x){
case 20:
printf(«Mistake»);
break;case 50:
printf(«Mistake»);
break;
}case 150:
printf(«Exellent»);
break;default:
printf(«No one value is true»);// Вывод: Exellent
Здесь в скобки оператора switch() была вставлена переменная со своим значением 150. Первый case проверяет равна ли переменная 20 — нет, ничего не выводится. Второй аналогично. Третий case проверяет на значение 150 — true и выполняются операторы данного case.
Оператор default означает то, что если не одно значение не совпало, то выполняется его блок. Данный оператор не обязательный и его можно не ставить.
Обратите внимание, что в каждом блоке switch присутствует оператор breake. Если его не ставить, то после первого совпадения, будут выполняться остальные блоки, что нам не нужно. Поэтому, в каждом блоке switch, нужно ставить break в конце. При совпадении значения, блок выполняется, и этот оператор закрывает switch.
Тернарный оператор
Синтаксис тернарного оператора следующий: переменная = условие (выражение) ? если true, тогда выполняются операторы этого блока : если false, то этого.
Пример:
int x = 120;
x = (x>60)? (x+30) : (x — 20);
printf(x); // 150
Пояснение:
- Если в скобках условие true, то x = (x+30);
- Если условие вернуло false, то x = (x-20);
- В нашем случае x больше 60, что равно true;
- Значит выполняется инструкция после вопроса.
- Если бы значение было бы false, то выполнялась бы инструкция после двоеточия.
Итак, знак вопроса — оператор выполняется если true. Двоеточие — аналог else. Данная конструкция удобная и помещается в одну строчку, но только в том случае, если условие короткое и предусматривает лишь два пути решения.