Операции , выражения и операторы. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Операции , выражения и операторы.



Выражения используются для получения новых значений переменных на основе уже имеющихся данных. Переменные и константы – простейшие частные случаи выражения. Более сложные выражения строятся из констант, переменных, имён функций, соединённых при помощи знаков операций с использованием, быть может, круглых скобок.

Самая популярная операция – присваивание:

 

V = выражение

 

Если после “ выражения” поставить точку с запятой (;), то такая конструкция превращается в оператор присваивания, который вычисляет “ выражение” и полученное значение записывает в память компьютера, обозначенную именем V.

Операция присваивания может применяться в выражениях наряду с прочими операциями.

 

Пример.

int a, b, c = 5;

a = (b = c + 1) + 7;

cout << a << “ “ << b;

 

Результат работы этого фрагмента:

13 6

 

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

 

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

 

Основные бинарные арифметические операции: + (сложение), – (вычитание), * (умножение), / (деление) и % (вычисление остатка от деления целых чисел). Все знаки операций в выражении должны быть записаны явно. При делении любых целых чисел дробная часть отбрасывается.

Операцию % продемонстрируем на следующем примере. Требуется ввести натуральное трехзначное число и напечатать его цифры в обратном порядке.

 

 

#include <iostream.h>

#include <conio.h>

 

int main()

// в стандарте C++ рекомендуется использовать заголовок вида:

// int main() либо даже int main(void)

 

{

clrscr(); // Очистка экрана

int a, z1, z2, z3;

cout<<"Введи трёхзначное число ";

cin>>a; // ввод числа

z3=a%10; cout<<z3; // последняя цифра

z2=a/10%10; cout<<z2; // средняя цифра

z1=a/100; cout<<z1; // первая цифра

getch(); return 0;

}

 

 

Порядок выполнения операций в арифметических выражениях определяется скобками и приоритетом операций:

а) выражения внутри скобок вычисляются до того, как взятая в скобки величина будет использована в дальнейших вычислениях;

б) внутри скобок и в бесскобочных записях порядок действий совпадает с общепринятым в математике: сначала вычисляются значения функций и операции присвоения знака (унарный минус), затем умножения и деления (в том числе и вычисление остатка от деления) и, наконец, сложения и вычитания;

в) операции, имеющие одинаковый приоритет, выполняются в порядке их следования в выражении: справа налево выполняются унарные операции, тернарная операция(см. далее), а также простая и составные операции присваивания (см. далее); остальные – слева направо.

 

Следует соблюдать осторожность при вычитании близких по величине чисел с плавающей точкой, помня о том, что вещественные числа представляются в компиляторе приближённо: данные типа float гарантируют 7-8 точных цифр в числе; тип double обеспечивает 15-16 точных цифр, а long double – до 20 цифр.

 

Пример.

 

float a = 2.5e+15;

float b = a + 1.0;

cout << b – a;

 

Очевидно, следовало бы ожидать, что результат будет равен 1. Однако на практике это не всегда так. Убедитесь сами.

 

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

Программист, правда, может и сам воздействовать на преобразование типов в выражениях, используя операцию явного преобразования типа. Эта операция может быть записана в двух формах:

 

имя_типа (выражение)

(имя_типа) выражение.

В результате «выражение» преобразуется к заданному типу (разумеется, если это возможно).

 

Пример. Вычислить площадь прямоугольного треугольника по его катетам a и b.

 

int a, b; float s;

a=3; b=4;

s=(float)1/2 * a*b;

cout<<"площадь = "<<s<<endl;

 

Убедитесь сами, что без описателя приведения к типу float программа выдаст в качестве результата 0.

 

Стандартные библиотечные функции. В выражениях могут использоваться имена вызываемых функций. Для вычисления часто встречающихся математических функций (sinx, cosx,, lnx, arctgx и др.), а также для преобразования данных, относящихся к разным типам, существуют заранее определенные стандартные функции. Вот некоторые из них:

 

abs(x), fabs(x) — вычисление | x | для целого и вещественного x;

exp(x) — возведение e (основание натуральных логарифмов) в степень x;

log(x) — вычисление натурального логарифма x;

sqrt(x) — вычисление квадратного корня из x;

ceil(x) — отыскание ближайшего целого, которое >=x;

floor(x) — отыскание ближайшего целого, которое <=x;

pow(x, y) — вычисление x в степени y;

sin(x),cos(x),atan(x) — соответствующие тригонометрические функции.

Для подключения к программе библиотеки стандартных математических функций необходимо с помощью препроцессорного утверждения #include в самом начале программы включить за­головочный файл <math.h> (или <cmath>), а для некоторых из рассматриваемых функций — файл <stdlib.h>:

 

#include <math.h>

#include <stdlib.h>

 

 

Примеры арифметических выражений:

Математическая запись Арифметическое выражение С/С++

a*x*x + b*x + c
sqrt((a*x + b)/(c*x-d))

log(sqrt(x*exp(-y)))
(-b + sqrt(b*b – 4*a*c))/(2*a)

О п е р а ц и и и н к ре м е н т а и д е к р е м е н т а. В языке С/С++ широко используются две нетрадиционные унарные операции для увеличения (инкремент) или уменьшения (декремент) значения переменной на 1, обозначаемые соответственно ++ и – –. Эти операции могут быть использованы или перед операндом, или после него (т. н. префиксная и постфиксная формыоперации соответственно). Они оказывают разное действие в выражениях: в записи ++n увеличение происходит до использования значения n, а в n++ увеличение идет уже после того, как используется значение n. Если считать, что значение переменной n равно 5, то выполнение оператора m = ++ n; присвоит переменной m значение 6, а после выполнения оператора m = n++; значение m станет равным 5. И в том, и в другом случае n получит значение 6. Первый пример в точности соответствует последовательности операторов n=n+1; m=n; а во втором случае - следующим двум операторам: m=n;n=n+1. Операция декремента (--) действует аналогично. Обе операции имеют самый низкий приоритет среди арифметических операций и выполняются после бинарных операций + и .

Эти операции в выражениях следует применять с некоторой осторожностью. Не будьте слишком самоуверенными!

 

Пример.

 

int n=5, y;

y=n/2 + 5*(1 + n++) + n/2;

cout << y;

 

Что, на Ваш взгляд, будет выдано на экран? Возможно, компилятор сперва вычислит выражение в скобках, увеличив n, а затем использует это новое значение для вычисления n/2? На этот счет нет никаких гарантий, всё зависит от реализации компилятора.

Результаты работы этого фрагмента, полученные для семейства компиляторов Borland C++ (в т. ч. Borland C++ Builder 6), приведены далее (см. задачу 7 в разделе «Программирование алгоритмов линейной структуры».

Операция определения размера sizeof предназначена для вычисления длины переменой (выражения) или типа (в байтах), например, sizeof (max), sizeof (double).

 



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 505; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.124.40 (0.014 с.)