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

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

 

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

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

 

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

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

Неполная развилка Полная развилка
1
2
3
4
if (Условие)
{
  БлокОпераций1;
}
1
2
3
4
5
6
7
8
if (Условие)
{
  БлокОпераций1;
}
else
{
  БлокОпераций2;
}
неполная развилка полная развилка

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

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

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

Пример на C:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include <stdio.h>
int main()
{
  int k;           // объявляем целую переменную k
  printf("k= ");   // выводим сообщение
  scanf("%d", &k); // вводим переменную k
  if (k >= 5)      // если k>5
    printf("%d >= 5", k); // выводим "ЗНАЧЕНИЕ >= 5"
  else             // иначе
    printf("%d < 5", k);  // выводим "ЗНАЧЕНИЕ < 5"
  getchar(); getchar();
  return 0;
}

Результат выполнения
Условный оператор

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

Пример на C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include <stdio.h>
#include <stdlib.h> // для использования функции system
int main() {
  int key;  // объявляем целую переменную key
  system("chcp 1251"); // переходим в консоли на русский язык
  system("cls");       // очищаем окно консоли
  printf("Введите номер пункта, 1 или 2: ");
  scanf("%d", &key);   // вводим значение переменной key
  if (key == 1)        // если key = 1
    printf("\n Выбран первый пункт"); // выводим сообщение
  else if (key == 2)   // иначе если key = 2
    printf("\n Выбран второй пункт"); // выводим сообщение
  else                 // иначе
    printf("\n Первый и второй пункты не выбраны"); // выводим сообщение
  getchar(); getchar();
  return 0;
}

Результат выполнения
Вложенный оператор if
Вложенный оператор if
Вложенный оператор if

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include <stdio.h>
#include <stdlib.h> // для использования функции system
int main() {
  int key;  // объявляем целую переменную key
  system("chcp 1251"); // переходим в консоли на русский язык
  system("cls");       // очищаем окно консоли
  printf("Введите номер пункта, 1 или 2: ");
  scanf("%d", &key);   // вводим значение переменной key
  if (key != 1) {      // если key не равен 1
    if (key == 2)    // если key равен 2
      printf("\n Выбран второй пункт"); // вывод сообщения
  }              // если key - не 1 и не 2, то ничего не выводится
  else // иначе, если key равен 1
    printf("\n Выбран первый пункт"); // вывод сообщения
  getchar(); getchar();
  return 0;
}

Результат выполнения
Вложенный оператор if
Вложенный оператор if
Вложенный оператор if

Тернарные операции

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

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

Если выполняется Условие, то тернарная операция возвращает Выражение1, в противном случае - Выражение2.

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

Приведенный выше пример с использованием тернарных операций можно представить в виде

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include <stdio.h>
#include <stdlib.h> // для использования функции system
int main() {
  int key;  // объявляем целую переменную key
  system("chcp 1251"); // переходим в консоли на русский язык
  system("cls");       // очищаем окно консоли
  printf("Введите номер пункта, 1 или 2: ");
  scanf("%d", &key);   // вводим значение переменной key
  key == 1 ? printf("\n Выбран первый пункт") :
    (key == 2 ? printf("\n Выбран второй пункт") :
      printf("\n Первый и второй пункты не выбраны"));
  getchar(); getchar();
  return 0;
}


 

Оператор ветвления 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 должны быть целого типа (могут быть символами).

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


Назад: Язык Си

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


  • Александр

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

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


    • Владимир

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

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

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

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

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


      • Александр

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

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


  • Дмитрий

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


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

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