2013-04-07 35 views
1

我是一個完整的初學者編程和我有一個任務要做,它的幾乎就是從複數中找到R和theta,並採用適當的操作,使用if語句,取決於哪個象限它在。複數 - 尋找theta - C編程

ie;當在象限1 & 2使用計算出的θ表示當在從計算theta和當在象限4象限3減法180degrees加180度至計算THETA

林只是確實很難找到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; 
} 

任何幫助是極大的讚賞

+1

爲此,有一個名爲'atan2(dividend,divisor)'的函數。 – dialer 2013-04-07 09:58:24

回答

3

第一個問題:

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

這些變量是declared,但它們的價值是undefined

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

thetaquadrant3thetaquadrant4現在undefined值+或 - 180,即仍然undefined

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

您需要根據theta重新計算thetaquadrant3

但主要問題是atan以弧度而不是度數返回結果(因爲您的+/- 180會暗示您期望)。

由於撥號程序在他的評論中提到,有一個函數也可以處理象限,atan2。在鏈接中,您還將看到如何在輸出中以度數顯示結果。

+0

非常感謝!但林有點努力轉換弧度程度使用atan2 – user2252867 2013-04-07 10:19:52

+0

@ user2252867你看看atan2參考中的例子嗎? – Andrei 2013-04-07 10:22:29

+0

是啊,我只是不太熟悉這一點,到目前爲止我使用theta = atan(b/a);找到以弧度表示的theta,我只是對我下一步去哪裏感到困惑。我想我使用atan(b/a)並使用theta = atan2(b,a)* 180/PI; ? – user2252867 2013-04-07 10:28:38

0

與您已經採用的方法有一點不同,但如果您使用的是C99或更高版本,則可以使用<complex.h>頭文件。

使用此文件,您可以創建一個複數,並使用cabscarg方法來計算絕對值(R)和參數(θ)。

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

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

我已經創建了一個完整的示例as a gist

+0

明白了!不知道這是否正確使用或沒有,但我得到它通過 theta = atan(b/a); 度=θ* 180/PI; printf(「Theta =%f \ n \ n」,度); – user2252867 2013-04-07 10:40:38

+0

很高興你把它分類。有時候複數可能有點棘手。 – Will 2013-04-07 10:43:46