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

Chương trình C cộng hai phân số

Giới thiệu

Cho hai phân số a/b và c/d (a,b,c,d là số nguyên, b,d ≠ 0). Tính tổng hai phân số.

Quy tắc: Để cộng hai phân số, mẫu số phải bằng nhau. Nếu khác nhau, quy đồng mẫu số (thường dùng BCNN), sau đó cộng tử số.

Ví dụ

Input: 1/4 + 2/12 → Output: 5/12
Giải thích: BCNN(4,12)=12 → 1/4 = 3/12 → 3/12 + 2/12 = 5/12

Input: 1/4 + 2/4 → Output: 3/4 (mẫu đã bằng nhau)

Thuật toán

Hàm gcd(a, b): // Ước chung lớn nhất (Euclid)
  Nếu a == 0 → trả về b
  Trả về gcd(b%a, a)

Hàm smallest(den3, n3): // Rút gọn phân số
  common_factor = gcd(n3, den3)
  den3 = den3 / common_factor
  n3 = n3 / common_factor

Hàm add_frac(n1, den1, n2, den2, n3, den3):
  den3 = gcd(den1, den2)          // UCLN mẫu số
  den3 = (den1*den2) / den3       // BCNN = tích / UCLN
  n3 = n1*(den3/den1) + n2*(den3/den2)  // Tử số mới
  Gọi smallest(den3, n3)          // Rút gọn

Hàm main:
  n1=1, den1=4, n2=2, den2=12
  Gọi add_frac → in kết quả

Code C

#include <stdio.h>

int gcd(int a, int b) {
    if (a == 0) return b;
    return gcd(b%a, a);
}

void smallest(int *den3, int *n3) {
    int common_factor = gcd(*n3, *den3);
    *den3 = *den3 / common_factor;
    *n3 = *n3 / common_factor;
}

void add_frac(int n1, int den1, int n2, int den2, int *n3, int *den3) {
    *den3 = gcd(den1, den2);
    *den3 = (den1 * den2) / *den3;  // BCNN
    *n3 = n1 * (*den3 / den1) + n2 * (*den3 / den2);
    smallest(den3, n3);
}

int main() {
    int n1=1, den1=4, n2=2, den2=12, den3, n3;
    add_frac(n1, den1, n2, den2, &n3, &den3);
    printf("%d/%d + %d/%d = %d/%d\n", n1, den1, n2, den2, n3, den3);
    return 0;
}

Kết quả

1/4 + 2/12 = 5/12