1

私はプログラミングの完全な初心者であり、複素数から R と theta を見つけ、それがどの象限にあるかに応じて if ステートメントを使用して適切なアクションを実行するだけのタスクがあります。

すなわち; 象限 1 と 2 では計算されたシータを使用し、象限 3 では計算されたシータから 180 度を減算し、象限 4 では計算されたシータに 180 度を加算します。

1+1j を入力すると、正しい R が得られますが、シータが正しくありません。私は 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

0

すでに採用しているアプローチとは少し異なりますが、C99 以降を使用している場合は、<complex.h>ヘッダー ファイルを利用できます。

このファイルを使用して複素数を作成し、cabsおよびcargメソッドを使用して絶対値 (R) と引数 (シータ) を計算できます。

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

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

完全な例を gist として作成しました。

于 2013-04-07T10:20:39.680 に答える