3. Объявите константу для числа pi, равного 3.14159.
4. Объявите переменную типа float и инициализируйте ее, используя константу pi.
День 4-й. Выражения и операторы
Программа представляет собой набор команд, выполняемых в определенной последовательности. Современные программы сильны тем, что выполняются не последовательно, команда за командой от начала до конца программы, а по блокам. Каждый блок программы запускается в зависимости от выполнения заданного условия. Сегодня вы узнаете:
• Что такое операторы
• Что такое блоки
• Что такое выражения
• Как реализовать ветвление программы на основе результата выполнения заданного логического условия
• Что такое ИСТИННО и ЛОЖНО с точки зрения программиста на C++
Выражения
В языке C++ выражения управляют последовательностью выполнения других выражений, возвращают результаты вычислений или ничего не делают (нулевые выражения). Все выражения в C++ оканчиваются точкой с запятой. Нулевое выражение представляет собой просто точку с запятой. Наиболее простой пример выражения — это операция присвоения значения:
В отличие от алгебры, это выражение не означает, что x равняется a+b. Данное выражение следует понимать так: присвоим результат суммирования значений переменных а и b переменной x, или присвоим переменной x значение a+b. Несмотря на то что в этом выражении выполняется сразу два действия — вычисление суммы и присвоение значения, после выражения устанавливается только один символ точки с запятой. Оператор (=) присваивает результаты операций, выполняемых над операндами, расположенными справа от знака равенства, операнду, находящемуся слева от него.
x = а + b;
Символы пробелов
Символы пробелов, к которым относятся не только пробелы, но и символы табуляции и разрыва строки, в выражениях обычно игнорируются. Рассмотренное выше выражение можно записать так:
x=a+b; или так:
x = a
+ b ;
Хотя последний вариант абсолютно правомочен, выглядит он довольно глупо. Символы пробелов можно использовать для улучшения читабельности программы, что облегчит работу с ней. Но при неумелом использовании эти же пробелы могут совершенно запутать программный код. Создатели C++ предоставили много различных возможностей, а уж насколько эффективно они будут использоваться, зависит от вас.
Символы пробелов не отображаются на экране и при печати — видны только различные отступы и промежутки между элементами текста.
Блоки и комплексные варажения
Иногда для облегчения восприятия программы логически взаимосвязанные выражения удобно объединять в комплексы, называемые блоками. Блок начинается открывающей фигурной скобкой ({) и оканчивается закрывающей фигурной скобкой (}). Хотя каждое выражение в блоке должно оканчиваться точкой с запятой, после символов открытия и закрытия блока точки с запятой не ставятся, как в следующем примере:
{
temp = а;
а = b;
b = temp;
}
Этот блок выполняется как одно выражение, осуществляющее обмен значениями между переменными а и b.
Рекомендуется:Незабывайте о закрывающейфигурной скобке каждый раз, когда используется открывающая фигурная скобка. Завершайте выражения в программе символом точки с запятой
Не рекомендуется:Используйте разумно символы пробелов, чтобы сделать свою программу более понятной, а не наоборот.
Операции
Все, в результате чего появляется некоторое значение, в языке C++ называется операцией. Об операциях говорят, что они возвращают значение. Так, операция 3+2; возвращает значение 5. Все операции являются вместе с тем и выражениями.
Возможно, вы будете удивлены тому, что многие программные блоки рассматриваются как выражения. Приведем лишь три примера:
3.2 // возвращает значение 3.2
PI // вещественная константа, которая возвращает значение 3.14
SecondsPerMinute // целочисленная константа, которая возвращает 60
Предполагая, что PI — константа, равная 3.14, а SecondsPerMinute — константа, равная 60, можно утверждать, что все три выражения являются операциями. Выражение
x = а + b;
не только складывает значения переменных а и b, но и присваивает результат переменной x, т.е. возвращает результат суммирования переменной x. Поэтому данное выражение вполне можно назвать операцией. Операции всегда располагаются справа от оператора присваивания:
у = x = а + b;
Данное выражение выполняет представленную ниже последовательность действий. Прибавляем а к b.
Присваиваем результат выражения а + b переменной x.
Присваиваем результат выражения присваивания x = а + b переменной у.
Если переменные а, b, x и у являются целыми и если а имеет значение 2, а b — значение 5, то переменным x и у будет присвоено значение 7.
Пример выполнения некоторых выражений представлен в листинге 4.1.
Листинг 4.1. Выполнение сложных операций
1: #include <iostream.h>
2: int main()
3: {
4: int a=0, b=0, x=0, y=35;
5: cout << " a:" << a << " b:" << b;
6: cout << " x:" << x << " y:" << y << endl;
7: a = 9;
8: b = 7;
9: y = x = a+b;
10: cout << " a:" << a << " b:" << b;
11: cout << " x:" << x << " y:" << y << endl;
12: return 0;
13: }
Результат:
а: 0 b: 0 x: 0 у: 35
а: 9 b: 7 x: 16 у: 16
В строке 4 объявляются и инициализируются четыре переменные. Их значения выводятся в строках 5 и 6. В строке 7 переменной а присваивается значение 9. В строке 8 переменной b присваивается значение 7. В строке 9 значения переменных а и b суммируются, а результат присваивается переменной x. Результат операции x = a+b, в свою очередь, присваивается переменной у.
Операторы
Оператор — это литерал, который заставляет компилятор выполнять некоторое действие. Операторы воздействуют на операнды. Операндами в C++ могут быть как отдельные литералы, так и целые выражения. Язык C++ располагает двумя видами операторов:
• операторы присваивания;
• математические операторы.
Оператор присваивания
Оператор присваивания (=) позволяет заменить значение операнда, расположенного с левой стороны от знака равенства, значением, вычисляемым с правой стороны от него. Так, выражение
x = а + b;
присваивает операнду x значение, которое является результатом сложения значений переменных а и b.
Операнд, который может находиться слева от оператора присваивания, называется адресным операндом, или l-значением (от англ. слова left, т.е. левый). Операнд, который может находиться справа от оператора присваивания, называется операционным операндом, или r-значением (от англ. слова right, т.е. правый).
Константы могут быть только r-значениями и никогда не бывают адресными операндами, поскольку в ходе выполнения программы значения констант изменять нельзя. Так, можно записать:
x = 35; // правильно
Но нельзя записать:
35 = x; // ошибка!
Повторим: l-значение — это операнд, который может стоять в левой части выражения присваивания, а г-значение — операнд, который может стоять в правой части этого выражения. Обратите внимание, что все l-значения могут быть r-значениями, но не все r-значения могут быть l-значениями. Примером г-значения, которое не может быть l-значением, служит литеральная константа. Так, можно загасать: x = 5;, но нельзя записать: 5 = x; (x может быть l- или r-значением, а 5 может быть только r-значением).
Математические операторы
В C++ используется пять математических операторов: сложения (+), вычитания (-), умножения (*), целочисленного деления (/) и деления по модулю (%).
В операциях сложения и вычитания разобраться несложно: они возвращают сумму и разность двух операндов. Хотя следует отметить, что вычитание беззнаковых целых может привести к удивительным результатам, если полученная разность окажется отрицательным числом. Вы уже видели нечто подобное на прошлом занятии при описании переполнения переменных. В листинге 4.2 демонстрируется ситуация, когда из малого беззнакового числа вычитается большое беззнаковое число.
Листинг 4.2. Пример вычитания с переполнением целого числа
1: // Листинг 4.2. Пример вычитания с
2: // переполнением целого числа
3: #include <iostream.h>
4:
5: int main()
6: {
7: unsigned int difference;
8: unsigned int bigNumber = 100;
9: unsigned int smallNumber = 50;