Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТ...docx
Скачиваний:
12
Добавлен:
21.09.2019
Размер:
695.51 Кб
Скачать

5. Присваивание и выражения

5.1 Краткая форма записи операторов присваивания

В программах часто встречаются операторы присваивания, в которых

справа стоит выражение, модифицирующее текущее значение переменной,

например:

number = number + 1;

Переменным часто присваиваются значения, вычисленные на основе

их старых значений. Поэтому в Си++ была введена краткая форма записи

для подобных операторов присваивания. Любую из операций "+"

(сложение), "-" (вычитание), "*" (умножение), "/" (деление) и "%" (остаток от

деления нацело) можно указать в качестве префикса оператора

присваивания ("=") (cм. следующую __________таблицу).

Пример:

number += 1;

total -= discount;

Эквивалентное выражение:

number = number + 1;

total = total - discount;

bonus *= 2;

time /= rush_factor;

change %= 100;

amount *= count1 + count2;

bonus = bonus * 2;

time = time / rush_factor;

change = change % 100;

amount = amount * (count1 + count2);

Первый пример допускает еще более краткую запись с помощью

оператора инкремента "++":

number++;

Оператор "++" существует и в префиксной форме:

++number;

Постфиксная и префиксная форма записи имеют важное различие,

которое необходимо помнить. Префиксный оператор применяется ДО

вычисления остальной части выражения, а постфиксный – ПОСЛЕ.

Например, после выполнения операторов

x = 4;

y = x++;

переменная "x" получит значение 5, а "y" – значение 4. В случае операторов

x = 4;

y = ++x;

обе переменные получат значение 5. Это объясняется тем, что "++x"

выполняется до того, как значение "x" будет использовано в выражении, а

"x++" – после. В Си++ существует аналогичный оператор декремента "--",

уменьшающий значение переменной на 1, и у него тоже есть префиксная и

постфиксная форма.

Вообще, выражение с оператором присваивания имеет значение,

равное значению левой части после выполнения присваивания. Ниже

приведено выражение, соответствующее правилам Си++, которое можно

использовать для проверки условия:

(y = ++x) == 5

Это выражение означает следующее: "после присвоения переменной

y инкрементированного значения x проверить__________, не равно ли значение y числу

5".

5.2 Логические выражения и операторы

Интуитивно логические выражения наподобие "2<7", "1.2!=3.7" и "6>=9"

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

"истинными (true)" или "ложными (false)" (операция "!=" означает "не равно").

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

сложное выражение с помощью логических операций "&&" ("И"), "||" ("ИЛИ") и

"!" ("НЕ")

Выражение:

(6 <= 6) && (5 < 3)

(6 <= 6) || (5 < 3)

(5 != 6)

(5 < 3) && (6 <= 6) || (5 != 6)

(5 < 3) && ((6 <= 6) || (5 != 6))

!((5 < 3) && ((6 <= 6) || (5 != 6)))

Истинно или ложно:

false

true

true

true

false

true

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

приоритет операции "&&" выше, чем у "||". Приоритет (порядок выполнения)

различных операций Си++ можно узнать в учебнике или руководстве по

языку Си++. Если у вас возникают сомнения относительно приоритета

операций, применяйте круглые скобки (). Применение этих скобок облегчает

чтение программ.

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

условий в операторах if и в циклах for. Например:

...

...

if ( total_test_score >= 50 && total_test_score < 65 )

cout << "Вы прошли тест со средним результатом.\n";

...

...

У логических выражений в Си++ есть еще одно важное свойство. В

Си++ истинное значение ("true") представляется в виде целого числа 1

(большинство компиляторов любое положительное число считают

истинным значением), а ложное значение ("false") в виде значения 0. Это

может привести к ошибкам. Например, легко напечатать "=" вместо "==".

Поэтому фрагмент

...

...

if ( number_of_people = 1 )

cout << "Есть только один человек.\n";

...

...

всегда будет печатать сообщение "Есть только один человек", даже если до

оператора if переменная "number_of_people" была больше 1.