C Урок 8. Условные операторы if, else, else if



На данном уроке мы познакомимся с условными операторами. Иногда их называют «операторами ветвлений».

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

У нас было что-то похожее при применении цикла, но в случае использования условных операторов при соблюдении условия код будет выполняться только один раз.

Рассмотрим самый простой вариант условия, когда применяется только один оператор if, который с английского переводится как если.

 

 

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

Теперь конструкция немного усложнится. Мы применим два оператора — if и else. Else с английского переводится иначе.

 

 

Образно мы можем данную конструкцию разделить на две части. Первая часть — это оператор if с условием и телом, а вторая — оператор else только с телом.

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

То есть если условие в скобках выполняется, мы попадаем в тело первого оператора if и выполняем код внутри него. Как только код в этом теле выполнился, то мы уже не попадаем в тело оператора else и пропускаем его.

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

Переходим к изучению ещё одного оператора — else if. Поэтому наша конструкция ещё немного усложняется

 

 

Здесь у нас получилось три части. Во второй части мы видим оператор else if. Сейчас постараюсь объяснить его значение.

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

Следующий вариант будет таким, что условие в первой части с оператором if у нас не выполнилось. Тогда мы, конечно же, в тело этой части не попадаем. Провалившись ниже, мы уже проверяем условие во второй части с оператором else if. Если это условие выполняется, то мы попадаем в его тело и выполняем там код, а в тело третьей части с оператором else мы уже не попадем. То есть получается что выполнится код только второй части.

Третий вариант будет такой, что ни первое, не второе условие у нас не выполняется. Тогда мы пропускаем тела первой и второй части и попадаем в тело третьей части с оператором else и выполняем его код.

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

Операторов else if с телом может быть несколько

 

 

В этом случае выполняется код тела того оператора, условие которого выполняется. Причем если выполняются условия нескольких операторов, то попадаем мы только в тело того оператора, который встретится интерпретатору первым, а интерпретатор, как известно просматривает код сверху вниз. Никакие другие тела не выполняются. Причем если выполняются условия нескольких операторов, то попадаем мы только в тело того оператора, который встретится интерпретатору первым, а интерпретатор, как известно просматривает код сверху вниз. Если не выполняется ни одно условие, то выполняется тело оператора else.

То есть во всех этих конструкциях, рассмотренных нами, выполняется всегда код только одного тела.

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

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

Проект сделан из проекта MYPROG07 прошлого занятия и имя ему было присвоено MYPROG08.

 

 

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

 

int main()

{

  return 0; //Return an integer from a function

}

Объявим для начала целочисленную переменную

 

 

Дальше напишем в консоль следующий текст

 

 

А дальше мы применим новую функцию стандартной библиотеки ввода-вывода.

До сих пор мы пользовались только функцией printf, которая выводила текст в консоль.

Существует функция, обратная по назначению функции printf, которая получает текст от нас. Эта функция scanf. Как только мы вызвали данную функцию, программа будет ждать от нас ввода текста с клавиатуры. И как только мы введём текст и нажмём клавишу Enter, то функция передаст данный текст с применением форматирования по определённому адресу.

Хотя мы пока ещё не проходили адреса и указатели, но здесь мы применим всё же обращение по адресу переменной. Потом мы этот вопрос догоним, никуда не денемся. Пока объясню кратко, что мы обращаемся в этом случае в коде не к значению переменной, а именно к адресу памяти, в котором располагается значение нашей переменной. В этом случае мы перед именем переменной применяем вот такой символ амперсанда — &.

Вызовем функцию scanf

 

 

Здесь нам главное не ошибиться при вводе. Мы должны вводить только целое число, никаких других символов. Потому что мы не будем пока проверять, что это именно целое число.

Число, которое мы введём, попадёт сначала в нашу программу в символьном виде, а затем, благодаря модификатору %d превратится из символьного вида в числовой и присвоится нашей переменной n, то есть станет её значением.

Теперь мы с помощью условия с оператором if проверим, находится ли введённое нами число в заданном в условии диапазоне. Для этого напишем следующий код

 

 

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

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

 

 

Всё у нас работает правильно. Если мы вводим число, не подходящее под требование условия, то мы не получаем сообщения, что наше число меньше 10.

Добавим ещё одну конструкцию с оператором if к нашему коду

 

 

 

Мы проверили теперь значение нашей переменной на условие больше или равно 10. В этом случае мы выведем в консоль другое сообщение, соответствующее уже этому условию. Проверим наш код в работе

 

 

Теперь вместо if во второй конструкции мы применим оператор else и удалим условие в скобках

 

else

{

   printf("You entered a number greater than or equal to 10\r\n");

}

 

Результат будет тот же самый. То есть при невыполнения условия значения переменной меньше 10 мы попадём в данное тело

 

 

Теперь немного усложним наше условие, применив другой диапазон значений. Закомментируем сначала предыдущий код

 

 

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

 

 

Проверим работу кода

 

 

Всё также правильно работает.

Добавим теперь код с применением оператора else if, закомментировав предварительно предыдущий код

 

 

Теперь, если мы введём число, меньшее 10, то получим одно сообщение, если введём число, которое будет меньше или равно 30, то получим другое, а если введём число которое не будет удовлетворять ни первому, ни второму условиям, то получим третье сообщение. Соответственно, в тело второго оператора мы попадём только в случае если у нас число не только будет меньше или равно 30, но не будет меньше 10, так как в этом случае мы попадём в тело первого оператора. Таково определение работы операторов. Поэтому условие попадания во второе тело: число должно будет войти в диапазон не меньше 10, но должно быть меньше или равно 30.

Проверим работу нашего кода

 

 

Всё работает, как и требуют наши условия в коде.

Теперь давайте применим некоторую вложенность. Весь наш код с условиями мы ещё объединим в цикл тоже с условием. Это мы сделаем для того, чтобы не запускать после каждого ввода числа программу заново. Вы выйдем из программы, когда, например введём число больше 1000. Соответственно, перед этим мы присвоим нашей переменной какое-нибудь значение. Также мы применим два условия с оператором else if для большей сложности. Сначала закомментируем предыдущий код. Также закомментируем ещё вот этот участок кода в начале функции

 

 

Добавим следующий код

 

 

Проверим работу нашего кода

 

 

Отлично! Всё правильно работает. Теперь нам не нужно каждый раз запускать заново нашу программу.

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

Всем спасибо за внимание!

 

 

Предыдущий урок Программирование на C Следующий урок

 

 

Исходный код

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

C Условные операторы if, else, else if

3 комментария на “C Урок 8. Условные операторы if, else, else if
  1. Дмитрий:

    ВАМ спасибо! Здоровья и времени на нас.

  2. Андрей:

    Добрый день. А если ввести число 2147483648? Почему не выходит из программы?

    • Nioli:

      Нужно для удобности еще добавить строку
      printf(«You entered the number = %d\r\n», n);
      после scanf(«%d», &n); тогда вопрос превратится в ответ. Кому лень — отвечу: в ячейку запишется число -2147483648, что меньше чем 10. Поберегем автора! Ему ОГРОМНАЯ БЛАГОДАРНОСТЬ! Наконец то мое изучение СИ сдвинулось на практике. Низкий поклон автору и мастеру!

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

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

*