// このプログラムをcomplx.c"という名前で保存して、
// gcc -g complx.c -o complx -std=c99
// でコンパイルして下さい。

// 複素計算式

#include <stdio.h>
#include <stdlib.h>

typedef struct complx
{
  double x;//実数部
  double y;//虚数部
} complx;


// 共役複素数
complx cconj(complx a)
{
  a.y = -a.y;
  return a;
}

//加算
complx cadd(complx a, complx b)
{
  complx c;

  c.x = a.x + b.x;
  c.y = a.y + b.y;

  return c;
}

//減算
complx csub(complx a, complx b)
{
  complx c;

  c.x = a.x - b.x;
  c.y = a.y - b.y;

  return c;
}

//乗算
complx cmul(complx a, complx b)
{
  complx c;

  c.x = a.x * b.x - a.y * b.y;
  c.y = a.x * b.y + a.y * b.x;

  return c;
}

//除算
complx cdiv(complx a, complx b)
{
  a = cmul(a, cconj(b));
  b = cmul(b, cconj(b));

  a.x /= b.x;
  a.y /= b.x;

  return a;
}


int main ()
{
  complx a,b,c;

  a.x = 1.0;
  a.y = 2.0;
  b.x = 3.0;
  b.y = 4.0;

  c = cdiv(a,b);

  printf("%f %f\n", c.x, c.y);

  // 出力結果
  // 0.440000 0.080000

  // (参考)Matlabの計算結果
  // a =  1.0000 + 2.0000i
  // b =  3.0000 + 4.0000i
  // a/b
  //ans = 0.4400 + 0.0800i

}