m0_74028958 2023-04-18 19:34 采纳率: 100%
浏览 25
已结题

不知道怎么错了#include <iostream>

不知道怎么错了


#include <iostream>
using namespace std;

class Rational{
    private:
    //int类型的私有数据成员numerator、denominator,表示分子、分母。
    int numerator,denominator;
    //私有成员函数gcd,用于求分子、分母的最大公约数。
    int gcd(){
        int x=numerator,y=denominator,t;
    while(x%y){
        t=y;
        y=x%y;
        x=t;
    }
    return y;
    }
    public:
    //带默认参数的构造函数,将分子、分母设置为给定的参数。分、分母的默认参数值分别为0、1。
    Rational(int tnumerator=0,int tdenominator=1){
        numerator=tnumerator;
        denominator=tdenominator;
    }
    //访问器函数getNumerator、getDenominator,分别用于访问分子、分母。
    int getNumerator(){
        return numerator;
    }
    int getDenominator(){
        return denominator;
    }
    //成员函数add、subtract、multiply、divide,实现有理数的+、-、×和÷运算。
    Rational add(Rational &b){
        int x=numerator,y=denominator;
        Rational q((x*b.getDenominator()+b.getNumerator()*y),y*b.getDenominator());
        retrun q;
    }
    Rational subtract(Rational &b){
        int x=numerator,y=denominator;
        Rational q(x*b.getDenominator()-b.getNumerator()*y,y*b.getDenominator());
        retrun q;
    }
    Rational multiply(Rational &b){
        int x=numerator,y=denominator;
        Rational q(x*b.getNumerator(),y*b.getDenominator());
        retrun q;
    }
    Rational divide(Rational &b){
        int x=numerator,y=denominator;
        Rational q(x*b.getDenominator(),y*b.getNumerator());
        retrun q;
    }
    //成员函数equals,判断一个有理数与另一个有理数是否相等。如果相等,返回true,否则返回false。
    bool equals(Rational &b){
        int x=numerator,y=denominator;
        if((x*b.getDenominator()*1.0)/(y*1.0*b.getNumerator())==1){
            return true;
        }
        else{
            return false;
        }
    }
    //成员函数doubleValue,将有理数转换为浮点数。
    double doubleValue(){
        int x=numerator,y=denominator;
        return (x*1.0)/(y*1.0);
    }
    //成员函数print,输出一个有理数。若分母为0,则输出“Inf”。
    void print(){
        if(denominator==0){
            cout<<"Inf"<<endl;
        }
        else if(numerator==0){
            cout<<"0"<<endl;
        }
        else if(denominator==numerator){
            cout<<"1"<<endl;
        }
        else if(denominator==1){
            cout<<numerator<<endl;
        }
        else{
            cout<<numerator/this.gcd()<<"/"<<denominator/this.gcd()<<endl;
        }
    }
};


/*【描述】 分数: 10
有理数是由分子和分母组成的a/b形式的数,a是分子,b是分
母。例如,1/3、3/4和10/4等都是有理数。有理数不能以0为
分母,但可以以0为分子。整数a等价于有理数a/1。
有理数用于包含分数的精确运算。例如,
1/3=0.333333……,这个数是不能用浮点数精确表示,为了
得到精确的结果,必须使用有理数。
一个有理数可能有很多与其值相等的其他有理数,例如,
1/3=2/6=3/9=4/12。为简单起见,用1/3表示所有值等于
1/3的有理数。因此,需要对有理数进行优化,使分子和分母
之间没有公约数(1除外)。求分子和分母绝对值的最大公约
数,然后将分子和分母都除以此最大公约数,得到有理数的优
化表示形式。*/
/*【输入】
4/2 2/3
【输出】
2
2/3
8/3
4/3
4/3
3
a!=b
0.666667*/
int main() {
 int x, y;
 char ignore;
 cin >> x >> ignore >> y;
 Rational a(x, y);
 cin >> x >> ignore >> y;
 Rational b(x, y);
 Rational c;
 a.print();
 b.print();
 c = a.add(b);
 c.print();
 c = a.subtract(b);
 c.print();
 c = a.multiply(b);
 c.print();
 c = a.divide(b);
 c.print();
 cout << (a.equals(b) ? "a==b" : "a!=b") << endl;
 cout << b.doubleValue() << endl;
 return 0;
}
  • 写回答

1条回答 默认 最新

  • 赵4老师 2023-04-19 11:25
    关注

    代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
    提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
    单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 创建了问题 4月18日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装