- ベストアンサー
複素数の四則計算を構造体を使って実行させる方法
- 複素数の四則計算を構造体を使って実行させたいが、構造体の理解が足りず間違った値が出力される。
- 提供されたコードでは、複素数の加算、減算、乗算、除算を実行する関数「cal」が定義されている。
- しかし、演算子を受け取る際に文字型を使用しているため、正しい演算子が渡されない可能性がある。また、除算の計算方法も誤っている。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
私の書き方が悪かったですね。 COMPLEX a; COMPLEX b; COMPLEX c; ... 入力 ... c = cal(a, '+', b); //計算結果をc格納 printf("%f + (%f)*i\n", 実部を取り出す, 虚部を取り出す); 取り出し方はcal関数内部で既にあなたも利用していますよ。
その他の回答 (6)
- koko_u_
- ベストアンサー率18% (459/2509)
>コンパイルエラーは出ませんでした。 >例えば、順に、1,2,3,4と入力すると、 >8192.001968 + (512.000123)*i >…などというふうに出ます。 わからん。。。 あなたの使っている OS と コンパイラのバージョンを補足にどうぞ。
お礼
WinXP、cygwinです…。
- rinkun
- ベストアンサー率44% (706/1571)
問題になるのは次の行かな。 > 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型変数に格納してから実部・虚部を取り出して表示すれば良いのでは?
お礼
ありがとうございます。 COMPLEX型変数に格納してから実部・虚部を取り出すやり方がわかりません。 初心者すぎて申し訳ないです、ホント…。
- mappy1983
- ベストアンサー率70% (7/10)
printfの使い方を確認してください。 このコードだと、calの戻り値であるCOMPLEX型を 1番目の%fで表示しようとしていることになります。 COMPLEX c = cal(a, '+', b); として、実部、虚部を 各要素をそれぞれ表示してみましょう。 あと、Warningはなるべくでないようにしましょう。 1. pow を使うのに必要なヘッダはなんですか?
お礼
とりあえずいろいろやってみましたが、 COMPLEX c = cal(a, '+', b); とすると、初期値がおかしいみたいなエラーがでます。 math.hですよね…。 ごめんなさい、おっしゃっていることが良く理解できません。
- yaemon_2006
- ベストアンサー率22% (50/220)
"printf"の仕様を再確認しましょう。
お礼
ありがとうございます。ホントすみません。
- asuncion
- ベストアンサー率33% (2127/6289)
> printf("%f + (%f)*i\n",cal(a,'+',b)); 書式文字列には2つの%fがあるのに対し、 実際に出力しているのはcal関数の実行結果1個だけですね。
お礼
めちゃくちゃでしたね…。すみません。 でもどうやればいいのかさっぱりわかりません。
- koko_u_
- ベストアンサー率18% (459/2509)
>コンパイルはできますがおそらく間違った値が出てしまっているようです。 本当にコンパイルできています? そして間違った値がでるとは具体的にどうなるのですか?
お礼
コンパイルエラーは出ませんでした。 例えば、順に、1,2,3,4と入力すると、 8192.001968 + (512.000123)*i …などというふうに出ます。
お礼
こういうことでしょうか?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)が出ます。
補足
ごめんなさい、できました。 本当に凡ミスでした。 本っ当にありがとうございました! みなさんお騒がせ致しました。