• ベストアンサー

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(); }

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

  • ベストアンサー
  • 12m24
  • ベストアンサー率23% (193/817)
回答No.2

 なぜ値が「int」として宣言されているのかわかりませんが。  とりあえず、printfの中は、 printf("%d",menseki); で表示します。  int型で計算していると、すべての計算(掛け算、割り算も)の結果が整数で帰ってきてしまうので、誤差・おかしな計算結果の原因となります。普通このような計算のときは、「float」「double」で宣言するのが無難です。そのときはprintfの""の中をそれぞれ「%f」「%lf」に変えてください。

その他の回答 (1)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

printf("面積は約%dです\n",menseki); なお、この回答の通りに作って実行してみると判りますが、上底+下底が奇数、高さが奇数の場合、正しい面積は出ません。 上底=2、下底=3、高さ=3の場合、面積は7.5ですが、7と表示されてしまいます。

関連するQ&A

  • C言語プログラム

    2つの整数を入力させ、それらが等しい場合hitoshii、異なる場合にはhitoshikunaiと出力するプログラムを作りたいのですが、うまくいきません。間違っているところを教えてください。 #include<stdio.h> #include<conio.h> void main() { printf("整数を入力してください:"); int number1; scanf("%d",number1); printf("整数を入力してください:"); int number2; scanf("%d",number2); if(number1==number2) { printf("hitoshii"); } else { printf("hitoshikunai"); } getch(); }

  • C言語のプログラミングがうまくいきません!

    とりあえず、自分でプログラムしましたが、どこか間違っているようです。僕のプログラムを載せますので、どこが間違っているのか教えて下さい。あと、正しいプログラムを書いていただければ幸いです。 3つの辺の長さをx、y、zに代入して三角形が成立すれば、その形状と面積をヘロンの公式を使って求める。 #include <stdio.h> #include <math.h> { double x ,y, z ,error ,menseki ,ans; printf("x ?") scanf("%f" , &x); printf("y ?") scanf("%f" , &y); printf("z ?") scanf("%f" , &z); ans=(x+y+z)/2; menseki=sqrt(ans*(ans-x)*(ans-y)*(ans-z)); if (x === y || y == z || x == z) { printf ("正三角形です"); printf("面積は%dです" , menseki); } else if (x == y || y == z || z == x) { printf("二等辺三角形です"); printf("面積は%dです" , menseki); } else { printf("三角形です"); printf("面積は%dです , menseki); if(x<y+z || y<x+z || z<x+y) { printf("error"); } }

  • C言語プログラム

    したのプログラムでgetch()の代わりにscanf()を使って、入力した数が負なら終了、正なら"次の数を入力してください"と表示してループを続けるプログラムを作りたいのですが、どこを変えればよいのですか? #include<stdio.h> #include<conio.h> void main() { int i=1,sum=0; char c='m'; while(c!='e')//eでない限りwhileループを実行する { sum=sum+i; printf("\n1 kara %d madewo tasuto %d desu.\n",i,sum); i++; printf("nanikakeywo oshitekudasai.owaru tokiha 'e'\n"); c=getch(); } printf("loopwo nukemashita\n"); getch(); }

  • C言語(while構文)

    #include<stdio.h> #include<conio.h> void main() { int i=1,sum=0; char c='m'; while(c!='e')//eでない限りwhileループを実行する { sum=sum+i; printf("\n1 kara %d madewo tasuto %d desu.\n",i,sum); i++; printf("nanikakeywo oshitekudasai.owaru tokiha 'e'\n"); c=getch(); } printf("loopwo nukemashita\n"); getch(); } getch()の代わりに、scanf()を使って整数値を入力させ、負の数が入力されたら終了するプログラム(正を入力したら「次の数値を入力せよ」とだして、繰り返す。)を造りたいのですが、どこを変えればよいか教えてください。

  • C言語のプログラミングがうまくいきません!

    先日のプログラムを作り直しました。アドバイスのおかげでエラーは減りましたが、まだ完ぺきではないようです。恐らく、elseのところがいけないと思うのですが、どうしたらいいか分かりません。 ご指摘お願いします。 #include <stdio.h> #include <math.h> void main(void) { double x ,y ,z ,error ,menseki ; double ans; printf("x ?"); scanf("%lf", &x); printf("y ?"); scanf("%lf", &y); printf("z ?"); scanf("%lf", &z); if(x<y+z || y<x+z || z<x+y) { ans=(x+y+z)/2; menseki=sqrt(ans*(ans-x)*(ans-y)*(ans-z)); } if(x==y && y==z && z==x) { printf("正三角形です"); printf("面積は%lfです" , menseki); } else if(x==y || y==z || z==x) { printf("二等辺三角形です"); printf("面積は%lfです" , menseki); } else { printf("三角形です"); printf("面積は%lfです" , menseki); } else { printf("error"); } }

  • C言語 

    C言語でAとBがじゃんけんをして勝ち負けを出力するプログラムをつくりたいのですが、間違いを教えてください。(AがgでBがcならAの勝ち。AがgでBがpならBの勝ち。AがgでBがgなら引き分け。) #include<stdio.h> #include<conio.h> void main() { int A,B; printf("文字を入力せよ"); scanf("%d",&A); scanf("%d",&B); if(A=='g'||B=='c') { printf("Aの勝ち"); } if(A=='g'||B=='p') { printf("Bの勝ち"); } if(A=='g'||B=='g') { printf("引き分け"); } getch(); }

  • c言語

    #include<stdio.h> #include<conio.h> void main() { int i=1,sum=0; char c=\'m\'; while(c!=\'e\')//eでない限りwhileループを実行する { sum=sum+i; printf(\"\\n1 kara %d madewo tasuto %d desu.\\n\",i,sum); i++; printf(\"nanikakeywo oshitekudasai.owaru tokiha \'e\'\\n\"); c=getch(); } printf(\"loopwo nukemashita\\n\"); getch(); } while(c!=\'e\')をwhile(c>0)にして実行したい場合はcharをintにかえて、scanfを使わなければならないのはわかりますが、どこを変えればよいか分かりません。ちなみに、while(c>0)に変えた場合に、正の数を入力した後に、「次の数を入力してください」という文を表示してからくりかえす方法をおしえてください。

  • C言語の非標準コンソール関数getch()について

    こんにちは。 あるプログラムを作っていると、次のような問題が起きてしまいました。 簡単なプログラムを例にして、説明したいと思います。 #include<stdio.h> #include<conio.h> #include<ctype.h> void main(void) { char ch; int i; do{ ch=getch(); putchar(toupper(ch)); }while(ch!='q'); printf("\n"); scanf("%d",&i); } これはgetch()関数を使い入力された文字を大文字にして画面上に出力するものです。(qが入力されるまで) その後に、意味はありませんが変数iに整数を入力して終了する。 ここで、問題になってくるのがこのプログラムを実行して、abcdefqと入力していくと、画面上にはABCDEFQと表示されます。そして、qが入力されたことでdo文が終了して改行が行われます。次にscanfによりいったん入力待ちになります。 この時、まだ、なにも入力していないにも関わらず、最後にgetchにより入力したqが表示されてしまいます。 qを消してscanfの入力をすればいいのですが、この問題を何とか解決したと思い質問しました。 scanfの後にgetchar()を使うときはscanf入力時の'\n'に注意が必要だということはわかるのですが、上に述べたような問題はこれに似ているのでしょうか? 参考書をみたり自分でもいろいろ試してみたのですがどうもうまくいきません。 どなたか、解決策を知っていたら是非教えて下さい。 できれば、getch()とscanfがどのように作用してこのようなことが起きてしまっているのか説明して頂けたら幸いです。 お手数ですが、みなさま、よろしくお願いいたします。

  • 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); }

  • c++

    最近c++をはじめたのですが Borland C++を使用しているのですが 定価を入力したら一割引き三割引き五割引きが表示されるようにしようと以下のように入力したのですが、 1000 と入力したら  900 699 500 と表示されました。なぜ699になるのかわかりません。だれか教えてください。お願いします。 #include<stdio.h> #include<conio.h> void main() { int price; printf("定価を入力して下さい:",price); scanf("%d",&price); printf("一割引きは%d円\n",(int)(price*0.9)); printf("三割引きは%d円\n",(int)(price*0.7)); printf("五割引きは%d円\n",(int)(price*0.5)); getch(); }

専門家に質問してみよう