• 7.1设计并实现有理数库,使用整数表示分子和分母,完成有理数的加减乘除与化简运算


     1 //class_head.h
     2 class Complex
     3 {
     4 public:
     5        Complex()
     6        {molecules=0;denominator=0;}
     7        Complex(int n,int m);
    //对运算符的重载,c3默认会传第二个操作数的值,所以只要写一个参数
    //也可以这样的写法 Complex operator+(Complex &c2);
    8 Complex operator+(Complex c3); 9 Complex operator-(Complex c3); 10 Complex operator*(Complex c3); 11 Complex operator/(Complex c3); 12 Complex input(Complex &c);//实现对私有成员的赋值操作 13 void output(); 14 private: 15 int molecules; 16 int denominator; 17 void simplification();//化简 18 };
    //class_yuan.cpp
    #include<iostream>
    using namespace std;
    #include "class_head.h"
    #include<cmath>
    Complex::Complex(int n,int m)
    {
    molecules=n,denominator=m;
    simplification();
    }
    //使用了欧几里得算法(辗转相除法)利用两个数的公约数对于较小数与两数之间的余数的公约数 void Complex::simplification() { if(denominator<0) { molecules=-molecules; denominator=-denominator; } int a=abs(molecules);//abs()是取绝对值,包含在头文件<cmath>里面 int b=abs(denominator); while(b>0) { int t=a%b; a=b; b=t; } molecules=molecules/a; denominator=denominator/a; } Complex Complex::operator+(Complex c3) { int a=molecules; int b=denominator; int c=c3.molecules; int d=c3.denominator; int e=a*d+b*c; int f=b*d; return Complex(e,f); } Complex Complex::operator-(Complex c3) { c3.molecules=-c3.molecules; return operator+(c3); } Complex Complex::operator*(Complex c3) { int a=molecules; int b=denominator; int c=c3.molecules; int d=c3.denominator; int e=a*c; int f=b*d; return Complex(e,f); } Complex Complex::operator/(Complex c3) { int t=c3.molecules; c3.molecules=c3.denominator; c3.denominator=t; return operator*(c3); } Complex Complex::input(Complex &c) { int a,b; cout<<"输入分子 "; cin>>a; cout<<"输入分母 "; cin>>b; molecules=a; denominator=b; return c; } void Complex::output() { if(molecules%denominator==0) cout<<molecules/denominator; else cout<<molecules<<"/"<<denominator; }

      

    //main()
    #include<iostream>
    using namespace std;
    #include "class_head.h"
    int main()
    {
    int i;
    Complex c1,c2,c3;
    cout<<"¥¥输入第一个操作数¥¥"<<endl;
    c1.input(c1);
    cout<<"¥¥输入第二个操作数¥¥"<<endl;
    c2.input(c2);
    cout<<"请选择要进行的操作"<<endl;
    cout<<"1表示+法"<<endl;
    cout<<"2表示-法"<<endl;
    cout<<"3表示*法"<<endl;
    cout<<"4表示/法"<<endl;
    cin>>i;
    switch(i)
    {
    case 1:
    c3=c1+c2;
    cout<<"进行加法之后的结果为:"<<endl;
    cout<<"结果等于:";
    c3.output();
    cout<<endl;
    break;
    case 2:
    c3=c1-c2;
    cout<<"进行减法之后的结果为:"<<endl;
    cout<<"结果等于:";
    c3.output();
    cout<<endl;
    break;
    case 3:
    c3=c1*c2;
    cout<<"进行乘法之后的结果为:"<<endl;
    cout<<"结果等于:";
    c3.output();
    cout<<endl;
    break;
    case 4:
    c3=c1/c2;
    cout<<"进行除法之后的结果为:"<<endl;
    cout<<"结果等于:";
    c3.output();
    cout<<endl;
    break;
    }
    return 0;
    }
    

      

     如果要使用友元函数

    在vc中要将

    #include<iostream>

    改为

    #include<iostream.h>

    去掉using namespace std;

    #include<iostream.h>
    //using namespace std;
    #include<cmath>
    class Complex
    {
    public:
           Complex()
    	   {molecules=0;denominator=0;}
    	   Complex(int n,int m);
    //修改处
    	   friend Complex operator+(Complex &c1,Complex&c2);
    	   friend Complex operator-(Complex &c1,Complex&c2);
    	   Complex operator*(Complex c3);
    	   Complex operator/(Complex c3);
    	   Complex input(Complex &c);
    	   void output();
    private:
            int molecules;
    		int denominator;
    		void simplification();
    };
    
    Complex::Complex(int n,int m)
    {
    molecules=n,denominator=m;
    simplification();
    }
    void Complex::simplification()
    {
    if(denominator<0)
    {
    molecules=-molecules;
    denominator=-denominator;
    }
    int a=abs(molecules);
    int b=abs(denominator);
    while(b>0)
    {
    int t=a%b;
    a=b;
    b=t;
    }
    molecules=molecules/a;
    denominator=denominator/a;
    }
    Complex operator+(Complex &c1,Complex &c2)
    {
    int a=c1.molecules;
    int b=c1.denominator;
    int c=c2.molecules;
    int d=c2.denominator;
    int e=a*d+b*c;
    int f=b*d;
    return Complex(e,f);
    }
    Complex operator-(Complex &c1,Complex &c2)
    {
    c2.molecules=-c2.molecules;
    return operator+(c1,c2);
    }
    Complex Complex::operator*(Complex c3)
    {
    int a=molecules;
    int b=denominator;
    int c=c3.molecules;
    int d=c3.denominator;
    int e=a*c;
    int f=b*d;
    return Complex(e,f);
    }
    Complex Complex::operator/(Complex c3)
    {
    int t=c3.molecules;
    c3.molecules=c3.denominator;
    c3.denominator=t;
    return operator*(c3);
    }
    Complex Complex::input(Complex &c)
    {
    int a,b;
    cout<<"输入分子 ";
    cin>>a;
    cout<<"输入分母 ";
    cin>>b;
    molecules=a;
    denominator=b;
    return c;
    }
    void Complex::output()
    {
    if(molecules%denominator==0)
    cout<<molecules/denominator;
    else
    cout<<molecules<<"/"<<denominator;
    }
    int main()
    {
    int i;
    Complex c1,c2,c3;
    cout<<"¥¥输入第一个操作数¥¥"<<endl;
    c1.input(c1);
    cout<<"¥¥输入第二个操作数¥¥"<<endl;
    c2.input(c2);
    cout<<"请选择要进行的操作"<<endl;
    cout<<"1表示+法"<<endl;
    cout<<"2表示-法"<<endl;
    cout<<"3表示*法"<<endl;
    cout<<"4表示/法"<<endl;
    cin>>i;
    switch(i)
    {
    case 1:
    c3=c1+c2;
    cout<<"进行加法之后的结果为:"<<endl;
    cout<<"结果等于:";
    c3.output();
    cout<<endl;
    break;
    case 2:
    c3=c1-c2;
    cout<<"进行减法之后的结果为:"<<endl;
    cout<<"结果等于:";
    c3.output();
    cout<<endl;
    break;
    case 3:
    c3=c1*c2;
    cout<<"进行乘法之后的结果为:"<<endl;
    cout<<"结果等于:";
    c3.output();
    cout<<endl;
    break;
    case 4:
    c3=c1/c2;
    cout<<"进行除法之后的结果为:"<<endl;
    cout<<"结果等于:";
    c3.output();
    cout<<endl;
    break;
    }
    return 0;
    }
    

      

    作者:这些年读过的书
    出处: http://www.cnblogs.com/chenzinumber1/
    本文版权归作者与博客园所有,欢迎转载,但未经作者同意必须保留此段声明,文末要留有原文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    英语语法最终珍藏版笔记-9非谓语动词
    英语语法最终珍藏版笔记-8虚拟语气
    英语语法最终珍藏版笔记-7被动语态
    英语语法最终珍藏版笔记-6“情态动词+have+ done”的含义
    photonView 空指针异常
    What is Photon Server?
    photon server (1)
    Unity3D中的Coroutine及其使用(延时、定时调用函数)
    box head上身旋转问题
    unity-点乘和叉乘的应用
  • 原文地址:https://www.cnblogs.com/chenzinumber1/p/8275008.html
Copyright © 2020-2023  润新知