以下の問題を教えて下さい。
以下に示すように、身長と体重を実数値として読み込み、BMI指数(肥満の程度を示す指数)と肥満度の判定を表示するプログラムを作成せよ。ここで、BMI指数は身長h(m)、体重w(kg)に対して BMI=w÷h×hと定義され、また肥満度の判定は、以下に基づき行うものとする。
BMI指数 18.5未満 18.5以上25.0未満 25.0以上30.0未満 30.0以上35.0未満 35.0以上40.0未満 40.0以上
判定 やせ 普通 肥満度1 肥満度2 肥満度3 肥満度4
なお、以下のプロトタイプ宣言により示される関数を作成し、これを用いること。
double bmi_index(double height,double weight);
void bmi_judge(double index);
ここで関数bmi_indexは身長heightに、体重をweightに受け取り、BMI指数を計算する関数である。また関数bmi_judgeはBMI指数をindexに受け取り、判定結果を表示する関数である。
一応出来たのはここまでです。
#include <stdio.h>
double bmi_index(double height,double weight);
void bmi_judge(double index);
int main(void)
{
double a,b,bmi,bmi2;
printf("あなたのBMIを求めてみましょう\n");
printf("身長:");
scanf("%lf",&a);
printf("体重:");
scanf("%lf",&b);
printf("<結果>\n");
bmi=bmi_index(a,b);
printf("BMI指数:%f\n",bmi);
printf("肥満度:%f");
bmi_judge(bmi);
return 0;
}
double bmi_index(double height,double weight)
{
double bmi;
bmi=weight/height/height*10000;
return bmi;
}
void bmi_judge(double index)
{
double a,b;
a=bmi_index(index,b);
if(a<18.5)printf("やせ\n");
if(a>=18.5&&a<25.0)printf("普通\n");
if(a>=25.0&&a<30.0)printf("肥満度1\n");
if(a>=30.0&&a<35.0)printf("肥満度2\n");
if(a>=35.0&&a<40.0)printf("肥満度3\n");
if(a>=40.0)printf("肥満度4");
}
よろしくお願いします
関数を使って1
Re:関数を使って1
いくつか問題点があります。
【main関数】
・身長と体重の変数名をわかりやすくする方がよい。
a, bでは意味がわかりにくい。
・変数bmi2は、定義しただけで使っていない。
不要ならば、定義しない。
・身長と体重を入力する際の単位が不明。
bmi_index関数で10000を掛けているので、
身長はセンチメートル単位での入力を想定している?
であるなら、printfで単位を明記する方がよい。
・printf("肥満度:%f"); の %f は不要。
【bmi_judge関数】
・引数indexの値によって肥満度を判定するので、
変数a, bやbmi_index関数の実行は不要。
・すべてのif文で、aによる判定をindexによる判定に変更する。
【main関数】
・身長と体重の変数名をわかりやすくする方がよい。
a, bでは意味がわかりにくい。
・変数bmi2は、定義しただけで使っていない。
不要ならば、定義しない。
・身長と体重を入力する際の単位が不明。
bmi_index関数で10000を掛けているので、
身長はセンチメートル単位での入力を想定している?
であるなら、printfで単位を明記する方がよい。
・printf("肥満度:%f"); の %f は不要。
【bmi_judge関数】
・引数indexの値によって肥満度を判定するので、
変数a, bやbmi_index関数の実行は不要。
・すべてのif文で、aによる判定をindexによる判定に変更する。
Re:関数を使って1
#include <stdio.h> double bmi_index( double height , double weight ); void bmi_judge( double index ); int main( void ) { double a ,b , bmi; // 入力用の変数は初期化しておく方が望ましいです(^-^) a = 0.0; b = 0.0; printf( "あなたのBMIを求めてみましょう\n" ); // 身長の入力 printf( "身長(m):" ); scanf( "%lf" , &a ); // 体重の入力 printf( "体重(kg):" ); scanf( "%lf" , &b ); // BMIの計算 & 表示 printf( "<結果>\n" ); bmi = bmi_index( a , b ); printf( "BMI指数:%f\n" , bmi ); // 肥満度の判定 & 表示 printf( "肥満度:" ); bmi_judge( bmi ); // ここで引数にbmiと指定すると…①に続く return 0; } double bmi_index( double height , double weight ) { double bmi; // BMIの計算 bmi = weight / height / height; // 戻り値はbmiです return( bmi ); } void bmi_judge( double index ) // ①この関数の引数であるdouble型のindexにbmiの値が一時的に代入されます。 { // つまり、わざわざ新しい変数を用意しなくても、そのままindexを判定に使用する事ができる訳です。 if( index < 18.5 ) printf( "やせ\n" ); if( index >= 18.5 && index < 25.0 ) printf( "普通\n" ); if( index >= 25.0 && index < 30.0 ) printf( "肥満度1\n" ); if( index >= 30.0 && index < 35.0 ) printf( "肥満度2\n" ); if( index >= 35.0 && index < 40.0 ) printf( "肥満度3\n" ); if( index >= 40.0 ) printf( "肥満度4" ); }
Re:関数を使って1
一連の質問・回答が終わってしまってましたね^^;
回答が遅くてごめんなさい;
mikiさん、バグさん、keichanさん、boxさん、お答えありがとうございます^^
すずさん、BMIの計算はきっと
体重÷身長の二乗という計算から
体重/(身長*身長)
を間違ったんだと思います。
割り算は逆数の掛け算なので、かっこをはずすとかけざんと割り算は、割り算になります^^
回答が遅くてごめんなさい;
mikiさん、バグさん、keichanさん、boxさん、お答えありがとうございます^^
すずさん、BMIの計算はきっと
体重÷身長の二乗という計算から
体重/(身長*身長)
を間違ったんだと思います。
割り算は逆数の掛け算なので、かっこをはずすとかけざんと割り算は、割り算になります^^