• ベストアンサー

少数の表示

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

  • cプログラム

    /*三角形の面積を求めるプログラム*/ #include<stdio.h> #include<math.h> main() { double a,b,c,menseki; printf("AC間の長さと角度と底辺ABを入力してください\n"); scanf("%f %f %f",&b,&a,&c); menseki=c*b*sin(a*3.1459/180.0)*0.5; printf("面積は%fです\n",menseki); return(0); } 三角形の面積を求めるプログラムなのですが以下のようなエラーが出てきてしまいます 未定義の 最初に参照している シンボル ファイル sin /var/tmp//ccSTvXNz.o ld: 重大なエラー: シンボル参照エラー。kadai9 に書き込まれる出力はありません。 collect2: ld はステータス 1 で終了しました どこを修正すればいいでしょうか?

  • C言語プログラミング

    台形の面積を求めるプログラムを作りたいのですが、最後のmensekiの出力の仕方がわかりません。printf以降のプログラムを教えてください。 #include<stdio.h> #include<conio.h> void main() { int number1,number2,number3,menseki; printf("上底を入力してください:"); scanf("%d",&number1); printf("下底を入力してください:"); scanf("%d",&number2); printf("高さを入力してください:"); scanf("%d",&number3); menseki=(number1+number2)*number3/2; printf( ここがわかりません getch(); }

  • C言語のプログラムについてですが、

    #include <stdio.h> int main(void) { double r; printf("半径を入力してください:"); scanf("%lf", &r); printf("円周=%f\n", 2.0 * r * 3.14159); printf("円面積=%f\n", r * r * 3.14159); return 0; } 上のC言語のプログラムを参考にして 正三角形一辺を double値でキーボード入力し、次のように高さと 面積を計算するプログラムを教えてください。 よろしくお願いしますl_ω_l 3の平方根は1.73205とします。 [実行結果] ======= 一辺の値を入力してください: 20 高さ=17.320500 面積=173.205000

  • このプログラムを添削してください

    #include<stdio.h> #include<math.h> #define n 3 double multi(double a[n],double b[n]); int main(void) { double a[n]; double b[n]; int i; double menseki; for(i=0;i<=n;i++) {scanf("%lf",a[i]); scanf("%lf",b[i]); printf("%dつめの頂点座標は(%d,%d)",i+1,a[i],b[i]); } menseki=multi(a,b); printf("面積は%d",fabs(menseki)); return(0); } double multi(double a[n],double b[n]) { double menseki; menseki=(a[0]*(b[1]-b[2])+a[1]*(b[2]-b[0])+a[2]*(b[0]-b[1]))/2; return(menseki); } 頂点の座標を入力し、ヘロンの公式を用いて三角形の面積を求めるプログラムなのですが、 正常に動作しません。お力添えお願いします。

  • C言語プログラミングについて

    #include <stdio.h> int main(void) { printf("hello,world\n"); } □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ #include <stdio.h> int main(void) { printf("hello"); printf(",world"); printf("\n"); } 上の2つのプログラムをコンパイルするとどのような違いが生じるんですか??printfってどんな働きをするんですか?

  • インデントってどうやって表示するの?

    プログラムのソースプログラムをウェブに載せたいのですがホームページビルダーなどに ソースをこぴぺすると全て字下げがなくなってしまいます。 こんな感じです。 #include<stdio.h>   int main(){     printf("hello\n");   return 0; } これが #include<stdio.h> int main(){ printf("hello\n"); return 0; } こうなってしまうわけですね。 字下げはTABキーのインデントで行っています。 1行ずつスペースを書いていけばいいのでしょうけど 何しろ何百行もあるソースですのでそれは無理です。 字下げを失わずにHTMLに変換することできないでしょうか?

    • ベストアンサー
    • HTML
  • C言語について

    #include <stdio.h> int main(void) { printf("123456\tABC DEFGHIJK\n"); printf("2006/4/14\n"); printf("programing\n"); } のprintfをすべてputsに書き換えてコンパイル・実行すると、 #include <stdio.h> int main(void) { puts("123456\tABC DEFGHIJK\n"); puts("2006/4/14\n"); puts("programing\n"); } になると思うんですけど、そのputsを用いて上のprintfを用いたプログラムと同じ出力を得るにはどのようなプログラムに変えればいいのでしょうか?

  • C言語によるプログラミング

    【問題】 三角形の底辺bと高さhを入力し、面積areaを計算して、次のように表示するプログラムを作りなさい。 底辺=> 10 高さ=> 5 面積 = 25 上記のような問題の解答は下記のようになるのですが、下記以外の解答方法はありませんでしょうか? 図々しいのは承知の上、C言語に詳しい方、解答の方よろしくお願いします! #include <stdio.h> main() { int b, h, area; printf ("底辺 => "); scanf ("%d",&b); printf ("高さ => "); scanf ("%d",&h); area = b * h / 2; printf ("面積 = %d\n",area); return (0); }

  • 計算が合わない

    下のプログラムを実行したところ、1/3の計算結果が0.33333333333333331483になってしまいます。これはどこかプログラムが間違っているのでしょうか? #include<stdio.h> int main(int argc,char **argv){ double d; d=1.0/3.0; printf("%.20f\n",d); }

  • 配列について

    初歩的な質問ですいませんが、質問よろしくお願いします。 ◎1----------------------------- #include<stdio.h> int main(void) { char ss[10]="AB"; printf("ss=%s\n",ss); return 0; } ------------------------------------ ◎2-------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss[0]='A'; ss[1]='B'; ss[2]=0; printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎3------------------------------- #include<stdio.h> #include<string.h> int main(void) { char ss[10]; strcpy(ss,"AB"); printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎4------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss="AB"; printf("ss=%s\n",ss); return 0; } ---------------------------------- 以上4つのプログラムで、◎2と◎3は正常に動くと理解できたのですが、何故、◎1は正常に動き、◎4は「'const char [3]' から 'char [10]' に変換できません。」といったようなエラーが出てしまうか分かりません。 教えていただければ嬉しいです。