Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 5 6 ятп.doc
Скачиваний:
7
Добавлен:
22.02.2015
Размер:
240.13 Кб
Скачать

лекция 5

Выражение

Выражение –языковая конструкция, которая задаёт правило для вычисления значения. Тип этого значения – тип выражения. Выражение содержит операнды , знаки операции и круглые скобки. Операнды: переменные, константы, функции (вызовы функций) и выражения , заключённые в круглые скобки. В языке определены приоритеты операций.(см. спосок операций с их приоритетами). Записываются выражения в строку, без опущенных и приподнятых символов. a/(b+c)

При вычислении выражения операции выполняются в соответствии с их приоритетами. Чтобы изменить этот порядок, используют круглые скобки. Последовательные операции одного приоритет а выполняются так: унарные, условная операция(тернарная)и операции присваивания справа налево, остальные слева направо.т.е. a+b+c-d ≈ (((a+b)+c)-d),

А x=y=z ≈ x=(y=z).

Порядок вычисления подвыражений внутри выражений не определён: (sin(x+1)+cos(y-2) ),какое слагаемое будет считаться раньше –неясно.

Компилятор С++ знает , как вычислять результат операции, если операнды имеют идентичные типы, тот же тип будет и у результата. Чтобы обеспечить одинаковый тип операндов (в случае когда они разных типов),компилятор выполняет операцию преобразования по умолчанию (так называемое неявное преобразование типа) над выделенными операндами. Например,

int x;

float z; // В выражении x+z x преобразуется к типу float.

Правила преобразования обеспечивают преобразование более коротких типов в более длинные (чтобы обеспечить сохранение значимости и точности). Все типы выстраиваются в иерархическую цепочку:

Int < unsigned int < long < unsigned long < float < double < long double

Операнды типов char, unsigned char, short int, unsigned short int преобразуются к типу int.

Часто бывает необходимо значение одного типа преобразовать в значение другого типа. Есть два способа записи явного преобразования типа:

== традиционная в С запись приведения к типу, например (double)a. Это унарная операция.

==функциональная запись double(a), она не применима к типам , у которых нет простого имени.

char * p= (char *)0777;

Или

typedef char * Pchar;

char * p= Pchar(0777);

до 02.10.2013

Основные операции языка С++

(По убыванию приоритетов, в группе приоритеты одинаковые)

Операция.

Действие

Унарные операции

++

--

Sizeof

!

-

+

&

*

new

delete

(тип)

Увеличение на 1

Уменьшение на 1

Размер

Поразрядное отрицание

Логическое отрицание

Унарный минус (арифметическое отрицание)

Унарный плюс

Взятие адреса

Разыменование

Выделение динамической памяти

Освобождение динамической памяти

Преобразование типа

Бинарные и тернарная операции

*

/

%

Умножение

Деление

Остаток от деления

+

-

сложение

вычитание

<<

>>

Сдвиг влево

Сдвиг вправо

<

<=

>

>=

Меньше

Меньше или равно

больше

Больше или равно

==

!=

Равно

Не равно

&

Поразрядная конъюнкция (И)

^

Поразрядная исключающее ИЛИ

!

Поразрядная дизъюнкция (ИЛИ)

&&

Логическое И

||

Логическое ИЛИ

? :

Условная операция (тернарная)

=

*=

/=

%=

+=

-=

<<=

>>=

&=

!=

^=

Присваивание

Умножение с присваиванием

Деление с присваиванием

Остаток от деления с присваиванием

Сложение с присваиванием

Вычитание с присваиванием

Сдвиг влево с присваиванием

Сдвиг вправо с присваиванием

Поразрядное И с присваиванием

Поразрядное ИЛИ с присваиванием

Поразрядное исключающее ИЛИ с присваиванием

,

Последовательное вычисление

Некоторые особенности выражений в С++:

1)Присваивание является операцией выражения, у неё самый низкий приоритет (кроме ,). Простое присваивание:

операнд1 =операнд2; означает, что значение операнд2 получает и операнд1, который размещается слева и называется L-value (L-значение), т.е.то, чему можно присвоить значение.

Присваивание может быть и внутри выражения, но так,чтобы левый операнд был L-value, например, a+b*(c=2), но выражение a+c=3-b является ошибочным (с не явл. L-value).

В языке С++ есть сложное присваивание += ,-=, *=, /=, %=, <<=, >>= и др. При выполнении операции в правой части используется и L-значение из левой части: оператор a+=b; означает a=a+b; n%=b/10; эквивалентно n=n % (b/10);

2)Операция определения размера sizeof имеет две формы и применяется для вычисления размера в байтах некоторого объекта или типа:

a) sizeof выражение // cout << sizeof (x+1.0); (8)

b) sizeof (тип) // cout << sizeof(float); (4)

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

int a,b,c;

a=2; b=3;

c=a*b++ +a*a*b; // c=2*3+2*2*3; а затем b становится равным 4.

4) Операции отношения сравнивают два операнда арифметического типа (или указатели), результат логического типа true или false, причём приоритет операций сравнения на равенство или неравенство меньше приоритета остальных операций отношения.

4) Логические операции И(&&) и ИЛИ(||) выполняются над арифметическими операндами или указателями. Если операнды разных типов, то преобразования их не производится, каждый операнд оценивается с точки зрения его эквивалентности нулю. Результат операции true или false. Если по значению первого операнда можно определить результат операции, второй операнд не вычисляется.

int x=3,y=2;

x>5 && y<4; (false)

5)Условная операция (?:)или тернарная(три операнда).Её формат:

оп1 ? оп2 : оп3

оп1 сравнивается с нулём, если он равен true, результатом условной операции будет значение оп2, иначе – оп3. Например,

int a, b, m;

m= (a<b)? a : b; m= min(a,b);

6 xy = exp(log xy)=exp(y*log x) не определена при x<=0

остальные операции рассмотрим позже.

Основные управляющие структуры С++.

Т

д1

д2

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

Развилки: Выбор:

Цикл «пока»:

ист

ложь

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

Операторы С++.

1)Оператор ввода данных с клавиатуры.

Ввод данных с клавиатуры выполняется с помощью объекта cin, который определён в С++ для работы со стандартным потоком ввода. Поток – это некоторая абстракция, отражающая перемещение данных от источника к приёмнику. Этот поток ввода содержит данные, вводимые с клавиатуры (если он не переопределён). Оператор ввода записывается так

cin >> <переменная>; Например, cin>>x;

Операция >> является операцией извлечения. Она извлекает данные из потокового объекта, стоящего в левой части, и присваивает эти данные переменной в правой части. В конце оператора ставится ;. Вводить можно последовательно значения нескольких переменных: cin >> a>>b>>c; Значения их должны стоять во входном потоке в соответствующем порядке, набираются они в символьном виде по одному и за ним нажимается Enter ,либо одно за другим, разделяются пробелами и за последним значением нажимается Enter(клавиша исполнения). Тип переменной в правой части операции >> определяет интерпретации вводимых символов и то, куда будут записываться значения из входного потока.

int k;

cin>>k;// считывается целое значение в k

double x;

cin>>x; // считывается вещественное число удвоенной точности в x