设计一个函数实现两个分数的求积运算,并简化结果分数

题目描述

设计一个函数实现两个分数的求积运算,并简化结果分数

输入

分数1(一个空格)*(一个空格)分数2

[上面为每一行的输入格式(如果其中的一个分数的值为整数2也要写成分数的形式,可写成2/1或4/2等等),输入可有多行,直至文件结束]

输出

分数1(一个空格)*(一个空格)分数2(一个空格)=(一个空格)结果分数

[上面为每一行的输出格式,要求计算结果使用分数表示,并且为最简化。例如,结果为2/6,则被简化为1/3;若为2/1被简化为2。]

样例输入 
1/2 * 2/3
1/1 * 8/2
样例输出 
1/2 * 2/3 = 1/3
1/1 * 8/2 = 4

#include <stdio.h>
int jishuan (int *a,int *b,int *c,int *d);
int main()
{
    int mo1,de1,mo2,de2;
    while (scanf("%d/%d * %d/%d",&mo1,&de1,&mo2,&de2)!=EOF){
        printf("%d/%d * %d/%d = ",mo1,de1,mo2,de2);
        jishuan (&mo1,&de1,&mo2,&de2);                //利用指针返回两个值
    }
}
int jishuan (int *a,int *b,int *c,int *d)
{
    int m,n;
    int i,j;
        m=(*b)*(*d);                        //分母
        n=(*a)*(*c);                        //分子
    for (i=2;i<100;i++){                //求分子分母公因子
        if (n%i==0&&m%i==0){
                n/=i;
                m/=i;
        }
    }
    for (i=2;i<100;i++){                        //重复几次防止出现16/4约一次后8/2还是不是最简
        if (n%i==0&&m%i==0){
                n/=i;
                m/=i;
        }
    }
    for (i=2;i<100;i++){
        if (n%i==0&&m%i==0){
                n/=i;
                m/=i;
        }
    }
    if (m!=1)                                        //判断是否是整数
    printf("%d/%d\n",n,m);
    else printf("%d\n",n);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用C语言实现两个分数运算。具体实现方法如下: 1. 定义一个结构体来表示分数,结构体包含分子和分母两个成员变量。 ``` struct fraction { int numerator; // 分子 int denominator; // 分母 }; ``` 2. 编写一个函数来计算两个分数的乘函数的参数为两个分数结构体。 ``` struct fraction multiply(struct fraction f1, struct fraction f2) { struct fraction result; result.numerator = f1.numerator * f2.numerator; result.denominator = f1.denominator * f2.denominator; return result; } ``` 3. 简化结果分数,即将分子和分母约分到最简形式。可以编写一个函数实现分数的约分操作。 ``` struct fraction simplify(struct fraction f) { int gcd = get_gcd(f.numerator, f.denominator); f.numerator /= gcd; f.denominator /= gcd; return f; } int get_gcd(int a, int b) { if (b == ) { return a; } else { return get_gcd(b, a % b); } } ``` 4. 在主函数中调用上述函数,输入两个分数,计算它们的乘并输出结果。 ``` int main() { struct fraction f1, f2, result; printf("请输入第一个分数的分子和分母:"); scanf("%d%d", &f1.numerator, &f1.denominator); printf("请输入第二个分数的分子和分母:"); scanf("%d%d", &f2.numerator, &f2.denominator); result = multiply(f1, f2); result = simplify(result); printf("两个分数的乘为:%d/%d\n", result.numerator, result.denominator); return ; } ``` 以上就是用C语言实现两个分数运算,并简化结果分数的方法。 ### 回答2: 要实现两个分数运算,我们必须要找到它们的乘,即分子相乘作为新的分子,分母相乘作为新的分母。但是得到新的分子和分母后,还要对它们进行简化,即约分,这样才能得到最简分数。下面以分数a/b和c/d为例,来详细说明如何用C语言实现这个运算,具体步骤如下: 1. 读入分数a/b和c/d,让用户输入这两个分数的数值,用变量a、b、c、d存储它们。 2. 计算新分子和分母,定义两个变量p和q,并将它们初始化为1,然后用下面的公式计算它们的值: p = a * c; q = b * d; 3. 约分,使用一个最大公因数的函数gcd,先出p和q的最大公因数x,然后用p除以x得到新的分子,用q除以x得到新的分母,即: x = gcd(p, q); p = p / x; q = q / x; 4. 输出结果,将最简分数p/q输出给用户即可。 以下是完整代码实现: ```c #include <stdio.h> // 两个数的最大公约数 int gcd(int m, int n) { int r; while(n != 0) { r = m % n; m = n; n = r; } return m; } int main() { int a, b, c, d; int p, q, x; printf("请输入两个分数:a/b c/d\n"); scanf("%d/%d %d/%d", &a, &b, &c, &d); // 计算新分子和分母 p = a * c; q = b * d; // 约分 x = gcd(p, q); p = p / x; q = q / x; printf("%d/%d", p, q); return 0; } ``` 通过以上代码,我们就可以实现两个分数运算,并将结果简化成最简分数。这个程序还可以进一步优化,比如在输入时进行分数的化简,输出时判断分数是否真的是正确的,等等。大家可以根据实际需要进行修改和扩展。 ### 回答3: 分数可以理解为有理数的一种表示方式,其有分子和分母两部分组成,分母不能为0。在C语言中,可以使用结构体体来表示分数,结构体中有两个属性分别表示分子和分母。 struct Fraction{ int num; // 分子 int den; // 分母 }; 实现两个分数运算,首先要根据乘法规则,将两个分数的分子和分母相乘,然后将结果简化为最简分数。 首先,定义一个函数multiply(),其参数为两个分数。 struct Fraction multiply(struct Fraction f1, struct Fraction f2){ struct Fraction result; result.num = f1.num * f2.num; // 分子相乘 result.den = f1.den * f2.den; // 分母相乘 // 将结果化为最简分数 int gcd = getGCD(result.num,result.den); //分子与分母的最大公约数 result.num /= gcd; result.den /= gcd; return result; } 其中,getGCD()函数用于两个数的最大公约数,可以使用辗转相除法或者欧几里得算法实现。在上述代码中,我们调用了这个函数出分子和分母的最大公约数,从而将结果分数化为最简分数。 在实际使用中,我们可以通过main()函数来调用multiply()函数实现分数的乘法运算。如下所示: int main(){ struct Fraction f1 = {1, 2}; struct Fraction f2 = {3, 4}; struct Fraction result = multiply(f1,f2); printf("%d/%d", result.num, result.den); return 0; } 以上代码定义了两个分数f1和f2,它们的值分别为1/2和3/4,然后通过调用multiply()函数出它们的。最后,我们使用printf()函数将结果分数输出。 总之,实现分数的乘法运算并将结果化为最简分数,是一个基础的C语言编程问题。通过使用结构体和适当的算法,我们可以轻松地完成这个任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值