想请教大神,这段代码为什么不能输出正常复数?
代码示意如下:
#include?<stdio.h>#include?<complex.h>
int?main(int?argc,?char?*argv[])
{
double?_Complex?a?=?2?+?5?*?_Complex_I;
//也可写为
//?double?_Complex?a?=?2?+?5i;
//?虚部的数5与虚数单位i之间不能有空格,否则会报错变量i未定义
printf("a=%g+%gi\n",?creal(a),?cimag(a));
return?0;
}
在数学中一个复数可以定义为 (z=a + bi) 的形式。
C 语言在 ISO C99 时就引入了复数类型。它是通过 complex.h 中定义的。 我们可以使用 complex , __complex__ , 或 _ComplexI 类型符号来表示。
在C语言中有三种复数类型,分别为 float complex , double complex , long double complex 。他们之间 的区别就是表示复数中实部和虚步的数的数据类型不同。
complex 其实就是一个数组,数组中有两个元素,一个表示复数的实部,一个表示复数的虚部。
在 complex.h 头文件中定义一些对复数的基本操作的函数。
函数——功能
creal ——获取复数的实部
cimag ——获取复数的虚部
conj ——获取复数的***轭
carg ——获取,复平面上穿过原点和复数在复平面表示的点,的直线和实数轴之间的夹角
cproj ——返回复数在黎曼球面上的投影
复数类型也可以像普通数值类型,~int, double, long~ 一样进行直接使用数值操作符号,进行数值操作。
演示代码如下:
#include?<stdio.h>#include?<complex.h>
int?main(int?argc,?char?*argv[])
{
complex?double?a?=?3.0?+?4.0?*?_Complex_I;
__complex__?double?b?=?4.0?+?5.0?*?_Complex_I;
_Complex?double?c?=?5.0?+?6.0?*?_Complex_I;
complex?double?d?=?a?+?b;
complex?double?f?=?a?*?b;
complex?double?g?=?a?/?b;
printf("d=a+b=%g+%gi\n",?creal(d),?cimag(d));
printf("f=a*b=%g+%gi\n",?creal(f),?cimag(f));
printf("g=a/b=%g+%gi\n",?creal(g),?cimag(g));
return?0;
}
结果为:
、、、如有帮助,烦请点采纳,谢谢!