標準体重のプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
C言語入門者

標準体重のプログラム

#1

投稿記事 by C言語入門者 » 15年前

学校の宿題で、身長と体重を入力して、そのデータから場合わけしてコメントを表示するプログラムなんですが、
うまいこといかなくて困ってます。
以下にソースコードを記します。


#include<stdio.h>
#include<stdlib.h>

main()
{

int weight,height;

printf("体重を入力してください:");
scanf("%d",&weight);
printf("身長を入力してください:");
scanf("%d",&height);

if(weight > (height - 105) * (110 /100) )
printf("太り過ぎです\n");
else if(weight >= (height - 105) * (90 / 100) &&
weight <= (height - 105) * (110 / 100) )
printf("健康です.この状態を維持しましょう\n");
else if(weight < (height -105) * (90 / 100) )
printf("やせ過ぎです。もう少し体力をつけましょう\n");

exit(0);

}

標準体重を height-105 で表し、標準体重の1割増しより体重が重い場合と、標準体重の1割減よりも体重が低い場合、
またその間の時にそれぞれコメントするプログラムです。
しかし、なぜか標準体重の1割減よりも体重が低い場合が表示されず、1割増と1割減の間の時のコメントが表示されます。
なぜでしょうか。コンパイルしてもエラーはでません。
ご教授お願いいたします。

パコネコ

Re:標準体重のプログラム

#2

投稿記事 by パコネコ » 15年前

いっそ最後のifなくしちゃいたくなりました。
やっぱダメですか?

C言語初心者

Re:標準体重のプログラム

#3

投稿記事 by C言語初心者 » 15年前

なくしてみましたけど駄目でした。
いったい何がいけないんでしょうか?

fatens

Re:標準体重のプログラム

#4

投稿記事 by fatens » 15年前

110/100や90/100はともにint型なので結果もint型になり、
110/100は1、90/100は0になってしまいます。
素直に1.1や0.9と書いてみてはどうでしょうか。

それから、やせ過ぎ, 太り過ぎ, 健康の順番にすることで、
if ~ else if ~ elseの形にできるので、&& 演算子を使う必要がなくなります。
画像

パコネコ

Re:標準体重のプログラム

#5

投稿記事 by パコネコ » 15年前

ちょっと整理してみますね
if(weight > (height - 105) * (110 /100) )
printf("太り過ぎです\n");
else if(weight >= (height - 105) * (90 / 100) &&
weight <= (height - 105) * (110 / 100) )
printf("健康です.この状態を維持しましょう\n");
else if(weight < (height -105) * (90 / 100) )
printf("やせ過ぎです。もう少し体力をつけましょう\n");

これでheikin-105をaとした場合
a*110%<weight    =条件1
a*90%<=weight<=a*110%=条件2
weight<a*90% =条件3
全部つなげると
条件3<a*90%<=条件2<=a*110%<条件1
間違ってないみたいですね。

パコネコ

Re:標準体重のプログラム

#6

投稿記事 by パコネコ » 15年前

そっか、気になってはいたけど行けそうかな~とか思ってました…
もしくは.0をつけても行けそうですね。無駄だけど

C言語初心者

Re:標準体重のプログラム

#7

投稿記事 by C言語初心者 » 15年前

うまくいきました。
本当にありがとうございました。

float型に変えてやってみたんですが、それでも何故かうまくいきませんでした。
なので、言われた通り、1.1や0.9と書いてみましたらうまくいきませんでした。
float型でうまくいかなかった理由を後日教授に質問しようと思います。

本当にありがとうございました。

パコネコ

Re:標準体重のプログラム

#8

投稿記事 by パコネコ » 15年前

あのfloat型では何を定義していたんですか?
(100/90)これが整数型だからダメって話ですよ。
(0.9)これなら実数型ですね。
これは確認してませんが、
(100.0/90.0)これも実数型だと思います
==========
ごめんなさい
(90/100)ですね 画像

閉鎖

“C言語何でも質問掲示板” へ戻る