複素数の四則計算
複素数の四則計算を構造体を使って実行させたいのですが、いまいち構造体のことを理解できていません。
以下の何が間違っているのでしょうか?
コンパイルはできますがおそらく間違った値が出てしまっているようです。
#include <stdio.h>
typedef struct{ float re, im; } COMPLEX;
COMPLEX cal ( COMPLEX a, char c, COMPLEX b )
{
COMPLEX d;
switch (c)
{
case '+' : d.re = a.re + b.re; d.im = a.im + b.im; break;
case '-' : d.re = a.re - b.re; d.im = a.im - b.im; break;
case '*' : d.re = (a.re * b.re) - (a.im * b.im); d.im = (a.im * b.re) + (a.re * b.im); break;
case '/' : d.re = (a.re * b.re + a.im * b.im) / ( pow(b.re,2) + pow(b.im,2) ); d.im = (a.im * b.re - a.re * b.im) / ( pow(b.re,2) + pow(b.im,2) ); break;
default :puts("不適切な演算です。"); break;
}
return d;
}
int main(void)
{
COMPLEX a;
COMPLEX b;
printf("aの実数部を入力:"); scanf("%f",&a.re);
printf("aの虚数部を入力:"); scanf("%f",&a.im);
printf("bの実数部を入力:"); scanf("%f",&b.re);
printf("bの虚数部を入力:"); scanf("%f",&b.im);
printf("%f + (%f)*i\n",cal(a,'+',b));
printf("%f + (%f)*i\n",cal(a,'-',b));
printf("%f + (%f)*i\n",cal(a,'*',b));
printf("%f + (%f)*i\n",cal(a,'/',b));
}
以上です。
ちなみに、例えばcal(a,'+',b)とすると和が返るようにしなさいという指示がありました。
どなたか教えて頂けるとありがたいです…。