Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


День 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;

10: difference = bigNumber - smallNumber;

11: cout < < " Difference is: " < < difference;

12: difference = smallNumber - bigNumber;

13: cout < < " \nNow difference is: " < < difference < < endl;

14: return 0;

15: }

 

Результат:

Difference is: 50

Now difference is: 4294967246

 

Анализ: Оператор вычитания используется в строке 10, а результат выводится на экран в строке 11, в данном случае вполне ожидаемый. В строке 12 вновь вызывается оператор вычитания, но на этот раз большое беззнаковое число вычитается из малого беззнакового числа. Результат должен быть отрицательным, но поскольку он вычисляется (и выводится) как беззнаковое число, происходит переполнение, о чем говорилось на прошлом занятии. Эта тема подробно рассматривается в приложении А.

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-08; Просмотров: 697; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.023 с.)
Главная | Случайная страница | Обратная связь