用C++实现复数的四则运算

前言

第一次写C++,用户界面感觉还行,内部实现不太高级,搞得能看。。。
想发出来留作纪念

功能介绍

这个代码包括一个复数类和四个运算函数,一个用户界面函数和一个功能函数
细节:当复数不足两个时无法进行运算,等等…忘了

结果展示

使用页面
在这里插入图片描述
建立复数
在这里插入图片描述
复数相加
在这里插入图片描述
其他功能诸如此类,不作展示

代码区

由于个人看着头疼所以将其拆开,在此声明这个代码无阉割
复数类

#include<iostream>
#include<stdlib.h>
using namespace std;

class Plural {
public:
	Plural(int r, int i);
	void Display();
	int Real;	//实部
	int Imag;	//虚部
};

Plural::Plural(int r, int i) {
	Real = r;
	Imag = i;
}
void Plural::Display() {
	cout << "z = " << Real << "+ " << Imag << "i" << endl;
}

全局变量
这就是我说的不高级的地方,我知道可以弄static呀什么的,我就是不会

//全局变量 
int n = 1;		//在后面用于辅助p指针
Plural* p[100];	//在后面用于指向复数对象

四则运算
别看我这写的花里胡哨,主要还是为了用户界面好看

//复数相加
void sum(const Plural& z1, const Plural& z2) {
	cout << "+---------------------------------------+" << endl; 
	cout << "  z1 + z2 = (" << z1.Real << "+ " << z1.Imag << "i) + ("
		<< z2.Real << "+ " << z2.Imag << "i) = " << z1.Real + z2.Real
		<< " + " << z1.Imag + z2.Imag << "i" << endl;
		cout << "+---------------------------------------+" << endl; 
}
//复数相减
void sub(const Plural& z1, const Plural& z2) {
	cout << "+---------------------------------------+" << endl; 
	cout << "  z1 - z2 = (" << z1.Real << "+ " << z1.Imag << "i) - ("
		<< z2.Real << "+ " << z2.Imag << "i) = " << z1.Real - z2.Real
		<< " + " << z1.Imag - z2.Imag << "i" << endl;
		cout << "+---------------------------------------+" << endl; 
}
//复数相乘
void mul(const Plural& z1, const Plural& z2) {
	cout << "+---------------------------------------+" << endl; 
	cout << "  z1 * z2 = (" << z1.Real << "+ " << z1.Imag << "i) * ("
		<< z2.Real << "+ " << z2.Imag << "i) = " << z1.Real * z2.Real - z1.Imag * z2.Imag
		<< " + " << z2.Real * z1.Imag + z1.Real * z2.Imag << "i" << endl;
		cout << "+---------------------------------------+" << endl; 
}
//复数相除
void div(const Plural& z1, const Plural& z2) {
	int rTop = z1.Real * z2.Real + z1.Imag * z2.Imag;
	int iTop = z2.Real * z1.Imag - z1.Real * z2.Imag;
	int Down = z2.Real * z2.Real + z2.Imag * z2.Imag;
	cout << "+----------------------------------------------------+" << endl; 
	cout << "  z1 / z2 = (" << z1.Real << "+ " << z1.Imag << "i) / ("
		<< z2.Real << "+ " << z2.Imag << "i) = (" << rTop << "/" << Down
		<< ") + (" << iTop << "/" << Down << ")i " << endl;
	cout << "+----------------------------------------------------+" << endl; 
}

打印菜单

//打印菜单
void makeMenu() {
	cout << "+---【欢迎使用复变四则运算系统】---+" << endl;
	cout << "+-----------------+----------------+" << endl;
	cout << "|   0.退出系统    |   1.输入复数   |" << endl;
	cout << "+-----------------+----------------+" << endl;
	cout << "|   2.复数相加    |   3.复数相减   |" << endl;
	cout << "+-----------------+----------------+" << endl;
	cout << "|   4.复数相乘    |   5.复数相除   |" << endl;
	cout << "+-----------------+----------------+" << endl;
	cout << "请输入指令:";
}

按键交互
与菜单结合食用更香哦

//按键交互
void keyDown() {
	int key = 0;
	cin >> key;
	switch (key) {
	case 0:
		cout << "退出成功!" << endl;
		exit(0);
		break;
	case 1:
		int m_real, m_imag;
//		Plural* p[100];
		cout << "请依次输入复数的实部和虚部:";
		cin >> m_real >> m_imag;
		p[n] = new Plural(m_real, m_imag);//用指针实现复数的调用
		n++;
		break;
	case 2:
		if (n >= 3) {
			int n1, n2;
			cout << "请选择要相加的复数(如:1 2):";
			cin >> n1 >> n2;
			sum(*p[n1], *p[n2]);
		} else cout << "您没有大于两个的复数!" << endl;
		break;
	case 3:
		if (n >= 3) {
			int n1, n2;
			cout << "请选择要相减的复数(如:1 2):";
			cin >> n1 >> n2;
			sub(*p[n1], *p[n2]);
		} else cout << "您没有大于两个的复数!" << endl;
		break;
	case 4:
		if (n >= 3) {
			int n1, n2;
			cout << "请选择要相乘的复数(如:1 2):";
			cin >> n1 >> n2;
			mul(*p[n1], *p[n2]);
		} else cout << "您没有大于两个的复数!" << endl;
		break;
	case 5:
		if (n >= 3) {
			int n1, n2;
			cout << "请选择要相除的复数(如:1 2):";
			cin >> n1 >> n2;
			div(*p[n1], *p[n2]);
		} else cout << "您没有大于两个的复数!" << endl;
		break;
	default:
		cout << "请输入正确指令!" << endl;
		break;
	}
}

主函数

int main() {
	while (1) {
		makeMenu();
		keyDown();
		system("pause");
		system("cls");
	}

	return 0;
}

没啥好讲的,只是为了留作纪念
今天的分享到此结束!

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
好的,我可以回答这个问题。以下是Complex类的完整代码示例: ```c #include <stdio.h> typedef struct Complex { float real; float imag; } Complex; Complex add(Complex a, Complex b) { Complex result; result.real = a.real + b.real; result.imag = a.imag + b.imag; return result; } Complex sub(Complex a, Complex b) { Complex result; result.real = a.real - b.real; result.imag = a.imag - b.imag; return result; } Complex mul(Complex a, Complex b) { Complex result; result.real = a.real * b.real - a.imag * b.imag; result.imag = a.real * b.imag + a.imag * b.real; return result; } Complex div(Complex a, Complex b) { Complex result; float denominator = b.real * b.real + b.imag * b.imag; result.real = (a.real * b.real + a.imag * b.imag) / denominator; result.imag = (a.imag * b.real - a.real * b.imag) / denominator; return result; } int main() { Complex a = {1.0, 2.0}; Complex b = {2.0, 3.0}; Complex c = add(a, b); printf("Add: (%.1f + %.1f i) + (%.1f + %.1f i) = %.1f + %.1f i\n", a.real, a.imag, b.real, b.imag, c.real, c.imag); Complex d = sub(a, b); printf("Sub: (%.1f + %.1f i) - (%.1f + %.1f i) = %.1f + %.1f i\n", a.real, a.imag, b.real, b.imag, d.real, d.imag); Complex e = mul(a, b); printf("Mul: (%.1f + %.1f i) * (%.1f + %.1f i) = %.1f + %.1f i\n", a.real, a.imag, b.real, b.imag, e.real, e.imag); Complex f = div(a, b); printf("Div: (%.1f + %.1f i) / (%.1f + %.1f i) = %.1f + %.1f i\n", a.real, a.imag, b.real, b.imag, f.real, f.imag); return 0; } ``` 使用该代码,可以实现两个复数相加、减、乘、除的运算。 另外,虽然您没有要求性能优化,但是因为复数运算的性质,可以考虑使用传统的公式代替中间变量求解,从而减少一些乘除计算的次数:例如,求和公式为`(a.real+b.real) + (a.imag+b.imag)i`,求积公式为`(a.real*b.real - a.imag*b.imag) + (a.real*b.imag + a.imag*b.real)i`,这些公式可以在四则运算之前转换,并不会影响代码复杂度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1ta-chi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值