Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Sử dụng hàm toán học định sẵn (math.h) trong C

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^ypow(2, 3) = 8
sqrt(x)Căn bậc 2sqrt(16) = 4
cbrt(x)Căn bậc 3cbrt(27) = 3
exp(x)e^xexp(1) = 2.718...
log(x)Ln(x) (cơ số e)log(2.718) ≈ 1
log10(x)Log cơ số 10log10(100) = 2
sin/cos/tanLượng giác (radian)sin(M_PI/2) = 1
ceil(x)Làm tròn lênceil(3.2) = 4
floor(x)Làm tròn xuốngfloor(3.8) = 3
fabs(x)Giá trị tuyệt đối (float)fabs(-5.5) = 5.5
fmod(x, y)Modulo thựcfmod(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 double cho 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_PI khô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ả