• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複素数の四則計算)

複素数の四則計算を構造体を使って実行させる方法

このQ&Aのポイント
  • 複素数の四則計算を構造体を使って実行させたいが、構造体の理解が足りず間違った値が出力される。
  • 提供されたコードでは、複素数の加算、減算、乗算、除算を実行する関数「cal」が定義されている。
  • しかし、演算子を受け取る際に文字型を使用しているため、正しい演算子が渡されない可能性がある。また、除算の計算方法も誤っている。

質問者が選んだベストアンサー

  • ベストアンサー
  • mappy1983
  • ベストアンサー率70% (7/10)
回答No.7

私の書き方が悪かったですね。 COMPLEX a; COMPLEX b; COMPLEX c; ... 入力 ... c = cal(a, '+', b); //計算結果をc格納 printf("%f + (%f)*i\n", 実部を取り出す, 虚部を取り出す); 取り出し方はcal関数内部で既にあなたも利用していますよ。

noname#90946
質問者

お礼

こういうことでしょうか?main関数のところは…。 int main(void) { COMPLEX a; COMPLEX b; COMPLEX c; printf("aの実数部を入力してください:"); scanf("%f",&a.re); printf("aの虚数部を入力してください:"); scanf("%f",&a.im); printf("bの実数部を入力してください:"); scanf("%f",&b.re); printf("bの虚数部を入力してください:"); scanf("%f",&b.im); c = cal(a,'+',b); printf("%f + (%f)*i\n",c.re,c.im); } でも、このようにすると、コンパイルエラー( c = cal(a,'+',b);の行 :error: incompatible types in assignment)が出ます。

noname#90946
質問者

補足

ごめんなさい、できました。 本当に凡ミスでした。 本っ当にありがとうございました! みなさんお騒がせ致しました。

その他の回答 (6)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.6

>コンパイルエラーは出ませんでした。 >例えば、順に、1,2,3,4と入力すると、 >8192.001968 + (512.000123)*i >…などというふうに出ます。 わからん。。。 あなたの使っている OS と コンパイラのバージョンを補足にどうぞ。

noname#90946
質問者

お礼

WinXP、cygwinです…。

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.5

問題になるのは次の行かな。 > printf("%f + (%f)*i\n",cal(a,'+',b)); > printf("%f + (%f)*i\n",cal(a,'-',b)); > printf("%f + (%f)*i\n",cal(a,'*',b)); > printf("%f + (%f)*i\n",cal(a,'/',b)); calの返値はCOMPLEX構造体だけど、それを実部・虚部の順のfloat値2つと認識させるのは無理がある。 一旦COMPLEX型変数に格納してから実部・虚部を取り出して表示すれば良いのでは?

noname#90946
質問者

お礼

ありがとうございます。 COMPLEX型変数に格納してから実部・虚部を取り出すやり方がわかりません。 初心者すぎて申し訳ないです、ホント…。

  • mappy1983
  • ベストアンサー率70% (7/10)
回答No.4

printfの使い方を確認してください。 このコードだと、calの戻り値であるCOMPLEX型を 1番目の%fで表示しようとしていることになります。 COMPLEX c = cal(a, '+', b); として、実部、虚部を 各要素をそれぞれ表示してみましょう。 あと、Warningはなるべくでないようにしましょう。 1. pow を使うのに必要なヘッダはなんですか?

noname#90946
質問者

お礼

とりあえずいろいろやってみましたが、 COMPLEX c = cal(a, '+', b); とすると、初期値がおかしいみたいなエラーがでます。 math.hですよね…。 ごめんなさい、おっしゃっていることが良く理解できません。

回答No.3

 "printf"の仕様を再確認しましょう。

noname#90946
質問者

お礼

ありがとうございます。ホントすみません。

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

> printf("%f + (%f)*i\n",cal(a,'+',b)); 書式文字列には2つの%fがあるのに対し、 実際に出力しているのはcal関数の実行結果1個だけですね。

noname#90946
質問者

お礼

めちゃくちゃでしたね…。すみません。 でもどうやればいいのかさっぱりわかりません。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>コンパイルはできますがおそらく間違った値が出てしまっているようです。 本当にコンパイルできています? そして間違った値がでるとは具体的にどうなるのですか?

noname#90946
質問者

お礼

コンパイルエラーは出ませんでした。 例えば、順に、1,2,3,4と入力すると、 8192.001968 + (512.000123)*i …などというふうに出ます。

関連するQ&A