cout<<"Для
продолжения нажмите любую клавишу. . .";
//делаем
паузу для просмотра результата
//завершаем
работу главной программы
Все
математические функции реализованы
как методы класса Math,
основные из которых представлены в
таблице 4.1
Таблица
4.1 – Основные поля и методы класса Math
Имя
метода
|
Описание
|
Пояснения
|
|
|
|x|,
записывается как Abs(x)
|
|
Арккосинус
|
Acos(double
x),
угол задается в радианах
|
|
Арксинус
|
|
|
Арктангенс
|
|
|
Арктангенс
|
Atan2(double
x,double
y)
–угол, тангенс которого есть результат
деления y
на х
|
|
Произведение
|
BigMul(int
x,int y)
|
|
Округление
до большего целого
|
Celling(double
x)
|
|
|
|
|
Гиперболический
косинус
|
|
|
Деление
и остаток
|
|
|
|
2,71828182845905
|
|
Экспонента
|
|
|
Округление
до меньшего целого
|
Floor(double
x)
|
|
Остаток
от деления
|
IEEERemainder(double
x, double y)
|
|
Натуральный
логарифм
|
|
|
Десятичный
логарифм
|
|
|
Максимум
из 2-х чисел
|
|
Продолжение
таблицы 4.1
Имя
метода
|
Описание
|
Пояснения
|
|
Минимум
из 2-х чисел
|
|
|
Значение
числа пи
|
3,14159265358979
|
|
Возведение
в степень
|
Pow(x,y)
– x
в степени y
|
|
Округление
|
Round(3.1)=3
Round(3.8)=4
|
|
Знак
числа
|
|
|
|
|
|
Гиперболический
синус
|
|
|
Квадратный
корень
|
|
|
|
|
|
Гиперболический
тангенс
|
|
Пример
линейной программы расчета по заданной
формуле
namespace
ConsoleApplicationl
{
static void Main()
Console.WriteLine(“Введите
x”);
buf=Console.ReadLine();
double
x=Convert.ToDouble(buf);
Console.WriteLine(“Введите
alfa”);
buf=Console.ReadLine();
double
a=double.Parse(buf);
double
y=Math.Sqrt(Math.PI*x)-
Math.Exp(0.2*Math.Sqrt(a))+
2*Math.Tan(2*a)+
1.6e3*Math.Log10(Math.Pow(x,2));
Console.WriteLine(“Для
х=
{0} и
alfa ={1}”, x,a);
Console.WriteLine(“Результат
=” +y); }}}
Лекция 5. Операторы языка c#
Состав
операторов языка C#,
их синтаксис и семантика унаследованы
от языка С++. Любое
выражение,
завершающееся точкой с запятой является
оператором.
Блок или составной оператор
С
помощью фигурных скобок несколько
операторов языка (возможно, перемежаемых
объявлениями) можно объединить в единую
синтаксическую конструкцию, называемую
блоком
или составным
оператором:
оператор_1
оператор_N
Синтаксически
блок
воспринимается как единичный оператор
и может использоваться всюду в
конструкциях, где синтаксис требует
одного оператора. Тело цикла, ветви
оператора
if,
как правило, представляются блоком.
Пустой оператор
Пустой
оператор
- это "пусто", завершаемое точкой
с запятой. Он используется когда по
синтаксису оператор требуется, а по
смыслу- нет. Иногда полезно рассматривать
отсутствие операторов как существующий
пустой
оператор.
Синтаксически допустимо ставить лишние
точки с запятой, полагая, что вставляются
пустые
операторы.
Например, синтаксически допустима
следующая конструкция:
for
(int
j=1;
j<5;
j++)
//оператор цикла
{;;;};
//пустой оператор
Она
может рассматриваться как задержка по
времени, работа на холостом ходе.
Для всех математических функций необходим заголовок . В программах на языке C используется заголовок
1
|
acos
|
Функция double acos(double arg
arg
|
2
|
asin
|
Функция double asin(double arg
) возвращает арккосинус аргумента arg
. Значение аргумента функции должно лежать в интервале от -1 до 1, иначе произойдет ошибка.
|
3
|
atan
|
Функция double atan(double arg
) возвращает арктангенс аргумента arg
.
|
4
|
atan2
|
Функция double atan2(double x
, double y
) возвращает арктангенс значения y
/x
.
|
5
|
ceil
|
Функция double ceil(double num
) возвращает ближайшее целое число (представленное как действительное число с плавающей точкой), которое не меньше значения аргумента num
. Например, ceil(1.02) вернет 2.0. Такое преобразование называется округлением с избытком.
|
6
|
cos
|
Функция double cos(double arg
) возвращает косинус аргумента arg
|
7
|
cosh
|
Функция double cosh(double arg
) возвращает гиперболический косинус аргумента arg
.
|
8
|
exp
|
Функция double exp(double arg
) возвращает основание натурального логарифма e,
возведенное в степень arg
.
|
9
|
fabs
|
Функция double fabs(double num
) возвращает абсолютное значение (значение по модулю) аргумента num
.
|
10
|
floor
|
Функция double floor(double num
) возвращает наибольшее целое число (представленное как действительное число с плавающей точкой), не превышающее значения аргумента num
. Например, floor(1.02) вернет число 1.0. Такое преобразование называется округлением с недостатком.
|
11
|
fmod
|
Функция double fmod(double x, double y) возвращает остаток от деления x/y.
|
12
|
frexp
|
Функция double frexp(double num
, int *exp
) раскладывает число num
на мантиссу, изменяющуюся в диапазоне от 0.1 до 1, не включая 1, и целый показатель степени, так что num
= mantissa
. Функция возвращает мантиссу, а значение показателя степени сохраняется в переменной, на которую ссылается указатель exp
.
|
13
|
log
|
Функция double log(double num
) возвращает натуральный логарифм числа num
. Если аргумент num
|
14
|
log10
|
Функция double log10(double num
) возвращает десятичный логарифм числа num
. Если аргумент num
отрицателен или равен нулю, возникает ошибка.
|
15
|
pow
|
Функция double pow(double base
, double exp
) возвращает число base
, возведенное в степени exp
. Если основание степени base
равно нулю, а показатель степени exp
меньше или равен нулю, может произойти ошибка, связанная с выходом аргумента из области определения функции (domain error). Это ошибка возникает также, если аргумент base
отрицателен, а аргумент exp
не является целым числом.
|
16
|
sin
|
Функция double sin(double arg
) возвращает синус аргумента arg
. Значение аргумента должно быть выражено в радианах.
|
17
|
sinh
|
Функция double sinh(double arg
) возвращает гиперболический синус аргумента arg
.
|
18
|
sqrt
|
Функция double sqrt(double num
) возвращает квадратный корень аргумента num
. Если значение аргумента отрицательно, возникает ошибка, связанная с выходом из области определения функции.
|
19
|
tan
|
Функция double tan(double arg
) возвращает тангенс аргумента arg
. Значение аргумента должно быть выражено в радианах.
|
20
|
tanh
|
Функция double tanh(double arg
) возвращает гиперболический тангенс аргумента arg
.
|
Пожалуйста, приостановите работу AdBlock на этом сайте.
Математические вычисления не ограничиваются лишь арифметическими действиями. Кроме них, можно ещё встретить корни, модули, логарифмы, тригонометрические функции и пр. Научимся же использовать подобные функции в своих программах.
Для использования математических функций нужно подключить заголовочный файл 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.
Примеры.
Даны длины катетов прямоугольного треугольника. Вычислить длину гипотенузы.
Простая задачка на знание теоремы Пифагора.
Листинг 1.
#include
#include // подключаем math.h
int main (void) {
int a, b, c2;
scanf("%d",&a);
scanf("%d",&b);
c2 = a*a + b*b;
printf("c = %.2f\n", sqrt(c2));
return 0;
}
Вычислить синус угла ввёденного с клавиатуры. Угол вводится в градусах.
Листинг 2.
#include
#include // подключаем math.h
int main (void) {
double alpha, sin_a, pi = 3.1415926;
scanf("%lf",&alpha);
alpha = alpha*pi/180;
sin_a = sin(alpha);
printf("%.2f\n", sin_a);
return 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++ определено множество разнообразных математических функций. Сначала оба языка поддерживали один и тот же набор, состоящий из 22 математических функций. Однако по мере развития языка C++ расширялся и арсенал определенных в нем функций. Затем в версии С99 размер математической библиотеки значительно увеличился. В результате этих изменений библиотеки математических функций языков С и C++ стали существенно отличаться одна от другой. Поэтому в данной главе описываются математические функции языка С(включая те, которые добавлены в версии С99), а в главе 9 уделено внимание исключительно функциям языка C++. При этом имейте в виду, что исходный набор математических функций по-прежнему поддерживается всеми версиями языков С и C++.
Для использования всех математических функций в программу необходимо включить заголовок . Помимо объявления математических функций, этот заголовок определяет один или несколько макросов. В версии С89 заголовком определяется только макрос HUGE_VAL, который представляет собой значение типа double, сигнализирующее о возникшем переполнении.
В версии С99 определены следующие макросы.
В версии С99 определены следующие макросы(подобные функциям), которые классифицируют значение.
В версии С99 определены следующие макросы сравнения, аргументами которых(a и b) должны быть значения с плавающей точкой.
Эти макросы прекрасно обрабатывают значения, которые не являются числами, не вызывая при этом исключений вещественного типа.
Макросы EDOM и ERANGE также используются математическими функциями. Эти макросы определены в заголовке .
Ошибки в версиях С89 и С99 обрабатываются по-разному. Так, в версии С89, если аргумент математической функции не попадает в домен, для которого он определен, возвращается некоторое значение, зависящее от конкретной реализации, а встроенная глобальная целая переменная errno устанавливается равной значению EDOM. В версии С99 ошибка нарушения границ домена также приводит к возврату значения, зависящего от конкретной реализации. Однако по значению math_errhandling можно судить о выполнении других действий. Если math_errhandling содержит значение MATH_ERRNO, встроенная глобальная целая переменная errno устанавливается равной значению EDOM. Если же math_errhandling содержит значение MATH_ERREXCEPT, возбуждается исключение вещественного типа.
В версии С89, если функция генерирует результат, который слишком велик для возможностей представления, происходит переполнение. В этом случае функция возвращает значение HUGE_VAL, а переменная errno устанавливается равной значению ERANGE, сигнализирующему об ошибке диапазона. При обнаружении потери значимости функция возвращает нуль и устанавливает переменную errno равной значению ERANGE. В версии С99 ошибка переполнения также приводит к тому, что функция возвращает значение. HUGE_VAL, а при потере значимости - нуль. Если math_errhandling содержит значение MATH_ERRNO, глобальная переменная errno устанавливается равной значению ERANGE, свидетельствующему об ошибке диапазона. Если же math_errhandling содержит значение MATH_ERREXCEPT, возбуждается исключение вещественного типа.
В версии С89 аргументами математических функций должны быть значения типа double и значения, возвращаемые функциями, имеют тип double. В версии С99 добавлены float- и long double-варианты этих функций, которые используют суффиксы f и l соответственно. Например, в версии С89 функция sin() определена следующим образом.
Double sin(double arg);
В версии С99 поддерживается приведенное выше определение функции sin() и добавляются еще две ее модификации - sinf() и sinl().
Float sinf(float arg);
long double sinl(long double arg);
Операции, выполняемые всеми тремя функциями, одинаковы; различаются лишь данные, подвергаемые этим операциям. Добавление f- и 1-модификаций математических функций позволяет использовать версию, которая наиболее точно соответствует вашим данным.
Поскольку в версии С99 добавлено так много новых функций, стоит отдельно перечислить функции, поддерживаемые версией С89(они также используются в языке C++).
acos
|
asin
|
atan
|
atan2
|
ceil
|
cos
|
cosh
|
exp
|
fabs
|
floor
|
fmod
|
frexp
|
ldexp
|
log
|
log10
|
modf
|
pow
|
sin
|
sinh
|
sqrt
|
tan
|
tanh
|
|
|
|
И еще одно: все углы задаются в радианах.
Смотрите также
acos - Возвращает значение арккосинуса
acosh - Возвращает значение гиперболического арккосинуса
asin - Возвращает значение арксинуса
asinh - Возвращает значение гиперболического арксинуса
atan - Возвращает значение арктангенса
atan2 - Возвращает значение арктангенса от а/Ь
atanh - Возвращает значение гиперболического арктангенса
cbrt - Возвращает значение кубического корня
ceil - Возвращает наименьшее целое, которое больше значения заданого аргумента
copysign - Наделяет заданный аргумент знаком, который имеет указаный аргумент
cos - Возвращает значение косинуса
cosh - Возвращает значение гиперболического косинуса
erf - Возвращает значение функции ошибок
erfc - Возвращает дополнительное значение функции ошибок
exp - Возвращает значение экспоненты
exp2 - Возвращает число 2, возведенное в заданную степень
expm1 - Возвращает уменьшенное на единицу значение натурального логарифма е
fabs - Возвращает абсолютное значение
fdim - Возвращает нуль или разность в двух заданных аргументов
floor - Возвращает наибольшее целое которое меньше или равно значению заданного аргумента
fma - Возвращает значение а*Ь+с заданных аргументов
fmax - Возвращает большее из двух значений
fmin - Возвращает меньшее из двух значений
fmod - Возвращает остаток от деления
frexp - Разбивает заданное число на мантиссу и экспоненту
hypot - Возвращает длину гипотенузы при заданных длинах двух катетов
ilogb - Выделяет экспоненциальное значение
ldexp - Возвращает значение выражения num*2^ехр.