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

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

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

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

number = number + 1;

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

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

торов присваивания. Любую из операций "+" (сложение), "-" (вычитание), "*" (умно-

жение), "/" (деление) и "%" (остаток от деления нацело) можно указать в качестве

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

Пример:

number += 1;

total -= discount;

bonus *= 2;

time /= rush_factor;

change %= 100;

amount *= count1 + count2;

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

number = number + 1;

total = total - discount;

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, и у него тоже есть префиксная и постфиксная форма.

27

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

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

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

(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

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

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

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

системе Visual C++ (тема Operator Precedence). Если у вас возникают сомнения отно-

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

скобок облегчает чтение программ.

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

операторах 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.

28

Сводка результатов

В данной лекции довольно подробно рассматривались переменные языка Си++.

У переменных всегда есть определенный тип данных. Переменные применяются для

временного или постоянного хранения значений разных типов. Значения переменным

можно присваивать различными способами. В выражениях для вычисления новых

значений переменных можно использовать различные арифметические и логические

операции.

Упражнения

Упражнение 1

Для преобразования температуры из шкалы Цельсия в абсолютную шкалу тем-

ператур (шкалу Кельвина) надо добавить к температуре по Цельсию значение 273.15.

В шкалу Фаренгейта температура по Цельсию преобразуется t = 1.8 t o + 32 f.

Напишите программу преобразования значений температуры, которая будет

печатать на экране следующую таблицу:

Цельсий Фаренгейт Абсолютная температура

0 32.00 273.15

20 68.00 293.15

40 104.00 313.15

.........

.........

300 572.00 573.15

Упражнение 2

Измените программу из упражнения 1 так, чтобы она запрашивала у пользова-

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

в первой и последней строках таблицы. Программа также должна запросить шаг из-

менения температуры (на это значение должны отличаться температуры в соседних

строках таблицы, в упражнении 1 шаг был равен 20-ти градусам).

Перед таблицей программа должна вывести несколько строк с пояснением сво-

их действий, а также повторить вывод на экран введенных пользователем данных.

Упражнение 3

Напишите программу, которая считывает с клавиатуры символ (ch) и затем вы-

водит одно из следующих сообщений (вместо ch должен выводиться введенный сим-

вол, а вместо... – соответствующая прописная или строчная буква):

а) если символ ch является 2ь строчной буквой – сообщение "Букве ch соответст-

вует прописная буква...",

б) если ch является прописной буквой – сообщение "Букве ch соответствует

строчная буква...",

в) если ch не является буквой – сообщение "Символ ch не является буквой".

Для составления необходимых условий обратитесь к расширенной таблице

символов ASCII (см. п.8.3).

Упражнение 4

Напишите программу для возведения произвольного числа x в положительную

степень n с помощью цикла for. (Есть ли способы повышения эффективности вашей

программы?)

29

Приложения

8.1 Служебные слова Си++

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

групп. Ниже перечислены эти группы и относящиеся к ним слова. Полужирным

шрифтом выделены слова, назначение которых вы узнаете в данном вводном курсе.

• Типы данных (определяют типы данных, которые можно хранить в памяти

компьютера).

char short int long (целые числа)

enum (тип "перечисление")

double float (вещественные числа)

Void

struct union typedef (типы, определяемые

пользователем)

• Модификаторы типов данных (позволяют задать некоторые свойства хране-

ния данных в памяти).

Signed unsigned

volatile register

const static extern auto

• Управление порядком выполнения операторов.

if else (ветвление с двумя вариантами)

switch case default (множественное ветвление)

for while do (циклы)

Break continue

return (возврат из функции)

goto (безусловный переход)

• Динамическое распределение памяти.

New delete

• Объектно-ориентированное программирование (эти слова будут подробно

рассматриваться в отдельном курсе объектно-ориентированного програм-

мирования и проектирования).

class private protected public

virtual this friend template

operator

• Обработка исключений (особый механизм обработки ошибок в объектно-

ориентированных программах).

try throw catch

• Разное.

sizeof inline asm

30

8.2 Таблица символов ASCII

8.3 Расширенная таблица символов ASCII для кодовой страницы DOS-866

31


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



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