咫尺天涯间124 2022-03-12 15:01 采纳率: 66.7%
浏览 6

这个代码不会输出,类与对象

#include
using namespace std;
class Rational{

int m;   // 分母

int n;   // 分子

public:

Rational(int nn=1,int mm=1); //构造

bool setM( int M); // 设置分母,注意不能为零

void setN( int N);  //设置分子

Rational  R_add( const Rational& A);   //加法操作, 返回和对象

void  R_sub(Rational & A, Rational &B);     //减法操作A-B

Rational  R_mul(Rational & A);    //乘法操作,返回乘积对象

void R_div(Rational & A, Rational &B); //除 A/B

void simple( );        //约分

void print();            //以分数形式显示,注意约分和符号

};
int main(){
Rational test;
Rational test2;
test.setN(4);
test.setM(8);
test.simple();
test.print();
test2.setN(3);
test2.setM(5);
test.R_add(test2).print();
test.R_sub(test,test2);
test.print();
test.R_mul(test);
test.print();
test.R_div(test,test2);
test.print();
}
Rational::Rational(int nn, int mm) {
n=nn;m=mm;
}
bool Rational::setM(int M) {
if(M==0)
return 0;
m=M;
return 1;
}
void Rational::setN(int N) {
n=N;
}
Rational Rational::R_add(const Rational &A) {
int M=mA.m;
int N=n
A.m+A.nm;
Rational add;
add.setN(N);
add.setM(M);
add.simple();
return add;
}
void Rational::R_sub(Rational &A, Rational &B) {
int M=A.m
B.m;
int N=A.nB.m-B.nA.m;
A.setM(M);
A.setN(N);
A.simple();
}
Rational Rational::R_mul(Rational &A) {
Rational mul;
mul.setN(A.nn);
mul.setM(A.m
m);
mul.simple();
return mul;
}
void Rational::R_div(Rational &A, Rational &B) {
A.setN(A.nB.m);
A.setM(A.m
B.n);
A.simple();
}
void Rational::print() {
simple();
cout<<n<<"/"<<m;
}
void Rational::simple() {
int max=((n>m)?n:m);
for(int i=0;i<=max;i++){
if(n%i==0&&m%i==0){
setM(m/i);
setN(n/i);
}
}
if(n<0&&m<0){
setM(-m);
setN(-n);
}
}

  • 写回答

2条回答 默认 最新

  • yun6853992 2022-03-12 17:42
    关注

    我修改了一下,反正是能运行了,但是你的加减乘除逻辑我没有关注。
    大思路没问题,就是一些细节。
    这里我记得我修改的逻辑:1: 注意除法分母不能为0 2:注意你的构造函数那样写,和默认构造函数一样的作用,有重复函数的意思。

    其他细节调整就好

    
    ```c
    //main.c
    #include <stdio.h>
    #include <array>
    #include <iostream>
    using namespace std;
    
    class Rational {
        int m;   // 分母
        int n;   // 分子
    public:
        Rational():n(1), m(1) {}
        Rational(int nn , int mm ); //构造
        bool setM(int M); // 设置分母,注意不能为零
        void setN(int N);  //设置分子
        Rational  R_add(const Rational& A);   //加法操作, 返回和对象
        void  R_sub(Rational& A, Rational& B);     //减法操作A-B
        Rational  R_mul(Rational& A);    //乘法操作,返回乘积对象
        void R_div(Rational& A, Rational& B); //除 A/B
        void simple();        //约分
        void print();            //以分数形式显示,注意约分和符号
    };
    int main() {
        Rational test;
        Rational test2;
        test.setN(4);
        test.setM(8);
        test.simple();
        test.print();
        test2.setN(3);
        test2.setM(5);
        test.R_add(test2).print();
        test.R_sub(test, test2);
        test.print();
        test.R_mul(test);
        test.print();
        test.R_div(test, test2);
        test.print();
    }
    Rational::Rational(int nn, int mm) {
        n = nn; 
        m = mm;
    }
    bool Rational::setM(int M) {
        if (M == 0)
            return 0;
        m = M;
        return 1;
    }
    void Rational::setN(int N) {
        n = N;
    }
    Rational Rational::R_add(const Rational& A) {
        int M = A.m + this->m;
        int N = A.n + this->n;
        Rational add;
        add.setN(N);
        add.setM(M);
        add.simple();
        return add;
    }
    void Rational::R_sub(Rational& A, Rational& B) {
        int M = A.m - B.m;
        int N = A.n - B.n;
        A.setM(M);
        A.setN(N);
        A.simple();
    }
    Rational Rational::R_mul(Rational& A) {
        Rational mul;
        mul.setN(A.n);
        mul.setM(A.m);
        mul.simple();
        return mul;
    }
    void Rational::R_div(Rational& A, Rational& B) {
        A.setN(A.n/B.m);
        A.setM(A.m/B.n);
        A.simple();
    }
    void Rational::print() {
        simple();
        cout << n << "/" << m <<endl;
    }
    void Rational::simple() {
        int max = ((n > m) ? n : m);
        //分目不要为0了
        for (int i = 1; i <= max; i++) {
            if ((n % i == 0) && (m % i == 0)) {
                setM(m / i);
                setN(n / i);
            }
        }
        if (n < 0 && m < 0) {
            setM(-m);
            setN(-n);
        }
    }
    
    

    ```

    评论

报告相同问题?

问题事件

  • 创建了问题 3月12日

悬赏问题

  • ¥15 用顺序表实现学生信息的管理: 学生类(Student):学号(no)、姓名(name)、分数(double),对学生信息进行存取、插入、删除、查找操作,给出代码和运行结果图。
  • ¥15 minted包显示缩进符的问题
  • ¥15 根据图片连接电路51单片机proteus汇编语言仿真4位数码管静态显示
  • ¥15 .net项目集成阿里云智能语音SDK
  • ¥15 c#关于WPS中网格线隐藏的属性
  • ¥100 请教一道在hcl模拟器上配置ospf的题
  • ¥15 在Sqlserver 使用OPENQUERY查询链接数据库MySQL
  • ¥50 如何给网页加一个必须阅读几秒后才可以点击确定的公告弹窗
  • ¥15 人脐静脉内皮细胞(HEUVC)重悬后自动聚团,怎么解决?
  • ¥15 pycharm中cv2安装后可以用但是无法补全或跳转函数,搜索后使用以下方法无效1.重新安装包(更换版本也不行,如何解决?