Лекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)
Скачать 319.62 Kb.
|
ВыражениеОперации и операнды могут объединяться в выражение. Каждое выражение вычисляется с учетом особенностей составляющих его операций и их приоритетов. В результате вычисляется значение выражения. Примеры выражений: X=5 a + b (a + b)/3*5 Следует иметь в виду, что выражение не является завершённой синтаксической конструкцией и не предназначено для выполнения. Выражение в программе всегда должно входить в состав какого-либо оператора. Приведённые выше примеры выражений не встроены в операторы, поэтому при попытке компиляции будет получено сообщение об ошибке. Простейшие арифметические операцииОпределены для данных арифметических типов, т.е. вещественных (float, double) и целых (int, short, long, char и соответствующих им беззнаковых данных unsigned int, unsigned short, unsigned long, unsigned char). Действие этих операций - соответствующее арифметическое действие. Результат операции - результат арифметического действия. Одноместные арифметические операции имеют один операнд. К ним относятся операции "+" (результатом является число, равное операнду) и "-" (результатом является число, противоположное операнду). Двуместные арифметические операции имеют два операнда. К ним относятся операции + , - , * , / и % . Каждая из этих операций выполняет соответствующее действие, результат которого и является результатом операции. Операция + вычисляет сумму операндов, операция - вычисляет разность, операция * вычисляет произведение, операция / вычисляет частное от деления вещественных операндов или целую часть частного от деления целых операндов, операция % вычисляет остаток от деления первого операнда на второй. Арифметические операции в выражениях выполняются слева направо в соответствии с общепринятыми приоритетами. Приоритет можно изменить с помощью скобок. Примеры выражений с арифметическими операциями: a + b%c (a + b)/3*5 Операция присваиванияОперация присваивания выполняет действия по занесению результатов выражения, стоящего справа от знака присваивания = в область памяти, определяемую выражением, стоящим слева от знака присваивания. Чаще всего слева от знака присваивания стоит простая переменная. При выполнении присваивания происходит преобразование типа результата правого выражения к типу левого операнда. Результат операции присваивания - значение присвоенной величины. Поскольку присваивание является операцией, а не оператором, то в одном выражении допускается несколько присваиваний. В этом случае они выполняются справа налево Например: ab = ( c = d+5 ) * 6 Присваивание имеет самый низкий приоритет из всех операций. Использование в выражениях операндов разных типовПри участии в арифметических операциях операндов разных типов, перед выполнением операции осуществляется преобразование типов так, чтобы не было потери точности. Затем осуществляется сама операция. Типы данных в порядке возрастания точности: char, short, int, long, float, double. Пример: int a, c; float d, e; e = d*(c+e); /* c будет преобразовано в float */ a = 'A' + 20; /* 'A' будет преобразовано в int */ Операции преобразования типовВ некоторых случаях правила преобразования типов не позволяют получить верный результат, например: int a, b; float c; a = 7; b = 14; c = a/b; /* результат 0 */ Для получения правильного результата можно поступить так c = a; c = c/b; А можно применить операцию преобразования типа: БНФ: преобразование_типа = "("имя_типа ")" выражение имя_типа - название любого типа, в том числе и заданного программистом. Для нашего примера применение операции преобразования типа будет выглядеть так: c = (float)a / (float)b; Операция преобразования типа имеет приоритет более высокий, чем арифметическая операция. Дополнительные арифметические операцииЯзык Си имеет ряд уникальных операций, как правило, отсутствующих в других языках программирования. К этим операциям относятся операция увеличения на единицу ++ и операция уменьшения на единицу. Например: a = a + 1; // эквивалентно a++; или ++a; Выполнение операций "++" или "--" вызывает увеличение или уменьшение на единицу значения соответствующей переменной. Результат операций может быть различным в зависимости от того, где находятся знаки операций: если используется постфиксная операция, т.е операция ++ или -- записана после переменной, то результатом операции будет значение переменной до увеличения или уменьшения. Иными словами переменная сначала используется в выражении, а затем увеличивается или уменьшается. Например: a = 4; b = ( a++ ) * 5; /* здесь b = 20 */ Если используется префиксная операция, т. е. операция ++ или -- записана перед переменной, то результат операции - значение переменной после увеличения или уменьшения. Иными словами переменная вначале увеличивается или уменьшается, затем используется в выражении. Например: a = 4; b = ( ++ a ) * 5; /* здесь b = 25 */ Приоритет операций выше, чем у * или /, но все равно рекомендуется ставить скобки, чтобы не запутаться. |