复数的加减乘除及开方乘方运算

 /*
Abs   已重载。返回指定数字的绝对值。     

  Ceiling   返回大于或等于指定数字的最小整数。     
  Cos   返回指定角度的余弦值。     
  Cosh   返回指定角度的双曲余弦值。     
  Exp   返回   e   的指定次幂。      
  Pow   返回指定数字的指定次幂。     
  Round   已重载。返回最接近指定值的数字。     
  Sign   已重载。返回表示数字符号的值。     
  Sin   返回指定角度的正弦值。     
  Sinh   返回指定角度的双曲正弦值。     
  Sqrt   返回指定数字的平方根。     
  
*/
#include<iostream.h>
#include<math.h>
const double pi=3.1415926535897932384626433;

class Fushu{
private:
double x, y;
public:
Fushu(){x=0.0;y=0.0;}
Fushu operator +(const Fushu& f);
Fushu operator -(const Fushu& f);
Fushu operator *(const Fushu& f);
    Fushu operator /(const Fushu& f);
    void operator =(const Fushu& f);
    void cf(int n);
    void kf(int n);
    friend ostream& operator <<(ostream& Os, const Fushu& f);
    friend istream& operator >>(istream& In,  Fushu& f);
};


//   operator +   /

Fushu Fushu::operator +(const Fushu& f){
Fushu tem;
    tem.x=(*this).x+f.x;
    tem.y=(*this).y+f.y;
    return tem;
}


//   operator -   /

Fushu Fushu::operator -(const Fushu& f){
Fushu tem;
    tem.x=(*this).x-f.x;
    tem.y=(*this).y-f.y;
    return tem;
}


//   operator *   /

Fushu Fushu::operator *(const Fushu& f){
Fushu tem;
    tem.x=(*this).x*f.x-(*this).y*f.y;    
    tem.y=(*this).y*f.x+(*this).x*f.y;    
    return tem;
}


//   operator /   /

Fushu Fushu::operator /(const Fushu& f){
Fushu tem;
    tem.x=((*this).x*f.x+(*this).y*f.y)/((*this).y*(*this).y+f.y*f.y);
    tem.y=((*this).y*f.x-(*this).x*f.y)/((*this).y*(*this).y+f.y*f.y);
    return tem;
}


//   operator =   /

void Fushu::operator =(const Fushu& f){
// Fushu tem;
(*this).x=f.x;
(*this).y=f.y;
// return tem;
}

//   乘方   /
void Fushu::cf(int n){
Fushu tem;
//if(n<0) cout<<""
 if(n==0){
tem.x=1;
    tem.y=0;
}
else if (n==1){
tem.x=(*this).x;
tem.y=(*this).y;
}
else 
{
double r,j;
r=sqrt((*this).x*(*this).x+(*this).y*(*this).y);
j=atan((*this).y/(*this).x);
tem.x=pow(r,n)*cos(n*j);
tem.y=pow(r,n)*sin(n*j);

}
cout<<(*this)<<"乘"<<n<<"次方为:/n "<<tem<<endl;

}


//   开方   /
void Fushu::kf(int n){
Fushu tem;
double r,j;
r=sqrt((*this).x*(*this).x+(*this).y*(*this).y);
j=atan((*this).y/(*this).x);
cout<<(*this)<<"的开"<<n<<"次方为:"<<endl;
for(int i=0;i<n;i++){
tem.x=pow(r,1.0/n)*cos((j+i*pi*2.0)/n);
        tem.y=pow(r,1.0/n)*sin((j+i*pi*2.0)/n);
cout<<tem<<endl;
}
return;
}


//   输出重载   /

 ostream& operator <<(ostream &os, const Fushu &f){
if(f.y<0)
return os<<f.x<<f.y<<"i";
else
return os<<f.x<<"+"<<f.y<<"i";
}


//   输入重载   /

istream& operator >>(istream & in,  Fushu & f){
    in>>f.x>>f.y;
return in;
}

void main(){
Fushu a,b,c;

cout<<"请输入复数a和b/n";
cin>>a;
cin>>b;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
c=a+b;
cout<<"c=a+b="<<a+b<<endl;
c=a-b;
cout<<"c=a-b="<<a-b<<endl;
c=a*b;
cout<<"c=a*b="<<b*a<<endl;
c=a/b;
cout<<"c=a/b="<<a/b<<endl;

c.cf(2);
c.kf(2);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值