复数运算(C++实现)

  • 实验目的

  1. 了解运算符重载的实际意义。
  2. 掌握运算符重载的规则。
  3. 熟悉多种运算符重载的实际应用。
  • 实验内容

题目:定义复数类Complex,利用运算符重载实现复数的加、减、乘、除四则运算。
要求

  1. 复数类包括实部( r e a l real real)和虚部( i m a g e image image)两个数据成员,可以分别读取、设置和输出。
  2. 每个运算测试 3 3 3组数据。
    注意程序的健壮性,如除零操作。

原理

  1. 加法规则, ( a + b i ) + ( c + d i ) = ( a + c ) + ( b + d ) i (a+bi)+(c+di)=(a+c)+(b+d)i (a+bi)+(c+di)=(a+c)+(b+d)i
  2. 减法规则, ( a + b i ) − ( c + d i ) = ( a − c ) + ( b − d ) i (a+bi)-(c+di)=(a-c)+(b-d)i (a+bi)(c+di)=(ac)+(bd)i
  3. 乘法规则, ( a + b i ) ∗ ( c + d i ) = ( a c − b d ) + ( a d + b c ) i (a+bi)*(c+di)=(ac-bd)+(ad+bc)i (a+bi)(c+di)=(acbd)+(ad+bc)i
  4. 除法规则, ( a + b i ) / ( c + d i ) = ( a c + b d ) / ( c 2 + d 2 ) + ( b c − a d ) / ( c 2 + d 2 ) i (a+bi)/(c+di)=(ac+bd)/(c^2+d^2 )+(bc-ad)/(c^2+d^2 ) i (a+bi)/(c+di)=(ac+bd)/(c2+d2)+(bcad)/(c2+d2)i

提高(选做):通过运算符重载实现两个复数 a + b i a+bi a+bi c + d i c+di c+di之间的关系运算,包括大于(若 a 2 + b 2 > c 2 + d 2 a^2+b^2>c^2+d^2 a2+b2>c2+d2 a + b i > c + d i a+bi>c+di a+bi>c+di)、小于(若 a 2 + b 2 < c 2 + d 2 a^2+b^2<c^2+d^2 a2+b2<c2+d2 a + b i < c + d i a+bi<c+di a+bi<c+di)、等于(若 a = c a=c a=c b = d b=d b=d a + b i = c + d i a+bi=c+di a+bi=c+di)、不等于(若 a ! = c a!=c a=c b ! = d b!=d b=d a + b i ! = c + d i a+bi!=c+di a+bi=c+di)。

  • 实验结果(含源码)

#include <iostream>
using namespace std;

class Complex {
public:
	//构造函数
	Complex(double r = 0.0, double i = 0.0) :real(r), image(i) {}
	//键入复数
	void set() {
		cin >> real >> image;
	}
	
	//复数加法
	Complex operator+ (const Complex &c2) const {
		return Complex(real + c2.real, image + c2.image);
	}
	//复数减法
	Complex operator- (const Complex &c2) const {
		return Complex(real - c2.real, image - c2.image);
	}
	//复数乘法
	Complex operator* (const Complex &c2) const {
		return Complex(real*c2.real - image * c2.image, real*c2.image + image * c2.real);
	}
	//复数除法
	Complex operator/ (const Complex &c2) const {
		if (!c2.real && !c2.image) {
			exit(-1);
		}
		return Complex((real*c2.real + image * c2.image) / (c2.real*c2.real + c2.image*c2.image), 
			(image * c2.real - real * c2.image) / (c2.real*c2.real + c2.image*c2.image));
	}

	//比较运算>
	bool operator> (Complex &c2){
		if ((real*real + image * image) > (c2.real*c2.real + c2.image*c2.image)) {
			return true;
		}
		else {
			return false;
		}
	}
	//比较运算<
	bool operator< (Complex &c2) {
		if ((real*real + image * image) < (c2.real*c2.real + c2.image*c2.image)) {
			return true;
		}
		else {
			return false;
		}
	}
	//比较运算==
	bool operator== (Complex &c2) {
		if (real == c2.real&&image == c2.image) {
			return true;
		}
		else {
			return false;
		}
	}
	//比较运算!=
	bool operator!= (Complex &c2) {
		if (real != c2.real||image != c2.image) {
			return true;
		}
		else {
			return false;
		}
	}
	//输出显示
	void display() const{
		cout << real << "+" << image << "i";
	}
private:
	double real, image;
};
int main()
{
	Complex c1, c2, c3, c4, c5, c6;
	cout << "请分别输入c1,c2:";
	c1.set();
	c2.set();
	cout << "c1 = ";	c1.display(); cout << endl;
	cout << "c2 = ";	c2.display(); cout << endl;
	cout << endl;
	
	//四则运算
	c3 = c1 + c2;
	cout << "c1 + c2 = ";	c3.display(); cout << endl;
	c4 = c1 - c2;
	cout << "c1 - c2 = ";	c4.display(); cout << endl;
	cout << endl;
	
	c5 = c1 * c2;
	cout << "c1 * c2 = ";	c5.display(); cout << endl;
	c6 = c1 / c2;
	cout << "c1 / c2 = ";	c6.display(); cout << endl;
	cout << endl;

	//比较c3、c4大小
	if (c3 > c4) {
		c3.display(); cout << " > "; c4.display();
	}
	else if (c3 < c4) {
		c3.display(); cout << " < "; c4.display();
	}
	else {
		c3.display(); cout << " = "; c4.display();
	}
	cout << endl;

	//c5、c6是否相等
	if (c5 == c6) {
		c5.display(); cout << " = "; c6.display();
	}
	else {
		c5.display(); cout << " ≠ "; c6.display();
	}
	cout << endl;

	system("pause");
    return 0; 
}

测试数据一
测试1
测试数据二
测试2
测试数据三
测试3

  • 5
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值