7 сентября 2021
На этом занятии уточним и закрепим основы языка Си, которые мы обсуждали в прошлый раз.
Операторы в Си
Арифметические операторы
В порядке уменьшения приоритета:
- Операторы инкремента и декремента
++
и--
- Унарный минус
-
- Умножение, деление, остаток от деления:
*
,\
,%
- Сложение и вычитание
+
,-
Операторы сравнения
В порядке уменьшения приоритета:
- Операторы отношения:
>
,<
,>=
,<=
- Операторы равенства:
==
,!=
Арифметические операторы имеют более высокий приоритет, чем операторы сравнения.
Логические операторы
В порядке уменьшения приоритета:
- Логическое не
!
- Логическое и
&&
- Логическое или
||
Резюме
Суммируем операторовы в порядке уменьшения приоритета:
- Постфиксные
++
и--
- Префиксные
++
и--
,!
*
,\
,%
+
,-
&&
||
Это не все операторы языка Си. Например, есть операторы вызова функции ()
и индексации []
, которые имеют самый высокий приоритет (такой же как постфиксные ++
и --
). Побитовые операторы обсудим позже.
Рассмотрим примеры, показывающие различие между постфиксным и префиксным операторов инкремента (для оператора декремента все аналогично). Постфиксный инкремент возвращает старое значение переменной и только после этого увеличивает значение переменной на единицу:
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-последовательностей):
Набор символов преобразования для функции 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
}