C 以极坐标形式表示的复数之和
我需要对两个复数(c1,c2)求和,然后用其极性形式表示结果 我真的不知道如何访问c1+c2的结果,我的意思是我将它们存储在变量“result”中,但当我尝试访问它们时,我发现自己处于复杂的极性结构中,因此无法访问result.real和result.img来计算幅值和角度:C 以极坐标形式表示的复数之和,c,struct,structure,complex-numbers,C,Struct,Structure,Complex Numbers,我需要对两个复数(c1,c2)求和,然后用其极性形式表示结果 我真的不知道如何访问c1+c2的结果,我的意思是我将它们存储在变量“result”中,但当我尝试访问它们时,我发现自己处于复杂的极性结构中,因此无法访问result.real和result.img来计算幅值和角度: #include<stdio.h> #include<stdlib.h> #include<math.h> struct ComplexCartesian { float re
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct ComplexCartesian
{
float real;
float img;
};
struct ComplexPolar
{
float magnitude;
float angle;
};
struct ComplexPolar add_two_complex(struct ComplexCartesian c1, struct ComplexCartesian c2, struct ComplexPolar result)
{
result.real= c1.real+c2.real;
result.img=c1.img+c2.img;
result.magnitude= sqrt((result.real)^2 + (result.img)^2);
result.angle= atan2(result.img, result.real);
}
#包括
#包括
#包括
复杂自流结构
{
浮动真实;
浮动img;
};
结构复合极性
{
浮动幅度;
浮动角;
};
struct ComplexPolar add_two_complex(struct ComplexCartesian c1,struct ComplexCartesian c2,struct ComplexPolar result)
{
result.real=c1.real+c2.real;
结果:img=c1.img+c2.img;
result.magnity=sqrt((result.real)^2+(result.img)^2);
result.angle=atan2(result.img,result.real);
}
^2
不是用C计算平方的方式,您必须将数字本身相乘或使用libcpow
函数
^2
是一种异或操作,您的目标是切换第二位,但在您的情况下,您在浮点上使用它,这违反了严格的别名规则并导致(除了不是您所寻求的之外)
请参见下面的代码和一些注释:
#包括
#包括
#包括
复杂自流结构
{
浮动真实;
浮动img;
};
结构复合极性
{
浮动幅度;
浮动角;
};
来自笛卡尔和的结构复数极坐标(结构复数笛卡尔c1,结构复数笛卡尔c2)
{
struct ComplexPolar ComplexPolar;//这里声明ComplexPolar结构的变量
c1.real+=c2.real;//不需要结果变量,只需重用c1即可。
c1.img+=c2.img;
复数极震级=sqrt(c1.real*c1.real+c1.img*c1.img);
complexPolar.angle=atan2(c1.img,c1.real);
return complexPolar;//返回值;
}
内部主(空){
结构复合自流c1={0.12f,0.15f};
结构复合自流c2={0.42f,1.15f};
struct ComplexPolar ComplexPolar=来自笛卡尔和(c1,c2)的极坐标;
printf(“%f%f\n”,complexPolar.magnity,complexPolar.angle);
返回0;
}
使用gcc complex.c-lm&./a.out编译
输出:
1.407693 1.177098
注意:也许你应该明确地告诉我们,你的角度是用弧度表示的,你也可以将你的函数从笛卡尔求和重命名为极坐标
半径=1.41θ=67.44o=1.18弧度
“^2在C中是不可能的”--实际上比不可能更糟糕<代码>^2是合法的-它使用
2
计算按位异或。这意味着它在没有警告的情况下编译得很好,但以难以理解的方式失败。@SamHenke实际上我想给你的评论加上+15。非常感谢你,我能够应用它,它终于成功了,谢谢!不客气,很高兴这有帮助@SamHenke很好的观点,请参见我的编辑;)看见请不要通过假设语法含义来编写代码。请注意,C99还有一个问题,这是否回答了您的问题?