#include #include typedef struct { double re; double im; } complex; complex *csum(const complex a, const complex b); complex *csub(const complex a, const complex b); complex *cprod(const complex a, const complex b); complex *cdiv(const complex a, const complex b); int main(void) { complex a, b, *c; a.re = 1.0; a.im = 0.0; b.re = 0.0; b.im = 1.0; c = csum(a, b); printf("c->re=%f, c->im=%f\n", c->re, c->im); c = csub(a, b); printf("c->re=%f, c->im=%f\n", c->re, c->im); c = cprod(a, b); printf("c->re=%f, c->im=%f\n", c->re, c->im); c = cdiv(a, b); printf("c->re=%f, c->im=%f\n", c->re, c->im); return 0; } complex *csum(const complex a, const complex b) { complex *c = (complex *)malloc(sizeof(complex)); if ( c == NULL){ printf("メモリの割り当てに失敗しました\n"); exit(EXIT_FAILURE); } c->re = a.re + b.re; c->im = a.im + b.im; return c; } complex *csub(const complex a, const complex b) { complex *c = (complex *)malloc(sizeof(complex)); if ( c == NULL){ printf("メモリの割り当てに失敗しました\n"); exit(EXIT_FAILURE); } c->re = a.re - b.re; c->im = a.im - b.im; } complex *cprod(const complex a, const complex b) { complex *c = (complex *)malloc(sizeof(complex)); if ( c == NULL){ printf("メモリの割り当てに失敗しました\n"); exit(EXIT_FAILURE); } c->re = a.re * b.re - a.im * b.im; c->im = a.im - b.re + a.im * b.re; } complex *cdiv(const complex a, const complex b) { complex *c = (complex *)malloc(sizeof(complex)); if ( c == NULL){ printf("メモリの割り当てに失敗しました\n"); exit(EXIT_FAILURE); } c->re = (a.re * b.re + a.im * b.im)/(b.re * b.re + b.im * b.im); c->im = (b.re - a.im - a.re * b.re)/(b.re * b.re + b.im * b.im); }