注册 登录
编程论坛 C++教室

分数计算器

winnie96 发布于 2016-04-04 18:07, 5383 次点击
#include<iostream>
using namespace std;


class Fraction
{
    private:
        int f1;  //分子
        int f2;   //分母
    public:
        Fraction(int i=0,int j=1):f1(i),f2(j){}
        void gs()//格式函数
        {
            int q=f1;
            int w=f2;
            int p=q/w;
            for(;p!=0;)   //辗转相除法求最大公约数
            {
                int m=q%w;
                q=w;
                w=m;
               
                p=q/w;
               
               
            }
            f1/= w;
            f2/=w;
            
        }
        void jiaf(const Fraction &copy)//加法
        {
            f1=f1*copy.f2+f2*copy.f1;
            f2=f2*copy.f2 ;
        }
        void jianf(const Fraction &copy)//减法
        {
            f1=f1*copy.f2-f2*copy.f1;
            f2=f2*copy.f2;
        }
        void chengf(const Fraction &copy)//乘法
        {
            f1*=copy.f1;
            f2*=copy.f2;
        }
        void chuf(const Fraction &copy)//除法
        {
            f1*=copy.f2;
            f2*=copy.f1;
        }
        
        void Show()
        {
            cout<<"分子:"<<f1<<"分母:"<<f2<<endl;
        }
        Fraction( const Fraction &cp)  //复制构造函数
        {
            f1=cp.f1;
            f2=cp.f2;
        }
        ~Fraction(){
        }
    };



int main()
{
   
    void Show();
    cout<<"输入1个分数的分子与分母:"<<endl;
    int fz1,fm;
    cin>>fz1>>fm;
    Fraction fz(fz1,fm);
   
    cout<<"输入第二个分数的分子与分母:"<<endl;
    int fz2,fm2;
    cin>>fz2>>fm2;
    Fraction fr(fz2,fm2);
   
    Show();
    char c1;
    cin>>c1;
    fz.gs();
    fr.gs();
   
    while(c1!='-'&&c1!='+'&&c1!='/'&&c1!='*')
    {
        Show();
        cin>>c1;   //排除出入的符号不是 加减乘除的符号
    }
    switch(c1)
    {
        case '+':
            fz.jiaf(fr);
            break;
        case '-':
            fz.jianf(fr);
            break;
        case '*':
            fz.chengf(fr);
            break;
        case '/':
            fz.chuf(fr);
            break;
            
    }
    fz.gs();
    cout<<"执行:"<<c1<<endl;
    cout<<"结果是:"<<endl;
     
    fz.Show();
    return 0;

}
void Show(){
    cout<<"1 进行 +  运算"<<endl;
    cout<<"2 进行 — 运算"<<endl;
    cout<<"3 进行 /  运算"<<endl;
    cout<<"4 进行 *  运算"<<endl;
    cout<<"运算符号:"<<endl;
   
}
6 回复
#2
诸葛欧阳2016-04-04 18:27
怎么了?
#3
winnie962016-04-05 21:35
回复 楼主 winnie96
就是运行出来
答案是错的
#4
winnie962016-04-05 21:38
回复 2楼 诸葛欧阳
选做)分数计算器
        为分数定义一个类,命名为Fraction,将分数表示成int类型的两个值:一个表示分子,一个表示分母,类中定义成员函数完成分数的+,-,*,/运算,并定义一个成员函数对分数进行规格化,规格化之后,分母一定是正的,并且分子分母的最大公约数为1。
        仿照计算器的运算过程,选择相应功能完成分数运算(+,-,*,/,清零,退出)
#5
hjx11202016-04-05 22:12
楼主的类设计的不合理
类的实现代码写的方向错了
#6
yangfrancis2016-04-05 22:42
回复 楼主 winnie96
问题出在gs函数。这个函数估计是想约分吧。
改成这样即可:
void gs()//格式函数
        {
            int mx=abs(f1)<abs(f2)?abs(f1):abs(f2);
            for(int var=mx;var>0;var--)
            {
                if(f1%var==0&&f2%var==0)
                {
                    f1/=var;
                    f2/=var;
                    return;
                }
            }
            return;
        }
#7
winnie962016-04-07 21:25
谢谢
1