/*定义一个分数类,分子分母各为私有成员, 规则:默认构造函数分数为1 分子分母要以最简形式存放。如3/9=1/3 定义成员Add,Sub,Mul和Div计算结果仍以最简形式存放 以浮点形式打印分数 思路:问题1.如何对分数约分。分子分母各除以他们的最大公约数 问题2.加减乘除运算 加:通分后加结果再约分 减:通分后减结果再约分 乘:分子乘以分子,分母乘以分母,然后约分。 除:除就等于乘以一个数的倒数。 问题3.浮点式打印 分子除以分母*/ #include <iostream> using namespace std; int gcd(int a,int b){ if(b)//b!=0时递归,用辗转相除发计算最大公约数 return gcd(b,a%b); return a;//b==0,此时a即为最大公约数 } class fraction { public: fraction():numerator(1),denominator(1){} fraction(int x,int y){numerator=x;denominator=y;} fraction Add(fraction &a); fraction Sub(fraction &a); fraction Mul(fraction &a); fraction Div(fraction &a); void Print(){cout<<"分数显示"<<numerator<<"/"<<denominator<<endl;cout<<"浮点数显示"<<(float)numerator/(float)denominator<<endl;} private: int numerator; int denominator; }; fraction fraction::Add(fraction &a) { fraction c; c.denominator=a.denominator*denominator; c.numerator=c.denominator/a.denominator*a.numerator+c.denominator/denominator*numerator; int gys=gcd(c.denominator,c.numerator); c.denominator/=gys; c.numerator/=gys; return c; } //以下函数的实现同上 int main() { int x,y; cout<<"请输入分子,和分母"<<endl; cin>>x>>y; fraction a(x,y); int m,n; cout<<"请输入分子,和分母"<<endl; cin>>m>>n; fraction b(m,n); a.Print(); b.Print(); a.Add(b).Print(); return 0; }