【C言語】 構造体を使って、複素数を表わし、2 つの複素数の和,差、積、商を計算するプログラムを作ってください。
【C言語】 構造体を使って、複素数を表わし、2 つの複素数の和,差、積、商を計算するプログラムを作ってください。 ただし、2 つの複素数の和,差、積、商を計算する部分は1つの関数にしてください。またmain関数も定義し動作するようにプログラムしてくださいm(*_ _)m
ベストアンサー
#include <stdio.h> #include <math.h> #define ADD 0 #define SUB 1 #define MUL 2 #define DIV 3 typedef struct { double real, imaginary; } COMPOUND; COMPOUND calc_compound(COMPOUND val1, COMPOUND val2, int calc_type) { COMPOUND ret; switch (calc_type) { case ADD: ret.real = val1.real + val2.real; ret.imaginary = val1.imaginary + val2.imaginary; break; case SUB: ret.real = val1.real - val2.real; ret.imaginary = val1.imaginary - val2.imaginary; break; case MUL: ret.real = val1.real * val2.real - val1.imaginary * val2.imaginary; ret.imaginary = val1.real * val2.imaginary + val2.real * val1.imaginary; break; case DIV: ret.real = (val1.real * val2.real - val1.imaginary * val2.imaginary) / (pow(val2.real, 2) + pow(val2.imaginary, 2)); ret.imaginary = (val1.imaginary * val2.real - val1.real * val2.imaginary) / (pow(val2.real, 2) + pow(val2.imaginary, 2)); break; default: break; } return ret; } void print_compound(COMPOUND val) { if (val.imaginary >= 0) { printf("%.2lf + %.2lfi", val.real, val.imaginary); } else { printf("%.2lf - %.2lfi", val.real, -val.imaginary); } } int main(void) { COMPOUND val[3]; char *calc_type[] = { "和", "差", "積", "商" }; int ct; for (ct = 0; ct < 2; ct++) { printf("複素数%dの実部 → ", ct + 1); scanf("%lf", &val[ct].real); while (getchar() != '\n'); printf("複素数%dの虚部 → ", ct + 1); scanf("%lf", &val[ct].imaginary); while (getchar() != '\n'); } printf("\n"); for (ct = 0; ct < 2; ct++) { printf("複素数%d: ", ct + 1); print_compound(val[ct]); printf("\n"); } printf("\n"); for (ct = 0; ct < 4; ct++) { val[2] = calc_compound(val[0], val[1], ct); printf("%s: ", calc_type[ct]); print_compound(val[2]); printf("\n"); } return 0; } ======== 【実行例】 複素数1の実部 → 3 複素数1の虚部 → 8 複素数2の実部 → 6 複素数2の虚部 → 5 複素数1: 3.00 + 8.00i 複素数2: 6.00 + 5.00i 和: 9.00 + 13.00i 差: -3.00 + 3.00i 積: -22.00 + 63.00i 商: -0.36 + 0.54i
質問者からのお礼コメント
とても分かりやすかったですm(*_ _)m
お礼日時:1/20 17:36