Skip to the content.

7 сентября 2021

На этом занятии уточним и закрепим основы языка Си, которые мы обсуждали в прошлый раз.

Операторы в Си

Арифметические операторы

В порядке уменьшения приоритета:

  1. Операторы инкремента и декремента ++ и --
  2. Унарный минус -
  3. Умножение, деление, остаток от деления: *, \, %
  4. Сложение и вычитание +, -

Операторы сравнения

В порядке уменьшения приоритета:

  1. Операторы отношения: >, <, >=, <=
  2. Операторы равенства: ==, !=

Арифметические операторы имеют более высокий приоритет, чем операторы сравнения.

Логические операторы

В порядке уменьшения приоритета:

  1. Логическое не !
  2. Логическое и &&
  3. Логическое или ||

Резюме

Суммируем операторовы в порядке уменьшения приоритета:

  1. Постфиксные ++ и --
  2. Префиксные ++ и --, !
  3. *, \, %
  4. +, -
  5. &&
  6. ||

Это не все операторы языка Си. Например, есть операторы вызова функции () и индексации [], которые имеют самый высокий приоритет (такой же как постфиксные ++ и --). Побитовые операторы обсудим позже.

Рассмотрим примеры, показывающие различие между постфиксным и префиксным операторов инкремента (для оператора декремента все аналогично). Постфиксный инкремент возвращает старое значение переменной и только после этого увеличивает значение переменной на единицу:

int a = 0;
int b = a++;
printf("%d %d", a, b);

В результате получим

1 0

Пример выше является более короткой версией следующего кода:

int a = 0;
int b = a;
a = a + 1;
printf("%d %d", a, b);

Префиксный инкремен увеличивает значение переменной и возвращает уже новое значение:

int a = 0;
int c = ++a;
printf("%d %d", a, c);

Получим

1 1

Пример выше является более короткой версией следующего кода:

int a = 0;
a = a + 1;
int b = a;
printf("%d %d", a, b);

Форматированный ввод и вывод

Краткий справочник

Набор специальных символов (escape-последовательностей):

escape

Набор символов преобразования для функции printf:

printf

Тонкая настройка вывода

Пример 1. Вывод целого числа с минимальной шириной 6. Целые числа будут выровнены по правому краю. Числа, которые занимают больше, чем шесть символов, будут выведены полностью:

printf("%6d", num);

Пример 2. Вывод числа с плавающей точкой минимальной шириной 10 и с тремя знаками после запятой:

printf("%10.3f", var);

Пример 3. Вывод строки с минимальной шириной 10:

printf("%10s", line);

Пример 4. Вывод строки line с максимальной длиной, заданной параметром max:

printf("%.*s", max, line);

Упражнение 1. Написать программу для перевода радиан в градусы, вывести красиво отформатированную таблицу перевода для нескольких значений. Используйте константу M_PI из библиотеки <math.h>

Упражнение 2. Написать программу для поиска расстояния между двумя точками на плоскости. Координаты точек вводить с клавиатуры.

Важно. При использовании функций библиотеки <math.h> (например, pow и sqrt) следует добавлять параметр компиляции -lm:

gcc -lm main.cc

В случае использования редактора Geany следует добавить этот параметр через меню Build -> Установить команды сборки.

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

Пример 1. Оператор if

if (a == 1) {
    // do something
}

Пример 2. Комбинация if - else

if (a == 1) {
    // do something
} else {
    // do something else
}

Пример 3. Комбинация else if

if (a == 1) {
    // do something
} else if (a == 2) {
    // do something else
} else {
    // do something really interesting
}