Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Моя первая программа на С++.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Приоритет операторов и порядок вычислений

Когда компьютер встречает уравнение, он выполняет математические действия не просто слева направо. Прежде всего он просматривает строку и определяет порядок выполнения операций, основываясь на при- оритете операторов. Приоритет операторов означает, что одни операторы выполняются раньше других независимо от того, в какой последовтельности они записаны в уравнении. Приоритет операторов умно- жения и деления выше, чем приоритет сложения и вычитания, что совпадает с последовательностью вы- полнения математических действий в уравнении (вспомните школьные примеры на «порядок действий»). Компьютер просматривает уравнение и выполняет все операции умножения и деления в том порядке, в каком они записаны в инструкции, не отдавая предпочтения ни одному из двух действий. Если оператор деления стоит перед оператором умножения, деление будет выполнено первым. Промежуточные резуль- таты помещаются в специальной, временно отведенной для этого области памяти*. После выполнения всех операций умножения и деления, компьютер возвращается к началу выражения и выполняет сложе- ние и вычитание в порядке, соответствующем расположению операторов.

Рассмотрим простое уравнение:

a = 1 + 4 / 2 * 5 + 3;

* Автор имел в виду машинный стек, но на самом деле современные компиляторы чаще сохра- няют промежуточные результаты вычислений на регистрах центрального процессора, а значе- ния выражений, не содержащих имен переменных, вычисляют еще на стадии компиляции. (Прим.перев.)

Если выполнять действия просто слева направо, не отдавая предпочтения ни одному из них, полученный результат будет равен 15.5 (рис.6.5). Однако компьютер учитывает порядок выполнения математических операций, и результат поэтому получится равным 14 (на рис.6.6 показано, как вычисляется этот резуль- тат). Когда вы пишете программу, следует внимательно следить за тем, выполняются ли математические операции в желаемом порядке.

Рис. 6.5. Выполнение математических операций без учета приоритета

Рис. 6.6. Компьютер выполняет математические операциис учетом приоритета операторов

Очень часто начинающие программисты допускают ошибку при расчетах средних значений. В Листинге

    1. приведен текст программы, в которой сделана попытка ввести три числа и вычислить их среднее арифметическое. Мы говорим «попытка», так как полученное в результате работы этой программы значе- ние будет неправильным. Проверьте, сможете ли вы определить, почему?

Листинг 6.3. Неправильная программа расчета среднего арифметического значения трех чисел.

/*average.c*/ main()

{

float number_1, number_2, number_3, average; printf("Введите первое число: ");

scanf("%f", &number_1); printf("Введите второе число: "); scanf("%f", &number_2); printf("Введите третье число: "); scanf("%f", &number_3);

average = number_1 + number_2 + number_3 / 3; printf("Среднее арифметическое равно %f", average);

}

Ошибка содержится в инструкции

average = number_1 + number_2 + number_3 / 3;

Дойдя до этой строки программы, компьютер будет выполнять математические действия в следующем по- рядке:

      1. Поделит значение переменной number_3 на 3.

      2. Сложит значения переменных number_1 и number_2 и прибавит к ним результат деления.

Если вы присвоите каждой переменной значение 100, выведенное на экран среднее арифметическое бу- дет равняться 233.33. Вот правильная запись этой строки инструкций:

average = (number_1 + number_2 + number_3) / 3;

Круглые скобки изменяют порядок приоритетов. Просматривая эту строку, компьютер прежде всего вы- полнит действия в скобках, затем вернется к началу строки и выполнит остальные операции в соответст- вии с обычным приоритетом операторов, о котором мы только что говорили. Таким образом, в нашей про- грамме будет сперва выполнено сложение трех чисел в скобках, а потом результат поделен на 3 (рис.6.7). Вуаля! Получился правильный ответ.

¶a++ae æepcue u+uru æɵuyye+a sneuwpo++ɵu usgawenacwæou "Books-shop".

Pacupocwpa+e+ue, upogaua, uepesauuca ga++on u+uru unu ee ¬acwen 3AMPE[EHª.

O æcex +apyue+uex upoca6a coo6yawa uo agpecy piracy@books-shop.com

Рис. 6.7. Правильная формула расчета среднего арифметического значения

Рис. 6.8. Использование нескольких уровней круглых скобок

Для того чтобы установить нужный порядок выполнения операций, можно использовать несколько уров- ней скобок (рис.6.8). Порядок выполнения операций установлен от самых внутренних скобок к наружным. Рассмотрим пример. Допустим, работник получает оплату в двойном размере за каждый час, проработан- ный сверх 40-часовой рабочей недели. Полагая, что он работает как минимум 40 часов и, соответственно, получает плату как минимум за 40 рабочих часов, расчет недельного заработка состоит из следующих частей: