Унарные операции:
++ увеличение на 1 (инкремент)
уменьшение на 1 (декремент)
! логическое отрицание
- арифметическое отрицание (унарный минус)
+ унарный плюс
& получение адреса операнда
* получение значения операнда по его адресу
sizeof() размер операнда в байтах
Бинарные операции:
a) аддитивные операции
+ сложение;
– вычитание;
b) мультипликативные операции
* умножение;
/ деление;
% остаток от деления целых чисел;
с) операции отношений
равно;
! неравно;
> больше;
больше или равно;
< меньше;
меньше или равно.
d) логические операции
&& и;
|| или;
e) операции присваивания
= простое присваивание
*= умножение с присваиванием
/= деление с присваиванием
+= сложение с присваиванием
-= вычитание с присваиванием
%= остаток от деления с присваиванием
Операции отношения возвращают результат целого типа. Если отношение истинно, то это целое есть 1 и 0, если отношение ложно.
Логические операции возвращают значения целого типа 1 или 0, соответствующие истине или лжи соответственно. Например,
if (y != 0 && x 1000) z = x / y;
здесь переменной z будет присвоено значение выражения x / y, когда одновременно y не равен нулю, а x больше чем 1000.
Кроме того, имеются еще такие операции:
Скобки (круглые и квадратные, играют роль бинарных операций)
Запятая (например, выражение (х=3, 3*х) равно 9)
Условная трехместная операция (например, (x<0? –x : x) – абсолютная величина x)
Операции сдвига и поразрядные операции (определены только для битового представления целочисленных операндов)
Приоритет операций:
Операция скобки
Унарные операции
Мультипликативные операции
Аддитивные операции
Операции отношения ( <, <=, >, >= )
Операции отношения ( = =, != )
Логическая операция ( && и )
Логическая операция ( || или )
Условная операция
Операции присваивания.
Примеры выражений:
x=2; b=2; a=x+++b; результат: a=4, x=3 (постфиксная форма)
x=2; b=2; a=++x+b; результат: a=5, x=3 (префиксная форма)
6>=44 результат: 0
7/2 результат: 3
7%2 результат: 1
5>2 || 4>7 результат: 1
a=1; b=1; c=a || !b && a; результат: 1
Типы данных.
В языке Си все переменные и функции перед их первым использованием типизируются посредством описаний, например, int x, y = 0;
Здесь описаны две переменные x и y целого типа, причем переменной y присваивается начальное значение 0.
В Си используются следующие основные типы данных:
целый тип;
int – целый
short int – короткий целый
long int – длинный целый
unsigned int – беззнаковый целый
вещественный тип;
float – вещественный одинарной точности
double – вещественный удвоенной точности
long double - вещественный максимальной точности
символьный тип;
char – символы с кодом от -127 до 128
unsigned char –символы с кодом от 0 до 255
4) тип void - неопределенный тип, используется при определении функций, не возвращающих значения.
Значениями символьных переменных являются символьные константы, они эквивалентны целым числам, совпадающими с кодами этих символов.
Например, записи: x=’A’ и x=65 для переменной x типа char эквивалентны, так как код символа ‘A’ по таблице ASCII равен 65.
Диапазон значений для каждого типа зависит от аппаратных средств и соответствующей реализации компилятора языка Си. Тип данных определяет так же и допустимый набор действий над данными.
Функции ввода-вывода.
Как уже упоминалось выше, сам язык Си не содержит операторов ввода-вывода. Каждая реализация языка сопровождается стандартными библиотечными функциями, обеспечивающими ввод-вывод. Такой подход гарантирует высокий уровень мобильности программ, так как ОС не работают напрямую с внешними устройствами, такими как диски, терминалы, принтеры и пр., а имеют дело с логическими каналами связи, поддерживаемыми специальными программами или драйверами этих устройств.
В частности, функции printf() и scanf() осуществляют форматированный вывод на стандартное устройство вывода (монитор) и ввод со стандартного устройства ввода (клавиатура). Обращение к функции printf() выглядит следующим образом:
printf(format, list);
где строка format выводится без изменений посимвольно, за исключением управляющих символов ввода-вывода и спецификаций формата, начинающихся с символа «%». Последние задают тип и способ преобразования выводимых данных из списка list. Для задания типа могут использоваться следующие символы:
d, i - для целых десятичных чисел со знаком;
u - для целых десятичных чисел без знака;
o - для восьмеричных чисел без знака;
x - для шестнадцатеричных чисел без знака;
f - для вещественных чисел со знаком с фиксированной точкой;
e - для вещественных чисел со знаком в экспоненциальной форме;
g - для вещественных чисел двойной точности со знаком;
c - одиночные символы;
s - строки символов.
Список list представляет собой список переменных, разделенных запятыми, значения которых и подставляются в спецификации формата.
Так например, если i = 10, x = 1,45 и y = 123,47, то результатом работы следующей конструкции
printf(i = %d, x = %f, y = %f, i, x, y);
будет вывод
i = 10, x = 1.45, y = 123.47
Спецификации формата функции scanf() те же самые, что и для функции printf(), однако список list содержит уже не имена переменных, а их адреса. Например, функция
scanf (%d %f, &i, &x);
осуществляет ввод с клавиатуры значений переменных i и x целого и вещественного типов соответственно.
Если же вводится строка символов, то необходимо использовать спецификацию формата «%s», но применять операцию & (адрес) уже не надо.
Блоки.
Любая последовательность операторов, заключенная в фигурные скобки, представляет собой блок или составной оператор. Блоки могут быть пустыми, вложенными и не должны заканчиваться точкой с запятой.
Блок может использоваться везде, где используется обычный оператор языка. Как правило, блок – это тела функций и операторов if, switch, while, do и for.
Внутри блока могут содержаться описания переменных, которые будут локальными по отношению к этому блоку.
Например,
{ int n; n++; s + = float(n); }
Условные операторы.
Синтаксис условного оператора if имеет вид:
