• 締切済み

C言語に関して質問です。構造体について

構造体についての課題を出されたのですが、よくわかりません。教えてください。 問.複素数の構造体を作成し、その構造体変数2つを引数にもつ四則演算の関数を作成せよ。ただし、それぞれの四則演算の構造体を作成し、main関数内で、(a + bi) + (c + di)の形にし、a=2, b=3,c=4,d=5とすること。 この問題で以下までしか作れませんでした。解説を付けてソースをお願いします。 戻り値の型あってますか? #include<stdio.h> typedef struct{ double x,y; }Complex; void add(Complex z1 , Complex z2); void sub(Complex z1 , Complex z2); void multi(Complex z1 , Complex z2); void divide(Complex z1 , Complex z2);

みんなの回答

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.4

暇だったので、別解を書いてみました。 #include <stdio.h> #include <math.h> typedef struct { double x; double y; } Complex; typedef Complex (*func)(Complex, Complex); Complex add(Complex z1, Complex z2) { Complex z; z.x = z1.x + z2.x; z.y = z1.y + z2.y; return z; } Complex sub(Complex z1, Complex z2) { Complex z; z.x = z1.x - z2.x; z.y = z1.y - z2.y; return z; } Complex multi(Complex z1, Complex z2) { Complex z; z.x = z1.x * z2.x - z1.y * z2.y; z.y = z1.x * z2.y + z1.y * z2.x; return z; } Complex divide(Complex z1, Complex z2) { Complex z; z.x = (z1.x * z2.x + z1.y * z2.y) / (z2.x * z2.x + z2.y * z2.y); z.y = (z1.y * z2.x - z1.x * z2.y) / (z2.x * z2.x + z2.y * z2.y); return z; } void print(Complex z) { printf("%f %s %fi\n", z.x, (z.y >= 0) ? "+" : "-", fabs(z.y)); } int main(void) { func f[] = { add, sub, multi, divide }; Complex z1 = { 2, 3 }, z2 = { 4, 5 }, z; int i; for (i = 0; i < sizeof(f) / sizeof(f[0]); i++) { z = f[i](z1, z2); print(z); } return 0; }

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.3

適当に作り替えてください。 #include <stdio.h> typedef struct { double x; double y; } Complex; Complex add(Complex z1, Complex z2) { Complex z; z.x = z1.x + z2.x; z.y = z1.y + z2.y; return z; } Complex sub(Complex z1, Complex z2) { Complex z; z.x = z1.x - z2.x; z.y = z1.y - z2.y; return z; } Complex multi(Complex z1, Complex z2) { Complex z; z.x = z1.x * z2.x - z1.y * z2.y; z.y = z1.x * z2.y + z1.y * z2.x; return z; } Complex divide(Complex z1, Complex z2) { Complex z; z.x = (z1.x * z2.x + z1.y * z2.y) / (z2.x * z2.x + z2.y * z2.y); z.y = (z1.y * z2.x - z1.x * z2.y) / (z2.x * z2.x + z2.y * z2.y); return z; } int main(void) { Complex z1 = { 2, 3 }, z2 = { 4, 5 }, z; z = add(z1,z2); printf("%f + %fi\n", z.x, z.y); z = sub(z1, z2); printf("%f + %fi\n", z.x, z.y); z = multi(z1, z2); printf("%f + %fi\n", z.x, z.y); z = divide(z1, z2); printf("%f + %fi\n", z.x, z.y); return 0; }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

何で困ってる?

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

戻り値の型は、4つともComplex型である必要がありそうです。

関連するQ&A