Приоритет операций. Cложные математические выражения
В математических вычислениях важную роль играет порядок, в котором выполняются действия. Чему, например, равно значение выражения 2+2*2? Конечно же шесть, т.к. сначала выполняется умножение.
В C используется знакомый нам со школы порядок выполнения операций. Но т.к. в программировании есть свои особенности, то кое-какие отличия всё же есть. Выпишем приоритет для тех операций, которые мы уже знаем.
- вычисляются функции (например, sqrt(), cos() и др.)
- умножение, деление, остаток от деления (слева направо)
- сложение, вычитание
- выполняется присваивание
А каково значение переменной
Правильный ответ 1. Т.к в случае одинакового приоритета операций, команды выполняются слева направо. Другими словами данный код эквивалентен коду int x = (8 / 4) / 2;
Если нам нужно изменить порядок выполнения действий, то мы можем использовать для этого круглые скобки.
Листинг 1.
2+2*2 = 6 (2+2)*2 = 8 // действие в скобках будет выполнено прежде умножения
На следующем рисунке над каждым действием отмечено, каким оно выполнится по счёту.
Рис.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;
}]