| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4608 人关注过本帖
标题:分数的四则运算
只看楼主 加入收藏
nfeb
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2015-12-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
分数的四则运算

在小学时我们就学习了分数的四则运算,即对两个分数进行加、减、乘、除等运算,现在我们尝试下用C语言来实现。

输入:

 分数1 操作符 分数2

输出:

 计算结果

要求:

计算结果使用分数表示,并且为最简化。例如结果为2/6,则被简化为1/3
 Maxgongyueshu为求最大公约数的函数。有些情况通不过,求大神看看那错了。

 #include <stdio.h>
#include <stdlib.h>
int Maxgongyueshu(int a,int b)
{
    int i,c;
    if (a<b)
    {
        c=a;
        a=b;
        b=c;
    }
    do
    {
        i=a%b;
        a=b;
        b=i;
    }while(i!=0);
    return a;
}
int main()
{
    int f1,f2,m1,m2,f,m,g;
    scanf("%d/%d+%d/%d",&f1,&m1,&f2,&m2);
    m=m1*m2;
    f=f1*m2+f2*m1;
    g=Maxgongyueshu(f,m);
    if (g==1)
    {
        if (m==1)
            printf("%d/%d+%d/%d=%d\n",f1,m1,f2,m2,f);
        else
            printf("%d/%d+%d/%d=%d/%d\n",f1,m1,f2,m2,f,m);
    }
    else if (g==m)
        printf("%d/%d+%d/%d=%d\n",f1,m1,f2,m2,f/m);
    else
    {
        f=f/g;
        m=m/g;
        printf("%d/%d+%d/%d=%d/%d\n",f1,m1,f2,m2,f,m);
    }
    return 0;
}
搜索更多相关主题的帖子: include 公约数 C语言 
2015-12-28 18:30
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:2 
先通分再化简,注意分子分母要单独运算

一片落叶掉进了回忆的流年。
2015-12-28 19:57
nfeb
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2015-12-24
收藏
得分:0 
回复 2楼 诸葛欧阳
那我思路是对的,求最大公约数的函数也没错。分情况讨论应该也全了。。我就怀疑是不是溢出了。
2015-12-28 22:04
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:2 
有些情况通不过,是什麼情況呀,說說
2015-12-28 22:31
nfeb
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2015-12-24
收藏
得分:0 
回复 4楼 ms268el8
我也不知道。都保密了。只有两个测试通过了。还有五个通不过。
2015-12-29 07:50
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:8 
对两个分数进行加、减、乘、除等运算
你的代码中,没有“减、乘、除”
2015-12-29 11:48
孤狼A组
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:73
专家分:121
注 册:2015-9-8
收藏
得分:8 
#include <math.h>
#include <stdlib.h>
#include <iostream.h>
//using namespace std;



class fraction
{
public:
    fraction(int x=0,int y=1);
    void print(); //以“/”的分数形式输出

    //定义重载运算符的友元函数
   
friend fraction operator+(fraction &a,fraction &b);
friend fraction operator-(fraction &a,fraction &b);
friend fraction operator*(fraction &a,fraction &b);
friend fraction operator/(fraction &a,fraction &b);



private:
    int numerator,denominator;  //numerator为分子,denominator为分母
    void optim();//  化简的函数
};

void fraction::optim()         
{
    int gcd,min,max;
    if(denominator==0)
    {
        cout<<"A zero denominator is invalid"<<endl;      
        exit(1);
    }
    gcd=(abs(numerator)>abs(denominator)?abs(denominator):abs(numerator));
   
    if(gcd==0) return;          //注意:return语句的特殊用法
   
    if(abs(numerator)>abs(denominator))
    {
        max=numerator;
        min=denominator;

    }
    else
    {
        min=numerator;
        max=denominator;
    }
    do
    {
        gcd=max%min;
        max=min;
        min=gcd;
    }while(gcd!=0);
    numerator/=max;
    denominator/=max;
    if(denominator<0)
    {
        numerator=-numerator;
        denominator=-denominator;
    }

}

fraction::fraction(int x,int y)
{
 numerator=x;
denominator=y;

}

void fraction::print()
{
   
cout<<numerator<<"/"<<denominator<<endl;
optim();


}



 fraction operator+(fraction &a,fraction &b)
 {return( fraction(a.numerator+b.numerator,a.denominator+b.denominator);
 }
 fraction operator-(fraction &a,fraction &b)
 {return( fraction(a.numerator-b.numerator,a.denominator-b.denominator);
 }
 fraction operator*(fraction &a,fraction &b)
{return( fraction(a.numerator*b.numerator,a.denominator*b.denominator);
 }
fraction operator/(fraction &a,fraction &b)
{return (a.numerator*b.denominator,a.denominator*b.numerator);
 }
int main()
{  fraction a(2,3),b(3,4),c(0,1),d(0,1),e(0,1),f(0,1);
   c=a+b;
   d=a-b;
   e=a*b;
   f=a/b;
   cout<<"c="<<endl;c.print();
   cout<<"d="<<endl;d.print();
   cout<<"e="<<endl;e.print();
   cout<<"f="<<endl;f.print();


    return 0;
}

   不知道学过c++没,应该能看懂吧








2015-12-29 13:52
nfeb
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2015-12-24
收藏
得分:0 
回复 7楼 孤狼A组
并没学过。。谢谢大神
2015-12-29 21:54
nfeb
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2015-12-24
收藏
得分:0 
回复 6楼 rjsp
谢谢!!!我太天真(粗心)了
2015-12-29 21:56
快速回复:分数的四则运算
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015630 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved