Thư viện <math.h>
Cung cấp các hàm toán học: lũy thừa, căn bậc, logarit, lượng giác, làm tròn... Cần include <math.h> và compile với flag -lm (link libm).
Các hàm thường dùng
| Hàm | Chức năng | Ví dụ |
|---|---|---|
pow(x, y) | x^y | pow(2, 3) = 8 |
sqrt(x) | Căn bậc 2 | sqrt(16) = 4 |
cbrt(x) | Căn bậc 3 | cbrt(27) = 3 |
exp(x) | e^x | exp(1) = 2.718... |
log(x) | Ln(x) (cơ số e) | log(2.718) ≈ 1 |
log10(x) | Log cơ số 10 | log10(100) = 2 |
sin/cos/tan | Lượng giác (radian) | sin(M_PI/2) = 1 |
ceil(x) | Làm tròn lên | ceil(3.2) = 4 |
floor(x) | Làm tròn xuống | floor(3.8) = 3 |
fabs(x) | Giá trị tuyệt đối (float) | fabs(-5.5) = 5.5 |
fmod(x, y) | Modulo thực | fmod(5.5, 2) = 1.5 |
Chương trình 1: Tìm căn bậc 3 bằng pow()
#include <stdio.h>
#include <math.h>
int main() {
int so;
printf("Nhap so: ");
scanf("%d", &so);
// Căn bậc 3 = x^(1/3)
double ketQua = pow(so, 1.0 / 3.0);
printf("Can bac 3 cua %d = %.4f\n", so, ketQua);
printf("Kiem tra: %.4f^3 = %.4f\n", ketQua, pow(ketQua, 3));
return 0;
}
Kết quả
Nhap so: 64
Can bac 3 cua 64 = 4.0000
Kiem tra: 4.0000^3 = 64.0000
Chương trình 2: Demo các hàm làm tròn
#include <stdio.h>
#include <math.h>
int main() {
float a[] = {3.7, -4.2, -6.7, 5.0, -2.1};
int n = 5;
printf("%-10s %-10s %-10s %-10s %-10s\n", "Goc", "ceil", "floor", "round", "trunc");
for (int i = 0; i < n; i++) {
printf("%-10.1f %-10.0f %-10.0f %-10.0f %-10.0f\n",
a[i], ceil(a[i]), floor(a[i]), round(a[i]), trunc(a[i]));
}
return 0;
}
Kết quả
Goc ceil floor round trunc
3.7 4 3 4 3
-4.2 -4 -5 -4 -4
-6.7 -6 -7 -7 -6
5.0 5 5 5 5
-2.1 -2 -3 -2 -2
Giải thích các hàm làm tròn
- ceil: Làm tròn lên (về +∞) - ceil(-4.2) = -4
- floor: Làm tròn xuống (về -∞) - floor(-4.2) = -5
- round: Làm tròn gần nhất, .5 lên - round(-4.2) = -4, round(-4.5) = -5
- trunc: Cắt phần thập phân (về 0) - trunc(-4.2) = -4
Chương trình 3: Ứng dụng - Tính khoảng cách 2 điểm
#include <stdio.h>
#include <math.h>
int main() {
float x1, y1, x2, y2;
printf("Nhap toa do diem 1 (x y): ");
scanf("%f %f", &x1, &y1);
printf("Nhap toa do diem 2 (x y): ");
scanf("%f %f", &x2, &y2);
float dx = x2 - x1;
float dy = y2 - y1;
float kc = sqrt(dx*dx + dy*dy); // hoặc hypot(dx, dy)
printf("Khoang cach: %.4f\n", kc);
return 0;
}
Compile và chạy
gcc math_demo.c -o math_demo -lm
./math_demo
Lưu ý quan trọng
- Luôn dùng
doublecho tính toán chính xác (mặc định của math.h) - Góc lượng giác tính bằng radian, không phải độ:
rad = deg * M_PI / 180 M_PIkhông chuẩn C, một số compiler cần#define _USE_MATH_DEFINES(Windows)- Kiểm tra domain:
sqrt(-1),log(0)→ NaN/domain error - Dùng
isnan(),isinf(),fpclassify()để kiểm tra kết quả