Математические функции
Не обязательно писать все функции самому. В составе C есть библиотека готовых функций, и некоторыми из нихвы уже пользовались: printf, strlen, toupper. В заголовочном файлеmath.h находятся математические функции:
sqrt(x)возвращает квадратный корень изx:sqrt(16)равно4.0.pow(x, y)возвращаетxв степениy:pow(2, 10)равно1024.0.round(x)округляетxдо ближайшего целого:round(3.7)равно4.0. Половина округляется от нуля, поэтомуround(2.5)равно3.0.fabs(x)возвращает абсолютное значениеx, то есть число без знака минус:fabs(-3.5)равно3.5.
Это такие же функции, как те, что пишете вы: они принимают аргументы и возвращают значение. Все четыревозвращают double, поэтому выводите их через %f или %.2f. Чтобы имипользоваться, добавьте #include <math.h> в начало программы, рядом с#include <stdio.h>:
#include <math.h>
#include <stdio.h>
int main(void) {
printf("%.2f\n", sqrt(16));
printf("%.2f\n", pow(2, 10));
printf("%.2f\n", round(3.7));
printf("%.2f\n", fabs(-3.5));
return 0;
}Эта программа выводит:
4.00
1024.00
4.00
3.50Если вывести их через %d, здесь будет ошибка компиляции:format specifies type 'int' but the argument has type 'double'. А если забыть про#include, программа тоже не скомпилируется:
#include <stdio.h>
int main(void) {
printf("%.2f\n", sqrt(16));
return 0;
}main.c:4:22: error: call to undeclared library function 'sqrt' with type 'double (double)'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
4 | printf("%.2f\n", sqrt(16));
| ^
main.c:4:22: note: include the header <math.h> or explicitly provide a declaration for 'sqrt'
1 error generated.Первая строка вам знакома: вызов функции, которую компилятор ещё не знает, на этот раз библиотечной.Строка note говорит, что делать: подключить заголовок <math.h> или самомуобъявить sqrt. Теперь понятно, зачем нужен #include: в math.h находятсяпрототипы этих функций.
У абсолютного значения целого числа есть своя функция, abs, в другом заголовочном файле,stdlib.h (стандартная библиотека). Она принимает и возвращает int, поэтому выводить еёнужно через %d:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int morning = -5;
int noon = 3;
printf("Перепад температуры: %d\n", abs(noon - morning));
printf("%d\n", abs(-7));
return 0;
}Эта программа выводит:
Перепад температуры: 8
7Используйте abs для целых чисел и fabs для десятичных: abs(-2.5) молчавернёт 2. А библиотечные функции можно вызывать внутри собственных, что вы сейчас и сделаете.
Задание
- 1
Лестница прислонена к стене. Её верхний конец находится на высоте
heightметров на стене, анижний стоит вdistanceметрах от стены. Длина лестницы равна квадратному корню изheight * height + distance * distance(это теорема Пифагора). Добавьте#include <math.h>в начало и напишите функциюladder_lengthс двумя параметрамитипаdouble,heightиdistance, которая возвращает длину лестницы. Тогдапрограмма выведетЛестница: 5.00иЛестница: 3.61. - 2
Добавьте
#include <stdlib.h>и напишите функциюdifferenceс двумяпараметрами типаint,aиb, которая возвращает, насколько далеко друг отдруга два числа, всегда без знака минус:abs(a - b). В концеmain, передreturn 0;, выведитеdifference(-5, 3), а затемdifference(3, -5), каждое сподписьюРазница:. Обе строки будутРазница: 8.