/* 複素数 (complex number) は、z = x + iy のように、二つの実数 x と y の組に よって表される。ここで、iは虚数単位で、i2 = −1が成り立つ。複素数z1 = x1 + iy1 とz2 = x2 + iy2 の足し算(addition)の結果z1 + z2 = z3 は、z3 = (x1 + x2) + i(y1 + y2) で与えられる。 複素数を表す構造体 struct Cnum と複素数の足し算を行う関数 struct addCnums を作成し、実行例のように 2 つの複素数の和を計算するプログラムを作成せよ。な お、引数の受け渡しは、値渡しでおこなうものとする。 */ #include // 複素数を表す構造体 struct Cnum { double re; // 実部 (real part) double im; // 虚部 (imaginary part) }; // 複素数の足し算を行う関数 (値渡し) // 引数として構造体のコピーを受け取り、結果を構造体として返す struct Cnum addCnums([ ア ]) { struct Cnum res; res.re = c1.re + c2.re; // 実部同士を足す res.im = c1.im + c2.im; // 虚部同士を足す return res; } // 複素数を実行例の形式に合わせて表示する補助関数 void printCnum(struct Cnum c) { // 虚部が正か負かで表示形式を調整する(例: 8.2-4.3i のように表示するため) if (c.im >= 0) { printf("%g+%gi", c.re, c.im); } else { printf("%g%gi", c.re, c.im); // 虚部が負なら自動でマイナス記号が付く } } int main(void) { struct [ イ ], sum; // 複素数 cn1 の入力 printf("複素数 cn1 を入力してください。\n"); printf("実部 : "); scanf("%lf", &cn1.re); printf("虚部 : "); scanf("%lf", &cn1.im); // 複素数 cn2 の入力 printf("複素数 cn2 を入力してください。\n"); printf("実部 : "); scanf("%lf", &cn2.re); printf("虚部 : "); scanf("%lf", &cn2.im); // 関数を呼び出して足し算を実行 (値渡し) sum = addCnums(cn1, cn2); // 結果の表示 printf("cn1 = "); printCnum(cn1); printf("\n"); printf("cn2 = "); printCnum(cn2); printf("\n"); printf("cn1 + cn2 = "); printCnum(sum); printf("\n"); return 0; }