• ベストアンサー

少数の表示

よろしくお願いいたします。 底辺: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); }

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

  • ベストアンサー
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.1

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; } #インデントの為、全角スペースを使用しています半角に変換してから #コンパイルしてください

ichigo2007
質問者

お礼

回答ありがとうございます。 表示させることができました。 詳しく教えていただき、ありがとうございました。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> どこを直せばよいか教えていただけますか? 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型になります。キャスト演算子は、乗除演算子よりずっと優先順位が高いのです。

ichigo2007
質問者

お礼

回答ありがとうございます。 そうですね、修正前のが残っていたのかもしれません。 このように、添削していただける方がいらっしゃって非常に助かります。 おかげさまで解決することができました。 ありがとうございました。また質問させていただいたときはよろしくお願いいたします。

関連するQ&A