回 帖 发 新 帖 刷新版面

主题:请教高手类中调用的问题

要求:编程建立一个分数类,数据成员包括分子和分母,操作包括约分、通分、加减、显示等,代码如下:
#include <iostream>
using namespace std;

class fraction
{
    int above;  //分子
    int below;  //分母
public:
    fraction()
    {
        int above=0;
        int below=1;
    }
    void reduction();   //约分
    void makeCommond(fraction);//通分
    void add(fraction);//加
    void display();//显示
    void input();//输入
};

void fraction::reduction()
{
    int i,j;
    j=above>below?below:above;        //求最大公约数
    while(j=!0)
    {
        if(above%j==0&&below%j==0)
        {
            i=j;
            break;
        }
        else
        {
            j--;
        }
    }
    above=above/i;
    below=below/i;
}

void fraction::makeCommond(fraction s)
{
    int i,j,m,n;
    j=s.below<below?below:s.below;       //求最小公倍数
    while(j<=32767)
    {
        if(j%s.below==0&&j%below==0)
        {
            i=j;
            break;
        }
        else
            j++;
    }
    m=i/below;
    n=i/s.below;
    below=i;
    s.below=i;
    above=above*m;
    s.above=s.above*n;
}

void fraction::add(fraction s)
{
    s.makeCommond(s);
    below=below;
    above=above+s.above;
}

void fraction::display()
{
    cout<<"分子为:"<<above<<endl;
    cout<<"分母为:"<<below<<endl;
}

void fraction::input()
{
    int m,n;
    cout<<"请输入分子:";
    cin>>m;
    above=m;
    cout<<"请输入分母:";
    cin>>n;
    below=n;
}

void main()
{
    fraction s,s1;
    s.input();
    s1.input();
    s.reduction();
    s1.reduction();
    s.display();
    s1.display();
    s.makeCommond(s1);
    s.display();
    s1.display();

}


运行后:
请输入分子:
2
请输入分母:
4
请输入分子:
4
请输入分母:
6
结果:
分子为:2    //约分结果,错
分母为:4    //约分结果,错
分子为:4    //约分结果,错
分母为:6    //约分结果,错
分子为:6    //通分,对
分母为:12   //通分,对
分子为:4    //通分,错
分母为:6    //通分,错

也就是说约分后的结果并没有保存,通分后的结果只部分保存了,请问这是为什么?


回复列表 (共3个回复)

沙发

你这两句有意义吗?
above=above/i;
below=below/i;
i不是等于1吗?

板凳

i不一定是1,i是分子和分母的最大公约数,可能为1,这个函数是实现约分功能的

3 楼


谢谢一楼,i确实是1
约分函数错了,while语句应为: while(j!=0)
但是,通分函数的值只能部分返回是为什么,请继续指点

我来回复

您尚未登录,请登录后再回复。点此登录或注册