Как сделать несколько условий в if c

Добавил пользователь Morpheus
Обновлено: 05.10.2024

Исходный код примеров из этой статьи можете скачать из нашего github-репозитория.

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

Оператор if

Конструкция if…else позволяет проверить некоторое условие на истинность и, в зависимости от результата, выполнить тот или иной блок кода. Синтаксис условного оператора if…else :

В качестве условия может выступать переменная типа bool , либо выражение (см. “Тип данных Boolean“), значение которого имеет тип bool .

Пример работы с оператором if :

В приведенном выше примере выражение 9 true , поэтому выполняется блок кода после оператора if . Добавим конструкцию else и зададим значения переменным n3 и n4 , при которых выражение, определяющее условие, будет иметь значение false :

Для отдельного контроля варианта, когда сравниваемые числа равны, можно воспользоваться конструкцией if else :

Оператор switch

Конструкция switch…case используется, когда необходимо, в зависимости от конкретного значения переменной или результата некоторой операции, выполнить требуемый блок кода.

Синтаксис конструкции имеет следующий вид:

Рассмотрим простой пример работы с switch :

Оператор switch ищет совпадение значения переменной n7 со значениями, указанными после case . Если совпадение найдено, то выполняется код внутри блока case . Блок case может закончится оператором:

  • break – прерывание кода в конструкции switch ;
  • goto case – используется если необходимо перейти в другой case ;
  • return – завершает выполнение метода и возвращает указанное значение;
  • throw – используется для выброса исключения.

Если среди шаблонов в case не было найдено подходящего, то будет выполнен код в блоке default .

В качестве шаблонов в case могут выступать:

  • шаблоны констант;
  • шаблоны типов;
  • выражение с ключевым словом when .

Рассмотрим их более подробно.

Шаблон константы

Шаблон константы предполагает, что мы сравниваем значение выражение из switch с константами, которые располагаются в блоках case . Как уже было сказано выше, в таком варианте работы switchcase допустимы константы следующих типов: char , string , bool , целочисленное значение и enum . В первом примере, демонстрирующим работу оператора switch , уже был приведен вариант с шаблоном константы, приведем еще один, на этот раз, это будет работа со строками:

Шаблон типа

Шаблон типа предполагает сопоставление результата вычисления выражения, которое передается в switch , с типом, указанным в case :

Если результат выражения можно привести к указанному типу , то полученное значение присваивается переменной с указанными именем – var_name .

Для задания альтернативы со значением null используйте следующий формат:

В документации Microsoft приводится список условий, при которых результат выражения будет успешно приведен к указанному в case типу , перечислим некоторые из них:

  • выражение имеет указанный тип type ;
  • результат выражения реализует интерфейс type ;
  • результат выражения имеет тип производный от type .

Для демонстрации создадим несколько вспомогательных классов:

Оператор switch…case , работающий с этими классами, может выглядеть следующим образом:

Выражение с ключевым словом when

Дополним класс Transport , который мы создали в разделе “Шаблон типа”, свойством WheelsCount :

Реализуем возможность раздельной работы с тремя вариантами велосипедов:

Тернарный оператор

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

Синтаксис оператора имеет следующий вид:

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

В примере, с помощью оператора ? определяется, какое из двух чисел больше, и соответствующее значение, присваивается переменной largerNumber .

Циклы

Цикл for

Цикл for имеет следующий синтаксис:

Инициализатор – это выражение, вычисляемое перед выполнением тела цикла. Обычно здесь инициализируется локальная переменная, которая будет использоваться как счетчик.

Условие – это выражение, которое проверяется перед каждой новой итерацией цикла. Если значение выражения равно true , то будет выполнено тело цикла, если false – произойдет выход из цикла и выполнится следующая за ним инструкция.

Итератор – это выражение, вычисляемое после каждой итерации. Обычно здесь происходит изменение локальной переменной, объявленной в инициализаторе.

Перечисленные выражения: инициализатор , условие и итератор разделяются символом “точка с запятой”. Цикл for удобно использовать, когда известно количество повторений. Пример работы с циклом for :

В нем мы инициализируем локальную переменную значением 0, затем проверяем, что переменная меньше трех, выполняем тело цикла – выводим в консоль значение числа i в квадрате. На каждой итерации прибавляем к переменной i значение 1, снова проверяем условие и выполняем тело цикла, и так, до тех пор, пока условие (i будет истинным.

Циклы while и do/while

В этом цикле проверяется условие, и если оно истинно, то выполняется набор операторов внутри тела цикла. Обязательно убедитесь, что изменяете переменную, от которой зависит условие, иначе цикл станет бесконечным, если, конечно, это не является целью. Пример работы с циклом while :

Цикл do/while имеет следующий синтаксис:

Отличие do/while заключается в том, что проверка условия происходит после тела цикла, что приводит к тому, что вне зависимости от условия цикл выполнится хотя бы один раз.

Пример работы с циклом do/while :

Цикл foreach

Последний вариант цикла, который мы рассмотрим в этом уроке – это foreach . Синтаксис оператора foreach имеет следующий вид:

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

  • реализует интерфейс System.Collections.IEnumerable или System.Collections.Generic.IEnumerable ;
  • реализует открытый метод GetEnumerator , возвращающий интерфейс, класс или структуру, имеющие открытое свойство Current и метод MoveNext .

Пример работы с оператором foreach :

В нем мы определяем количество чисел, которые больше десяти, в исходном массиве.

Тип переменной цикла в операторе foreach можно задавать явно, как это было сделано в примере выше, так и не явно с помощью ключевого слова var :

Операторы перехода

LINQ как инструмент обхода коллекций

Существует более удобный инструмент для работы с коллекциями – это язык запросов LINQ . Этой технологии будет посвящен отдельный урок, здесь же мы разберем несколько примеров работы с LINQ для того, чтобы показать некоторые из его возможностей и заинтересовать вас на дальнейшее изучение этого инструмента. Вначале нами будут рассмотрены некоторые из методов расширения последовательностей, которые предоставляет пространство имен System.Linq , после этого будет приведен пример, демонстрирующий работу с языком LINQ .

Ниже представлены два примера, первый – это вариант реализации некоторого алгоритма с использованием циклов, второй – этот же алгоритм, но решение построено с помощью LINQ .

Пример без LINQ

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

Пример с LINQ

Выполним туже операцию с помощью LINQ :

С помощью методов расширения из System.Linq можно выполнять над коллекциями операции фильтрации, преобразования, группировки, агрегирования, формирования коллекций и т.д. Рассмотрим некоторые из этих возможностей.

Для фильтрации элементов в коллекции используйте метод Where , которому в качестве аргумента передается предикат, если его значение истинно для элемента коллекции, то он (элемент) остается, в противном случае отбрасывается.

Извлечем из массива nums числа, значение которых больше 10:

Преобразование

Метод Select применяет переданную ей функцию к элементам коллекции и формирует на базе полученных значений новую коллекцию. Вычтем из элементов nums константу 7:

Построим на базе nums новый массив, элементами которого будут bool значения: true , если соответствующий элемент в nums четный, false – в ином случае.

Рассмотрим ещё один пример работы с LINQ .

Создадим класс FootballTeams для представления футбольной команды:

Создадим метод для генерации данных о результатах футбольных матчей:

Создадим переменную для хранения результатов матчей:

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

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

Исходный код примеров из этой статьи можете скачать из нашего github-репозитория.

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

Мы научимся проверять логические условия с помощью оператора if.

Конструкция if

Конструкция if выполняет блок кода, если заданное условие — истинно, т. е. true .

Синтаксис

Условие может возвращать одно из двух значений: true или false .

Пример

В данном примере инструкция number += 5 выполнится только в том случае, если значение переменной number меньше 5.

Блок-схема

Пример 1. Используем if

Вывод:

Переменной number мы присваиваем значение 2. Это значит, что выражение number равно true . Следовательно, код внутри блока if выполняться будет. Код после оператора if всегда будет выполняться — независимо от результата выражения.

Теперь изменим значение number на значение больше 5: например, 10.

Вывод 2:

Выражение number равно false , следовательно, код внутри блока if выполняться не будет.

Инструкция if. else

Синтаксис

Пример

В этом примере инструкция number += 5 будет выполняться, только если значение number меньше 5. А вот инструкция number -= 5 , напротив, будет выполнять, если значение number больше или равно 5.

Блок-схема

Пример 2. Используем if. else

Вывод:

Переменной number мы присваиваем значение 12. Это значит, что выражение number равно false . Следовательно, код внутри блока else выполняется. Код после инструкции if. else всегда будет выполняться независимо от результата выражения.

Теперь изменим значение number на значение меньше 5: например, 2.

Вывод 2:

Выражение number вернет 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 равно 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 (условие) оператор1;

Если условие истинно, то будет выполняться следующий за ним оператор. Если условие не выполняется (ложно), то компилятор пропускает инструкцию, записанную после if, и переходит к следующим командам программы.

Операторы отношения, используемые в условии:

If (условие) оператор1; else оператор2;

Задача с 2_1: Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет — только по две. Сколько голов и глаз у дракона, которому N лет?

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

Оператор ИЛИ означает, что для выполнения оператора if достаточно истинности одного из двух или одновременно обоих условий.

Оператор И означает, что должны быть истинными оба условия одновременно.

Оператор отрицания означает, что оператор if выполняется, если некое условие оказалось ложным.

color="blue"; color[0]='b'; color[1]='l'; color[2]='u'; color[3]='e';

var color:string; rost:integer; begin writeln ('kakov zvet glaz?'); readln(color); writeln('kakov rost?'); readln(rost); if (color='blue') and (rost Оператор выбора языка Си switch

Если в программе необходимо учесть больше трех возможных вариантов, конструкция if. else может оказаться очень запутанной, даже если использовать вложенные операторы.

В таких случаях используется оператор выбора (или переключатель) языка Си switch. Переключатель switch работает по принципу меню и содержит все возможные варианты условий и инструкции, которые следует выполнить в каждом конкретном случае.

switch (идентификатор переменной)

В круглых скобках после оператора выбора языка Си switch находится переменная типа int или char (не строковая), следом расположен блок, заключенный в фигурные скобки; в блоке содержатся ветви условий case. Каждая ветвь case выполняет конкретные инструкции, если значение переменной совпадает с указанным. Если это значение является символом, то символ заключается в одинарные кавычки.

Пример: Программа, спрашивающая у ученика его отметку по информатике и реагирующая на нее подходящим текстом

var otmetka:integer; begin writeln('otmetka?'); readln(otmetka); case otmetka of 1,2 : writeln ('koshmar!'); 3: writeln('ploho'); 4: writeln('neploho'); 5: writeln('otlichno!'); else writeln('takih otmetok ne bivaet'); end end.

Задача c 2_2. Ученик вводит с клавиатуры число, символ арифметического действия (+, -, *, /) и еще одно число. Компьютер должен напечатать результат. Указание: Для чисел и арифметического действия используйте оператор ввода Си scanf

Оператор if


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

Оператор switch

Важно отметить, что заданное выражение в операторе switch должно быть целочисленного типа (char, byte, short или int), перечислимого или же строкового. А выражения других типов, например с плавающей точкой, в операторе switch не допускаются. Зачастую выражение, управляющее оператором switch, просто сводится к одной переменной. Кроме того, константы выбора должны иметь тип, совместимый с типом выражения. В одном операторе switch не допускается наличие двух одинаковых по значению констант выбора.

Читайте также: