题目:
实现一个复数类,要求重载加减乘除及输入输出,输出保留两位小数。分别输入两个复数的实部和虚部,依次输出加减乘除后的结果。
例:
输入:
3 4
7 8
输出:
10.00+12.00i
-4.00-4.00i
-11.00+52.00i
0.47+0.04i
输入:
0 0
5 0
输出 (当虚部为0时,可以不输出)
5
-5
0
0
程序代码:
#include <iostream>
#include <iomanip>
using namespace std;
class ComplexNumber //定义ComplexNumber复数类
{
public:
ComplexNumber(double xx=0.00,double yy=0.00) //构造函数
{
x=xx;
y=yy;
}
ComplexNumber operator+ (ComplexNumber &z); //声明复数类加法
ComplexNumber operator- (ComplexNumber &z); //声明复数类减法
ComplexNumber operator* (ComplexNumber &z); //声明复数类乘法
ComplexNumber operator/ (ComplexNumber &z); //声明复数类除法
friend istream& operator >> (istream &in,ComplexNumber &z); //声明友元函数,重载输入
friend ostream& operator << (ostream &out,const ComplexNumber &z); //声明友元函数,重载输出
private:
double x,y;
};
ComplexNumber ComplexNumber::operator+ (ComplexNumber &z) //实现复数类加法
{
ComplexNumber t;
t.x=x+z.x;
t.y=y+z.y;
return t;
}
ComplexNumber ComplexNumber::operator- (ComplexNumber &z) //实现复数类减法
{
ComplexNumber t;
t.x=x-z.x;
t.y=y-z.y;
return t;
}
ComplexNumber ComplexNumber::operator* (ComplexNumber &z) //实现复数类乘法
{
ComplexNumber t;
t.x=(x*z.x)-(y*z.y);
t.y=(z.y*x)+(y*z.x);
return t;
}
ComplexNumber ComplexNumber::operator/ (ComplexNumber &z) //实现复数类除法
{
ComplexNumber t;
t.x=((x*z.x)+(y*z.y)) / ((z.x*z.x)+(z.y*z.y));
t.y=((y*z.x)-(x*z.y)) / ((z.x*z.x)+(z.y*z.y));
return t;
}
istream & operator >> (istream &in,ComplexNumber &z) //实现重载输入
{
in>>z.x>>z.y;
return in;
}
ostream & operator << (ostream &out,const ComplexNumber &z) //实现重载输出
{
if(z.y>0) //虚部大于0时,输出为复数类,且有加号
{
out<<fixed<<setprecision(2)<<z.x;
out<<"+"<<fixed<<setprecision(2)<<z.y<<"i";
return out;
}
else if(z.y<0) //虚部小于0时,输出为复数类,没有加号
{
out<<fixed<<setprecision(2)<<z.x;
out<<fixed<<setprecision(2)<<z.y<<"i";
return out;
}
else if(z.y==0) //虚部为0时,直接输出实部
{
out<<z.x;
return out;
}
}
void CN() //计算函数,实现复数类的四则运算
{
ComplexNumber cn1, cn2;
std::cin >> cn1 >> cn2;
std::cout<<cn1+cn2 << std::endl;
std::cout<<cn1 - cn2 << std::endl;
std::cout<<cn1*cn2 << std::endl;
std::cout<<cn1 / cn2 << std::endl;
}
int main() //主函数
{
CN();
return 0;
}