Untitled
unknown
plain_text
a year ago
4.5 kB
9
Indexable
#include <stdio.h> #include <stdlib.h> // Khai báo cấu trúc phân số typedef struct { int tuSo; int mauSo; } PhanSo; // Hàm nhập phân số từ bàn phím void nhapPhanSo(PhanSo *ps) { printf("Nhap tu so: "); scanf("%d", &(ps->tuSo)); printf("Nhap mau so: "); scanf("%d", &(ps->mauSo)); } // Hàm xuất phân số ra màn hình void xuatPhanSo(const PhanSo *ps) { printf("%d/%d\n", ps->tuSo, ps->mauSo); } // Hàm tính tổng mảng phân số PhanSo tinhTongMangPhanSo(const PhanSo *mangPhanSo, int n) { PhanSo tong = {0, 1}; // Khởi tạo tổng ban đầu là 0 for (int i = 0; i < n; i++) { tong.tuSo = tong.tuSo * mangPhanSo[i].mauSo + mangPhanSo[i].tuSo * tong.mauSo; tong.mauSo *= mangPhanSo[i].mauSo; } // Rút gọn phân số tổng nếu có thể int a = tong.tuSo; int b = tong.mauSo; while (b != 0) { int temp = b; b = a % b; a = temp; } tong.tuSo /= a; tong.mauSo /= a; return tong; } // Hàm tìm phân số lớn nhất trong mảng PhanSo timPhanSoLonNhat(const PhanSo *mangPhanSo, int n) { PhanSo max = mangPhanSo[0]; for (int i = 1; i < n; i++) { if ((float)mangPhanSo[i].tuSo / mangPhanSo[i].mauSo > (float)max.tuSo / max.mauSo) { max = mangPhanSo[i]; } } return max; } // Hàm tìm phân số nhỏ nhất trong mảng PhanSo timPhanSoNhoNhat(const PhanSo *mangPhanSo, int n) { PhanSo min = mangPhanSo[0]; for (int i = 1; i < n; i++) { if ((float)mangPhanSo[i].tuSo / mangPhanSo[i].mauSo < (float)min.tuSo / min.mauSo) { min = mangPhanSo[i]; } } return min; } // Hàm kiểm tra xem phân số có tồn tại trong mảng hay không int phanSoTonTaiTrongMang(const PhanSo *mangPhanSo, int n, const PhanSo *ps) { for (int i = 0; i < n; i++) { if (mangPhanSo[i].tuSo == ps->tuSo && mangPhanSo[i].mauSo == ps->mauSo) { return 1; // Phân số tồn tại trong mảng } } return 0; // Phân số không tồn tại trong mảng } // Hàm so sánh 2 phân số // Trả về -1 nếu ps1 < ps2, 0 nếu ps1 = ps2, 1 nếu ps1 > ps2 int soSanhPhanSo(const PhanSo *ps1, const PhanSo *ps2) { float value1 = (float)ps1->tuSo / ps1->mauSo; float value2 = (float)ps2->tuSo / ps2->mauSo; if (value1 < value2) return -1; else if (value1 > value2) return 1; else return 0; } int main() { int n; printf("Nhap so luong phan so: "); scanf("%d", &n); // Khởi tạo mảng phân số với kích thước n PhanSo *mangPhanSo = (PhanSo*)malloc(n * sizeof(PhanSo)); // Kiểm tra xem việc cấp phát bộ nhớ có thành công không if (mangPhanSo == NULL) { printf("Loi! Khong du bo nho."); return 1; } // Nhập các phân số vào mảng for (int i = 0; i < n; i++) { printf("Nhap phan so thu %d:\n", i + 1); nhapPhanSo(&mangPhanSo[i]); } // Tính tổng mảng phân số PhanSo tong = tinhTongMangPhanSo(mangPhanSo, n); printf("Tong cac phan so: "); xuatPhanSo(&tong); // Tìm phân số lớn nhất và nhỏ nhất PhanSo max = timPhanSoLonNhat(mangPhanSo, n); PhanSo min = timPhanSoNhoNhat(mangPhanSo, n); printf("Phan so lon nhat: "); xuatPhanSo(&max); printf("Phan so nho nhat: "); xuatPhanSo(&min); // Kiểm tra phân số có tồn tại trong mảng hay không PhanSo ps; printf("Nhap phan so can kiem tra:\n"); nhapPhanSo(&ps); if (phanSoTonTaiTrongMang(mangPhanSo, n, &ps)) { printf("Phan so ton tai trong mang.\n"); } else { printf("Phan so khong ton tai trong mang.\n"); } // So sánh 2 phân số PhanSo ps1, ps2; printf("Nhap phan so thu nhat:\n"); nhapPhanSo(&ps1); printf("Nhap phan so thu hai:\n"); nhapPhanSo(&ps2); int ketQua = soSanhPhanSo(&ps1, &ps2); if (ketQua == -1) { printf("Phan so thu nhat nho hon phan so thu hai.\n"); } else if (ketQua == 0) { printf("Hai phan so bang nhau.\n"); } else { printf("Phan so thu nhat lon hon phan so thu hai.\n"); } // Giải phóng bộ nhớ đã cấp phát cho mảng phân số free(mangPhanSo); return 0; }
Editor is loading...
Leave a Comment