zoukankan      html  css  js  c++  java
  • C++复数四则运算的实现

    程序主要实现复数的加减乘,数乘,取共轭功能。

    将所有函数都定义为了成员函数。

    使用库函数atof将字符串转换为浮点型数据。

    函数主要难点在于处理输入。由于需要判断输入是选择退出还是继续,所以用字符串来接收输入,判断是否为q或Q后将字符串转换为double型。

    由于库函数中定义了complex类,因此,这里的类名改为comple。

    类声明

    #ifndef  COMPLEX_H_ 
    #define  COMPLEX_H_
    
    #include<iostream>
    using namespace std;
     
    class comple
    {
        private:
            double re;
            double im;
        public:
            comple(double r=0.0, double i=0.0);
            ~comple();
            comple operator+(const comple & a) const;
            comple operator-(const comple & a) const;
            comple operator*(const comple & a) const;
            comple operator~() const;
            comple operator*(const double x) const;
            friend ostream & operator<<(ostream & os, const comple & b);
            friend int operator>>(istream & is, comple & b);
            friend comple operator*(const double x, const comple & b);
            
    };
    
    #endif

    方法定义

    #include"complex0.h"
    #include<iostream>
    #include<math.h> //strlen函数头文件
    #include"string.h"
    #include<cstdlib>//atof函数头文件
    using namespace std;
    
    comple::comple(double r, double i)
    {
        re=r;
        im=i;
    }
    
    comple::~comple()
    {
        
    }
    
    comple comple::operator+(const comple & a) const
    {
        comple temp;
        temp.re=re+a.re;
        temp.im=im+a.im;
        return temp;
    }
    
    comple comple::operator-(const comple & a) const
    {
        comple temp;
        temp.re=re-a.re;
        temp.im=im-a.im;
        return temp;
    }
    
    comple comple::operator*(const comple & a) const
    {
        comple temp;
        temp.re=re*a.re-im*a.im;
        temp.im=re*a.im+im*a.re;
        return temp;
    }
    
    comple comple::operator~() const
    {
        comple temp;
        temp.re=re;
        temp.im=-im;
        return temp;
    }
    
    comple comple::operator*(const double x ) const
    {
        return comple(x*re,x*im);
    }
    
    ostream & operator<<(ostream & os, const comple & b)
    {
        os << "(" <<b.re <<"," <<b.im << "i)";
        return os;    
    }
    
    int operator>>(istream & is, comple & b) 
    {
        double c1,c2;
        char s[80],*str;
        int c,i;
        cout << "real:";
        is >> s;
        c=strlen(s);
        str=s;
        for(i=0;i<c;i++)
         if(s[i]=='q'||s[i]=='Q')
         return 0;
        
        if((s[0]>'0')&&(s[0]<'9'))
        c1=atof(str);
            
        cout << "imaginary:";
        is >> s;
        c=strlen(s);
        str=s;
        for(i=0;i<c;i++)
        {
         if(s[i]=='q'||s[i]=='Q')
         return 0;
        }
    
        if(s[0]>'0'&&s[0]<'9')
        c2=atof(str);
          
        b=comple(c1,c2);
        return 1;
        
    }
    
    
    
    comple operator*(double x, const comple & b) 
    {
        return b*x;
    }

    测试程序

    #include<iostream>
    #include"complex0.h"
    
    using namespace std;
    
    int main()
    {
        comple a(3.0,4.0);
        comple c;
        
        cout << "Enter a complex number (q to quit):
    ";
        while(cin >> c)
        {
            cout << "c is " << c << endl;
            cout << "complex conjugate is " << ~c <<endl;
            cout << "a is " << a << endl;
            cout << "a+c is " << a+c << endl;
            cout << "a-c is " << a-c << endl;
            cout << "a*c is " << a*c << endl;
            cout << "2*c is " << 2*c << endl;
            cout << "Enter a complex number (q to quit):
    ";
        }
        cout << "Done!
    ";
        return 0;
    }

    测试结果

    atof函数补充

    包含的头文件在c中为#include<stdlib.h>,c++中为include<cstdlib>

     http://www.cppblog.com/cxiaojia/archive/2012/02/24/166436.html

    http://my.oschina.net/Tsybius2014/blog/338234

    http://www.cnblogs.com/lidabo/archive/2012/07/10/2584706.html

    http://blog.csdn.net/cxh342968816/article/details/6627768

    标准c++库函数中复数四则运算程序

    #ifndef __MYCOMPLEX__
    #define __MYCOMPLEX__
    
    class complex; 
    complex&
      __doapl (complex* ths, const complex& r);
    complex&
      __doami (complex* ths, const complex& r);
    complex&
      __doaml (complex* ths, const complex& r);
    
    
    class complex
    {
    public:
      complex (double r = 0, double i = 0): re (r), im (i) { }
      complex& operator += (const complex&);
      complex& operator -= (const complex&);
      complex& operator *= (const complex&);
      complex& operator /= (const complex&);
      double real () const { return re; }
      double imag () const { return im; }
    private:
      double re, im;
    
      friend complex& __doapl (complex *, const complex&);
      friend complex& __doami (complex *, const complex&);
      friend complex& __doaml (complex *, const complex&);
    };
    
    
    inline complex&
    __doapl (complex* ths, const complex& r)
    {
      ths->re += r.re;
      ths->im += r.im;
      return *ths;
    }
     
    inline complex&
    complex::operator += (const complex& r)
    {
      return __doapl (this, r);
    }
    
    inline complex&
    __doami (complex* ths, const complex& r)
    {
      ths->re -= r.re;
      ths->im -= r.im;
      return *ths;
    }
     
    inline complex&
    complex::operator -= (const complex& r)
    {
      return __doami (this, r);
    }
     
    inline complex&
    __doaml (complex* ths, const complex& r)
    {
      double f = ths->re * r.re - ths->im * r.im;
      ths->im = ths->re * r.im + ths->im * r.re;
      ths->re = f;
      return *ths;
    }
    
    inline complex&
    complex::operator *= (const complex& r)
    {
      return __doaml (this, r);
    }
     
    inline double
    imag (const complex& x)
    {
      return x.imag ();
    }
    
    inline double
    real (const complex& x)
    {
      return x.real ();
    }
    
    inline complex
    operator + (const complex& x, const complex& y)
    {
      return complex (real (x) + real (y), imag (x) + imag (y));
    }
    
    inline complex
    operator + (const complex& x, double y)
    {
      return complex (real (x) + y, imag (x));
    }
    
    inline complex
    operator + (double x, const complex& y)
    {
      return complex (x + real (y), imag (y));
    }
    
    inline complex
    operator - (const complex& x, const complex& y)
    {
      return complex (real (x) - real (y), imag (x) - imag (y));
    }
    
    inline complex
    operator - (const complex& x, double y)
    {
      return complex (real (x) - y, imag (x));
    }
    
    inline complex
    operator - (double x, const complex& y)
    {
      return complex (x - real (y), - imag (y));
    }
    
    inline complex
    operator * (const complex& x, const complex& y)
    {
      return complex (real (x) * real (y) - imag (x) * imag (y),
                   real (x) * imag (y) + imag (x) * real (y));
    }
    
    inline complex
    operator * (const complex& x, double y)
    {
      return complex (real (x) * y, imag (x) * y);
    }
    
    inline complex
    operator * (double x, const complex& y)
    {
      return complex (x * real (y), x * imag (y));
    }
    
    complex
    operator / (const complex& x, double y)
    {
      return complex (real (x) / y, imag (x) / y);
    }
    
    inline complex
    operator + (const complex& x)
    {
      return x;
    }
    
    inline complex
    operator - (const complex& x)
    {
      return complex (-real (x), -imag (x));
    }
    
    inline bool
    operator == (const complex& x, const complex& y)
    {
      return real (x) == real (y) && imag (x) == imag (y);
    }
    
    inline bool
    operator == (const complex& x, double y)
    {
      return real (x) == y && imag (x) == 0;
    }
    
    inline bool
    operator == (double x, const complex& y)
    {
      return x == real (y) && imag (y) == 0;
    }
    
    inline bool
    operator != (const complex& x, const complex& y)
    {
      return real (x) != real (y) || imag (x) != imag (y);
    }
    
    inline bool
    operator != (const complex& x, double y)
    {
      return real (x) != y || imag (x) != 0;
    }
    
    inline bool
    operator != (double x, const complex& y)
    {
      return x != real (y) || imag (y) != 0;
    }
    
    #include <cmath>
    
    inline complex
    polar (double r, double t)
    {
      return complex (r * cos (t), r * sin (t));
    }
    
    inline complex
    conj (const complex& x) 
    {
      return complex (real (x), -imag (x));
    }
    
    inline double
    norm (const complex& x)
    {
      return real (x) * real (x) + imag (x) * imag (x);
    }
    
    #endif   //__MYCOMPLEX__

    测试程序

    #include <iostream>
    #include "complex.h"
    
    using namespace std;
    
    ostream&
    operator << (ostream& os, const complex& x)
    {
      return os << '(' << real (x) << ',' << imag (x) << ')';
    }
    
    int main()
    {
      complex c1(2, 1);
      complex c2(4, 0);
    
      cout << c1 << endl;
      cout << c2 << endl;
      
      cout << c1+c2 << endl;
      cout << c1-c2 << endl;
      cout << c1*c2 << endl;
      cout << c1 / 2 << endl;
      
      cout << conj(c1) << endl;
      cout << norm(c1) << endl;
      cout << polar(10,4) << endl;
      
      cout << (c1 += c2) << endl;
      
      cout << (c1 == c2) << endl;
      cout << (c1 != c2) << endl;
      cout << +c2 << endl;
      cout << -c2 << endl;
      
      cout << (c2 - 2) << endl;
      cout << (5 + c2) << endl;
      
      return 0;
    }
  • 相关阅读:
    JavaScript 的核心机制——event loop(最易懂版)
    关于敏捷讨论的感想
    前端,如何更优雅的面对异步
    广告行业中那些趣事系列10:推荐系统中不得不说的DSSM双塔模型
    书中自有黄金屋系列7:读《博世宁医学通识讲义》
    广告行业中那些趣事系列9:一网打尽Youtube深度学习推荐系统
    书中自有黄金屋系列6:读《浪潮之巅》-下篇
    书中自有黄金屋系列6:读《浪潮之巅》-上篇
    广告行业中那些趣事系列8:详解BERT中分类器源码
    书中自有黄金屋系列5:读《正面管教》
  • 原文地址:https://www.cnblogs.com/wujing-hubei/p/5190890.html
Copyright © 2011-2022 走看看