Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lection2.doc
Скачиваний:
9
Добавлен:
17.12.2018
Размер:
186.88 Кб
Скачать

13

Лекция 2.

2.1 Изменение порядка вычисления

В языках программирования, в т.ч. и C++, арифметические операции выполняются, основываясь на приоритетах операций. Во многих случаях последовательность выполнения операций, основанная на приоритетах, оказывается нежелательной и должна быть изменена. Например, рассмотрим выражение, которое должно вычислить среднее арифметическое трех значений:

average = 5+10+15/3;

С математической точки зрения, среднее от значений 5, 10 и 15 равно 10. Однако, вычисляя данное выражение, С++ вырабатывает значение 20:

average = 5+10+15/3;

= 5+10+5;

= 15+5;

= 20;

В самом деле, согласно установленным в синтаксисе языка приоритетам операторов оператор деления С++ (/) имеет более высокий приоритет, чем оператор сложения (+). Таким образом, необходимо иметь какой-то способ изменения порядка, в котором С++ выполняет операции в выражении. А именно, при вычислении выражения в первую очередь вычисляются подвыражения, заключенные в скобки. Следовательно, чтобы С++ вычислил среднее арифметическое корректно, следует заключить слагаемые в скобки:

average = (5 + 10 + 15) / 3;

= (15 + 15) / 3;

= (30) / 3;

= 10;

Внутри скобок операции выполняются на основе приоритетов операций. Если в скобки заключено несколько выражений, то самым первым из них будет выполняться выражение, имеющее наибольший уровень вложенности скобок, например:

result = ((5+3) * 2) - 3;

= ((8) * 2) - 3;

= (16) - 3;

=13;

2.2 Оператор приращения

Одной из наиболее часто используемых операций при выполнении программы является увеличение значения переменной на 1. Например, следующий оператор увеличивает переменную, содержащую некоторое количественное значение, на единицу:

variable = variable + 1;

Ввиду частого использования этой операции в языке С++ обеспечивается более краткое обозначение с помощью оператора приращения. Ниже показано использование этого оператора для увеличения значения переменной на 1:

variable++ ;

В следующей программе демонстрируется использование оператора приращения для вычисления и вывода на экран значений от 0 до 100:

#include <iostream>

using namespace std;

int main()

{

int value = 0;

while (value <=100)

{

cout<<value<<endl;

value++;

}

return 0;

}

В С++ обеспечиваются префиксная и постфиксная формы оператора приращения. Оба последующих оператора увеличивают переменную count на 1:

count++;

++count ;

В первой строке используется постфиксная форма, а во второй - префиксная. Различие между формами применения оператора приращения существенно, поскольку они интерпретируются по-разному.

При применении постфиксной формы С++ сначала использует значение переменной и только потом выполняет операцию увеличения. При использовании префиксной формы С++ сначала увеличивает значение переменной на 1, а затем уже использует переменную. Для лучшего понимания различия между префиксной и постфиксной формами оператора приращения рассмотрим следующую программу, в которой используются обе формы:

#include <iostream>

using namespace std;

int main ()

{

int value = 1;

cout<<"Использование постфиксной формы"<<value++<<endl;

cout<<"Значение после увеличения"<<value<<endl;

value = 1;

cout<<"Использование префиксной формы"<<++value<<endl;

cout<<"Значение после увеличения"<<value<<endl;

return 0;

}

После компиляции и запуска этой программы на экран выводится:

Использование постфиксной формы 1

Значение после увеличения 2

Использование префиксной формы 2

Значение после увеличения 2

Как можно видеть, при использовании постфиксной формы оператора С++ сначала использует значение переменной (выводя 1) и только затем увеличивает значение (получается 2). При использовании префиксной формы С++ сначала увеличивает значение (получается 2) и только затем использует полученное значение (остающееся равным 2).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]