实现一个用分子分母的格式来表示有理数的结构体rational以及相关的函数,rational结构体之间可以做加减乘除运算,运算的结果仍然是rational

本文介绍了一个使用C语言实现的有理数结构体及其基本运算方法,包括加、减、乘、除,并提供了完整的源代码及示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现一个用分子分母的格式来表示有理数的结构体rational以及相关的函数,rational结构体之间可以做加减乘除运算,运算的结果仍然是rational。测试代码如下:


#include <stdio.h>



unsigned int gcd(unsigned int a, unsigned int b);


struct Rational {
    int ele;
    unsigned int den;
};


struct Rational make_rational(int ele, unsigned int den)
{
    struct Rational z;
    z.ele = ele;
    z.den = den;
    return z;
}


void print_rational(struct Rational a)
{
    if (0 == a.ele)
    {
        printf("0\n");
    } else {
        printf("%d/%d\n", a.ele, a.den);
    }
}


struct Rational add_rational(struct Rational a, struct Rational b)
{
    int gcdnumber;
    struct Rational z;
    gcdnumber = gcd(a.den, b.den);
    z.ele = a.ele * b.den + b.ele * a.den;
    z.den = b.den * a.den;

    return z;

}


struct Rational sub_rational(struct Rational a, struct Rational b)
{
    int gcdnumber;
    struct Rational z;
    gcdnumber = gcd(a.den, b.den);
    z.ele = a.ele * b.den - b.ele * a.den;
    z.den = b.den * a.den;
    return z;
}


struct Rational mul_rational(struct Rational a, struct Rational b)
{
    int gcdnumber;
    struct Rational z;
    gcdnumber = gcd(a.den, b.den);
    z.ele = a.ele * b.ele;
    z.den = a.den * b.den;
    return z;
}


struct Rational div_rational(struct Rational a, struct Rational b)
{
    int gcdnumber;
    struct Rational z;
    gcdnumber = gcd(a.den, b.den);
    z.ele = a.ele * b.den;

    return z;

}


unsigned int gcd(unsigned int a, unsigned int b)
{
    int r;
    while (b > 0)
    {
        r = a%b;
        a = b;
        b = r;
    }
    return a;
}


int main(void)
{
    struct Rational a = make_rational(1, 7);
    struct Rational b = make_rational(-1, 16);
    print_rational(add_rational(a, b));
    print_rational(sub_rational(a, b));
    print_rational(mul_rational(a, b));
    print_rational(div_rational(a, b));
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值