Выражения в С++. Приоритет операций. Последовательность выполнения операций

 

Министерство образования  и науки Российской Федерации

ФГБОУ ВПО «Московский  государственный открытый

университет имения В.С. Черномырдина

Чебоксарский политехнический  институт (филиал)

Кафедра информационных технологий и программирования

 

 

 

 

 

 

 

 

 

 

 

Курсовая работа

по дисциплине "Программирование и основы алгоритмизации"

на тему: "Выражения  в С++. Приоритет операций. Последовательность выполнения операций."

Вариант № 16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                                                      Выполнил :

студент 1-го курса 

очного отделения 

факультета УИТС

специальность 220400

Семенов Е.В.

Проверила:

ст. преподаватель Замкова Т.В.

 

 

 

Чебоксары 2013

 

 

Введение

 

C++ — компилируемый статически  типизированный язык программирования общего назначения.

Поддерживает такие парадигмы  программирования как процедурное  программирование, объектно-ориентированное  программирование, обобщённое программирование, обеспечивает модульность, раздельную компиляцию, обработку исключений, абстракцию данных, объявление типов (классов) объектов, виртуальные функции. Стандартная библиотека включает, в том числе, общеупотребительные контейнеры и алгоритмы. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.

Название «C++» происходит от названия языка C, в котором унарный оператор ++ обозначает инкремент переменной.Синтаксис C++ унаследован от языка C. Одним из принципов разработки было сохранение совместимости с C. Тем не менее, C++ не является в строгом смысле надмножеством C; множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++, довольно велико, но не включает все возможные программы на C.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ОГЛАВЛЕНИЕ

 

 

Выражения и Операторы .................................................................................................................

Выражения............................................................................................................................................

Операторы Выражения.........................................................................................................................

Пустой  оператор...................................................................................................................................

Оператор if............................................................................................................................................

Операторы switch.................................................................................................................................

Оператор while......................................................................................................................................

Оператор for..........................................................................................................................................

Описания...............................................................................................................................................

Операции c++.......................................................................................................................................

Приоритет операций............................................................................................................................

Ассоциативность..................................................................................................................................

Возвращаемое  значение.......................................................................................................................

Количество  операндов.........................................................................................................................

Операция  присваивания.......................................................................................................................

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

Логические операции...........................................................................................................................

Поразрядные логические операции....................................................................................................

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

Операции new и delete..........................................................................................................................

  Заключение …....................................................................................................................................

источники материалов......................................................................................................................

Практическая  часть..........................................................................................................................

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выражения и Операторы 
 
В С++ имеется богатый набор операций, с помощью которых в выражениях образуются новые значения и изменяются значения переменных. Поток управления в программе задается с помощью операторов, а описания используются для введения в программе имен переменных, констант и т.д. Заметьте, что описания являются операторами, поэтому они свободно могут сочетаться с другими операторами. 
 
 
1 Выражения 
 
В С++ имеется большое число операций, и они будут объясняться там, где (и если) это потребуется. Следует учесть, что операции 
 
~ (дополнение) amp; (И) ^ (исключающее ИЛИ) ! (включающее ИЛИ) «„ (логический сдвиг влево) “» (логический сдвиг вправо) 
 
применяются к целым, и что нет отдельного типа данных для логических действий. 
 
Смысл операции зависит от числа операндов. Унарное amp; является операцией взятия адреса, а бинарное amp; – это операция логического И. Смысл операции зависит также от типа ее операндов: + в выражении a+b означает сложение с плавающей токой, если операнды имеют тип float, но целое сложение, если они типа int. В #1.8 объясняется, как можно определить операцию для типа, определяемого пользователем, без потери ее значения, предопределенного для основных и производных типов. 
 
В С++ есть операция присваивания =, а не оператор присваивания, как в некоторых языках. Таким образом, присваивание может встречаться в неожиданном контексте, например, x=sqrt(a =3*x). Это бывает полезно. a=b=c означает присвоение c объекту b, а затем объекту a. Другим свойством операции присваивания является то, что она может совмещаться с большинством бинарных операций. Например, x[i+3]*=4 означает x[i+3]=x[i+3]*4, за исключением того факта, что выражение x[i +3] вычисляется только один раз. Это дает привлекательную степень эффективности без необходимости обращения к оптимизирующим компиляторам. К тому же это более кратко. 
 
В большинстве программ на С++ широко применяются указатели. Унарная операция * разыменовывает* указатель, т.е. *p есть объект, на который указывает p. Эта операция также называется косвенной адресацией. Например, если имеется char* p, то *p есть символ, на который указывает p. Часто при работе с указателями бывают полезны операция увеличения ++ и операция уменьшения –. Предположим, p указывает на элемент вектора v, тогда p++ делает p указывающим на следующий элемент. 
 
– * англ. dereference – получить значение объекта, на который указывает данный указатель. (прим. Перев.)

 
2 Операторы Выражения

 
Самый обычный вид оператора  – выражение;. Он состоит из выражения, за которым следует точка с  запятой. Например: 
 
a = b*3+c; cout «„ «go go go“; lseek(fd,0,2);

 
3 Пустой оператор

 
Простейшей формой оператора является оператор: 
Он не делает ничего. Однако он может быть полезен в тех случаях, когда синтаксис требует наличие оператора, а вам 
оператор не нужен. 1.4.4 Блоки Блок – это возможно пустой список операторов, заключенный в фигурные скобки: 
 
(* a=b+2; b++; *) 
 
Блок позволяет рассматривать несколько операторов как один. Область видимости имени, описанного в блоке, простирается до конца блока. Имя можно сделать невидимым с помощью описаний такого же имени во внутренних блоках.

 
5 Оператор if

 
Программа в следующем примере  осуществляет преобразование дюймов в сантиметры и сантиметров в дюймы. Предполагаемся, что вы укажете единицы измерения вводимых данных, добавляя i для дюймов и c для сантиметров: 
 
#include «stream.h» 
 
main() (* const float fac = 2.54; float x, in, cm; char ch = 0; 
 
cout «„ "введите длину: "; cin “» x »» ch; 
 
if (ch == 'i') (* // inch – дюймы in = x; cm = x*fac; *) else if (ch == 'c') // cm – сантиметры in = x/fac; cm = x; *) else in = cm = 0; 
 
cout «„ in «« " in = " «« cm «« « cm\n“; *) 
 
Заметьте, что условие в операторе if должно быть заключено в круглые скобки.

 
                                                         6 Операторы switch

 
Оператор switch производит сопоставление  значения с множеством констант. Проверки в предыдущем примере можно записать так: 
 
switch (ch) (* case 'i': in = x; cm = x*fac; break; case 'c': in = x/fac; cm = x; break; default: in = cm = 0; break; *) Операторы break применяются для выхода из оператора 
 
 
switch. Константы в вариантах case должны быть различными, и если проверяемое значение не совпадает ни с одной из констант, выбирается вариант default. Программисту не обязательно предусматривать default.

 
7 Оператор while 
 
Рассмотрим копирование строки, когда заданы указатель p на ее первый символ и указатель q на целевую строку. По соглашению строка оканчивается символом с целым значением 0. 
 
while (p != 0) (* *q = *p; // скопировать символ q = q+1; p = p+1; *) *q = 0; // завершающий символ 0 скопирован не был 
 
Следующее после while условие должно быть заключено в круглые скобки. Условие вычисляется, и если его значение не ноль, выполняется непосредственно следующий за ним оператор. Это повторяется до тех пор, пока вычисление условия не даст ноль. 
 
Этот пример слишком пространен. Можно использовать операцию ++ для непосредственного указания увеличения, и проверка упростится: 
 
while (*p) *q++ = *p++; *q = 0; 
 
где конструкция *p++ означает: «взять символ, на который указывает p, затем увеличить p.» 
 
Пример можно еще упростить, так как указатель p разыменовывается дважды за каждый цикл. Копирование символа можно делать тогда же, когда производится проверка условия: 
 
while (*q++ = *p++) ; 
 
Здесь берется символ, на который указывает p, p увеличивается, этот символ копируется туда, куда указывает q, и q увеличивается. Если символ ненулевой, цикл повторяется. Поскольку вся работа выполняется в условии, не требуется ни оного оператора. Чтобы указать на это, используется пустой оператор. С++ (как и C) одновременно любят и ненавидят за возможность такого чрезвычайно краткого ориентированного на выразительность программирования*. 
 
– * в оригинале expression-oriented (expression – выразительность и выражение). (прим. Перев.)

 
8 Оператор for 
 
Рассмотрим копирование десяти элементов одного вектора в другой: 
 
for (int i=0; i«10; i++) q[i]=p[i]; 
 
 
Это эквивалентно int i = 0; while (i«10) (* q[i] = p[i]; i++; *) но более удобочитаемо, поскольку вся информация, управляющая циклом, локализована. При применении операции ++ к целой переменной к ней просто добавляется единица. Первая часть оператора for не обязательно должна быть описанием, она может быть любым оператором. Например: 
 
for (i=0; i«10; i++) q[i]=p[i]; 
 
тоже эквивалентно предыдущей записи при условии, что i соответствующим образом описано раньше.

 
9 Описания

 
Описание – это оператор, вводящий имя в программе. Оно может  также инициализировать объект с этим именем. Выполнение описания означает, что когда поток управления доходит до описания, вычисляется инициализирующее выражение (инициализатор) и производится инициализация. Например: 
 
for (int i = 1; i«MAX; i++) (* int t = v[i-1]; v[i-1] = v[i]; v[i] = t; *) 
 
При каждом выполнении оператора for i будет инициализироваться один раз, а t MAX-1 раз.

 

 

 

Операции c++

 

Здесь будут рассмотрены все  операции языка C++. Можете использовать данный материал как справочник по операциям. Пока что, перечислены не все. Постепенно буду добавлять оставшиеся.

 

Сначала несколько определений.

 

Значения участвующие в операциях  называются операндами.

 

Операциии будем рассматривать  в порядке возрастания их приоритета: от низшего к высшему.

 

Приоритет операций

 

Итак, каждая операция в языке C++ обладает приоритетом. Приоритет определяет, в какой последовательности будут  выполняться операции в выражении.

 

Не забываем, что оператор в C++ - это строка кода заканчивающаяся  точкой с запятой. Не путайте операторы, операции и операнды.

 

Возьмём например следующий оператор:

 

y = x + 5;

 

Здесь выполняются две операции: операция сложения и операция присваивания. Так вот операция суммы обладает более высоким приоритетом, чем  операция присваивания. Поэтому сначала  вычисляется сумма x и пяти, а затем получившийся результат присваивается переменной y.

 

1

::

слева направо

унарная операция разрешения области  действия

[ ]

операция индексирования

()

круглые скобки

.

обращение к члену структуры  или класса

->

обращение к члену структуры или класса через указатель

2

++

слева направо

постфиксный инкремент

постфиксный декремент

3

++

справа налево

префиксный инкремент

префиксный декремент

4

*

слева направо

умножение

/

деление

%

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

5

+

слева направо

сложение

-

вычитание

6

>>

слева направо

сдвиг вправо

<<

сдвиг влево

7

<

слева направо

меньше

<=

меньше либо равно

>

больше

>=

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

8

==

слева направо

равно

!=

не равно

9

&&

слева направо

логическое И

10

||

слева направо

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

11

?:

справа налево

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

12

=

справа налево

присваивание

*=

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

/=

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

%=

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

+=

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

-=

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

13

,

слева направо

запятая


 

Ассоциативность

 

Ассоциативность бывает двух видов: ассоциативность  операций слева направо и ассоциативность  операций справа налево.

 

Ассоциативность операций применяется  когда в выражении встречаются две операции обладающие одинаковым приоритетом:

 

y = x + z + 5;

 

Операция суммы обладает ассоциативностью слева направо. Это значит, что  сначала выполнится самая левая  операция, затем выполнится следующия  и так далее до самой правой.

 

Операция присваивания обладает ассоциативностью справа налево:

 

y = x = z = 5;

 

Сначала выполнится самя правая операция: z = 5, затем результат этой операции будет присвоен x и т.д.

 

 

Возвращаемое значение

 

Каждая операция возвращает какое-то значение.

 

5 + 2

 

Данная операция вернёт семь. Ещё один пример:

 

y = 5 + (x = 3);

 

Сначала выполняется операция присваивания находящаяся в скобках, она возвращает значение 3. Далее, это возвращённое значение участвует в операции суммы  в качестве правого операнда. Операция суммы возвращает значение 8. Результат операции сложения участвует в операции присваивания.

 

Значением не обязательно является целое число. Некоторые операции возвращают булевы значения:

 

x == 5;

Если x равно пяти, то данная операция вернёт единицу (или true), в противном случае операция вернёт 0 (или false).

 

Количество операндов

 

По количеству участвующих операндов, операции делятся на три группы: унарные - в операции один операнд.

 

Бинарные - в операции участвуют  два операнда.

 

В языке C++ всего одна операция которая принимает три операнда - условная операция. Операции с тремя операндами называются тернарными.

 

Ну и собственно сами операции. Здесь перечислены почти все  операции. Постепенно допишу остальные. Для каждой операции указан приоритет.

 

Обратите внимание, что многие операции обладают одинаковы приоритетом.

 

Ниже подробно рассмотрены операции, используемые наиболее часто.

 

Операция присваивания

 

Левым операндом должна быть переменная. Нельзя записать:

 

5 = x;

 

Операнду находящемуся в левой  части присваивается значение операнда стоящего в правой части операции:

 

x = 5;

cout << x; // на экран будет выведено: 5

Теперь в переменной x хранится значение 5. И его можно использовать.

 

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

 

Данные операции позволяют сократить  код:

 

int x = 5;

x += 5; // две последние строки эквивалентны

x = x + 5;

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

 

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

 

Условная операция ?: - единственная тернарная (то есть принимающая три  операнда) операция в C++. Использовать её можно вместо простого ветвления if else.

 

x > y ? flag = 1 : flag = 0;

 

В первом операнде записывается условная операция. Если она возвращает единицу, то выполняется второй операнд, если ноль, то выполняется третий операнд. Приведённый код эквивалентен следующему:

код на языке с++

 

 

if (x > y)

{

  flag = 1;

}

else

{

  flag = 0;

}

 

 

Логические операции

 

|| - логическое ИЛИ, && - логическое И. Операция логического И обладает более высоким приоритетом.

 

Данные операции используются для  объединения нескольких условных операций:

 

код на языке с++

 

if (x = y)

{

  if (z > x)

    {

 

    }

}

 

 

Вот вместо этой чудовищной конструкции  можно использовать следующую:

код на языке с++

 

 

if ((x == y) && (x < z))

{

 

}

 

 

Только когда выполняются два  условия, выполняется и тело ветвления.

 

Операция || работает аналогично:

 

код на языке с++

 

if ((x == y) || (x < z))

{

 

}

 

 

Тело ветвления выполняется, когда  выполняется любое из условий, т.е. если выполняется хоть одно условие.

 

Поразрядные логические операции

 

| ^ &. Здесь перечислены операции  в порядке увеличения их приоритета.

 

Поразрядные логические операции в  отличие от логических возвращают значения такого же типа, как и их операнды.

 

При выполнении этих операций вычисления ведутся над двоичным представлением операндов.

 

Рассмотрим пример: возьмём два  десятичных числа:

 

x = 180; // 10110100

y = 166; // 10100110

В комментариях указано как эти  числа представлены в двоичном виде.

 

Теперь выполним три поразрядные  логические операции над этими числами:

 

x | y; // 182

 

10110100

10100110

--------

10110110

Здесь мы проверяем, если в одном  из чисел в данной позиции стоит  единица, то и в результирующем числе  будет единица.

 

x ^ y; // 18

 

10110100

10100110

--------

00010010

В исключающем ИЛИ в результирующее число записывается единица, если единица  стояла только в одном числе. Если в обоих числах в соответствующих  позициях стояла единица, то в результат  записывается ноль. Если в обоих числах в соответствующих позициях стоял ноль, в результате тоже будет ноль.

 

x & y; // 164

 

10110100

10100110

--------

10100100

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

 

Вообще при выполении данных операций не имеет смысла смотреть на десятичное представление чисел. Мы не будем рассматривать для чего конкретно нужны эти операции.

 

Операция проверки на равенство (неравенство)

 

Операции отношения могут возвращать только два значения: ноль (false - ложь) и единицу (true - истина).

 

== и !=. Данные операции возвращают  булевы значения.

 

x == y;

 

Если x равен y, то операция вернёт единицу.

 

x != y;

 

Операция вернёт единицу если x не равен y.

 

Более высокий приоритет у операций < (меньше), <= (меньше или равно), > (больше), >= (больше или равно). Думаю тут всё понятно. Только запомните что в операциях больше или равно и меньше или равно сначала пишется угловая скобка, а затем знак равенства. Следущий знак в C++ не имеет смысла: =<.

 

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

 

Приоритет этих операции такой же как и в математике. Операции умножения, деления выполняются раньше чем операции суммы, вычитания.

 

Для операции умножения в C++ используется знак *.

 

Кроме того сюда же относится операция взятия остатка %. Данная операция делит  первый операнд на второй и берёт остаток от деления:

код на языке с++

 

 

int x = 3;

int y = 10;

int z;

 

z = x % y; // z = 3

 

 

Мы делим три на десять. Результат - 0,3. Отбрасываем ноль и берём  остаток. Результат - 3.

 

Данная операция хоть и не так  распространена как например другие арифметические операции, но тем не менее используется довольно часто. И иногда бывает просто незаменима.

 

Операции new и delete

 

Операция new позволяет получить память из кучи (это такой участок памяти) во время выполнения программы. При этом Вы получаете указатель на начало участка выделенной памяти.

 

После того, как память которую  вы получили больше вам не нужна, необходимо её "отпустить". Делается это с  помощью операции delete.

 

Инкремент и декремент

 

Инкремент - увеличение переменной на единицу. Новое значение сохраняется в переменной.

 

Декремент - уменьшение переменной на единицу. Новое значение сохраняется  в переменной.

 

Различают два вида этих операций: операции преинкремента и предекремента  и операции постинкремента и посткинкремента.

код на языке с++

 

 

int x = 5;

int y;

 

y = ++x; // y = 6, x = 6

y = --x; // y = 5, x = 5

y = x++; // y = 5, x = 6

y = x--; // y = 6, x = 5

 

 

 

 

                                 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                 Заключение

 

 

Являясь одним из самых популярных языков программирования, C++ широко используется для разработки программного обеспечения. Область его применения включает создание операционных систем, разнообразных  прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр). Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие. C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

источники материалов

 

http://2programmer.ru/cplspls/osnovnosobennosti?start=3

 

http://cppstudio.com/uchebniki/yazyk-programmirovaniya-s/prioritet-operacij-v-s/

 

http://gamesmaker.ru/programming/c/operacii-c/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Практическая  часть

 

Даны координаты  N точек на плоскости в виде маccивов  X и Y. Найти наиболее и наименее удаленные точки. Вычисление расстояния между парой точек оформить функцией.

 

 

1.вводим используемые переменные

2.делаем оба массива динамическими

3.создадим циклы для нахождения  максимально близкой/дальней точки

4.парралельно содадим циклы для нахождения этой точки

5.создадим функции для их  решения

6.выведим всю информацию на  экран.

 

исходник

 

#include "stdafx.h"

#include <iostream>

#include <math.h>

using namespace std;

void main()

{

setlocale(LC_ALL, "Russian");

int N,i,j;

int imin,imax;

int jmin,jmax;

double z,zmax,zmin;

 

    cout << "введите количество точек ";

    cin >> N;

 

    int *x = new int[N];

    for (i = 0; i < N; i++)

    {

        cout << "введите " << i <<"-ую координату x: ";

        cin >> x[i];

    }

 

    int *y = new int[N];

    for (i = 0; i < N; i++)

    {

        cout << "введите  " << i <<"-ую координату y: ";

        cin >> y[i];

    }

 

   

    zmax=sqrt(double(x[0] * x[0] +  y[0] * y[0]));

    zmin=zmax;

    imin=0;

    imax=0;

 

    for (i=1; i < N; i++)

    {

        z=sqrt(double(x[i] * x[i] +  y[i] * y[i]));

        if (z > zmax)

        {

            imax=i;

            zmax=z;

        }

        if (z < zmin)

        {

            imin=i;

            zmin=z;

        }

    }

 

    cout << "дальняя точка к началу координат " << imax << endl;

    cout << "её растояние до начала координат" << zmax << endl;

 

    cout << "ближайшая точка  к началу координат " << imin << endl;

    cout << "её расстояние  до начала координат" << zmin << endl;

 

  

    zmax=sqrt(double((x[0]-x[1])*(x[0]-x[1]) + (y[0]-y[1])*(y[0]-y[1])));

    zmin=zmax; 

    imin=0;

    jmin=0;

    imax=1;

    jmax=1;

 

    for (i=0; i<N-1; i++)

        for (j=i+1; j<N; j++)

        {

            z=sqrt(double((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j])));

            if (z > zmax)

            {

                imax=i;

                jmax=j;

                zmax=z;

            }

            if (z < zmin)

            {

                imin=i;

                jmin=j;

                zmin=z;

Выражения в С++. Приоритет операций. Последовательность выполнения операций