#include <stdio.h>

typedef struct {
 double r, i;
} Complex;

Complex add(Complex *c1, Complex *c2) {
  Complex c;
  c.r = c1->r+c2->r;
  c.i = c1->i+c2->i;
  return c;
}

Complex sub(Complex *c1, Complex *c2) {
  Complex c;
  c.r = c1->r-c2->r;
  c.i = c1->i-c2->i;
  return c;
}

Complex mul(Complex *c1, Complex *c2) {
  Complex c;
  c.r = c1->r*c2->r-c1->i*c2->i;
  c.i = c1->r*c2->i+c1->i*c2->r;
  return c;
}

void print(char *name, Complex *c) {
  printf("%s=%6.2f+%6.2fi\n", name, c->r, c->i);
}

int main() {
  Complex o1={ .r=1.0, .i=2.0 };
  Complex o2={ .r=2.0, .i=1.0 };

  print("o1", &o1);
  print("o2", &o2);
  
  Complex add12 = add(&o1, &o2);
  Complex sub12 = sub(&o1, &o2);
  Complex mul12 = mul(&o1, &o2);
  
  print("add(o1,o2)", &add12);
  print("sub(o1,o2)", &sub12);
  print("mul(o1,o2)", &mul12);
}
