分数的四则运算及化简(C语言实现)

下面这个程序使用C语言的结构体实现了分数的加减乘除四则运算,同时将结果最简化。这里为了简化,将输入值固定了,如果需要根据输入进行计算,将main函数内的相应部分稍作修改即可。

#include <stdio.h>

struct fraction {
    int numerator;
    int denominator;
};

// 求解最大公约数
int find_gcd(int n1, int n2);

// 将分数化为最简形式
struct fraction reduce_fraction(struct fraction f);

// 分数的四则运算
struct fraction add_fractions(struct fraction f1, struct fraction f2);
struct fraction subtract_fractions(struct fraction f1, struct fraction f2);
struct fraction multiply_fractions(struct fraction f1, struct fraction f2);
struct fraction divide_fractions(struct fraction f1, struct fraction f2);

int main(void)
{

    struct fraction f = { 21, 3 };
    struct fraction f1 = { 8, 64 };
    struct fraction f2 = { 9, 711 };

    struct fraction reducedf = reduce_fraction(f);
    printf("%d/%d reduced to simplest terms: %d/%d\n", f.numerator,
        f.denominator, reducedf.numerator, reducedf.denominator);

    struct fraction addedf = add_fractions(f1, f2);
    printf("%d/%d + %d/%d = %d/%d\n", f1.numerator, f1.denominator,
        f2.numerator, f2.denominator, addedf.numerator, addedf.denominator);

    struct fraction subtractedf = subtract_fractions(f1, f2);
    printf("%d/%d - %d/%d = %d/%d\n", f1.numerator, f1.denominator,
        f2.numerator, f2.denominator, subtractedf.numerator,
        subtractedf.denominator);

    struct fraction multipliedf = multiply_fractions(f1, f2);
    printf("%d/%d * %d/%d = %d/%d\n", f1.numerator, f1.denominator,
        f2.numerator, f2.denominator, multipliedf.numerator,
        multipliedf.denominator);

    struct fraction dividedf = divide_fractions(f1, f2);
    printf("%d/%d / %d/%d = %d/%d\n", f1.numerator, f1.denominator,
        f2.numerator, f2.denominator, dividedf.numerator,
        dividedf.denominator);
    return 0;
}

int find_gcd(int n1, int n2)
{
    int temp;

    while (n1 != 0) {
        temp = n2 % n1;
        n2 = n1;
        n1 = temp;
    }

    return n2;
}

struct fraction reduce_fraction(struct fraction f)
{
    int gcd = find_gcd(f.numerator, f.denominator);
    f.numerator /= gcd;
    f.denominator /= gcd;
    return f;
}

struct fraction add_fractions(struct fraction f1, struct fraction f2)
{
    f1.numerator *= f2.denominator;
    f2.numerator *= f1.denominator;

    struct fraction result = {
        f1.numerator + f2.numerator,
        f1.denominator * f2.denominator
    };
    result = reduce_fraction(result);

    return result;
}

struct fraction subtract_fractions(struct fraction f1, struct fraction f2)
{
    f1.numerator *= f2.denominator;
    f2.numerator *= f1.denominator;

    struct fraction result = {
        f1.numerator - f2.numerator,
        f1.denominator * f2.denominator
    };
    result = reduce_fraction(result);

    return result;
}

struct fraction multiply_fractions(struct fraction f1, struct fraction f2)
{
    struct fraction result = {
        f1.numerator * f2.numerator,
        f1.denominator * f2.denominator
    };
    result = reduce_fraction(result);

    return result;
}
struct fraction divide_fractions(struct fraction f1, struct fraction f2)
{
    struct fraction result = {
        f1.numerator * f2.denominator,
        f1.denominator * f2.numerator
    };
    result = reduce_fraction(result);

    return result;
}
  • 11
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值