C言語でBMI(Body Mass Index)を計算するプログラムを作成しようとした際、結果が表示されないという問題が発生することがあります。この記事では、なぜBMIが表示されないのか、その原因と解決方法について解説します。
問題のソースコード
以下は、BMIを計算し表示するためのC言語のソースコードです。ユーザーから身長と体重を入力しても、BMIがうまく表示されません。
#include
#include
typedef char String[1024];
int main(void)
{
String heigStrA;
String weigStrA;
printf("カルテ番号1\n");
printf("カルテ番号1の身長を入力してください\n");
scanf("%s",heigStrA);
printf("カルテ番号1の体重を入力してください\n");
scanf("%s",weigStrA);
int heigA = atoi(heigStrA);
int weigA = atoi(weigStrA);
printf("身長[cm]:%d\n",heigA);
printf("体重[kg]:%d\n",weigA);
//BMIのデータ
printf("カルテ番号1のBMIは%.2fである\n", weigA/(heigA*heigA)*0.0001);
return 0;
}
問題の原因:BMI計算式の誤り
コード自体はほぼ正しいのですが、BMIの計算式に問題があります。BMIの計算式は次の通りです。
BMI = 体重(kg) / (身長(m) * 身長(m))
しかし、あなたのコードでは、身長をcm単位で入力し、計算にはそのままcm単位を使用しています。身長はm単位に変換する必要があります。これが原因で、BMIが正しく表示されません。
解決方法:身長の単位をmに変換する
問題を解決するには、身長をm単位に変換してからBMIを計算する必要があります。身長をcmからmに変換するには、身長を100で割る必要があります。
具体的には、次のようにコードを修正します。
ave = sum/x;
dis = sum2/x - ave*ave;
std = sqrt(dis);
修正後、BMIの計算式は次のようになります。
printf("カルテ番号1のBMIは%.2fである\n", weigA / (heigA / 100.0 * heigA / 100.0));
修正後のコード例
修正後のコードは以下の通りです。
#include
#include
typedef char String[1024];
int main(void)
{
String heigStrA;
String weigStrA;
printf("カルテ番号1\n");
printf("カルテ番号1の身長を入力してください\n");
scanf("%s",heigStrA);
printf("カルテ番号1の体重を入力してください\n");
scanf("%s",weigStrA);
int heigA = atoi(heigStrA);
int weigA = atoi(weigStrA);
printf("身長[cm]:%d\n",heigA);
printf("体重[kg]:%d\n",weigA);
// BMIの計算
printf("カルテ番号1のBMIは%.2fである\n", weigA / (heigA / 100.0 * heigA / 100.0));
return 0;
}
まとめ
このプログラムでBMIが表示されない問題は、身長の単位をmに変換していないことが原因です。身長をcmで入力した場合は、その値を100で割ってm単位に変換してから計算することで、正しいBMIを表示できるようになります。これで、BMIが正しく表示されるようになります。


コメント