Else // иначе ( a не равно x )

ОПЕРАЦИИ И ОПЕРАНДЫ

6.1 ОПЕРАЦИИ НАД ОПЕРАНДАМИ ПРОСТЫХ ТИПОВ

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

Операция (operation) — действие, выполняемое над операндами. Каждая операция обозначается определенным знаком. Например, сложение обозначается знаком +, деление — знаком /, взятие адреса — знаком &.

Операнд (operand) — часть команды, определяющая аргумент, над которым выполняется операция. Операндами являются данные и результаты операции. В качестве операндов используются переменные, константы, вызовы функций.

Выражение (expression) — конструкция языка (формула) для вычисления значения в соответствии со значениями операндов. Значение выражения вычисляется путем выполнения операций над операндами в порядке, соответствующем приоритету операций.

В зависимости от количества операндов (один или два), различают унарные (unary operation) и бинарные (binary operation) операции. Например, изменение знака числа является унарной операцией, а умножение двух чисел — бинарной.

Приоритет операций (operation precedence) — очередность выполнения операций в выражении. Например, в арифметическом выражении сначала выполняются операции умножения и деления, затем—сложения и вычитания.

 

6.2 АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ

В табл. 6.1 приводятся все арифметические операции, их обозначение в программе, а также примеры с пояснениями.

Таблица 6.1. Арифметические операции

Операция Знак Пример Пояснения
Сложение + j =i+2; Устанавливает j, равным i плюс 2
Вычитание - j = i - 5; Устанавливает j, равным i минус 5
Умножение * у = х * 2; Устанавливает у, равным х умноженное на 2
Деление / z = х / 5; Устанавливает z, равным х деленным на 5
Деление по модулю % j = i % 3; Устанавливает j, равным остатку от деления i на 3

Инкремент

++

++i;

Устанавливает i, равным i плюс 1

i++;

Декремент

- -

- -i;

Устанавливает i, равным i минус 1

i - -;

 

6.3 ИНКРЕМЕНТ И ДЕКРЕМЕНТ

Инкремент увеличивает значение своего операнда на 1, а декремент его уменьшает на 1. Существует два способа записи этих операторов: префиксная (знак операции ставится перед операндом) и постфиксная (знак ставится после операнда).

При префиксной форме записи сначала над операндом производится действие, а затем он используется.

При постфиксной форме — сначала операнд используется, а затем выполняется действие.

В листинге 6.1 показаны примеры префиксной и постфиксной форм записи инкремента и декремента

Листинг 6.1.

 

int i = 2;

cout << ++i << ehdl; // выводится 3

cout <<i++<< endl; // выводится 3

cout << i << endl; // выводится 4

cout << i -- << endl; // выводится 4

cout << i << endl; // выводится 3

cout << --i <<endl; // выводится 2

 

6.4 АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ С ПРИСВАИВАНИЕМ

 

Значением выражения, стоящего с правой стороны от знака присваивания =, является значение левого операнда после присваивания.

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

В табл. 6.2 приводится перечень и обозначение арифметических операций! с замещением. Для каждой операции дается пример с пояснением.

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

 

Название Знак Пример Пояснения
Присваивание = y = х; Присваивание значения х переменной у
Сложение с замещением += y+= 2; Увеличение переменной у на 2
Вычитание с замещением -= j-= 5; Уменьшение переменной j на 5
Умножение с замещением *= y*= 7; Увеличение переменной у в 7 раз
Деление с замещением / = z /= 5; Уменьшение переменной z в 5 раз
Деление по модулю с замещением % = i %= 3; Устанавливает i, равным остатку от деления i на 3

 

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

Таблица 6.3. Альтернативная запись арифметических операций с замещением

 

Знак Операция с замещением Альтернативная запись
+= i += 2; i = i + 2;
-= j -= 5; j=j-5;
*= х *= х; x = x * х;
/= у /= 0.5; у = у / 0.5;
%= m %= 7; m = m % 7;

 

6.5 ОПЕРАЦИИ ОТНОШЕНИЯ

 

Операции отношения сравнивают между собой два значения. Сравнение устанавливает одно из трех возможных отношений между выражениями: равенство, больше или меньше.

Значением выражений, содержащих операции отношения или логические операции, является истина (true) или ложь (false).

В табл. 6.4 дается название операций, их обозначение в программе и приводятся пояснения о значении, которое может являться результатом операции отношения (листинг 6.2).

Таблица 6.4. Операции отношения

Название Знак Пояснения
Равенство == Истина, если операнды равны, иначе — ложь
Неравенство != Истина, если операнды не равны, иначе — ложь
Меньше < Истина, если левый операнд меньше правого, иначе—ложь
Больше > Истина, если левый операнд больше правого, иначе —ложь
Меньше или равно <= Истина, если левый операнд меньше или равен правому, иначе—ложь
Больше или равно >= Истина, если левый операнд больше или равен правому, иначе — ложь

 

Листинг 6.2.

 

int n = 5;

cout << (n==5)<< ehdl; // выводится 1

cout << (n!=5)<< endl; // выводится 0

cout << (n<5) << endl; // выводится 0

cout << (n>5) << endl; // выводится 0

cout << (n>=5)<< endl; // выводится 1

cout << (n<=5)<< endl; // выводится 1

cout << ((n+2)<=5)<< endl; // выводится 0

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

 

6.6 ЛОГИЧЕСКИЕ ОПЕРАЦИИ

 

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

К логическим операциям (табл. 6.5) относятся: отрицание, конъюнкция и дизъюнкция. Операция логического отрицания — унарная операция и требует одного операнда. Конъюнкция и дизъюнкция являются бинарными операциями, результат этих операций зависит от значений обоих операндов (листинг 6.3).

Таблица 6.5. Логические операции

 

Название Знак Пояснения
Отрицание ! Значение операнда меняется на противоположное
Конъюнкция && Истина, если оба операнда истинны, иначе—ложь
Дизъюнкция II Истина, если хотя бы один из операндов истинен, иначе — ложь

 

< Примечание >

Логические операции используются совместно с операциями отношений в ус­ловных операторах для организации разветвлений в программе. Значения опе­рандов при вычислении результатов отношений или логических операций не изменяются.

 

int n = 5, j = 0; // объявление переменных с инициализацией

cout «! (n == 5) «endl;          // выводится О

cout «(n >= 5 && n < 100) «endl;    // выводится 1
cout «(n > 5 || n < 7) «endl;      // Выводится 1

cout «!j «endl;                        // выводится 1

В первой строке объявляются две целочисленные переменные n и j, которые инициализируются при объявлении значениями 5 и 0 соответственно.

Во второй строке сначала вычисляется значение операции отношения n == 5, которое равно истине. Логическая операция отрицания истины дает ложь.

В третьей строке проверяется вхождение переменной n в диапазон от 5 до 99 при помощи отношений n >= 5 и n < 100. В результате вычисления значений этих отношений получатся два истинных ответа. Результатом конъюнкции этих отношений так же будет истина.

Далее проверяется дизъюнкция отношений n > 5 и n < 7. Первое отношение ложно, а второе истинно. Следовательно, их дизъюнкция тоже истинна.

В последней строке выводится результат отрицания нулевого значения переменной j. Результат очевиден.


ОПЕРАТОРЫ

Оператор (statement) представляет собой установленное синтаксисом языка базовое действие в программе. При выполнении оператора производится некоторое действие. В C++ любое выражение, которое заканчивается символом точки с запятой, является оператором.

 

 

7.1 ОПЕРАТОР-ВЫРАЖЕНИЕ

К операторам-выражениям относятся следующие: оператор присваивания, оператор вызова функции и пустой оператор.

Формат оператора присваивания имеет вид:

идентификатор = выражение;

Например,

z = х + у;

 

Формат оператора вызова функции:

имя_функции (аргумент 1,... аргументы);

Например,

func (х, 5);

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

7.1 СОСТАВНОЙ ОПЕРАТОР

Составной оператор (блок) состоит из одного или большего числа операторов любого типа, заключенных в фигурные скобки. После закрывающейся фигурной скобки не должно быть точки с запятой. Если в блоке только один оператор, скобки не обязательны. Если в блоке два и больше операторов, наличие фигурных скобок является обязательным. Например,

{ z = func (x, у); z *= z;}

{ cout «j; cout «endl; ++j; }

< Примечание >

Все операторы C++ имеют свои строгие правила написания. Если правила бу­дут нарушены, компилятор сообщит об ошибке.

 

7.2 УСЛОВНЫЙ ОПЕРАТОР   IF

 

Формат оператора:

if (выражение)
оператор
       

Если выражение истинно, то выполняется оператор. Если выражение ложно, программа ничего не делает (листинг 7.1). Логическая схема оператора показана на рис. 7.1.

 

 

 


ДА                                                НЕТ

 

 

Рис. 7.1 Схема условного оператора if

 

Листинг 7.1. Пример использования оператора if

 

if (a == x) // если a равно x,

temp = a; // то temp получает значение a

if (! с) // если отрицание с истина,

{

temp = x; // то temp получает значение x

x = y; // x получает значение y

y = temp; // y получает значение temp

}

 

 

Схема использования оператора if из листинга 7.1 показана на рис.7.2

 


< Примечание >

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

 

7.3 УСЛОВНЫЙ ОПЕРАТОР IF ELSE

Формат оператора;



If (выражение)

Оператор1

Else

Оператор2

Если выражение истинно, то выполняются оператор1, и управление передается на оператор, который следует за оператором2. Если выражение ложно, то выполняется оператор2, и управление передается на следующий за ним оператор (листинг7.2).

Логическая схема оператора показана на рис. 7.3.

 

 

 

 


ДА                                              НЕТ

 

 

Рис. 7.3 Схема условного оператора if else

 

 

Листинг 7.2. Пример использования оператора if else.

(Схема листинга показана на рис. 7.4)

 

if (a == x) // если a равно x,

temp = a; // то temp получает значение a


else // иначе (a не равно x)

temp = -a; // temp получает значение —a

if (k >= M && k <= N) // если k Î (N, M),

{

++k; // то k увеличивается на единицу,

x *= k; // x умножается на k

}

else x /= k; // иначе k Ï (N, M) x делится на k

 

7.4 ОПЕРАТОР ЦИКЛА WHILE

Формат оператора;

While (выражение)

Оператор_цикла

Сначала вычисляется выражение. Если это выражение истинно, то тогда выполняется оператор цикла и управление переходит обратно к началу цикла while. Оператор будет выполняться до тех пор; пока выражение не станет ложным.

Если выражение ложно, то управление передается следующему оператору

Логическая схема оператора показана на рис 7.5., пример показан на листинге 7.3

 

 

 


                              Да                                                                         Нет

 

 

Рис. 7.5 Логическая схема оператора цикла while

 

Листинг 7.3. Пример использования оператора while

static const int N = 10;

int x = 1, sum = 0;

while (x < N + 1) // пока x < 11

{

sum += x; // sum увеличивается на x

++x; // x увеличивается на единицу

}

cout << sum << endl; // выводится 55

 

 

 


ДА                                           НЕТ

 

 

Рис. 7.5 Схема листинга 7.3

В цикле накапливается сумма целых чисел. Цикл повторится 10 раз. Значение первого числа х = 1 задается до начала цикла. Переменная sum инициируется значением 0. При каждом проходе цикл while увеличивает значение sum на текущее значение х

sum += х;,

затем увеличивает переменную х на 1 оператором инкрементирования

++x;

После того как значение х станет равным 11, выражение

(х < N + 1)

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

< Примечание >

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

 




Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: