C++ 复数,正确的格式是什么?

问题描述 投票:0回答:5

我想使用 C++ 处理复数。因此我包括了

#include <complex>
。现在我的问题是:如何声明变量?(那么要求的格式是什么:
1 + i
?)

提前致谢:-)

c++ numbers number-formatting
5个回答
16
投票
// 1 + 2i
std::complex<double> c(1, 2);

11
投票

std::complex
的构造函数有两个参数:

  • 第一个,有数字的实部。
  • 第二个,有数字的虚部。

例如:

std::complex<float> my_complex(1,1); //1 + 1i 

此外,C++11 引入了用户定义的文字,它允许我们实现(或由标准库实现,如在此C++14 接受的提案中)易于使用的复数文字:

constexpr std::complex<float> operator"" i(float d)
{
    return std::complex<float>{0.0L,static_cast<float>( d )};
}

您可以按如下方式使用它:

auto my_complex = 1i; // 0 + 1i

11
投票

您可以通过指定模板参数并指定变量名称来定义变量,与大多数其他模板类似:

std::complex<double> x(1, 1);

构造函数的第一个参数是实部,第二个参数是虚部。

从 C++ 14 开始,添加了用户定义的文字运算符,因此您可以使用更自然的表示法来初始化复杂变量:

using namespace std::literals;

std::complex<double> c = 1.2 + 3.4i;

在这种情况下,(显然足够)

1.2
是实部,
3.4
是虚部。

从 C++17 开始,编译器还可以从初始化器中推导出模板参数,因此您可以执行以下操作:

std::complex foo = 1.2 + 3.4i;

...并且由于

1.2
3.4
都是
double
,因此推断模板参数也需要是
double


8
投票

试试这个:

#include <complex>
#include <iostream>
using namespace std;
int main()
{
    complex<double> a = {1,2};
    complex<double> b(3,4);

    cout << a + b << "\n";
}

1
投票

这里是如何使用的示例。它在QT下编译并运行

#include <QCoreApplication>
#include<complex>
#include<iostream>

using namespace std;

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
std::complex<double> x=3.0-3.0i;
std::complex<double> y=2.0+4.0i;

cout.precision(3);
cout<<"x="<<x<<" y="<<y<<'\n';
cout<<" OR x real="<<real(x)<<" x imagine="<<imag(x)<<"\n\n";

complex<double> sum = x + y;
cout<<"The sum: x + y = "<<sum<<'\n';

complex<double> difference = x - y;
cout<<"The difference: x - y = "<<difference<<'\n';

complex<double> product = x * y;
cout<<"The product: XY = "<<product<<'\n';

complex<double> quotient = x / y;
cout<<"The quotient: x / y = "<<quotient<<'\n';

complex<double> conjugate = conj(x);
cout<<"The conjugate of x = "<<conjugate<<'\n';

complex<double> reciprocal = 1.0/x;
cout<<"The reciprocal of x = "<<reciprocal<<'\n';

complex<double> exponential =exp(x);
cout<<"The exponential  of x = "<<exponential<<'\n';

double magnitude=2.0,phase=45;
cout<<"magintude = "<<magnitude<<" phase = "<< phase<<" degrees\n";
complex<double> pol= std::polar(2.0,(M_PI/180.0)*phase);
cout<<"The polar: x , y = "<<pol<<'\n';

return a.exec();
}
© www.soinside.com 2019 - 2024. All rights reserved.