Similar presentations:
Программирование в среде Robot C. Приоритет операций. Сложные математические выражения
1. Программирование в среде RobоtC
Занятие 9: Приоритет операций.Сложные математические выражения
2. Приоритет операций
В математических вычислениях важную роль играет порядок, вкотором выполняются действия. Чему, например, равно значение
выражения 2+2*2? Конечно же шесть, т.к. сначала выполняется
умножение.
В C используется знакомый нам порядок выполнения операций. Но
т.к. в программировании есть свои особенности, то кое-какие
отличия всё же есть.
Выпишем приоритет для тех операций, которые мы уже знаем.
1. вычисляются функции (например, sqrt(), cos() и др.)
2. умножение, деление, остаток от деления (слева направо)
3. сложение, вычитание
4. выполняется присваивание
Если нам нужно изменить порядок выполнения действий, то мы
можем использовать для этого круглые скобки
3. Приоритет операций
А каково значение переменной x после выполненияследующего кода
int x = 8 / 4 / 2;
Правильный ответ 1. Т.к в случае одинакового приоритета
операций, команды выполняются слева направо. Другими
словами данный код эквивалентен коду
int x = (8 / 4) / 2;
Вот еще один пример
2+2*2 = 6
(2+2)*2 = 8 // действие в скобках будет выполнено прежде умножения
4. Приоритет операций
На следующем рисунке над каждым действием отмечено,каким оно выполнится по счёту.
Если в вашей программе вы написали довольно сложное
выражение, в котором не сразу ясен порядок операций, то
лучше добавить лишние скобки, чтобы явно задать
последовательность операций. Это поможет избежать
ошибок в вычислениях, которые потом будет сложно
отловить.
5. Сложные математические выражения
Иногда формулы, по которым нужно что-то вычислять, впрограмме могут принимать довольно ужасный вид.
При этом когда мы пишем программу, любая формула
должна быть записана в одну строку. На начальном этапе
это может вызвать у вас некоторые затруднения. Чтобы
избавиться от этих затруднений, нужно овладеть навыком
переводить формулу из стандартной математической
записи в ту, которая используется в программировании и
обратно.
6. Способы записи сложных математических выражений
1.2.
3.
Для записи сложных математических выражений полезно
использовать некоторые соображения, которые позволят
это сделать проще и не допустить ошибку.
При записи дробить общее выражение на мелкие части,
записывать их.
Вводить новые переменные.
Совершать математические преобразования, которые
могут упростить пример.
Рассмотрим эти идеи на примере.
7. Способы записи сложных математических выражений
Записать на языке С выражениеи вычислить его при a=6, b=100.
1. Пишем поэтапно: ()/()+()/() → (()/()+()/())*(()/()) →
теперь заполняем скобки →
((a-sqrt(b))/(a+sqrt(b))+(a+sqrt(b))/(a-sqrt(b)))*((2*a*sqrt(b)) /(a+sqrt(b)))
Получилось выражение. Возможно, какие-то скобки лишние, но лучше
поставить лишние скобки, чем забыть и получить неверный
ответ. Можете вставить это выражение в программу и вычислить.
Правильный ответ: 0.5
8. Способы записи сложных математических выражений
2. Можно ввести переменныеfloat t=a-sqrt(b);
float s=a+sqrt(b);
Тогда выражение будет записываться таким образом:
(t/s+s/t)*(2*a*sqrt(b))/s;
Можете проверить, что его вычисление даст такой же ответ 0.5.
3. Если преобразовать второе выражение, то получится более
простое:
Ответ получается таким же!
9. Задача 1.
Упорядочите указанные операции по убываниюприоритета. Сверху операции, которые имеют более
высокий приоритет.
1.
2.
3.
4.
5.
*, /, %
+, операции в скобках
=
sqrt(), sin(), cos() и другие функции .
10. Задача 2.
1.2.
3.
4.
5.
6.
Дано уравнение y=ax3+7. Среди указанных выражений
отметьте те, которые соответствуют верной записи этого
выражения на языке Си.
y = a * x * x * (x + 7);
y = (a * x) * x * (x + 7);
y = a*(x * x * x) + 7;
y = (a * x) * x * x +7;
y = a * x * x * x + 7;
y = a * x * (x * x + 7);
11. Задача 3.
Какое значение будет сохранено в переменной x послевыполнения следующего кода:
int x = 7 + 3 * 6 / 2 - 1;
12. Задача 4.
Какое значение будет сохранено в переменной x послевыполнения следующего кода:
int x = 2 % 2 + 2 * 2 - 2/2;
13. Задача 5.
Какое значение будет сохранено в переменной x послевыполнения следующего кода:
int x = (3 * 9 * (3 + (9 * 3 / 3)));
14. Задача 6.
Напишите программу, вычисляющую площадь треугольника потрём сторонам.
Формат входных данных:
Вначале программы задаём три вещественных числа a, b, c —
длины сторон треугольника.
Формат выходных данных:
Одно число — площадь треугольника со сторонами a, b, c.
Точность — два знака после запятой.
Для вычисления площади используйте формулу Герона:
где p=(a+b+c)/2 – полупериметр.
15. Задача 7.
В выражении a/b*c/d*e/f*h расставьте скобки так, чтобывыражению со скобками соответствовала дробь
Напишите программу, вычисляющее это выражение для
чисел a=7, b=2, c=3, d=7, e=8, f=3, h=4. Результат
вычисления должен быть равен 5.44.
16. Ответы к задачам
1. 3, 5,1, 4, 22. 3, 4, 5
3. 15
4. 3
5. 324
6. task main(){
float a=12.5, b=13.6, c=15.01, p, s;
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
nxtDisplayTextLine(1,”%.2f”,s);
}
7. a/(b*c/(d*e/(f*h)))
17. Завершение занятия
Теперь вы можете программировать почти любыематематические формулы. В следующий раз займемся
случайными числами.
На этом занятие завершено.