Как подключить математические функции в c
При запуске программы на Си автоматически открываются ряд потоков, основными из которых являются следующие:
- Стандартный поток ввода stdin
- Стандартный поток вывода stdout
- Стандартный поток вывода сообщений об ошибках stderr
Стандартный поток ввода stdin по умолчанию соответствует клавиатуре, а потоки stdout и stderr — экрану монитора.
Для управления вводом-выводом с помощью этих потоков используются ряд функций:
- getchar() : ввод с клавиатуры одного символа
- putchar() : вывод на консоль одного символа
- fgets() : ввод одной строки
- puts() / fputs() : вывод одной строки на консоль
- scanf() : ввод с консоли с форматированием данных
- sscanf() : ввод с из строки с форматированием данных
- printf() : вывод с форматированием данных
Функции printf и scanf уже рассматривались ранее, поэтому посмотрим, как применять остальные функции.
Ввод и вывод символов
Для ввода и вывода символа применяются функции getchar() и putchar() . Но следует сказать, что на самом деле они полноценными функциями не являются, а определены как макросы в заголовочном файле stdio.h :
#define getchar() getc(stdin) #define putchar(c) putc((c), stdout)
Вывод символа
Для вывода отдельного символа на консоль предназначена функция putchar() со следующим прототипом:
int putchar(int c);
Выводимый символ в виде числового кода передается в putchar в качестве параметра, он же возвращается функцией.
#include int main(void) < char c = 'A'; putchar(c); // Выводим символ A >
Ввод символа
Для ввода одного символа с клавиатуры применяется функция getchar() , которая имеет следующий прототип:
int getchar(void);
В качестве результата функция возвращает числовой код введенного символа.
При использовании функции getchar следует учитывать, что при печати текста посредством клавиатуры в буфер операционной системы заносятся коды печатаемых символов, а сами символы отображаются на экране. Поучение программой введенного символа из буфера производится с помощью нажатия клавиши Enter.
И если буфер операционной системы не пуст, то при вызове функции getc() она получает очередной символ из буфера. Если же буфер пуст, то происходит чтение байта из потока ввода с помощью системной функции, название которой зависит от операционной системы.
При этом при нажатии клавиши Enter, в буфер также помещается код этой клавиши. То есть если мы введем один символ и нажмем на Enter, в буфере окажутся два числовых кода — введенного символа и клавиши Enter. И это надо учитывать при работе с функцией getchar. В частости, рассмотрим простой, но показательный пример:
#include int main(void) < printf("1"); getchar(); // ожидание ввода символа printf("2"); getchar(); // ожидание ввода символа printf("3"); return 0; >
Сначала на экран выводится цифра 1, после чего функция getchar ожидает ввода символа. Если после ввода символа мы нажмем Enter, то в буфер будет помещены два числовых кода — введеного символа и клавиши Enter. Поэтому при втором вызове getchar эта функция считывает байт из буфера — то есть числовой код клавиши Enter.
Например, введем при первом вызове функции getchar символ «a», а затем Enter:
1a 23
Но если при каждом вызове getchar мы будем только нажимать клавишу Enter, тогда в буфер будет заноситься только код этой клавиши, и соответственно программа будет работать, как и ожидалось:
1 2 3
Применим функции getchar и putchar для ввода и вывода символов с клавиатуры:
#include int main(void) < int c; while((c=getchar())!=EOF) < putchar(c); >return 0; >
Функция getchar() считывает числовой код символа, который потом выводится в функции putchar() . Для вывода из программы необходимо ввести комбинацию клавиш Ctrl+C.
Ввод и вывод строк
Вывод строк и puts
Для вывода одной строки на консоль предназначена функция puts() со следующим прототипом:
int putchar(char *s);
В качестве параметра передается указатель на строку, а возвращаемым результатом функции является последний выведенный символ.
При этом функция puts() будет выводить символы переданной строки, пока не дойдет до нулевого символа ‘\0’. Если же выводимый массив символов не содержит этого символа, то результат программы неопределен. Например:
#include int main(void) < puts("Hello World"); // выводим строковый литерал char* name = "Hello Metanit.com"; puts(name); // выводим значение переменной return 0; >
Hello World Hello Metanit.com
Вывод строк и fputs
Функция fputs() также записывает в поток вывода строку, то есть набор символов, который завершается символом ‘\0’. При записи строки нулевой символ ‘\0’ не записывается. Она имеет следующий прототип:
int fputs(const char *s, FILE *stream);
Первый параметр функции — записываемая строка, а второй — указатель на поток вывода. В качестве результата функция возвращает неотрицательное целое число. При ошибках в процессе записи возвращается значение EOF .
Применим функцию для записи в стандартный поток вывода, то есть на консоль. В этом случае в качестве второго параметра надо передать значение stdout :
#include int main(void)
Ввод строк и fgets
Для ввода строки с клавиатуры применяется функция fgets() , которая имеет следующий прототип:
char *fgets(char *str, int count, FILE *stream);
- char *str : строка, в которую производится считывание.
- int count : сколько символов необходимо считывать.
- FILE *stream : файловый поток, из которого производится считывание. В качестве потока ввода может выступать и консольный ввод.
Функция fgets() прекращает считывание, когда пользователь нажимает клавишу ENTER, то есть когда в поток добавляется символ перевода строки.
Рассмотрим считывание строки с консоли. Для этого в качестве третьего параметра в функцию передается значение stdin :
#include #define MAX 15 int main(void)
Здесь функция fgets считывает не более 15 символов в строку name, а В реальности функция предложит ввести 14 символов, так как последний символ зарезервирован для нулевого символа ‘\0’. Если будет введено больше символов, то fgets все равно считает не более 15 символов. Таким образом функция позволяет проверить количество считываемых символов и поэтому считается безопасной.
Пример работы программы:
Enter name: Tom Smith Your name: Tom Smith
Стоит отметить, что функция fgets() возвращает указатель char * — указатель на буфер, в который считаны данные. В реальности это тот же самый буфер, который передавался в качестве первого параметра, то есть в примере выше — это массив name. Однако этот результат может нам пригодится для проверки успешности выполнения функции — если считывание прошло неудачно, то функция возвращает NULL :
#include #define MAX 15 int main(void) < char name[MAX]; printf("Enter name: "); if(fgets(name, MAX, stdin) != NULL) // if(fgets(name, MAX, stdin)) - можно сократить < printf("Your name: %s\n", name); >else < printf("Critical Error. "); >return 0; >
Для эмуляции ошибки можно передать в функцию вторым параметром число 0.
fgets и scanf
При использовании функции fgets() после функции scanf() мы можем столкнуться с некорректным вводом:
#include #define N 32 int main(void) < int age; char name[N]; // считываем возраст в переменную age printf("Input age: "); scanf("%d", &age); // считываем строку в переменну. name printf("Input name: "); fgets(name, N, stdin); // проверяем ввод printf("Age: %d\n", age); printf("Name: %s\n", name); >
В данном случае сначала с помощью функции scanf() считываем число в переменную age. После этого считываем имя — строку с помощью функции fgets() в переменную name. Но посмотрим, какой будет результат работы программы:
Input age: 39 Input name: Age: 39Name:
В данном случае мы видим, что ввод имени с помощью fgets вроде как пропускается. По крайней мере мы не можем ввести имя, а программа сразу же выводит результат.
Все дело в том, что функция scanf() считывает именно то, что ей предписано — число в виде переменной типа int. Все остальные символы остаются в буфере, в который предварительно попадают введенные с клавиатуры символы. Так, после ввода возраста мы нажимаем на клавишу Enter, и в буфер попадает символ «\n», то есть перевод строки. И fgets считывает этот символ из буфера, после чего ввод имени завершается. Очевидно, это не то поведение, на которое мы рассчитывали.
Чтобы исправить ситуацию, мы можем использовать различные хаки. Рассмотрим пару из них. Все они сводятся к тому, чтобы вынуть из буфера этот символ перевода строки.
Первый способ — считывание символа с помощью вызова scanf(«%*c») :
#include #define N 32 int main(void) < int age; char name[N]; // считываем возраст в переменную age printf("Input age: "); scanf("%d", &age); scanf("%*c"); // вытаскиваем символ из буфера // считываем строку в переменну. name printf("Input name: "); fgets(name, N, stdin); // проверяем ввод printf("Age: %d\n", age); printf("Name: %s\n", name); >
Второй способ — мы можем считать символ с помощью getchar() :
#include #define N 32 int main(void) < int age; char name[N]; // считываем возраст в переменную age printf("Input age: "); scanf("%d", &age); getchar(); // вытаскиваем символ из буфера // считываем строку в переменну. name printf("Input name: "); fgets(name, N, stdin); // проверяем ввод printf("Age: %d\n", age); printf("Name: %s\n", name); >
Результат работы программы:
Input age: 39 Input name: Tom Age: 39 Name: Tom
Стандартные математические функции в языке Си
Математические вычисления не ограничиваются лишь арифметическими действиями. Кроме них, можно ещё встретить корни, модули, логарифмы, тригонометрические функции и пр. Научимся же использовать подобные функции в своих программах.
Для использования математических функций нужно подключить заголовочный файл 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.
#include #include // подключаем math.h int main (void)
Вычислить синус угла ввёденного с клавиатуры. Угол вводится в градусах.
#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
Стандартная библиотека языка Си предоставляет ряд математических функций, которые определены в разных заголовочных файлах, но в основном определены в файле math.h .
Степерь числа. pow
Функция pow() , определенная в заголовочном файле math.h , возвращает степень числа:
#include #include int main(void) < printf("pow(2, 3) = %.f\n", pow(2, 3)); // 2 в степени 3 printf("pow(5, 2) = %.f\n", pow(5, 2)); // 5 в степени 2 return 0; >
Стоит отметить, что эта функция возвращает число типа double .
Для возведения в степень чисел типа float и long double также определены функции powf() и powl() соответственно.
Округление числа. round
Функция round() округляет число до ближайшего целого. В качестве параметра она принимает число типа double :
#include #include int main(void) < double n1 = 3.14; printf("round(%.2f) = %.2f\n", n1, round(n1)); // round(3.14) = 3.00 double n2 = 3.49; printf("round(%.2f) = %.2f\n", n2, round(n2)); // round(3.49) = 3.00 double n3 = 3.5; printf("round(%.2f) = %.2f\n", n3, round(n3)); // round(3.50) = 4.00 return 0; >
Квадратный корень. sqrt
Функция sqrt() возвращает квадратный корень числа типа double :
#include #include int main(void) < double n1 = 224; printf("sqrt(%.f) = %.f\n", n1, sqrt(n1)); // sqrt(224) = 15 double n2 = 36; printf("sqrt(%.f) = %.f\n", n2, sqrt(n2)); // sqrt(36) = 6 return 0; >
Для получения квадратного корня числа float также есть функция sqrtf() , а для числа типа long double — функция sqrtl()
abs
Функция abs , определенная в файле «stdlib.h», возвращает абсолютное значение числа
#include #include int main(void) < int m = -15; int n = 24; printf("abs(m) = %d \n", abs(m)); // abs(m) = 15 printf("abs(n) = %d \n", abs(n)); // abs(n) = 24 return 0; >
Для возвращения абсолютного значения чисел типов long и long long определены в «stdlib.h» функции labs и llabs соответственно. Для получения абсолютного значения для числа типа float в файле math.h определена функция fasbs . Все эти функцию работают аналогично abs()
- Глава 1. Введение в С
- Язык программирования С
- Компилятор GCC. Первая программа на Windows
- Компилятор Clang. Первая программа на Windows
- GCC. Первая программа на Linux
- Clang. Первая программа на MacOS
- Настройка параметров компиляции
- Локализация и кириллица в консоли
- Структура программы на Си
- Переменные
- Типы данных
- Консольный вывод. Функция printf
- Константы
- Арифметические операции
- Условные операции
- Поразрядные операции
- Операции присваивания
- Преобразование типов
- Условные конструкции
- Циклы
- Введение в массивы и строки
- Ввод в консоли. Функция scanf
- Что такое указатели
- Операции с указателями
- Арифметика указателей
- Константы и указатели
- Указатели, массивы и строки
- Массивы указателей и многоуровневая адресация
- Определение и описание функций
- Параметры функции
- Результат функции
- Рекурсивные функции
- Область видимости переменных
- Внешние объекты
- Указатели и массивы как параметры функции
- Указатели на функции
- Тип функции
- Функции как параметры других функций
- Функция как результат другой функции
- Функции с переменным количеством параметров
- Параметры командной строки
- Директива #include. Включение файлов
- Директива #define
- Макросы
- Условная компиляция
- Определение структур
- Структуры как элементы структур
- Указатели на структуры
- Массивы структур
- Структуры и функции
- Перечисления
- Объединения
- Битовые поля
- Выделение и освобождение памяти
- Выделение памяти для двухмерного массива произвольной длины
- Управление динамической памятью
- Указатель как результат функции
- Открытие и закрытие потоков
- Чтение и запись бинарных файлов
- Чтение и запись структур в файл
- Чтение и запись в файл и функции fwrite и fread
- Чтение и запись текстовых файлов
- Форматируемый ввод-вывод
- Позиционирование в файле
- Консольный ввод-вывод
- Форматированный ввод и вывод в строки. Функции sscanf и sprintf
- Заголовочные файлы стандартной библиотеки С
- Работа со строками
- Работа с памятью
- Работа с датами и временем
- Математические функции
- Преобразование строк в числа и чисел в строки
- Обобщения и макрос _Generic
- Поддержка Unicode и кодировки UTF-16 и UTF-32
- Платформо-независимые целочисленные типы
- Создание и запуск потоков
- Завершение потоков
- Мьютексы
- Сигналы и условные переменные синхронизации
- Семафоры
- Первая программа в Visual Studio
- Первая программа в Qt Creator
- Подключение Python
- Разделяемые библиотеки на Linux
Помощь сайту
410011174743222
Перевод на карту
Номер карты:
4048415020898850Контакты для связи: metanit22@mail.ru
Copyright © metanit.com, 2024. Все права защищены.
Математические функции в C — полное руководство
Вы хотите улучшить свои навыки программирования на C и узнать больше о математических функциях? Не смотрите дальше! В этой статье мы погрузимся в мир математических функций в программировании на C и рассмотрим различные функции, которые помогут вам решать сложные математические задачи. Являетесь ли вы новичком или опытным программистом, понимание этих функций необходимо для создания эффективных и точных программ.
Что такое математические функции в C?
Математические функции в C относятся к набору встроенных функций, облегчающих выполнение различных математических операций над числовыми данными. Эти функции варьируются от базовых арифметических операций, таких как сложение, вычитание, умножение и деление, до сложных, таких как тригонометрические и логарифмические функции.
Список математических функций в C?
В C есть много математических функций, которые программисты могут использовать для различных расчетов. Некоторые из этих математических функций перечислены ниже.
- пол(): Эта функция находит ближайшее целое число, меньшее или равное заданному параметру.
- потолок(): Эта функция возвращает ближайшее целочисленное значение, которое больше или равно переданному ей аргументу.
- круглый(): Эта функция возвращает ближайшее целочисленное значение аргумента float, double или big double. Всякий раз, когда десятичное значение попадает между «.1» и «.5», оно возвращает целочисленное значение, которое меньше заданного. Всякий раз, когда десятичное значение попадает между «0,6» и «0,9», возвращается целочисленное значение, которое больше, чем параметр.
- Фмод(): Когда число делится на другое число, эта функция возвращает остаток для заданных двух входных значений.
- Поу(): Это служит для вычисления мощности указанного числа.
- квт(): Эта функция вычисляет квадратный корень из переданного ей параметра.
- ствол() : Эта функция возвращает целочисленное значение после усечения десятичного значения от значения с плавающей запятой.
- бревно(): Эта функция вычисляет натуральный логарифм.
- лог10(): Эта функция находит значение логарифма по основанию 10.
- рожденный(): Эта функция вычисляет гиперболический синус.
- кош(): Эта функция вычисляет гиперболический косинус.
- танх(): Эта функция вычисляет гиперболический тангенс.
- без(): Эта функция вычисляет значение синуса.
- потому что (): Эта функция определяет значение косинуса.
- так(): Эта функция определяет значение тангенса.
- exp(): Эта функция вычисляет экспоненциальное значение «e» в степени x.
Как использовать математические функции в C?
Вот шаги по использованию математических функций в C:
Шаг 1: Ваша программа на C изначально должна содержать заголовочный файл math.h, в котором содержатся объявления для каждой из математических функций.
Шаг 2: Объявите переменные, над которыми вы хотите выполнять математические операции.
Шаг 3: Вызовите соответствующую математическую функцию для операции, которую вы хотите выполнить. Передайте переменные в качестве параметра функции.
Шаг 4: После выполнения операции с помощью математической функции выведите результат на консоль.
Вот пример, который принимает данные от пользователей и выполняет вычисления с использованием нескольких математических функций.
плавать на одной ;
printf ( ‘Пожалуйста, введите число с плавающей запятой: \n ‘ ) ;
сканф ( ‘%f’ , & на одной ) ;
инт ф ‘=’ пол ( на одной ) ;
printf ( ‘Минимальное значение %f = %d \n ‘ , на одной , ф ) ;
плавать с ‘=’ кврт ( на одной ) ;
printf ( ‘Значение квадратного корня из %f = %f \n ‘ , на одной , с ) ;
плавать п ‘=’ паф ( на одной , 5 ) ;
printf ( ‘мощность, рассчитанная как %f = %f \n ‘ , на одной , п ) ;
инт т ‘=’ ствол ( на одной ) ;
printf ( ‘усеченное значение %f = %d \n ‘ , на одной , т ) ;
плавать Это ‘=’ опыт ( на одной ) ;
printf ( ‘Экспоненциальное значение %f = %f \n ‘ , на одной , Это ) ;
инт с ‘=’ потолок ( на одной ) ;
printf ( ‘Потолочное значение %f = %d \n ‘ , на одной , с ) ;
инт р ‘=’ круглый ( на одной ) ;
printf ( ‘Округление значения %f = %d \n ‘ , на одной , р ) ;
плавать п ‘=’ бревно ( на одной ) ;
printf ( ‘Натуральный логарифм %f = %f \n ‘ , на одной , п ) ;
инт л ‘=’ журнал10 ( на одной ) ;
printf ( ‘Общий журнал %f = %d \n ‘ , на одной , л ) ;
плавать sn ‘=’ без ( на одной ) ;
printf ( ‘Значение синуса %f = %f \n ‘ , на одной , sn ) ;
плавать ш ‘=’ рожденный ( на одной ) ;
printf ( ‘Гиперболическое значение синуса %f = %f \n ‘ , на одной , ш ) ;
плавать Сп ‘=’ потому что ( на одной ) ;
printf ( ‘Значение косинуса %f = %f \n ‘ , на одной , Сп ) ;
плавать ч ‘=’ чушь ( на одной ) ;
printf ( «Гиперболическое значение косинуса %f = %f \n ‘ , на одной , ч ) ;
плавать тн ‘=’ так ( на одной ) ;
printf ( ‘Касательное значение %f = %f \n ‘ , на одной , тн ) ;
плавать й ‘=’ рыбный ( на одной ) ;
printf ( ‘Касательное гиперболическое значение %f = %f \n ‘ , на одной , й ) ;
инт число1 ‘=’ 14 ;
инт число2 ‘=’ 3 ;
инт бэр ‘=’ фмод ( число1 , число2 ) ;
printf ( ‘Остаточное значение = %d \n ‘ , на одной , бэр ) ;
возвращаться 0 ;Заключение
Понимание математических функций в C имеет решающее значение для любого программиста, который хочет создавать эффективные и точные программы. Используя встроенные функции, такие как пол, ceil, round, fmod, pow, sqrt, trunc, log, log10, sinh, cosh, tanh, sin, cos, tan и exp, программисты могут легко и точно выполнять сложные математические вычисления. Следуя простым шагам, описанным в этой статье, программисты могут включить эти функции в свой код и повысить эффективность своих математических вычислений.