1

我是一个完全的编程初学者,我有一个任务要做,它几乎只是从一个复数中找到 R 和 theta,并根据它所在的象限使用 if 语句采取适当的行动。

IE; 在象限 1 和 2 中使用计算的 theta,当在象限 3 中从计算的 theta 中减去 180 度时,当在象限 4 中时,在计算的 theta 中添加 180 度

我真的很难找到 theta,当我输入 1+1j 时,我得到了正确的 R,但不正确的 theta。我正在使用 theta = atan(b/a);

#include <stdio.h>

int main()   
{   
float a, b, r, j, theta, thetaquadrant3, thetaquadrant4, convert ;   

j = -1;   
b = b*-1;   
thetaquadrant3 = theta - 180;   
thetaquadrant4 = theta + 180;   

printf ("Please enter intput A and B in the form of a+bj\n");

printf ("Input A:");   
scanf ("%f" , &a);   

printf ("Input B:");   
scanf ("%f" , &b);   

if ((a>=0.0) && (b >= 0.0))   
{   
//take no action as the calculated angle is in quadrant 1      
r = sqrt (pow(a, 2) + pow(b , 2));      
printf ("R=%f\n\n" , r);     

theta = atan(b/a);   
printf ("Theta=%f\n\n", theta );   
}

if ((a<=-0.0) && (b >= 0.0))   
{   
//take no action as the calculated angle is in quadrant 2   
r = sqrt (pow(a, 2) + pow(b , 2));    
printf ("R=%f\n\n" , r);    

theta = atan(b/a);    
printf ("Theta=%f\n\n", theta );    
}

if ((a<=-0.0) && (b <= -0.0))    
{
//Quadant 3   
r = sqrt (pow(a, 2) + pow(b , 2));    
printf ("R=%f\n\n" , r);    

theta = atan(b/a);    
printf ("Theta=%f\n\n", thetaquadrant3 );    

}

if ((a>=0.0) && (b <= -0.0))    
{      
//Quadrant 4    
r = sqrt (pow(a, 2) + pow(b , 2));   
printf ("R=%f\n\n" , r);    

theta = atan(b/a);    
printf ("Theta=%f\n\n", thetaquadrant4 );    
}    

// Converting back to rectangular Co-ordinates    
convert = r*cos(theta) + j*r*sin (theta);    
printf ("Corresponds to%f\n\n" , convert);     

return 0;   
}

任何帮助是极大的赞赏

4

2 回答 2

3

第一个问题:

float a, b, r, j, theta, thetaquadrant3, thetaquadrant4, convert ;

这些变量是declared但它们的值是undefined

thetaquadrant3 = theta - 180;   
thetaquadrant4 = theta + 180; 

thetaquadrant3现在thetaquadrant4undefined+ 或 - 180 的值,即仍然undefined.

theta = atan(b/a);    
printf ("Theta=%f\n\n", thetaquadrant3 ); 

您需要根据 重新thetaquadrant3计算theta

但主要问题是atan返回弧度而不是度数的结果(正如您的 +/- 180 所暗示的那样)。

正如 dialer 在他的评论中提到的那样,有一个函数也可以处理象限atan2。在链接中,您还将看到如何在输出中以度数显示结果。

于 2013-04-07T10:03:37.413 回答
0

与您已经采用的方法略有不同,但如果您使用的是 C99 或更高版本,则可以使用<complex.h>头文件。

使用此文件,您可以创建一个复数并使用cabscarg方法来计算绝对值 (R) 和参数 (theta)。

float _Complex num = real + (imag * _Complex_I);

float r = cabs(num);
float theta = carg(num);

我创建了一个完整的示例作为要点

于 2013-04-07T10:20:39.680 回答