Условная конструкция if…else в C#
В программировании проверка условий неизбежна. Мы часто сталкиваемся с ситуациями, когда нам нужно проверить условия (истинны они или ложны), чтобы контролировать выполнение программы. На эти условия могут влиять ввод пользователя, время, контекст, в котором выполняется программа, и т. д.
Мы научимся проверять логические условия с помощью оператора if.
Конструкция if
Конструкция if выполняет блок кода, если заданное условие — истинно, т. е. true .
Синтаксис
Условие может возвращать одно из двух значений: true или false .
- Если условие = true , инструкции внутри тела if (внутри <. >) выполнятся.
- Если условие = false , C# проигнорирует инструкции внутри тела if.
Пример
В данном примере инструкция number += 5 выполнится только в том случае, если значение переменной number меньше 5.
Если забыли, что делает оператор +=, вернитесь к статье «Операторы».
Блок-схема
Пример 1. Используем if
Вывод:
Переменной number мы присваиваем значение 2. Это значит, что выражение number < 5 равно true . Следовательно, код внутри блока if выполняться будет. Код после оператора if всегда будет выполняться — независимо от результата выражения.
Теперь изменим значение number на значение больше 5: например, 10.
Вывод 2:
Выражение number < 5 равно false , следовательно, код внутри блока if выполняться не будет.
Инструкция if. else
За инструкцией if в C# может идти инструкция else , но это необязательно. Код внутри блока else будет выполняться, когда условие равно false .
Синтаксис
Пример
В этом примере инструкция number += 5 будет выполняться, только если значение number меньше 5. А вот инструкция number -= 5 , напротив, будет выполнять, если значение number больше или равно 5.
Блок-схема
Пример 2. Используем if. else
Вывод:
Переменной number мы присваиваем значение 12. Это значит, что выражение number < 5 равно false . Следовательно, код внутри блока else выполняется. Код после инструкции if. else всегда будет выполняться независимо от результата выражения.
Теперь изменим значение number на значение меньше 5: например, 2.
Вывод 2:
Выражение number < 5 вернет true , следовательно, код внутри блока if выполнится.
Инструкция if. else if
Когда у нас есть только одно условие для проверки, инструкции if и if. else работают нормально. Но что, если у нас несколько условий, которые нужно проверить?
В таком случае мы можем использовать оператор if. else if .
Синтаксис
Инструкция if. else if выполняется сверху вниз. Как только какое-либо логическое выражение становится истинным, выполняется код внутри этого блока if (или else if). Затем управление выходит из инструкции.
Если ни одно из логических выражений не является истинным, выполняется код внутри блока else.
В качестве альтернативы мы можем использовать оператор switch в подобной ситуации.
Пример 3. Используем if. else if
Вывод:
Переменной number мы присваиваем значение 12. Таким образом, первое условие number < 5 равно false . Это значит, что, управление перейдет в блок else if. Условие number > 5 равно true . Значит, выполнится код внутри блока else if.
Примечание. Попробуйте менять значение number и посмотрите, как от этого меняется вывод программы.
Вложенная конструкция if. else
Инструкция if. else может существовать внутри другой инструкции if. else. Такие инструкции называются вложенными.
Синтаксис
Вложенные инструкции if обычно используют, когда нужно последовательно проверить два условия. Если внешний оператор if возвращает true , то управление переходит в тело для проверки вложенного оператора if.
Пример 4. Используем вложенный if. else
Эта программа вычисляет наибольшее число среди 3 чисел, используя вложенный конструкцию if. else.
Как сделать условие в с
Условные конструкции позволяют направить ход программы по одному из возможных путей в зависимости от условия. В языке Си есть несколько операторов, которые позволяют это сделать.
Оператор if
Оператор if проверяет истинность условия, и если оно истинно, выполняет блок инструкций. Этот оператор имеет следующую сокращенную форму:
В качестве условия может выступать любое выражение, которое возвращает число. Если это выражение возвращает ненулевое значение (то есть выражение истинно), то выполняется последующая инструкция:
Здесь у нас две условных конструкции if . В качестве инструкции в обоих случаях выполняется функция printf. И в обоих случаях условие представляет просто число. В первом случае «условие» равно 1, то есть «истинно» (любое число, кроме 0, представляет истину). Поэтому на консоль будет выполняться функция printf , которая выведет на консоль строку «Hello C».
А во втором случае «условие» равно 0, то есть «не верно/ложно». Поэтому инструкция printf(«Hello World \n») НЕ будет выполняться.
В приведенном выше примере в качестве условий выступали числа 1 или 0. Однако в реальности в качестве условий выступает результат некоторых выражений, обычно, операций сравнения или логических операций. Однако все они в конечном счете возвращают либо 0 (условие не верно) или ненулевое значение (условие верно). Используем операции сравнения:
Здесь также используются две условных конструкции if. В первом случае n == 20 условие не верно, оно возвращает 0, так как значение переменной n не равно 20, поэтому поэтому последующая инструкция printf(«n = 20 \n») не будет выполняться.
А во втором случае операция сравнения n == 10 возвратит 1, так как условие истинно, поэтому будет выполняться инструкция printf(«n = 10 \n») .
Если в конструкции if необходимо выполнить не одну, а несколько инструкций, то эти инструкции оформляются в блок кода с помощью фигурных скобок:
Здесь проверяем, больше ли переменная х чем 50. И если это условие истинно, выполняем последующий блок из двух инструкций
Условия могут более сложные:
Здесь проверяем больше ли значение переменно х чем 20 и меньше ли значение переменной y чем 100. Поскольку здесь два условия соединяются операцией && , то общее условие будет истинно, если одновременно верны оба условия.
Выражение else
Но что, если мы хотим определить две пары действий: одни выполняются, если условие истинно, а другие, если условие ложно? В этом случае можно использовать другую форму конструкции if — if..else :
После оператора else мы можем определить набор инструкций, которые выполняются, если выражение_условия ложно, то есть возвращает 0. То есть если условие истинно, выполнится инструкция после оператора if , а если это выражение ложно, то выполняется инструкция после оператора else .
Однако в данном случае у нас есть три условия: переменная x может быть больше 60, меньше 60 и равна 60. Для проверки альтернативных условий мы можем вводить выражения else if :
То есть в данном случае мы получаем три ветки развития событий в программе.
И также если после операторов должен идти набор инструкций, то эти инструкции оформляются в блок кода:
Конструкция switch
Другую форму организации ветвления программ представляет конструкция switch. case . Она имеет следующую форму:
После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями после оператора сase . И если совпадение будет найдено, то будет выполняться данный блок сase .
В качестве констант после оператора case могут выступать значения типов char, int и unsigned
В конце конструкции switch может стоять блок default . Он необязателен и выполняется в том случае, если ни одна совпадения в блоках case не было найдено. Например, сравним значение переменной с набором значений:
Здесь в качестве сравниваемого выражения выступает переменная x . Ее значение последовательно сравнивается со значениями после операторов case :
сначала программа переходит к выражению case 1 . Но переменная x не равна 1, поэтому выполнение переходит к следующему оператору case.
программа переходит к выражению case 2 . Поскольку переменная x равна 2, то выполняются инструкции данного оператора case:
Чтобы избежать выполнения последующих блоков case/default, в конце каждого блока ставится оператор break . При его выполнение происходит выход из конструкции switch..case
Тернарный оператор
Тернарный оператор ?: позволяет сократить определение простейших условных конструкций if и имеет следующую форму:
Оператор использует сразу три операнда. В зависимости от условия тернарный оператор возвращает второй или третий операнд: если условие равно 1 (то есть истинно), то возвращается второй операнд; если условие равно 0 (то есть ложно), то третий. Например:
Здесь результатом тернарной операции является переменная z. Она имеет следующие операнды:
Действия, выполняемые, если условие истинно
Действия, выполняемые, если условие ложно
Поскольку в данном случае условие x < y истинно (то есть x ьше чем y), то будет выполняться вычитание x — y , и переменная z получит его результат — число 3.
Оператор выбора if else
В некоторых источниках говорится, что оператор выбора if else — самостоятельный оператор. Но это не так, if else — это всего лишь форма записи оператора выбора if . Оператор if else позволяет определить программисту действие, когда условие истинно и альтернативное действие, когда условие ложно. Тогда как if позволял определить действие при истинном условии.
Синтаксис записи оператора выбора if else :
Читается так: «Если проверяемое условие истинно, то выполняется тело оператора выбора 1, иначе (то есть проверяемое условие ложно) выполняется тело оператора выбора 2«. Обратите внимание на то, как записан оператор if else . Слово else специально сдвинуто вправо для того чтобы программный код был понятен и его было удобно читать.
Рассмотрим задачу с предыдущей темы, с использованием if else . Напомню условие задачи: «Даны два числа, необходимо их сравнить».
В данном коде нас интересуют строки 14-20 . Эти строки читаются так: если a (первое число) больше либо равно b (второе число), то выполнить оператор вывода в строке 16
иначе выполнить оператор вывода в строке 19
В данном ифе мы используем операции соотношений >= и <= . Условие перехода не совсем правильно, так как условие будет ложно только в том случае, если первое число будет меньше второго, во всех остальных случаях условие истинно. Значит, строку 19 нужно записать так
А вот так сработала программа (см. Рисунок 1).
Рисунок 1 — Оператор выбора if else
Покажу еще один пример использования операторов выбора if else (так называемые вложенные операторы if else для множественного выбора).
В данной задаче возможны три случая:
1-й случай: х < 0 ;
2-й случай: х лежит в пределах от 0 (включая 0) до 30;
3-й случай: х больше или равен 30.
Заметьте новшество!! В 17 строке такую запись: if ( ( x >= 0 ) && ( x< 30 ) ) , я использовал символы && — это логическое И. Операция логического И && необходима для объединения нескольких простых условий в одно составное. В нашем случае необходимо проверить истинность двух условий: первое – x >= 0 , второе – х < 30 . Все проверяемое условие будет истинно, если истинны два простых условия. В математике правильной записью считается такая запись: 0 <= x < 30 , а в С++ правильной записью считается вот такая запись: ( x >= 0 ) && ( x < 30 ) или такая 0 <= x && x < 30 . Кстати круглые скобочки () && () не обязательны, так как условия простые, но для уверенности, я прописываю, всегда, данные скобочки и вам советую.
Разбор частного случая:
Допустим, пользователь ввел число 31. Начиная со строки 12, выполняется проверка условий. Читается так: «Если х (31 в нашем случае) < 0, то выполнить оператор в строке 14». Но так как 31 > 0 условие ложно мы переходим к слову else (иначе) строка 15. Дальше проверяем, входит ли число 31 в заданный интервал. Читается так: если х>=0 и х<30 то выполнить оператор в строке 19 . Но так как число 31 не входит в заданный интервал, то условие ложно. Подробно строка 17: программа сначала проверит первое простое условие х >= 0 – оно истинно, а если первое истинно, то программа перейдет к проверке второго простого условия х < 30 – оно ложно. Следовательно всё составное условие ложно, ведь в составном условии у нас используется логическая операция && , а это значит, что все составное условие истинно только в том случае, когда истинны оба простых условия. Переходим к else (иначе ), здесь у нас последний if , (строка 22). Выполняется проверка х >= 30 . Читается так: Если х >= 30 то выполнить оператор, находящийся в строке 24 . Наконец-то условие истинно, итак выполнился оператор в строке 24. И строка 28 печатает получившееся значение. Ну, все, рассмотрели программу по мельчайшим деталям. Результат работы программы, в случае, если пользователь ввел число 31 (см. Рисунок 2)
Условные операторы в Си
Рассмотрим подробнее структуру алгоритма «развилка».
Разветвляющимся называется такой алгоритм, в котором выбирается один из нескольких возможных вариантов вычислительного процесса. Каждый подобный путь называется ветвью алгоритма .
Признаком разветвляющегося алгоритма является наличие операций проверки условия. Чаще всего для проверки условия используется условный оператор if .
Условный оператор if
Условный оператор if может использоваться в форме полной или неполной развилки.
В случае неполной развилки если Условие истинно, то БлокОпераций1 выполняется, если Условие ложно, то БлокОпераций1 не выполняется.
В случае полной развилки если Условие истинно, то выполняется БлокОпераций1 , иначе выполняется БлокОпераций2 .
БлокОпераций может состоять из одной операции. В этом случае наличие фигурных скобок, ограничивающих блок, необязательно.
Основными операциями, проверяемыми внутри условного блока, являются операции отношения.
Пример на C :
Результат выполнения
Оператор if может быть вложенным.
Результат выполнения

При использовании вложенной формы оператора if опция else связывается с последним оператором if . Если требуется связать опцию else с предыдущим оператором if , внутренний условный оператор заключается в фигурные скобки:
Результат выполнения
Логические операции в условных операторах
Условный оператор может проверять
- одновременное выполнение всех условий (операция И — && )
- выполнение хотя бы одного из условий (операция ИЛИ — || )
- выполнение только одного из условий (операция исключающее ИЛИ — ^ )
Пример на Си : Найти максимум из 3 чисел
Пример на С++ : Найти максимум из 3 чисел
Тернарные операции
Тернарная условная операция имеет 3 аргумента и возвращает свой второй или третий операнд в зависимости от значения логического выражения, заданного первым операндом. Синтаксис тернарной операции в языке Си
Если выполняется Условие , то тернарная операция возвращает Выражение1 , в противном случае — Выражение2 .
Тернарные операции, как и операции условия, могут быть вложенными. Для разделения вложенных операций используются круглые скобки.
Приведенный выше пример с использованием тернарных операций можно представить в виде
Оператор ветвления switch (оператор множественного выбора)
Оператор if позволяет осуществить выбор только между двумя вариантами. Для того, чтобы производить выбор одного из нескольких вариантов необходимо использовать вложенный оператор if . С этой же целью можно использовать оператор ветвления switch .
Общая форма записи
Оператор ветвления switch выполняется следующим образом:
- вычисляется ЦелоеВыражение в скобках оператора switch ;
- полученное значение сравнивается с метками ( Константами ) в опциях case , сравнение производится до тех пор, пока не будет найдена метка, соответствующая вычисленному значению целочисленного выражения;
- выполняется БлокОпераций соответствующей метки case ;
- если соответствующая метка не найдена, то выполнится БлокОперацийПоУмолчанию , описанный в опции default .
Альтернатива default может отсутствовать, тогда не будет произведено никаких действий.
Опция break; осуществляет выход из оператора switch и переход к следующему за ним оператору. При отсутствии опции break будут выполняться все операторы, начиная с помеченного данной меткой и кончая оператором в опции default .
Константы в опциях case должны быть целого типа (могут быть символами).
Комментариев к записи: 30
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <stdio.h>
struct phone
<
char brend[20];
char colour[20];
char model[20];
int price, memory;
>;
void fil( struct phone mash);
int main()
<
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
struct phone a[5];
for ( int i = 0; i < 5; i++)
<
printf( "Введіть бренд, ціна, колір, пам’ять, модель. \n" );
scanf( "%s %d %s %d %s" , a[i].brend, &a[i].price, a[i].colour, &a[i].memory, a[i].model);
>
printf( "На складі є такі мобільні телефони: \n" );
for ( int i = 0; i < 5; i++)
<
printf( "Бренд[%s],ціна [%d],колір[%s],пам'ять[%d],модель[%s] \n" , a[i].brend, a[i].price, a[i].colour, a[i].memory, a[i].model);
>
printf( "найбільше телефонів за кольором\n" );
for ( int i = 0; i < 5; i++)
fil(a[i]);
return 0;
>
void fil( struct phone mash)
<
printf( "Бренд[%s],ціна [%d],колір[%s],пам'ять[%d],модель[%s] \n" , mash.brend,mash.price,mash.colour,mash.memory,mash.model);
>
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
<
system( "chcp 1251" );
int i=0, j, m, n, k;
//заполнение квадратного массива с клавиатуры
printf( "Enter size: \n" );
scanf( "%d" , &m);
printf( "Enter shift: \n" );
scanf( "%d" , &n);
printf( "Enter 0 right or 1 down : \n" );
scanf( "%d" , &k);
if (n>m) <
n = n-m*( int (n/m));>
int a[100][100], b[100][100];
for (i = 0; i < m; i++)
<
printf( "Enter ", i + 1 " line\n" );
for (j = 0; j < m; j++)
<
printf( "Enter matrix element: \n" );
scanf( "%d" , &a[i][j]);
>
>
//вывод массива на экран
for (i = 0; i < m; i++)
<
for (j = 0; j < m; j++)
printf( "%5d " , a[i][j]);
printf( "\n" );
>
printf( "\n" );
if ((k==0) || (k==1))
<
if (k==0)
<
// Блок A формирование нового массива со сдвигом враво
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
b[i][j]=a[i][m-n+j];
for (i = 0; i <m; i++)
for (j = n; j < m; j++)
b[i][j]=a[i][j-n];
>
if (k==1)
<
// Блок B формирование нового массива со сдвигом вниз
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
b[i][j]=a[m-n+i][j];
for (i = n; i <m; i++)
for (j = 0; j < m; j++)
b[i][j]=a[i-n][j];
>
// вывод нового массива на экран
for (i = 0; i < m; i++)
<
for (j = 0; j < m; j++)
printf( "%5d " , b[i][j]);
printf( "\n" );
>
>
else printf( "Input Error" );
system( "pause" );
return 0;
>