3回目課題解答


#include <stdio.h>
#include <math.h>
#include "complex.h"

/*複素数を2つの変数の構造体として定義する*/
/*構造体というと分かりにくくなるが,実部変数,虚部変数をセットにして変数にしたようなもの*/
Complex ToComplex(double x, double y) /*複素数のパラメータを与える*/
{
 Complex z; /*Complex型の変数を用意*/

 z.re = x;
 z.im = y;
 return z; /*構造体として返す(実部,虚部をパラメータとして持つ)*/
}

/*Complex型の引数aと引数bを渡す*/
Complex Cadd(Complex a, Complex b) /*複素数の足し算*/
{
 Complex z;

 z.re = a.re + b.re;/*複素数aの実部と複素数bの実部を足す.*/
 z.im = a.im + b.im;
 return z;
}

Complex Csub(Complex a, Complex b) /*複素数の引き算*/
{
 Complex z;

 z.re = a.re - b.re;
 z.im = a.im - b.im;
 return z;
}

Complex Cmul(Complex a, Complex b) /*複素数の掛け算*/
{
 Complex z;

 z.re = (a.re * b.re) - (a.im * b.im);
 z.im = (a.re * b.im) + (b.re * a.im);
 return z;
}

Complex Cdiv(Complex a, Complex b) /*複素数の割り算*/
{
 Complex z;

 z.re = ( (a.re * b.re) + (a.im * b.im) )/( (b.re * b.re) + (b.im * b.im) );
 z.im = ( (b.re * a.im) - (a.re * b.im) )/( (b.re * b.re) + (b.im * b.im) );
 return z;
}

double Cabs(Complex a) /*絶対値*/
{
 double x;
 x = sqrt(a.re * a.re + a.im * a.im);
 return x;
}

double Carg(Complex a) /*偏角*/
{
 double x;
 x = atan(a.im / a.re);
 return x;
}

Complex Conj(Complex a) /*共役複素数*/
{
 a.im = -a.im; /*虚数部だけを呼び出し,符号を入れ替える*/

 return a;
}