//这个是 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)