Приоритет операций и ассоциативность




Т.Е. Мамонова

Лабораторная работа № 2

Математические операции в C++

Методические указания по выполнению лабораторных работ

по курсу «Информатика»

для студентов направлений 220000 – «Мехатроника и робототехника»,

220700 – «Автоматизация технологических процессов и производств».

 

Издательство

Томского политехнического университета

УДК 519.6

ББК 00000

А00

 

Мамонова Т.Е.

А00 Математические операции в C++. Методические указания по выполнению лабораторных работ по курсу «Информатика» для студентов I курса, обучающихся по направлениям 220000 – «Мехатроника и робототехника», 220700 – «Автоматизация технологических процессов и производств» / Т.Е. Мамонова. – Томск: Изд-во Томского политехнического университета, 2011. – 12 с.

УДК 519.6

ББК 00000

 

Методические указания рассмотрены и рекомендованы к изданию методическим семинаром кафедры интегрированных

компьютерных систем управления ИК

«2» сентября 2011 г.

 

Зав. кафедрой ИКСУ

доктор технических наук _________________ А.М. Малышенко

 

 

Председатель учебно-методической

комиссии _________________ В.Н. Шкляр

 

 

Рецензент

Доцент ИКСУ ИК НИ ТПУ кандидат технических наук

В.Н. Шкляр

 

© ГОУ ВПО «Томский политехнический

университет», 2011

© Мамонова Т.Е., 2011

© Оформление. Издательство Томского

политехнического университета, 2011

ЛАБОРАТОРНАЯ РАБОТА № 2

Математические операции в C++

Цель работы. Приобретение навыков выполнения математических операций на языке C++ в программе Borland C++.

 

Теоретическая часть

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

Списоквозможных операций достаточно обширен.

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

Пример 1.

int varl;

int var2=1;

varl=2*var2;

В этом примере объявлены две переменные, varl и var2. Переменной var2 присвоено начальное значение l, varl определена как результат удвоения переменной var2.

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

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

Унарными называются те операторы, которые имеют только один аргумент, например -а. Унарными математическими операторами являются +, -, ++ и --. А так же операции, представленные в табл. 1.

Пример 2.

int varl=10;

int var2=-varl;

Здесь в последнем выражении используется унарный оператор "-".

Оператор "минус" изменяет знак своего аргумента (в примере это varl) на противоположный. Положительные числа становятся отрицательными и наоборот. Оператор "плюс" знака аргумента не изменяет и фактически вообще ни на что не влияет.

Таблица 1. Унарные операции

Операция Описание
++ Увеличение на единицу: префиксная операция - увеличивает операнд до его использования, постфиксная операция увеличивает операнд после его использования.
-- Уменьшение на единицу: префиксная операция - уменьшает операнд до его использования, постфиксная операция уменьшает операнд после его использования.
sizeof вычисление размера (в байтах) для объекта того типа, который имеет операнд
- Унарный минус
+ Унарный плюс
& Получение адреса операнда
* Получение значения, находящегося по указанному адресу (разыменование)
new Выделение памяти
delete Освобождение памяти
(type) Преобразование типа

 

Операторы ++ и -- вы можете увидеть впервые. Они увеличивают или уменьшают на 1 значение аргумента и поэтому называются операторами инкремента и декремента (от англ. increment (увеличивать) и decrement (уменьшать)). К действительным переменным их применение недопустимо.

Пример 3.

int var=10; // Инициализация переменной

var++; //увеличение на 1; значение переменной равно

//11

Операторы инкремента и декремента могут находиться либо перед аргументом (префиксная форма), либо после него (постфиксная форма). В зависимости от способа записи, выполнение операторов инкремента и декремента имеет свои особенности.

Рассмотрим оператор инкремента (принципы работы оператора декремента те же). Предположим, что переменная n имеет значение 5. Оба способа применения к n оператора инкремента (++n и n++) приведут к результату 6. Разница между ними состоит в том, что значение n в выражении ++n равно 6, в то время как в выражении с постфиксной формой записи оно равно 5. Это можно проиллюстрировать следующим примером.

Пример 4.

//объявляем три целые переменные

int nl, n2, n3;

nl=5;

n2=++nl; //обе переменные – nl и n2 – получают

//значение 6

nl=5;

n3=nl++; // nl принимает значение 6, а n3 – 5

Другими словами, переменной n2 присваивается уже увеличенное префиксным оператором инкремента значение nl, тогда как переменной n3 передается еще не увеличенное постфиксным оператором значение nl.

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

Бинарными называются операторы, которые имеют два аргумента. В выражениях типа varl op var2 оператор op бинарный. Самыми распространенными бинарными операторами являются простые математические операции.

Бинарные операции, которые поддерживает C++, приведены в табл. 2.

Таблица 2. Бинарные операции

Операция Описание
Мультипликативные
* умножение операндов арифметического типа
/ деление операндов арифметического типа (если операнды целочисленные, то выполняется целочисленное деление)
% получение остатка от деления целочисленных операндов
Аддитивные
+ бинарный плюс (сложение арифметических операндов)
- бинарный минус (вычитание арифметических операндов)
Операции сравнения
< меньше, чем
<= меньше или равно
> больше
>= больше или равно
= равно
!= не равно
Результат выполнения операторов сравнения: "истина" – это "1" (точнее "не ноль") "ложно" – это "0" Значения, хранимые в переменных (в регистрах) х и у, НЕ изменяются! Берутся (считываются) значения хранящиеся (или содержащиеся) в переменных и сравниваются Тернарная операция

Тернарными называются операторы, которые имеют три аргумента.

К тернарным относится операция?: – условная операция, в ней используется три операнда: Выражение 1? Выражение 2: Выражение 3;

Первым вычисляется значение выражения 1. Если оно истинно, то вычисляется значение выражения 2, которое становится результатом. Если при вычислении выражения 1 получится 0, то в качестве результата берется значение выражения 3.

Пример 5.

x<0?-x:x; //вычисляется абсолютное значение x.

Оператор присваивания

Оператор присваивания (см. табл. 3) присваивает значение некоторой области памяти. Например, оператор

fleas=38;

присваивает целое число 38 области памяти, выделенной для переменной fleas. Знак = обозначает операцию присваивания. В языке С++ имеется одна необычная особенность: операцию присваивания можно использовать последовательно, т. е. следующий код программы будет действительным:

int steinway;

int baldwin;

int yamaha;

yamaha=baldwin=steinway=88;

Присваивание происходит в направлении справа налево.

Пример 6.

nVariable+=2; // значение переменной nVariable увеличено на 2.

Таблица 3. Операции присваивания

Операция Описание
= присваивание
*= умножение с присваиванием (мультипликативное присваивание)
/= деление с присваиванием
%= деление с остатком с присваиванием
+= сложение с присваиванием
-= вычитание с присваиванием

Анализ выражения

Самым распространенным видом инструкций в C++ является выражение. Выражением в C++ называют любую последовательность операторов (длиной не меньшеодного), которая возвращает значение. Все выражения типизированы. Тип выраженияопределяется типом возвращаемого значения. Например, значение выражения 1+2равняется 3, следовательно, это целочисленное выражение (тут нужно вспомнить, чтоконстанты без дробной части определяются как имеющие тип int). Синтаксическаяконструкция, включающая математический оператор, является выражением, так какв результате выполнения любой операции получается число.

Выражения бывают как сложными, так и крайне простыми. Необычной особенностью C++ является то, что он понимает под выражением любой законченный оператор. Поэтому корректным оператором является, например, 1;. Он тоже представляет собой выражение, потому что его значение 1, а тип int.

В операторе

z = х*у+w;

можно выделить пять выражений:

х*у+w

х*у

x

y

w

Необычный аспект C++ состоит в том, что выражение само по себе является завершенной инструкцией, т.е. упомянутое выражение 1; – завершенная инструкция C++.

Также следует знать, что пара арифметических выражений, объединенная операцией сравнения, называется отношением. Если отношение имеет ненулевое значение, то оно – истинно, иначе – ложно.

Приоритет операций и ассоциативность

Все операторы выполняют определенные функции. Чтобы установить порядок выполнения различных операторов, им назначены приоритеты (см. табл. 4). Рассмотрим выражение

int var = 2*3+1;

Если сложение выполнить перед умножением, то значением выражения будет 2*4=8.

Если сперва выполнить умножение, то получим значение 6+1=7.

 

Таблица 4. Приоритеты операций.

Ранг Операции
  () [ ] ->.
  ! ~ - ++ -- & * (тип) sizeof тип()
  * / % (мультипликативные бинарные)
  + - (аддитивные бинарные)
  < > <= >= (отношения)
  ==!= (отношения)
  && (конъюнкция «И»)
  || (дизъюнкция «ИЛИ»)
  ?: (условная операция)
  = *= /= %= -= &= ^= |= <<= >>= (операция присваивания)
  , (операция запятая)

 

Приоритеты операций определяют порядок выполнения вычислений. Из табл. 4. видно, что приоритет операции умножения выше, чем сложения, т.е. результат все же равен 7 {приоритеты используются и в арифметике, и C++ следует именно им).

А что происходит, когда в одном выражении используется два оператора с одинаковым приоритетом?

int var=8/4/2;

Как в этом случае следует поступить: сначала 8 поделить на 2 или 2 на 4? Если в одном выражении присутствуют операции с одинаковыми приоритетами, они выполняются слева направо (то же правило применяется и в арифметике). Поэтому в предыдущем примере сначала делим 8 на 4, получая 2, а затем делим его на 2, получая ответ – 1.

В выражении

х/100+32

х делится на 100 и к результату добавляется 32. Но что, если программисту нужно поделить х на сумму 100 и 32? В таком случае ему придется использовать скобки:

х/(100+32)

При вычислении такого выражения х будет делиться на 132.

Заметим, что начальное выражение

х/100+32

идентично следующему:

(х/100)+32

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

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

Варианты заданий к лабораторной работе №2

Задание: определить тип заданных выражений и найти их значения. Составить систему тестов и вычислить полученное выражение для нескольких значений n и m, определить при каких n и m выражение не может быть вычислено.

При выполнении заданий на сравнения, использовать тернарную операцию.

Вариант 1.

1) n+(++m)

2) m-->n

3) n-->m

Вариант 2.

1) n/m++

2) m++<--n

3) (m/n)++<n/m

Вариант 3.

1) ++n*++m

2) m++<n

3) n++>m

Вариант 4.

1) m--n

2) m++<n

3) n++>m

Вариант 5.

1) n++*m

2) n++<m

3) --m>n

Вариант 6.

1) --m-n++

2) m*m<n++

3) n-->++m

Вариант 7.

1) m-++n

2) m++>--n

3) m--<++n

Вариант 8.

1) m+--n

2) m++<--n

3) --m>n--

Вариант 9.

1) m++/n--

2) ++m<n--

3) n-->m

Вариант 10.

1) m/--n++

2) m/n<n--

3) m+n++>n+m

Вариант 11.

1) (n++)+m--

2) n*m<n++

3) n-->++m

Вариант 12.

1) n++*m

2) m--<n

3) ++m>n

Вариант 13.

1) (n++/--m)++

2) ++m<n--

3) --m>++n

Вариант 14.

1) n++*--m

2) n--<m++

3) --n>--m

Вариант 15.

1) n++/--m

2) n-->n/m++

3) m<n++

Содержание отчета

· цель работы;

· задание;

· код программы;

· блок-схема;

· результаты работы программы;

· выводы по работе.

Список литературы

1. Ален И. Голуб. Правила программирования на Си и Си++. Пер. с англ.: – М.: Вильямс, 2001. – 241 с.

2. Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб.: Питер, 2010.

3. Прата С. Язык программирования С++. Лекции и упражнения. СПб.: Питер, 2003. – 645 с.

 

Учебное издание

 

МАМОНОВА Татьяна Егоровна

МАТЕМАТИЧЕСКИЕ ОПЕРАЦИИ В С++

Методические указания по выполнению лабораторных работ

по курсу «Информатика» для студентов I курса, обучающихся по направлениям 220000 – «Мехатроника и робототехника»,

220700 – «Автоматизация технологических процессов и производств».

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-29 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: