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