Главная > Уроки > Приоритет операций. Cложные математические выражения

Записывайся на этот курс на Stepike!

Приоритет операций. Cложные математические выражения

В математических вычислениях важную роль играет порядок, в котором выполняются действия. Чему, например, равно значение выражения 2+2*2? Конечно же шесть, т.к. сначала выполняется умножение.

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

  • вычисляются функции (например, sqrt(), cos() и др.)
  • умножение, деление, остаток от деления (слева направо)
  • сложение, вычитание
  • выполняется присваивание

А каково значение переменной x после выполнения следующего кода int x = 8 / 4 / 2;

Правильный ответ 1. Т.к в случае одинакового приоритета операций, команды выполняются слева направо. Другими словами данный код эквивалентен коду int x = (8 / 4) / 2;

Если нам нужно изменить порядок выполнения действий, то мы можем использовать для этого круглые скобки.

Листинг 1.

2+2*2 = 6
(2+2)*2 = 8 // действие в скобках будет выполнено прежде умножения
	

На следующем рисунке над каждым действием отмечено, каким оно выполнится по счёту.

Приоритет операций в си. Пример.

Рис.1 Приоритет операций в языке С. Пример.

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

Сложные математические выражения

Иногда формулы, по которым нужно что-то вычислять, в программе могут принимать довольно ужасный вид.

При этом когда мы пишем программу, любая формула должна быть записана в одну строку. На начальном этапе это может вызвать у вас некоторые затруднения. Чтобы избавиться от этих затруднений, нужно овладеть навыком переводить формулу из стандартной математической записи в ту, которая используется в программировании и обратно.

И небольшой видео-фрагмент, в котором я попытался на простом примере показать, как можно поступать при записи сложных математических выражений.

Сохрани в закладки или поддержи проект.

Практика

Решите предложенные задачи:

Для удобства работы сразу переходите в полноэкранный режим

Дополнительные материалы

  1. пока нет

Оставить комментарий

Чтобы код красиво отображался на странице заключайте его в теги [code] здесь писать код [/code]

Комментарии

Назар Лукьянов
Не понимаю, почему программа не засчитывает решение, хотя выходные данные правильные.

Задача на поиск площади треугольника. Код:
[#include <stdio.h>
#include <math.h>

int main() {
float a, b, c, p, res;
scanf("%f%f%f", &a, &b, &c);
p = (a + b + c)/2;
res = sqrt(p*(p-a)*(p-b)*(p-c));
printf("%.2f", res);
return 0;
}]
Антон
Тоже самое, выдает правильный output , но не засчитывает решение

#include <stdio.h>
#include <math.h>

int main() {
float a, b, c;
scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);

float p;
p = (a + b + c)/2;

float s;

s = sqrt(p*(p-a)*(p-b)*(p-c));


printf("%.2f", s);
return 0;
}