Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Операции и выражения




Директивы препроцессора

Препроцессор – это программа или часть программы, которая выполняет обработку исходного кода до начала компиляции.

 

Таблица 1.6 – Частые директивы препроцессора
Директива препроцессора Выполняемое действие Примечание
#include <файл> или #include «файл» Указанный файл вставляется в код вместо директивы Используется для включения заголовочных файлов, чтобы данный код мог задействовать функциональность, определённую где-то в другом месте
#define ключ значение Каждое вхождение заданного элемента ключ заменяется заданным элементом значение В Си используется для определения константного значения или макроопределения. В Си++ используется редко, так как есть const
#ifdef ключ или #ifndef ключ   #endif Код внутри ifdef-endif или ifndef-endif блоков включается или опускается в зависимости от того, определён ли заданный элемент ключ с помощью директивы #define В основном используется для защиты от многократных включений кода

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

 

(a + 0.12) / 6x && y ||! z(t * sin(x) - 1.05e4) / ((2 * k + 2) * (2 * k + 3))a = b = c b++cout << ai++, j++

 

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

Язык С++ предоставляет в наше распоряжение внушительный набор операций: арифметические, логические, поразрядные, операции отношения, выделения памяти, преобразования типа, выбора и т. д. В таблице 1.7 приведены простейшие операции, с которых мы начнем изучение.

 

Таблица 1.3 Простейшие операции языка С++
Операция Краткое описание
Унарные операции
++ постфиксный инкремент
-- постфиксный декремент
sizeof размер объекта или типа
-- префиксный декремент
++ префиксный инкремент
! логическое отрицание
- арифметическое отрицание (унарный минус)
+ унарный плюс
(<тип>) преобразование типа
Бинарные и тернарная операции
* умножение
/ деление
% остаток от деления
+ сложение
- вычитание
< меньше
<= меньше или равно
> больше
>= больше или равно
== равно
!= не равно
|| логическое И
&& логическое ИЛИ
?: условная операция (тернарная)
= присваивание
*= умножение с присваиванием
/= деление с присваиванием
%= остаток от деления с присваиванием
+= сложение с присваиванием
-= вычитание с присваиванием
, последовательное вычисление

 

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

Если в одном выражении записано несколько операций одинакового приоритета, то унарные операции, условная операция и операции присваивания выполняются справа налево, остальные – слева направо. Например:

 

a = b = c означает a = (b = c),

a + b + c означает (a + b) + c.

 

Порядок вычисления операндов в выражении не определен: например, нельзя считать, что в выражении (sin(x + 2) + cos(y + 1)) обращение к синусу будет выполнено раньше, чем к косинусу. Только четыре операции гарантируют порядок вычислений слева направо:,,?:, && и ||.

Результат вычисления выражения характеризуется значением и типом. Например, пусть описаны две переменные целого типа a и b:

 

int a = 2, b = 5;

 

Тогда выражение a + b имеет значение 7 и тип int.

Рассмотрим подробнее некоторые операции.

Операции присваивания (=, +=, -=, *= и т. д.). Формат операции простого присваивания (=):

 

операнд_1 = операнд_2

 

Левым операндом должна быть переменная, а правым – любое выражение. Сначала вычисляется выражение, стоящее в правой части операции, а потом его результат записывается в переменную. То, что ранее хранилось в этой переменной, естественно, теряется.

Если тип значения, полученного в результате вычисления, не совпадает с типом левого операнда, то выполняется преобразование типа по умолчанию (об этом – в конце этой лекции).

В составных операциях присваивания (+=, *=, /= и т. п.) при вычислении выражения, стоящего в правой части, используется и значение из левой части. Например, при сложении с присваиванием к значению левого операнда прибавляется значение правого, и результат записывается в левый операнд. Таким образом, выражение a += b является более компактной записью выражения a = a + b.

Операции увеличения и уменьшения на 1 (++ и --). Эти операции, называемые также инкрементом и декрементом, имеют две формы записи - префиксную, когда операция записывается перед операндом, и постфиксную. В префиксной форме сначала изменяется операнд, и новое значение является результатом операции. В постфиксной форме значением выражения является исходное значение операнда, после чего он изменяется:

 

#include <stdio.h>

 

int main()

{ int x = 3, y = 3;

printf("Значение префиксного выражения: %d \n", ++x);

printf("Значение постфиксного выражения: %d \n", y++);

printf("Значение х после приращения: %d \n", x);

printf("Значение у после приращения: %d \n", у);

}

Результат работы программы:

 

Значение префиксного выражения: 4

Значение постфиксного выражения: 3

Значение х после приращения: 4

Значение у после приращения: 4

 

Как и выражения с присваиванием, выражения с инкрементом и декрементом можно сделать самостоятельным оператором, задав после выражения точку с запятой.

Операции отрицания (-,!). Арифметическое отрицание (унарный минус -) изменяет знак операнда целого или вещественного типа на противоположный. Логическое отрицание (!) дает в результате значение false, если операнд есть true, и значение true, если операнд равен false. Операнд может быть арифметического типа. В этом случае выполняется неявное преобразование в тип bool.

Деление (/) и остаток от деления (%). Операция деления применима к операндам арифметического типа. Если оба операнда целочисленные, результатом операции является целая часть частного (дробная часть отсекается). Например, результатом 5/2 будет 2. Если же хотя бы один операнд вещественный, то и результат будет вещественным числом. В этом случае тип результата определяется правилами преобразования типов, которые, будут рассмотрены далее. Операция остатка от деления применяется только к целочисленным операндам. Знак результата зависит от реализации.

 

#include <stdio.h>

 

int main()

{ int x = 11, y = 4;

float z = 4;

printf("Результаты деления: %d %f \n", x / y, x / z);

printf("Остаток: %d \n", x % y);

}

Результат работы программы:

 

Результаты деления: 2 2.750000

Остаток: 3

 

Операция последовательного вычисления "запятая" (,). Формат операции:

 




Поделиться с друзьями:


Дата добавления: 2015-04-30; Просмотров: 391; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.097 сек.