C++中的复数
C++中的复数操作在C语言基础上引进了面向对象的特性,在 C++
头文件在 complex
中定义了一个 complex
类用来表示复数。同时为了兼容 C
的 complex
类型,也提供了一个 complex.h
的头文件。 不同的是,在 complex.h
头文件中, complex
关键字被废弃,只能使用 _Complex
和 __complex__
来使用 C风格的复数形式。
- 复数的定义
在C++中可以使用两种方式定义一个复数,一个使用C风格 _Complex
和 __complex__
,一个是使用 complex
类。
#include <iostream>
#include <complex>
#include <complex.h>
using namespace std;
int main(int argc, char *argv[])
{
o complex<double> mycomplex(2.000,2);
_Complex double mycomplex2 = 2.000 + 3I;
__complex__ double mycomplex3 = 2.000 + 4I;
cout << mycomplex << endl;
cout << "(" << creal(mycomplex2) << "," << cimag(mycomplex2) << ")" << endl;
cout << "(" << creal(mycomplex3) << "," << cimag(mycomplex3) << ")" << endl;
return 0;
}
- 复数的基本操作函数
在C++中既可以使用 C
风格的相关函数处理 C
风格的复数形式。
函数 | 功能 |
---|---|
creal | 获取复数的实部 |
cimag | 获取复数的虚部 |
conj | 获取复数的共轭 |
carg | 获取,复平面上穿过原点和复数在复平面表示的点,的直线和实数轴之间的夹角 |
cproj | 返回复数在黎曼球面上的投影 |
也可以使用 C++相关数值操作方法,处理 complex
形式的复数。
方法 | 功能 |
---|---|
real | 获取复数的实部 |
imag | 获取复数的虚部 |
abs | 获取复数的绝对值 |
arg | 获取,复平面上穿过原点和复数在复平面表示的点,的直线和实数轴之间的夹角 |
norm | 获取复数的范数 |
conj | 获取复数的共轭 |
polar | 获取极坐标对应的复数 |
proj | 返回复数在黎曼球面上的投影 |
#include <iostream>
#include <complex.h>
using namespace std;
int main(int argc, char *argv[])
{
complex<double> mycomplex(2.000,2);
_Complex double mycomplex2 = 2.000 + 3I;
double real_mycomplex = mycomplex.real();
double imag_mycomplex = mycomplex.imag();
double abs_mycomplex = abs(mycomplex);
double norm_mycomplex = norm(mycomplex);
double real_mycomplex2 = creal(mycomplex2);
double imag_mycomplex2 = cimag(mycomplex2);
double abs_mycomplex2 = cabs(mycomplex2);
cout << "real part of mycomplex: " << real_mycomplex << endl;
cout << "image part of mycomplex: " << imag_mycomplex << endl;
cout << "abs of mycomplex: " << abs_mycomplex << endl;
cout << "norm of mycomplex: " << norm_mycomplex << endl;
cout << "real part of mycomplex2: " << real_mycomplex2 << endl;
cout << "image part of mycomplex2: " << imag_mycomplex2 << endl;
cout << "abs of mycomplex2: " << abs_mycomplex2 << endl;
return 0;
}
real part of mycomplex: 2
image part of mycomplex: 2
abs of mycomplex: 2.82843
norm of mycomplex: 8
real part of mycomplex2: 2
image part of mycomplex2: 3
abs of mycomplex2: 3.60555
- 复数的数值操作
#include <iostream>
#include <complex.h>
#include <complex>
using namespace std;
int main(int argc, char *argv[])
{
complex<double> mycomplex(2.000,2);
complex<double> mycomplex3(3.000,4);
_Complex double mycomplex2 = 2.000 + 3I;
_Complex double mycomplex4 = 2.000 + 5I;
_Complex double plus = mycomplex2 + mycomplex4;
complex<double> plus2 = mycomplex+mycomplex3;
cout << "(" << creal(plus) << "," << cimag(plus) << ")" << endl;
cout << plus2 << endl;
return 0;
}
(4,8)
(5,6)