(常用算法程序集)1.1复数运算类

//这个是 1.1复数运算类.h

#include<iostream>
#include<cmath>

using namespace std;
class complex
{
private:
	double R;
	double I;
public:
	complex(double real = 0, double imag = 0)
	{
		R = real;
		I = imag;
	}
	void ptr()
	{
		cout << "(" << R << "," << I << ")";
		return;

	}
	double cfabs()
	{
		double y;
		y = sqrt(R * R + I * I);
		return y;
	}
	double angle()
	{
		double y;
		y = atan2(I, R);
		return (y);
	}
	complex operator + (complex& c2)
	{
		complex c;
		c.R = R + c2.R;
		c.I = I + c2.I;
		return c;
	}
	complex operator - (complex& c2)
	{
		complex c;
		c.R = R - c2.R;
		c.I = I - c2.I;
		return c;
	}
	complex operator * (complex& c2)
	{
		complex c;
		double p, q, s;
		p = R * c2.R;
		q = I * c2.R;
		s = (R + I) * (c2.R + c2.I);
		c.R = p - q;
		c.I = s - p - q;
		return c;
	}
	complex operator / (complex& c2)
	{
		complex c;
		double p, q, s, w;
		p = R * c2.R;
		q = -I * c2.I;
		s = (R + I) * (c2.R - c2.I);
		w = (c2.R) * (c2.R) + (c2.I) * (c2.I);
		if (w + 1.0 != 1.0)
		{
			c.R = (p - q) / w;
			c.I = (s - p - q) / w;
		}
		else
		{
			c.R = 1e+300;
			c.I = 1e+300;
		}
		return c;
	}
	complex cpower(int n)
	{
		complex c;
		double r, q;
		q = atan2(I, R);
		r = sqrt(R * R + I * I);
		if (r + 1.0 != 1.0)
		{
			r = n * log(r);
			r = exp(r);
		}
		c.R = r * cos(n*q);
		c.I = r * sin(n * q);
		return c;
	}
	void croot(int n, complex* p)
	{
		complex c;
		int k;
		double r, q, t;
		if (n < 1) return;
		q = atan2(I, R);
		r = sqrt(R * R + I * I);
		if (r + 1.0 != 1.0)
		{
			r = (1.0/n) * log(r);
			r = exp(r);
		}
		for (k = 0; k < n; k++)
		{
			t = (2.0 * k * 3.1415926 + q) / n;
			c.R = r * cos(t);
			c.I = r * sin(t);
			p[k] = c;
		}
	}
	complex cexp()
	{
		complex c;
		double p;
		p = exp(R);
		c.R = p * cos(I);
		c.I = p * sin(I);
		return c;
	}
	complex clog()
	{
		complex c;
		double p;
		p = R * R + I * I;
		p = log(sqrt(p));
		c.R = p;
		c.I = atan2(I, R);
		return c;

	}
	complex csin()
	{
		complex c;
		double p, q;
		p = exp(I);
		q = exp(-I);
		c.R = sin(R) * (p + q) / 2;
		c.I = cos(R) * (p - q) / 2;
		return c;
	}
	complex ccos()
	{
		complex c;
		double p, q;
		p = exp(I);
		q = exp(-I);
		c.R = cos(R) * (p + q) / 2;
		c.I = -sin(R) * (p - q) / 2;
		return c;

	}

};
#include<iostream>
#include<cmath>
#include"1.1复数运算类.h"
using namespace std;

int main()
{
	int i;
	double a, b;
	complex c1, c2, c3, c, p[5];

	cin >> a >> b;
	c1 = complex(a, b);
	cout << "c1=";
	c1.ptr();
	cout << endl;

	cin >> a >> b;
	c2 = complex(a, b);
	cout << "c2=";
	c2.ptr();
	cout << endl;

	cin >> a >> b;
	c3 = complex(a, b);
	cout << "c3=";
	c3.ptr();
	cout << endl;

	c = c1 + c2;
	cout << "c1+c2=";
	c.ptr();
	cout << endl;

	c = c1 - c2;
	cout << "c1-c2=";
	c.ptr();
	cout << endl;

	c = c1 * c2;
	cout << "c1*c2=";
	c.ptr();
	cout << endl;

	c = c1 / c2;
	cout << "c1/c2=";
	c.ptr();
	cout << endl;

	c = c3.cpower(-3);
	cout << "c3的-3次方 = ";
	c.ptr();
	cout << endl;

	cout << "c3的5次方:" << endl;
	c3.croot(5, p);
	for (i = 0; i < 5; i++)
	{
		p[i].ptr();
		cout << endl;
	}
	
	c = c3.cexp();
	cout << "cexp(c3)=;";
	c.ptr();
	cout << endl;

	c = c3.clog();
	cout << "clog(c3) = ";
	c.ptr();
	cout << endl;

	c = c3.csin();
	cout << "csin(c3) = ";
	c.ptr();
	cout << endl;

	c = c3.ccos();
	cout << "ccos(c3) = ";
	c.ptr();
	cout << endl;

	return 0;

}

运行结果

1 2 2 3 1 4
c1=(1,2)
c2=(2,3)
c3=(1,4)
c1+c2=(3,5)
c1-c2=(-1,-1)
c1*c2=(-2,9)
c1/c2=(0.615385,0.0769231)
c3的-3次方 = (-0.00956646,0.0105842)
c3的5次方:
(1.28113,0.347902)
(0.0650174,1.32594)
(-1.24095,0.471573)
(-0.831967,-1.03449)
(0.726767,-1.11092)
cexp(c3)=;(-1.77679,-2.0572)
clog(c3) = (1.41661,1.32582)
csin(c3) = (22.9791,14.7448)
ccos(c3) = (14.7547,-22.9637)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值