为什么算出来加法有的是错的

#include
using namespace std;
class Fen{
int zi;
int zm;
public:
Fen(int m=0,int n=1){zi=m;zm=n;}
void dao(){cout<<"倒数是:"<<zm<<"/"<<zi<<endl;}//倒数
Fen operator+(Fen q){
Fen sum;
if(zm==q.zm){
sum.zm=zm;
sum.zi=q.zi+zi;
}
else if(zm!=q.zm)
{
sum.zm=zmq.zm;
sum.zi=q.zizm+ziq.zm;
}
return sum;
}//加法
Fen operator-(Fen q){
Fen ca;
if(zm==q.zm){
ca.zm=zm;
ca.zi=zi-q.zi;
}
else if(zm!=q.zm)
{
ca.zm=zmq.zm;
ca.zi=zi
q.zm-q.zi*zm;
}
return ca;
}//减法
int operator>(Fen q){
if(zm==q.zm)
{
if(zi>q.zi) return 1;
}
if(zm!=q.zm)
{
if(zi
q.zm>q.zi*zm) return 1;
}
return 0;
}//比较大小
void show(){
int t,u,r;
t=zi;
u=zm;
if(zi==0) cout<<'0'<<endl;
if(zi>=zm)
{
if(zi%zm==0){cout<<(zi/zm)<<endl;}
if(zi%zm!=0)
{
while(zi%zm!=0)
{
r=zm;
zm=zi%zm;
zi=r;

           }
         cout<<(t/zm)<<"/"<<(u/zm)<<endl;
        }
    }
if(zi<zm)
    {
        if(zm%zi==0){cout<<"1"<<"/"<<(zm/zi)<<endl;}
        if(zm%zi!=0)
        {
          while(zm%zi!=0)
          {
            r=zi;
            zi=zm%zi;
            zm=r;
          }
          cout<<(t/zi)<<"/"<<(u/zi)<<endl;
        }
    }
}

};
int main(){
int n,m,c,d;
cin>>n>>m>>c>>d;
Fen a(n,m),b(c,d),s,ca;
a.dao();
a.show();
s=a+b;
s.show();
ca=a-b;
ca.show();
cout<<(a>b)<<endl;
return 0;
}

你的源码有部分的语法问题,我做了下修改:
1.头文件补全
2.你的代码中的加法、减法、比较大小中省略的“*”乘号,已补全
3.花括号有些地方你有些地方省略了,有些一行写完,有些是其他语法的习惯,我全部统一了,实在是看起来吃力,有点影响阅读
4.加法、减法增加了打印,打印了当前类成员分子分母的值加减传参的值
你说的有些加法是错的麻烦详细描述下,以下是我的输出和修改后的源码,希望能帮到你!!!
输出:

img

源码:


#include <iostream>
using namespace std;

class Fen
{
    int zi;
    int zm;
public:
    Fen(int m = 0, int n = 1)
    {
        zi = m;
        zm = n;
    }
    void dao()
    {
        cout << "倒数是:" << zm << "/" << zi << endl;
    }//倒数
    Fen operator+(Fen q)
    {
        Fen sum;
        
        if (zm == q.zm)
        {
            sum.zm = zm;
            sum.zi = q.zi + zi;
        }
        else if (zm != q.zm)
        {
            sum.zm = zm * q.zm;
            sum.zi = q.zi * zm + zi * q.zm;
        }
        cout << zi << "/" << zm << "+" << q.zi << "/" << q.zm << "=" << sum.zi << "/" << sum.zm << endl;
        return sum;
    }//加法
    Fen operator-(Fen q)
    {
        Fen ca;
        
        if (zm == q.zm)
        {
            ca.zm = zm;
            ca.zi = zi - q.zi;
        }
        else if (zm != q.zm)
        {
            ca.zm = zm * q.zm;
            ca.zi = zi * q.zm - q.zi * zm;
        }
        cout << zi << "/" << zm << "-" << q.zi << "/" << q.zm << "=" << ca.zi << "/" << ca.zm << endl;
        return ca;
    }//减法
    int operator>(Fen q)
    {
        if (zm == q.zm)
        {
            if (zi > q.zi) return 1;
        }
        if (zm != q.zm)
        {
            if (zi * q.zm > q.zi * zm) return 1;
        }
        return 0;
    }//比较大小
    void show()
    {
        int t, u, r;
        t = zi;
        u = zm;
        if (zi == 0)
        {
            cout << '0' << endl;
        }
        if (zi >= zm)
        {
            if (zi % zm == 0)
            {
                cout << (zi / zm) << endl;
            }
            if (zi % zm != 0)
            {
                while (zi % zm != 0)
                {
                    r = zm;
                    zm = zi % zm;
                    zi = r;

                }
                cout << (t / zm) << "/" << (u / zm) << endl;
            }
        }
        if (zi < zm)
        {
            if (zm % zi == 0)
            {
                cout << "1" << "/" << (zm / zi) << endl;
            }
            if (zm % zi != 0)
            {
                while (zm % zi != 0)
                {
                    r = zi;
                    zi = zm % zi;
                    zm = r;
                }
                cout << (t / zi) << "/" << (u / zi) << endl;
            }
        }
    }
};
int main() {
    int n, m, c, d;
    cin >> n >> m >> c >> d;
    Fen a(n, m), b(c, d), s, ca;
    a.dao();
    a.show();
    s = a + b;
    s.show();
    ca = a - b;
    ca.show();
    cout << (a > b) << endl;
    system("pause");
    return 0;
}

img

你代码格式有问题,没法帮你


#include <iostream>
using namespace std;
class Fen {
    int zi;
    int zm;
public:
    Fen(int m = 0, int n = 1) { zi = m; zm = n; }
    void dao() { cout << "倒数是:" << zm << "/" << zi << endl; }//倒数
    Fen operator+(Fen q) {
        Fen sum;
        if (zm == q.zm) {
            sum.zm = zm;
            sum.zi = q.zi + zi;
        }
        else if (zm != q.zm)
        {
            sum.zm = q.zm;
            sum.zi = q.zm + q.zi;
        }
        return sum;
    }//加法
    Fen operator-(Fen q) {
        Fen ca;
        if (zm == q.zm) {
            ca.zm = zm;
            ca.zi = zi - q.zi;
        }
        else if (zm != q.zm)
        {
            ca.zm = q.zm;
            ca.zi = q.zm - q.zi * zm;
        }
        return ca;
    }//减法
    int operator>(Fen q) {
        if (zm == q.zm)
        {
            if (zi > q.zi) return 1;
        }
        if (zm != q.zm)
        {
            if (q.zm > q.zi * zm) return 1;
        }
        return 0;
    }//比较大小
    void show() {
        int t, u, r;
        t = zi;
        u = zm;
        if (zi == 0) cout << '0' << endl;
        if (zi >= zm)
        {
            if (zi % zm == 0) { cout << (zi / zm) << endl; }
            if (zi % zm != 0)
            {
                while (zi % zm != 0)
                {
                    r = zm;
                    zm = zi % zm;
                    zi = r;

                }
                cout << (t / zm) << "/" << (u / zm) << endl;
            }
        }
        if (zi < zm)
        {
            if (zm % zi == 0) { cout << "1" << "/" << (zm / zi) << endl; }
            if (zm % zi != 0)
            {
                while (zm % zi != 0)
                {
                    r = zi;
                    zi = zm % zi;
                    zm = r;
                }
                cout << (t / zi) << "/" << (u / zi) << endl;
            }
        }
    }
};
int main() {
    int n, m, c, d;
    cin >> n >> m >> c >> d;
    Fen a(n, m), b(c, d), s, ca;
    a.dao();
    a.show();
    s = a + b;
    s.show();
    ca = a - b;
    ca.show();
    cout << (a > b) << endl;
    return 0;
}

你先把if语句的使用方法和逻辑搞清楚,看着程序就头大,if zm==q.zm,然后 else if zm!=q.zm,else后面的if难道还会有其他情况?在看你程序中那么多if,又是重复,又是错开,怎么能运行正常,自己好好理理吧

肯定是代码方面出了问题,你看一下他的那个逻辑,考虑问题要全面,肯定是有哪个地方没有考虑到

代码格式有问题,建议把格式以及逻辑理清楚

先把逻辑理清楚,if{ }else if{ } else