Порядок вычисления выражений




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

Тема: Операции и выражения. Целочисленная арифметика.

Цель работы: Правила формирования и вычисления выражений в языке Си. Все операции языка.

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

Выражения

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

X * 12 + Y // значение X умножить на 12 и к результату прибавить значение Yval < 3 // сравнить значение val с 3-9 // константное выражение -9

Выражение, после которого стоит точка с запятой – это оператор-выражение. Его смысл состоит в том, что компьютер должен выполнить все действия, записанные в данном выражении, иначе говоря, вычислить выражение.

x + y – 12; // сложить значения x и y и затем вычесть 12a = b + 1; // прибавить единицу к значению b и запомнить результат в переменной a

Выражения – это переменные, функции и константы, называемые операндами, объединенные знаками операций. Операции могут быть унарными – с одним операндом, например, минус; могут быть бинарные – с двумя операндами, например сложение или деление. В Си есть даже одна операция с тремя операндами — условное выражение. Чуть позже мы приведем список всех операций языка Си для встроенных типов данных. Подробно каждая операция будет разбираться при описании соответствующего типа данных. Кроме того, ряд операций будет рассмотрен в разделе, посвященном определению операторов для классов. Пока что мы ограничимся лишь общим описанием способов записи выражений.

В типизированном языке, которым является Си, у переменных и констант есть определенный тип. Есть он и у результата выражения. Например, операции сложения (+), умножения (*), вычитания (-) и деления (/), примененные к целым числам, выполняются по общепринятым математическим правилам и дают в результате целое значение. Те же операции можно применить к вещественным числам и получить вещественное значение.

Операции сравнения: больше (>), меньше (<), равно (==), не равно (!=) сравнивают значения чисел и выдают логическое значение: истина (true) или ложь (false).

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

Присваивание – это тоже операция, она является частью выражения. Значение правого операнда присваивается левому операнду.

x = 2; // переменной x присвоить значение 2cond = x < 2;// переменной cond присвоить значение 1 (true), если x меньше 2, // в противном случае присвоить значение 0 (false)3 = 5; // ошибка, число 3 неспособно изменять свое значение

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

int x = 0;x = 3;x = 4;x = x + 1;

вначале объявляется переменная x с начальным значением 0. После этого значение x изменяется на 3, 4 и затем 5. Опять-таки, обратим внимание на последнюю строчку. При вычислении операции присваивания сначала вычисляется правый операнд, а затем левый. Когда вычисляется выражение x + 1, значение переменной x равно 4. Поэтому значение выражения x + 1 равно 5. После вычисления операции присваивания (или, проще говоря, после присваивания) значение переменной x становится равным 5.

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

z = (x = y + 3);

В приведенном примере переменным x и z присваивается значение y + 3.

Очень часто в программе приходится значение переменной увеличивать или уменьшать на единицу. Для того чтобы сделать эти действия наиболее эффективными и удобными для использования, применяются предусмотренные в Си специальные знаки операций: ++ (увеличить на единицу) и -- (уменьшить на единицу). Существует две формы этих операций: префиксная и постфиксная. Рассмотрим их на примерах.

int x = 0;++x;

Значение x увеличивается на единицу и становится равным 1.

--x;

Значение x уменьшается на единицу и становится равным 0.

int y = ++x;

Значение x опять увеличивается на единицу. Результат операции ++ — новое значение x, т.е. переменной y присваивается значение 1.

int z = x++;

Здесь используется постфиксная запись операции увеличения на единицу. Значение переменной x до выполнения операции равно 1. Сама операция та же — значение x увеличивается на единицу и становится равным 2. Однако результат постфиксной операции — это значение аргумента до увеличения. Таким образом, переменной z присваивается значение 1. Аналогично, результатом постфиксной операции уменьшения на единицу является начальное значение операнда, а префиксной – его конечное значение.

Подобными мотивами оптимизации и сокращения записи руководствовались создатели языка Си (а затем и Си++), когда вводили новые знаки операций типа "выполнить операцию и присвоить". Довольно часто одна и та же переменная используется в левой и правой части операции присваивания, например:

x = x + 5;y = y * 3;z = z – (x + y);

В Си эти выражения можно записать короче:

x += 5;y *= 3;z -= x + y;

Т.е. запись oper= означает, что левый операнд вначале используется как левый операнд операции oper, а затем как правый операнд операции присваивания результата операции oper. Кроме краткости выражения, такая запись облегчает оптимизацию программы компилятором.

Все операции языка Си

Наряду с общепринятыми арифметическими и логическими операциями, в языке Си имеется набор операций для работы с битами – поразрядные И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ и НЕ, а также сдвиги.

Особняком стоит операция sizeof. Эта операция позволяет определить, сколько памяти занимает то или иное значение. Например:

sizeof(long); // сколько байтов занимает тип long sizeof (b); // сколько байтов занимает переменная b

Операция sizeof в качестве аргумента берет имя типа или выражение. Аргумент заключается в скобки (если аргумент – выражение, скобки не обязательны). Результат операции – целое число, равное количеству байтов, которое необходимо для хранения в памяти заданной величины.

Ниже приводятся все операции языка Си++.

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

+ сложение- вычитание* умножение/ деление

Операции сложения, вычитания, умножения и деления целых и вещественных чисел. Результат операции – число, по типу соответствующее большему по разрядности операнду. Например, сложение чисел типа short и long в результате дает число типа long.

% остаток

Операция нахождения остатка от деления одного целого числа на другое. Тип результата – целое число.

- минус+ плюс

Операция "минус" – это унарная операция, при которой знак числа изменяется на противоположный. Она применима к любым числам со знаком. Операция "плюс" существует для симметрии. Она ничего не делает, т.е. примененная к целому числу, его же и выдает.

++ увеличить на единицу, префиксная и постфиксная формы-- уменьшить на единицу, префиксная и постфиксная формы

Эти операции иногда называют "автоувеличением" (инкремент) и "автоуменьшением" (декремент). Они увеличивают (или, соответственно, уменьшают) операнд на единицу. Разница между постфиксной (знак операции записывается после операнда, например x++) и префиксной (знак операции записывается перед операндом, например --y) операциями заключается в том, что в первом случае результатом является значение операнда до изменения на единицу, а во втором случае – после изменения на единицу.

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

== равно!= не равно< меньше> больше<= меньше или равно>= больше или равно

Операции сравнения. Сравнивать можно операнды любого типа, но либо они должны быть оба одного и того же встроенного типа (сравнение на равенство и неравенство работает для двух величин любого типа), либо между ними должна быть определена соответствующая операция сравнения. Результат – логическое значение true или false.

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

&& логическое И|| логическое ИЛИ! логическое НЕ

Логические операции конъюнкции, дизъюнкции и отрицания. В качестве операндов выступают логические значения, результат – тоже логическое значение true или false.

Битовые операции

& битовое И| битовое ИЛИ^ битовое ИСКЛЮЧАЮЩЕЕ ИЛИ~ битовое НЕ

Побитовые операции над целыми числами. Соответствующая операция выполняется над каждым битом операндов. Результатом является целое число.

<< сдвиг влево>> сдвиг вправо

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

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

операнд1?операнд2:операнд3

Тернарная операция; если значение первого операнда – истина, то результат – второй операнд; если ложь – результат – третий операнд. Первый операнд должен быть логическим значением, второй и третий операнды могут быть любого, но одного и того же типа, а результат будет того же типа, что и третий операнд.

Последовательность

, последовательность

Выполнить выражение до запятой, затем выражение после запятой. Два произвольных выражения можно поставить рядом, разделив их запятой. Они будут выполняться последовательно, и результатом всего выражения будет результат последнего выражения.

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

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

Присвоить значение правого операнда левому. Результат операции присваивания – это значение правого операнда.

+=, -=, *=, /=, %=, |=, &=, ^=, <<=, >>= выполнить операцию и присвоить

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

Порядок вычисления выражений

У каждой операции имеется приоритет. Если в выражении несколько операций, то первой будет выполнена операция с более высоким приоритетом. Если же операции одного и того же приоритета, они выполняются слева направо.

Например, в выражении

2 + 3 * 6

сначала будет выполнено умножение, а затем сложение, соответственно, значение этого выражения — число 20.

В выражении

2 * 3 + 4 * 5

сначала будет выполнено умножение, а затем сложение. В каком порядке будет производиться умножение – сначала 2 * 3, а затем 4 * 5 или наоборот, не определено. Т.е. для операции сложения порядок вычисления ее операндов не задан.

В выражении

x = y + 3

вначале выполняется сложение, а затем присваивание, поскольку приоритет операции присваивания ниже, чем приоритет операции сложения.

Для данного правила существует исключение: если в выражении несколько операций присваивания, то они выполняются справа налево. Например, в выражении

x = y = 2

сначала будет выполнена операция присваивания значения 2 переменной y. Затем результат этой операции – значение 2 – присваивается переменной x.

Ниже приведен список всех операций в порядке понижения приоритета. Операции с одинаковым приоритетом выполняются слева направо (за исключением нескольких операций присваивания).

:: (разрешение области видимости имен)

. (обращение к элементу класса), -> (обращение к элементу класса по указателю), [] (индексирование), вызов функции, ++ (постфиксное увеличение на единицу), -- (постфиксное уменьшение на единицу), typeid (нахождение типа), dynamic_cast static_cast reinterpret_cast const_cast (преобразования типа)

sizeof (определение размера), ++ (префиксное увеличение на единицу), -- (префиксное уменьшение на единицу), ~ (битовое НЕ),! (логическое НЕ), – (изменение знака), + (плюс), & (взятие адреса), * (обращение по адресу), new (создание объекта), delete (удаление объекта), (type) (преобразование типа)

.*, ->* (обращение по указателю на элемент класса)

* (умножение), / (деление), % (остаток)

+ (сложение), – (вычитание)

<<, >> (сдвиг)

< <= > >= (сравнения на больше или меньше)

==!= (равно, неравно)

& (поразрядное И)

^ (поразрядное исключающее ИЛИ)

| (поразрядное ИЛИ)

&& (логическое И)

|| (логическое ИЛИ)

= (присваивание), *= /= %= += -= <<= >>= &= |= ^= (выполнить операцию и присвоить)

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

, (последовательность)

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

(2 + 3) * 6

будет 30.

Скобки могут быть вложенными, соответственно, самые внутренние выполняются первыми:

(2 + (3 * (4 + 5)) – 2)

Задание.

Вариант 1.

Задание 1.

В трехзначном числе Х зачеркнули его последнюю цифру. Когда в оставшимся двузначном числе переставили цифры, а затем приписали к ним слева последнюю цифру числа Х, то получили число У. По заданному числу У найти число Х (значение У вводится с клавиатуры, 100≤Y≤999).

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 2.

Задание 1.

Задание 2. (20)

Из трехзначного числа Х вычли его последнюю цифру. Когда результат разделили на 10, а к частному слева приписали последнюю цифру числа Х, то получилось число У. По заданному числу У найти число Х (значение У вводится с клавиатуры, 100≤Y≤999).

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

 

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

Задание 4.

Вариант 3.

Задание 1.

Задание 2. Из трехзначного числа Х вычли его последнюю цифру. Когда результат разделили на 10, а к частному слева приписали последнюю цифру числа Х, то получилось число N. По заданному числу N найти число Х (значение N вводится с клавиатуры, 100≤Y≤999 и при этом число десятков в N не равно нулю).

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 4.

Задание 1.

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 5.

Задание 1. В трехзначном числе Х зачеркнули его вторую цифру. Когда к образованному при этом двузначному числу справа приписали вторую цифру числа Х, то получилось число N. По заданному числу N найти число Х (значение N вводится с клавиатуры, 100≤Y≤999).

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 6.

Задание 1.

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 7.

Задание 1. В трехзначном числе Х зачеркнули его вторую цифру. Когда к образованному при этом двузначному числу слева и справа приписали вторую цифру числа Х, то получилось число N. По заданному числу N найти число Х (значение N вводится с клавиатуры, 1000≤Y≤9999)

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 8.

Задание 1. В трехзначном числе Х зачеркнули его вторую цифру. Когда к образованному при этом двузначному числу слева приписали вторую цифру числа Х, то получилось число N. По заданному числу N найти число Х (значение N вводится с клавиатуры, 100≤Y≤999)

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 9.

Задание 1.

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 10.

Задание 1.

Задание 2. В трехзначном числе Х зачеркнули его первую цифру. Когда оставшееся число умножили на 10, а произведение сложили с первой цифрой числа, то получилось число N. По заданному числу N найти число Х (значение N вводится с клавиатуры, 100≤Y≤999)

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 11.

Задание 1.

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 12.

Задание 1.

Задание 2. Записать на языке программирования следующие логические выражения и вычислить их значения при разных значениях переменных:

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 13.

Задание 1.

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 14.

Задание 1.

Задание 2.

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

Задание 4.

Вариант 15.

Задание 1.

Задание 2.

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

Задание 4.

Вариант 16.

Задание 1.

Задание 2.

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

Задание 4.

Вариант 17.

Задание 1.

Задание 2.

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

Задание 4.

Вариант 18.

Задание 1.

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

 

Задание 4.

Вариант 19.

Задание 1.

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 20.

Задание 1.

Задание 2. В трехзначном числе Х зачеркнули его первую цифру. Когда полученное число умножили на 10, а произведение сложили с первой цифрой, то получилось число N. По заданному числу N найти число Х (значение N вводится с клавиатуры, 100≤Y≤999)

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 21.

Задание 1.

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 22.

Задание 1.

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 23.

Задание 1.

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 24.

Задание 1.

Задание 2. В трехзначном числе Х зачеркнули его вторую цифру. Когда к образованному при этом двузначному числу слева приписали вторую цифру числа Х, то получилось число N. По заданному числу N найти число Х (значение N вводится с клавиатуры, 100≤Y≤999)

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.

Вариант 25.

Задание 1.

Задание 2.

Задание 3. Написать программу, позволяющую вывести на экран значения следующих логических выражений (значения для переменных вводятся с клавиатуры):

Задание 4.



Поделиться:




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

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


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