以下の問題を教えて下さい。
以下に示すように、身長と体重を実数値として読み込み、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
-
miki
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の計算はきっと
体重÷身長の二乗という計算から
体重/(身長*身長)
を間違ったんだと思います。
割り算は逆数の掛け算なので、かっこをはずすとかけざんと割り算は、割り算になります^^