- ベストアンサー
少数の表示
よろしくお願いいたします。 底辺:3cm 高さ:5cm の三角形の面積は 7.5平方cmです。 と表すプログラムを作成しています。 自分で以下のように作ってみましたが、 7.5平方cmです。と表したいところに 7.000000平方cmです。と出て来てしまいます。 どこを直せばよいか教えていただけますか? #include<stdio.h> main() { int teihen = 3; int takasa = 5; double menseki; menseki = (double)teihen*takasa/2 printf("底辺:%dcm\n",teihen); printf("高さ:%dcm\n",takasa); printf("の三角形の面積は\n"); printf("%f平方cmです。",menseki); }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
int型は整数しか扱えません。 実数を扱うにはdouble型などを使用する必要があります。 元々小数部の無い整数値である、変数teihenとtakasaの計算結果を double型でキャストしても、もともと『無い』分けですから、 その部分が補完される訳ではありません。 このような場合、計算する全ての変数を実数を扱える型で 記述する必要があります。 もちろん、定数にも実数修飾子が存在します。 #include<stdio.h> int main( int argc, char* argv[] ) { double teihen = 3.0; double takasa = 5.0; double menseki; menseki = teihen*takasa/2.0; printf("底辺:%f cm\n",teihen); printf("高さ:%f cm\n",takasa); printf("の三角形の面積は\n"); printf("%f平方cmです。",menseki); return 0; } #インデントの為、全角スペースを使用しています半角に変換してから #コンパイルしてください
その他の回答 (1)
- jacta
- ベストアンサー率26% (845/3158)
> どこを直せばよいか教えていただけますか? menseki = (double)teihen*takasa/2 の後にセミコロンが抜けていますので追加してください。 ところで、上記の修正を行ったソースをコンパイル&実行してみましたが、ちゃんと「7.500000平方cmです。」と出力されます。 おそらく、コンパイルエラーになったので、修正前の実行ファイルが残っていて、それが「7.000000平方cmです。」と表示していたのでは? ちなみに、(double)teihen*takasa/2 の部分はこれであっています。乗除演算子(*, /, %)は、両辺を通常の算術型変換してから演算を処理します。したがって、(double)teihen*takasa は左辺にあわせて両辺がdouble型になり、評価結果もdouble型です。(double)teihen*takasa/2 も、(double)teihen*takasa の部分(左辺)がdouble型なので、2(右辺)もdouble型に型変換され、全体の評価結果もdouble型になります。キャスト演算子は、乗除演算子よりずっと優先順位が高いのです。
お礼
回答ありがとうございます。 そうですね、修正前のが残っていたのかもしれません。 このように、添削していただける方がいらっしゃって非常に助かります。 おかげさまで解決することができました。 ありがとうございました。また質問させていただいたときはよろしくお願いいたします。
お礼
回答ありがとうございます。 表示させることができました。 詳しく教えていただき、ありがとうございました。