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

Автор работы: Пользователь скрыл имя, 12 Июня 2013 в 14:48, курсовая работа

Описание работы

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

Файлы: 1 файл

курсовая.doc

— 262.50 Кб (Скачать файл)

 

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

 

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

 

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

 

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;

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