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

Язык Си / Условные операторы в Си

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

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

Условный оператор if может использоваться в форме полной или неполной развилки.

Неполная развилка Полная развилка
if(условие){
  блок операций;

}

if(условие){
  блок операций 1;
} else {
  блок операций 2;
}
неполная развилка полная развилка

В случае неполной развилки если условие истинно, то блок операций выполняется, если условие ложно, то блок операций не выполняется.
В случае полной развилки если условие истинно, то выполняется блок операций 1, иначе выполняется блок операций 2.

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

Пример

#include <stdio.h>
int main() {
  int k;
  printf("k= ");
  scanf("%d",&k);
  if(k >= 5) {
    printf("%d >= 5", k);
  } else {
    printf("%d < 5", k);
  }
  getchar(); getchar();
  return 0;
}

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

Пример:

#include <stdio.h>
#include <stdlib.h>
int main() {
  int key;
  system("chcp 1251");
  system("cls");
  printf("Введите номер пункта, 1 или 2: ");
  scanf("%d",&key);
  if (key == 1)
    printf("\n Выбран первый пункт");
  else if (key == 2)
    printf("\n Выбран второй пункт");
  else
    printf("\n Первый и второй пункты не выбраны");
  getchar(); getchar();
  return 0;
}

Результат выполнения

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

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

if (key!= 1) {
  if (key == 2)
    printf("\n Выбран второй пункт");
  } else
    printf("\n Выбран первый пункт");
Тернарные операции

Тернарная условная операция имеет 3 аргумента и возвращает свой второй или третий операнд в зависимости от значения логического выражения, заданного первым операндом. Синтаксис тернарной операции в языке Си

условие ? выражение1 : выражение2;

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

#include <stdio.h>
#include <stdlib.h>
int main() {
  int key;
  system("chcp 1251");
  system("cls");
  printf("Введите номер пункта, 1 или 2: ");
  scanf("%d",&key);
  key == 1 ? printf("\n Выбран первый пункт") :
    (key==2 ? printf("\n Выбран второй пункт") :
       printf("\n Первый и второй пункты не выбраны")) ;
  getchar(); getchar();
}

Оператор ветвления switch (оператор множественного выбора)

Оператор if позволяет осуществить выбор только между двумя вариантами. Для того, чтобы производить выбор одного из нескольких вариантов необходимо использовать вложенный оператор if. С этой же целью можно использовать оператор ветвления switch.

Общая форма записи

switch (целое выражение) {
  case константа1: блок операций1;
         break;
  case константа2: блок операций2;
         break;
. . .
  case константаn: блок операцийn;
         break;
  default: блок операций по умолчанию;
         break;
}

Оператор ветвления switch выполняется следующим образом:

  • вычисляется целочисленное выражение в скобках оператора switch;
  • полученное значение сравнивается с метками (константами) в опциях case, сравнение производится до тех пор, пока не будет найдена метка, соответствующая вычисленному значению целочисленного выражения;
  • выполняется оператор соответствующей метки case;
  • если соответствующая метка не найдена, то выполнится оператор в опции default.

Альтернатива default может отсутствовать, тогда не будет произведено никаких действий.
Опция break; осуществляет выход из оператора switch и переход к следующему за ним оператору. При отсутствии опции break будут выполняться все операторы, начиная с помеченного данной меткой и кончая оператором в опции default.
Константы в опциях case должны быть целого типа (могут быть символами).

Пример: Вывести день недели по его номеру

Назад

Комментариев к записи: 5

  • Александр

    Для начинающих лишь первая глава — «Структура» — понятна, а дальше не разбериха, все как-будто свалено в одну кучу. Самостоятельно изучить предложенный материал вряд ли возможно. Радостные отзывы как раз и видно под первой главой, а дальше они пропадают, видать народ не осилил предложенное. Взять хотя бы эту главу — «Условные операторы». Что это такое вообще, откуда они взялись ?! К тому же оказывается их несколько видов, а здесь об этом не говорится. Вот из другого источника — «Чтобы двигаться дальше надо четко представлять потенциальные возможности языка СИ. В его основе лежит базовое понятие «оператор». Из отдельных операторов, как из кирпичиков, строятся большие по объему программы.» — И дальше приводятся 6 групп операторов — операторы присваиваний, операторы вызова функций, операторы описания,ветвлений, циклов, переходов. Особо ценно, когда материал представлен в виде схем, все это очень хорошо зрительно усваивается и понимается.

    Лишь плюс в том, что  все это красочно оформлено.


    • Владимир

      Дорогой пользователь!

      Чем хорош Интернет-ресурс? Не хочешь — не ходи.

      Вам, действительно, сюда не надо.

      А для чайников есть платные курсы — вперед…

      Кстати, слово неразбериха пишется слитно!


      • Александр

        Так, если это не для начинающих, а для кого тогда ? Зачем тогда в первой главе подробно «разжевывается» структура ? Учитывая, что она мне и так была понятна, а вы сюда заходите и учитесь, значит вы чайник ? И про платные курсы вам известно, а мне вот нет, прошли что-ли их уже ? И чему лично  вы здесь научились, чего нет в другой литературе ?

        Для каждой главы не хватает хотя бы небольшого вступления — в 10-15-ти предложениях обрисовать, что будет рассматриваться в этой главе и для чего это нужно. Возьмем главу » Операторы цикла в языке». Она начинается со слов «В языке Си следующие виды циклов:…». Ну, вот не упоминались они ранее в этой статье и вдруг появились нежданно негаданно, и в связи с этим опять море вопросов. А все потому, что нет, например, отдельной главы перед этим, где описываются все операторы сразу и как их в дальнейшем применять. Надо вообще сделать так, что каждый несведующий читатель, случайно попав неожиданно на любую главу, мог заинтересоваться и понять, что здесь происходит и о чем рассказывается, а не искать дополнительную литературу. Такие мои пожелания напоследок.


  • Дмитрий

    Постоянные проблемы с выводом русского языка в консоли(((……программа Dev-C++5.4.2


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

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