Сегодня мы рассмотрим: Настоящие ценители музыки знают, что для качественного...
Math.h — заголовочный файл стандартной библиотеки языка С, разработанный для выполнения простых математических операций. Поскольку С++ также реализует данные функции для обеспечения совместимости (все они содержатся в заголовочном файле cmath) ми будем рассматривать эти языки вместе. Под Linux и FreeBSD математические функции хранятся отдельно в математической библиотеке libm. Таким образом, если любая из этих инструкций используется, при сборке линкеру должна быть передана опция -lm. Так как в результате большинства математических операций получатся дробные числа, все функции библиотеки принимают double. Для работы с типами float и long double используются функции с постфиксами f и l соответственно.
Complex.h — заголовочный файл стандартной библиотеки языка программирования С, в котором объявляются функции для комплексной арифметики. Эти функции используют встроенный тип complex, который появился в стандарте C99. Функции в заголовочном файле complex.h представлены для трёх типов— double, float и long double (значения представлены в радианах): для вычисления тригонометрических значений синуса, косинуса, тангенса и котангенса для комплесных чисел, логарифм и экспонент, корень.
GNU (GSL)
— это свободное программное обеспечение под лицензией GNU General Public License. Библиотека предоставляет широкий спектр математических процедур, таких как генераторы случайных чисел, специальных функций и наименьших квадратов. Есть более 1000 функций в общей сложности с обширным набором тестов. В отличие от лицензий собственных численных библиотек лицензия GSL не ограничивает научное сотрудничество. Для подключения библиотеки вы должны написать: $\# include
Вот примерные программы на С++ с использованием математических библиотек:
Найти синус и косинус А
#include
using namespace std;
cout << «Input A = »; cin>>a; //ввод а
b=cos(a); //присваивание значений
cout << «Cos A = „<
Вывод программы:
Найти exp от числа А
#include // библиотека ввода-вывода
#include
#include
#include
using namespace std;
SetConsoleOutputCP(1251);
double a,b,c; // переменные типа double
cout << “Input A = »; cin>>a; //ввод а
b=ceil(a); //присваивание значаный
cout << «Большее целое число A = „<
Вывод программы:
Возведите число в степень по заданным значениям
#include // библиотека ввода-вывода
#include
#include
#include
using namespace std;
SetConsoleOutputCP(1251);
double a,b; // переменные типа double
cout << “Введите число = »; cin>>a;
cout << «Введите степень = »; cin>>b;
cout << «Число в степени = „<
Вывод программы:
Решение квадратного уравнения
# include
# include # include
using namespace std;
double a = 1, b = 2, c = 1;
i = gsl_poly_solve_quadratic (a, b, c, &x0, &x1);
if (i == 2) cout << “x0 =»<< x0 << " x1 ="<< x1 << endl;
if (i == 1) cout<< «x0 = » << x0 << endl;
if (i == 0) cout<< «No solve » << endl;
Вывод программы:
Как использовать статистические функции
#include
#include
double data = {17.2, 18.1, 16.5, 18.3, 12.6};
double mean, variance, largest, smallest;
mean = gsl_stats_mean(data, 1, 5);
variance = gsl_stats_variance(data, 1, 5);
largest = gsl_stats_max(data, 1, 5);
smallest = gsl_stats_min(data, 1, 5);
printf («The dataset is \%g, \%g, \%g,\%g, \%g \ n»,
data, data, data, data, data);
printf («The sample mean is \%g\ n», mean);
printf («The estimated variance is \%g\ n», variance);
printf («The largest value is \%g \ n», largest);
printf («The smallest value is \%g \ n», smallest);
Для всех математических функций необходим заголовок
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 . |
Структура программы на языке Си
1. #include
2. #include
3 . using name space std – использовать стандартное пространство имен
4. int main(int argc, char *argv) – имя функции. Любая программа на языке Си состоит из одной или нескольких функций. В написанном шаблоне функция одна – main(). Функция c именем main обязательно должна быть в любой исполняемой программе .
5. { - начало тела функции
6. system(“pause”) – вызов функции system с аргументом “pause”. Функция реализует ожидание нажатия клавиши.
7. оператор return с аргументом EXIT_SUCCESS – завершение функции main с кодом 0.
8. } – конец функции main.
Простые типы данных Си
Для представления целых величин в Си предусмотрены следующие типы данных:
Тип сhar. Занимает в памяти 1 байт. Используется для представления символов и целых чисел от 0 до 255 (-128 до 127).
Тип int . Занимает в памяти4 байта. Используется для представления целых чисел в диапазоне -2 147 483 648 до 2 147 483 647.
Тип float. Занимает в памяти 4 байта. Используется для представления чисел с плавающей точкой. от 3.4×10 -38 до 3.4×10 38 . Точность вычислений до 7 знаков после запятой.
Тип double. Занимает в памяти 8 байт. Используется для представления чисел с плавающей точкой. от 1.7×10 -308 до 1.7×10 308 . Точность вычислений до 15 знаков после запятой.
Тип void – пустой тип. Используется для описания функций.
Тип bool – логический тип. Может принимать 2 значения true или false.
Основные операторы Си
Оператор - это лексема, которая переключает некоторые вычисления, когда применяется к переменной или к другому объекту в выражении. Язык Си представляет большой набор операторов арифметических и логических операторов.
Таблица 4.1. Унарные операторы языка Си
Таблица 4.2. Бинарные операторы языка Си
Код оператора | Название | Результат операции | ||
Аддитивные операторы | ||||
+ | бинарный плюс | вычисление суммы, например: int x = 2,y = 1,z; z = x+y; | ||
- | бинарный минус | вычисление разности, например: int x = 2,y = 1,z; z = x-y; | ||
Мультипликативные операторы | ||||
* | умножение | вычисление произведения, например: int x = 2,y = 1,z; z = x*y; | ||
/ | деление | вычисление частного, например: int x = 12,y = 2,z; z = x/y; | ||
% | остаток | вычисление остатка от деления, например: int x = 12,y = 7,z; z = x%y; | ||
Логические операторы | ||||
&& | логическое AND (И) | проверка условий, связанных логическим И | ||
|| | логическое OR (ИЛИ) | проверка условий, связанных логическим ИЛИ | ||
Операторы присваивания | ||||
= | присваивание | присвоить переменной заданное значение или значение другой переменной | ||
Операторы отношения | ||||
< | меньше чем | x | ||
> | больше чем | x>y, х больше y | ||
<= | меньше чем или равно | x<=y, x меньше или равно y | ||
>= | больше чем или равно | x>=y, x больше или равно y | ||
Операторы эквивалентности | ||||
= = | равно | x= =y, х равно y | ||
!= | не равно | x!=y, x не равно y | ||
, | оператор перечисления | выполнить разделенные оператором действия слева направо, например y+=5,x-=4,y+=x; | ||
Библиотека математических функций math.h
Си поддерживает множество математических функций, прототипы которых описаны в файле math.h. Познакомимся с некоторыми из них.
abs(int x) возвращает модуль целого числа x . acos(double x) возвращает арккосинус числа x в радианах. asin(double x) возвращает арксинус числа x в радианах. atan(double x) возвращает арктангенс числа x в радианах. atof(char *s, double x) преобразует строку s в вещественное число x. cos(double x) возвращает косинус числа x (x задано в радианах) ceil(double x) округляет число x в большую сторону exp(double x) возвращает экспоненту числа x. fabs(double x) возвращает модуль вещественного числа x. sin(double x) возвращает синус числа x (x задано в радианах). sqrt(double x) возвращает квадрат числа x. tan(double x) возвращает тангенс числа x (x задано в радианах). | floor(double x) округляет число x в меньшую сторону fmod(double x, double y) возвращает остаток от деления числа x на число y. hipot(double x, double y) возвращает квадрат суммы числа x и числа y. log(double x) возвращает натуральный логарифм числа x. log10(double x) возвращает десятичный логарифм числа x. modf(double x,double& y) возвращает дробную часть числа x, по адресу y записывается целая часть исходного числа x. pow(double x, double y) возвращает x в степени y. |
Для использования всех вышеперечисленных функций подключите библиотеку
В C++ определены следующие арифметические операторы.
Cложение;
– вычитание;
* умножение
/ деление
% деление по модулю
– – декремент (уменьшение на 1)
Инкремент (увеличение на 1).
Действие операторов +, –, * и / совпадает с действием аналогичных операторов в алгебре. Их можно применять к данным любого встроенного числового типа.
После применения оператора деления (/) к целому числу остаток будет отброшен. Например, результат целочисленного деления 10/3 будет равен 3. Остаток от деления можно получить с помощью оператора деления по модулю (%). Например, 10%3 равно 1. Это означает, что в С++ оператор % нельзя применять к нецелочисленным типам данных.
Операторы инкремента (++) и декремента (– –) обладают очень интересными свойствами. Поэтому им следует уделить особое внимание.
Оператор инкремента выполняет сложение операнда с числом 1, а оператор декремента вычитает 1 из своего операнда. Это значит, что инструкция:
аналогична такой инструкции:
А инструкция:
аналогична такой инструкции:
Операторы инкремента и декремента могут стоять как перед своим операндом (префиксная форма), так и после него (постфиксная форма). Например, инструкцию
можно переписать в виде префиксной
Х;//префиксная форма оператора инкремента
или постфиксной формы:
х++;//постфиксная форма оператора инкремента
В предыдущем примере не имело значения, в какой форме был применен оператор инкремента: префиксной или постфиксной. Но если оператор инкремента или декремента используется как часть большего выражения, то форма его применения очень важна. Если такой оператор применен в префиксной форме, то C++ сначала выполнит эту операцию, чтобы операнд получил новое значение, которое затем будет использовано остальной частью выражения. Если же оператор применен в постфиксной форме, то С++ использует в выражении его старое значение, а затем выполнит операцию, в результате которой операнд обретет новое значение.
Математические функции
В языке С++ имеются специальные функции для расчета алгебраических выражений. Все такие функции находятся в отдельном заголовочном файле math.h. Поэтому для использования функций в коде программы необходимо подключить данный файл с помощью директивы
#include
Приведем основные алгебраические функции С++.
abs(x) - модуль целого числа;
labs(x) - модуль «длинного» целого;
fabs(x) - модуль числа с плавающей точкой;
sqrt(x) - извлечение квадратного корня;
pow(x,y) - возведение x в степень y;
cos(x) - косинус;
sin(x) - синус;
tan(x) - тангенс;
acos(x) - арккосинус;
asin(x) - арксинус;
atan(x) - арктангенс;
exp(x) - експонента в степени x;
log(x) - натуральный логарифм;
log10(x) - десятичный логарифм
При возведении числа в дробную степень, знаменатель дробной степени нужно записывать в вещественном виде. Например: квадратный корень из а записывается так: pow(a,1/2.0 )
Продемонстрируем использование функций на примерах.
5. Операторы ввода/вывода на языке С++
Для вывода сообщения на экран используется следующий оператор C++:
cout<<”текст”;
#include
Информация, заключенная в двойные кавычки, является сообщением, которое должно быть выведено на экран. В языке C++ любая последовательность символов, заключенная в двойные кавычки, называется строкой потому, что она состоит из нескольких символов, соединяемых вместе в более крупный блок (элемент).
Строка в операторе COUT может содержать так называемые подстановочные символы - символы, которых нет на клавиатуре или они заняты под ключевые символы в тексте программы. Перед каждым таким подстановочным символов ставится символ «\».
Приведем перечень таких символов:
\a – звуковой сигнал
\n – переход на новую строку
\t – горизонтальная табуляция
\v – вертикальная табуляция
\\ - обратный слеш
\’ – одинарная кавычка
\” – двойная кавычка
\? – знак вопроса.
Например, оператор вида:
cout>>“пример\nтекста”;
Слово «пример» выведет на одной строке, а слово «текста» на другой.
Оператор вида:
cout>>“магазин\»”чайка\””;
Слово «Чайка» отобразит в двойных кавычках.
Кроме текса оператор может выводить на экран значения переменных, комбинируя их с текстом.