• 締切済み

構造体

プログラミングの授業で構造体を習ったのですが、課題がよく分からないので質問させていただきます。その課題ですが、 複素数を表す構造体を、 struct complex{float r;(実部)float i;(虚部)}; の形で定義したとして、2つの複素数を入力し、その2つの絶対値の2乗、和、差、積、商を求めるプログラムを作るというものです。 ただし、条件として、 複素数を入力する関数void inputComp(struct complex*c)、複素数をa+biのような形に表示する関数void printComp(struct complex*c)、複素数の絶対値の2乗を関数値として返す関数float asqrComp(struct complex*c)を作成せよというのがあって困っています。 条件がなければprintfを多用してできないこともないでしょうが、条件を満たすプログラムを教えてください。

みんなの回答

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.3

 すでに、回答は出ているようですので よけいなことを一言。  入力を  (2+3i)*(5-3i) の ようにするには 構文解析 の部分をプログラミングしなくては なりません。  道具としては  yacc coco などがありますが、使えるようになるまで 時間がかかります。  表計算では数式が入力可能です。 この数値として 2+3i を受け付けるようにすればよいのです。

noname#11476
noname#11476
回答No.2

課題をそもそも勘違いされていませんか? void inputComp(struct complex *c) ... この関数を呼び出すと, ユーザに対して計算したい複素数の入力を要求して、 入力された結果を c に入れて返す。 void printComp(struct complex *c) ... この関数を呼び出すと、複素数変数 c の内容を画面に表示する。 float asqrComp(struct complex *c) ... この関数を呼び出すと、複素数 c の絶対値の2乗を float 型で返す。 つまり、関数mainは以下のような感じになる。 struct complex a, b, c;  inputComp(&a); // 変数aに複素数をユーザから入力してもらう  inputComp(&b); // 変数bに複素数をユーザから入力してもらう printf("Absolute square of a = %f", asqrComp(&a)); printf("Absolute square of b = %f", asqrComp(&b)); c に複素数 a + b の結果を代入。 printComp(&c); // a + b を表示 c に a * b の結果を代入 printComp(&c); // a*b を表示 以下続く、、、、、 という具合にしなさいということでしょう。

ku0117
質問者

お礼

その後、解答例が配布されたのですが、いかに自分が構造体を理解していなかったかがわかりました。 慣れていれば簡単なことだったのかもしれませんが。

  • layer13
  • ベストアンサー率47% (37/78)
回答No.1

入力のときも、a+biというような形式での入力が必要ですか? そうでなければ、そんなに難しく考える必要も無いと思いますが。 数学で計算するみたいに実部と虚部を扱えばいいだけですよね? 条件といってますけど、表示するときだけ、"%f+%fi"という表示をすれば いいくらいの制約しかないみたいですしね。 今一度、ご自分で何をしなければならないか、何が必要かを整理してみた方が 良いかと思います。

ku0117
質問者

補足

いわれてみればそうかもしれません。 imputCompでは、実数部と虚数部を別々にして表示(printComp)は%f+%fi という形なのですが、例えばinputCompやprintCompという関数を使わないでprintf("和は%f+%fi\n",x.r+y.r,x.i,y.i)という形にすればうまくいったのですが、printComp(x.r+y.r,x.i+y.i)と書くとメモリから読み出せない(エラー)になるということです。

関連するQ&A