Математические функции
В С++ определены в заголовочном файле <math.h> функции выполняющие некоторые часто используемые математические задачи (табл. 3).
Математические функции в языке С++
Математическая функция
Модуль или абсолютное значение от а
Корень квадратный из а, причём а не отрицательно
Возведение а в степень b
Округление c избытком
Округление а до наибольшего целого, но не больше чем а
вычисление остатка от a/b
вычисление экспоненты а
a задаётся в радианах
a задаётся в радианах
натуральный логарифм a(основанием является экспонента)
десятичный логарифм а
арксинус a, где -1.0 < а < 1.0
Пример реализации линейного алгоритма на языке С++
Для демонстрации работы с операторами ввода-вывода и математическими функциями рассмотрим следующую задачу: требуется написать программу, вычисляющую значение формулы при различных значениях .
На первом этапе произведем анализ поставленной задачи. Для начала определимся с переменными, которые следует ввести. В данном случае это . В условиях задачи можно считать, что введены целочисленные значения , то есть эти переменные будут иметь тип integer, и вещественный x (переменная х имеет тип double).
Результат вычислений должен быть занесен в переменную. Из вида формулы ясно, что результат будет вещественным. Для сохранения результата нам потребуется переменная типа double. Присвоим ей имя y.
Теперь следует переписать переменную в линейном виде, используя арифметические операции языка СИ и математические функции, обращая внимание на порядок скобок в записи выражения.
Далее создадим новый проект (как это сделать изучено в ЛР1). Добавим в него файл исходного кода, запишем в нем функцию main() и объявим переменные.

Далее произведем чтение целочисленных значений переменных с клавиатуры, используя оператор scanf(). Для того, чтобы его стало возможным использовать, подключим заголовочный файл stdio.h.
После чтения значений переменных организуем расчет формулы. Заметим, что для использования функции вычисления синуса числа нам потребуется подключить библиотеку “math.h”, содержащую определение математических функций.

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

При запуске программы в данном случае мы вводим значения переменных, после чего окно закрывается и мы не успеваем увидеть результат работы программы. Для того, чтобы предотвратить закрытие окна добавим команду system(«pause») и подключим библиотеку <stdlib.h>:

После запуска приложения и ввода переменных программа выведет следующую информацию (рис. 1).

Рис. 1. Консольное окно выполнения программы
Несмотря на то, что алгоритм программы правильный, сама она неинформативна. Для того, чтобы сделать ее более простой в использовании, добавим так называемые подсказки пользователя, выведя перед вводом переменных сообщения о том, какие данные следует вводить:

Вывод полученных результатов организуем следующим образом:

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

Рис. 2. Консольное окно выполнения программы
Как мы видим, кириллический шрифт оказался нераспознанным. Для того, чтобы исправить это, добавим в код программы следующие строку:

Кроме того, необходимо подключить библиотеку locale.h.
Теперь код программы выглядит следующим образом:

После выполнения программы мы получим окно со следующим содержимым (рис. 3)

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

На этом выполнение данного задания завершено.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ.
Ознакомится с теоретической частью лабораторной работы.
Ознакомится с заданиями согласно варианту.
Разработать блок-схему линейного алгоритма решения задачи.
Реализовать разработанный алгоритм на языке программирования C++.
СОДЕРЖАНИЕ ОТЧЕТА
Титульный лист с названием лабораторной работы, номером своего варианта, фамилией студента(ов) и группы.
На первом после титульного листа указать :
— Задание по варианту.
Блок схема алгоритма.
Результаты работы программы.
Выводы о полученных результатах работы программы.
КОНТРОЛЬНЫЕ ВОПРОСЫ
Что называется выражением в языке СИ?
Что называется операцией в языке СИ?
Какие типы операций в языке СИ вам известны?
Как осуществляется ввод и вывод информации в программах на языке СИ?
Как реализуются основные математические функции в программах на языке СИ?
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
Липпман С. Б. Основы программирования на C++: Пер. с англ. — М.:Вильямс, 2002. — 256 с.
Липпман С. Б., Лажойе Ж. Язык программирования С++. Вводный курс: Пер. с англ. — 3-е изд. — М.: ДМК, 2001. — 1104 с.
Страуструп Б. Язык программирования C++: Пер. с англ. — 3-е спец. изд. — М.: Бином, 2003. — 1104 с.
Страуструп Б. Дизайн и эволюция языка C++. Объектно-ориентированный язык программирования: Пер. с англ. — М.: ДМК пресс, Питер, 2006. — 448 с.
Эккель Б. Философия C++. Введение в стандартный C++: Пер. с англ. — 2-е изд. — СПб.: Питер, 2004. — 572 с.
Эккель Б., Эллисон Ч. Философия C++. Практическое программирование: Пер. с англ. — СПб.: Питер, 2004. — 608 с.
Как правильно записать формулу в с++
я понимаю, что ошибка в части с логарифмом. Вопрос: как правильно в этой формуле записать логарифм и индексы, + объясните пожалуйста почему так, будет круто, если с ссылкой на источник.

![]()
log(x) возвращает натуральный логарифм от x . Чтобы посчитать логарифм по другому основанию, можно воспользоваться формулой:
В результате получится:
![]()
В си основание логарифма только натуральное e. Нужно перенести на другое основание:
log a (b) = ln(b) / ln(a)
![]()
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.11.43304
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Стандартные математические функции в языке Си
Математические вычисления не ограничиваются лишь арифметическими действиями. Кроме них, можно ещё встретить корни, модули, логарифмы, тригонометрические функции и пр. Научимся же использовать подобные функции в своих программах.
Для использования математических функций нужно подключить заголовочный файл math.h . В ней определено много различных функций, но мы пока рассмотрим следующие:
Некоторые математические функции
fabs(x) модуль числа x
sqrt(x) квадратный корень из числа x
sin(x) синус числа x (х в радианах)
cos(x) косинус числа x (х в радианах)
pow(x, y) вычисление x y
exp(x) вычисление e x
log(x) натуральный логарифм числа x
log10(x) десятичный логарифм числа x
- Все функции возвращают значение типа double .
- Параметры функций – вещественные числа( double ), но можно передавать и целые числа. При этом произойдёт неявное преобразование типа . Компилятор из целого числа, например 3, сделает вещественное 3.0.
Примеры.
Даны длины катетов прямоугольного треугольника. Вычислить длину гипотенузы. Простая задачка на знание теоремы Пифагора.
Вычислить синус угла ввёденного с клавиатуры. Угол вводится в градусах.
В этой программе есть о чём поговорить. Тригонометрические функции, которые определены в math.h работают с радианной мерой угла. Людям же привычнее работать с градусами. Поэтому в данной программе мы предварительно перевели значение из градусов в радианы. Если этого не сделать, результат получится неправильным. Проверьте это самостоятельно.
Неявное преобразование типов
При явном преобразовании типа мы в скобках перед значением указывали тип, к которому нужно привести данное значение. В неявном преобразовании этого делать не нужно. Компилятор автоматически подберёт необходимый тип.
Неявное преобразование типов осуществляется в следующих случаях:
- перед передачей аргументов в функцию (как в нашем примере с корнем. Листинг 1.)
- выполнение арифметических операций с разными типами аргументов
- перед выполнением присваивания
Правила неявного преобразования типов
- если выполняются арифметические операции с разными типами аргументов. Оба аргумента приводятся к большему типу.
Порядок типов: int < float < double - при присваивании. Значение справа от оператора присваивания приводится к типу переменной слева от оператора присваивания. При этом, если больший тип присваивается меньшему, то может произойти потеря точности.
int+float будет автоматически преобразовано к float+float
float/int будет автоматически преобразовано к float/float
double*float будет преобразовано к double*double
int = double double будет преобразовано к int с потерей дробной части
float = int int будет преобразовано к float
Сохрани в закладки или поддержи проект.
Практика
Решите предложенные задачи:
Для удобства работы сразу переходите в полноэкранный режим 
Как правильно составить формулу в C#?
Есть такая формула:
Составил программу для её вычисления, но она неправильно вычисляет, при вводе «-0,26» должно показывать «-0,0049», но показывает совсем другое число. Помогите поправить код.
- Вопрос задан более двух лет назад
- 300 просмотров
Средний 1 комментарий
- Вконтакте

1. У вас целочисленное деление 5 / 3 — в итоге получется 1, вместо 1.66
2. Скобки расставлены криво. У вас в косинус попадает и третья часть формулы, где x/5
После убирания лишних скобок получается
3. Можно и компактнее записать без потери смысла.
Хз почему результат получился -0.0043, а не -0.0049. Вроде похоже на правду.
Не записываю в ответ, тк результат не тот
1. x/5 внутри косинуса
2. p заменить на Math.PI
3. 5/3 вычисляется в типе данных int, надо изменить запись на 5d/3
И правильный ответ все равно отличается от желаемого. Однако можно получить желаемый, если в качестве Pi использовать значение 3.14