Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 以极坐标形式表示的复数之和_C_Struct_Structure_Complex Numbers - Fatal编程技术网

C 以极坐标形式表示的复数之和

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

我需要对两个复数(c1,c2)求和,然后用其极性形式表示结果

我真的不知道如何访问c1+c2的结果,我的意思是我将它们存储在变量“result”中,但当我尝试访问它们时,我发现自己处于复杂的极性结构中,因此无法访问result.real和result.img来计算幅值和角度:

#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计算平方的方式,您必须将数字本身相乘或使用libc
pow
函数

^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还有一个问题,这是否回答了您的问题?