#include"BFR.h"
#include"stdio.h"
#include<windows.h>
double BfrFemaleLimits18_39[] = { 5.0, 20.5, 34.5, 39.5, 45.01 };
double BfrFemaleLimits40_59[] = { 5.0, 21.5, 35.5, 40.5, 45.01 };
double BfrFemaleLimits60[] = { 5.0, 22.5, 36.5, 41.5, 45.01 };
double BfrMaleLimits18_39[] = { 5.0, 10.5, 21.5, 26.5, 45.01 };
double BfrMaleLimits40_59[] = { 5.0, 11.5, 22.5, 27.5, 45.01 };
double BfrMaleLimits60[] = { 5.0, 13.5, 24.5, 29.5, 45.01 };
char *Result[] = { "Thin", "Normal", "Overweight", "Fat", "Illegal" };
int AgeLimits[] = { 18, 40, 60, 81 };
float Get_height(void)
{
float Height = 0.0;
printf("Enter a people's Height:");
scanf_s("%f", &Height);
if ((HEIGHT_MIN >= Height) && (Height >= HEIGHT_MAX))
{
printf("Error within height\n");
}
else
{
printf("Height=%.2f m\n", Height);
}
return Height;
}
float Get_weight(void)
{
float Weight = 0.0;
printf("Enter a people's Weight:");
scanf_s("%f", &Weight);
if ((WEIGHT_MIN >= Weight) && (WEIGHT_MAX >= Weight))
{
printf("Error within weight\n");
}
else
{
printf("weight=%.3f kg\n", Weight);
}
return Weight;
}
int Get_age(void)
{
int Age = 0;
printf("Enter a people's Age:");
scanf_s("%d", &Age);
if ((AGE_MIN >= Age) && (AGE_MAX <= Age))
{
printf("Error within Age\n");
}
else
{
printf("age=%d\n", Age);
}
return Age;
}
int Judge_sex(void)
{
//0表示女,1表示男
int Sex=0;
printf("Enter a people's Sex:");
scanf_s("%d", &Sex);
if ((0 == Sex) || (1 == Sex))
;
else
{
printf("Error in sex,please input again\n");
}
return Sex;
}
void JudgeFemaleBfr(double Bfr, int Age)
{
int AgeIndex = 0;
int BfrIndex = 0;
int ResultFlag = 0;
if (Age < AgeLimits[0])
{
ResultFlag = 4;
}
if ((Age >= AgeLimits[0]) && (Age < AgeLimits[1]))
{
if (Bfr < BfrFemaleLimits18_39[0])
{
ResultFlag = 4;
}
if ((Bfr >= BfrFemaleLimits18_39[0]) && (Bfr < BfrFemaleLimits18_39[1]))
{
ResultFlag = 0;
}
if ((Bfr >= BfrFemaleLimits18_39[1]) && (Bfr < BfrFemaleLimits18_39[2]))
{
ResultFlag = 1;
}
if ((Bfr >= BfrFemaleLimits18_39[2]) && (Bfr < BfrFemaleLimits18_39[3]))
{
ResultFlag = 2;
}
if ((Bfr >= BfrFemaleLimits18_39[3]) && (Bfr < BfrFemaleLimits18_39[4]))
{
ResultFlag = 3;
}
if ((Bfr >= BfrFemaleLimits18_39[4]))
{
ResultFlag = 4;
}
}
if ((Age >= AgeLimits[1]) && (Age < AgeLimits[2]))
{
if (Bfr < BfrFemaleLimits40_59[0])
{
ResultFlag = 4;
}
else if ((BfrFemaleLimits40_59[0] <= Bfr) && (Bfr < BfrFemaleLimits40_59[1]))
{
ResultFlag = 0;
}
else if ((BfrFemaleLimits40_59[1] <= Bfr) && (Bfr < BfrFemaleLimits40_59[2]))
{
ResultFlag = 1;
}
else if ((BfrFemaleLimits40_59[2] <= Bfr) && (Bfr < BfrFemaleLimits40_59[3]))
{
ResultFlag = 2;
}
else if ((BfrFemaleLimits40_59[3] <= Bfr) && (Bfr < BfrFemaleLimits40_59[4]))
{
ResultFlag = 3;
}
else
{
ResultFlag = 4;
}
return;
}
if ((Age >= AgeLimits[2]) && (Age < AgeLimits[3]))
{
if (Bfr < BfrFemaleLimits60[0])
{
ResultFlag = 4;
}
else if ((BfrFemaleLimits60[0] <= Bfr) && (Bfr < BfrFemaleLimits60[1]))
{
ResultFlag = 0;
}
else if ((BfrFemaleLimits60[1] <= Bfr) && (Bfr < BfrFemaleLimits60[2]))
{
ResultFlag = 1;
}
else if ((BfrFemaleLimits60[2] <= Bfr) && (Bfr < BfrFemaleLimits60[3]))
{
ResultFlag = 2;
}
else if ((BfrFemaleLimits60[3] <= Bfr) && (Bfr < BfrFemaleLimits60[4]))
{
ResultFlag = 3;
}
else
{
ResultFlag = 4;
}
switch (ResultFlag)
{
case 0:
printf("result = %s \n", Result[ResultFlag]);
break;
case 1:
printf("result = %s \n", Result[ResultFlag]);
break;
case 2:
printf("result = %s \n", Result[ResultFlag]);
break;
case 3:
printf("result = %s \n",Result[ResultFlag]);
break;
default:
printf("ERROR!result = %s\n", Result[4]);
}
return;
}
if (Age >= AgeLimits[3])
{
ResultFlag = 4;
}
return;
}
void JudgeMaleBfr(double Bfr, int Age)
{
int AgeIndex = 0;
int BfrIndex = 0;
int ResultFlag = 0;
if (Age < AgeLimits[0])
{
ResultFlag = 4;
}
if ((Age >= AgeLimits[0]) && (Age < AgeLimits[1]))
{
if (Bfr < BfrMaleLimits18_39[0])
{
ResultFlag = 4;
}
if ((Bfr >= BfrMaleLimits18_39[0]) && (Bfr < BfrMaleLimits18_39[1]))
{
ResultFlag = 0;
}
if ((Bfr >= BfrMaleLimits18_39[1]) && (Bfr < BfrMaleLimits18_39[2]))
{
ResultFlag = 1;
}
if ((Bfr >= BfrMaleLimits18_39[2]) && (Bfr < BfrMaleLimits18_39[3]))
{
ResultFlag = 2;
}
if ((Bfr >= BfrMaleLimits18_39[3]) && (Bfr < BfrMaleLimits18_39[4]))
{
ResultFlag = 3;
}
if ((Bfr >= BfrMaleLimits18_39[4]))
{
ResultFlag = 4;
}
}
if ((Age >= AgeLimits[1]) && (Age < AgeLimits[2]))
{
if (Bfr < BfrMaleLimits40_59[0])
{
ResultFlag = 4;
}
else if ((BfrMaleLimits40_59[0] <= Bfr) && (Bfr < BfrMaleLimits40_59[1]))
{
ResultFlag = 0;
}
else if ((BfrMaleLimits40_59[1] <= Bfr) && (Bfr < BfrMaleLimits40_59[2]))
{
ResultFlag = 1;
}
else if ((BfrMaleLimits40_59[2] <= Bfr) && (Bfr < BfrMaleLimits40_59[3]))
{
ResultFlag = 2;
}
else if ((BfrMaleLimits40_59[3] <= Bfr) && (Bfr < BfrMaleLimits40_59[4]))
{
ResultFlag = 3;
}
else
{
ResultFlag = 4;
}
return;
}
if ((Age >= AgeLimits[2]) && (Age < AgeLimits[3]))
{
if (Bfr < BfrMaleLimits60[0])
{
ResultFlag = 4;
}
else if ((BfrMaleLimits60[0] <= Bfr) && (Bfr < BfrMaleLimits60[1]))
{
ResultFlag = 0;
}
else if ((BfrMaleLimits60[1] <= Bfr) && (Bfr < BfrMaleLimits60[2]))
{
ResultFlag = 1;
}
else if ((BfrMaleLimits60[2] <= Bfr) && (Bfr <BfrMaleLimits60[3]))
{
ResultFlag = 2;
}
else if ((BfrMaleLimits60[3] <= Bfr) && (Bfr < BfrMaleLimits60[4]))
{
ResultFlag = 3;
}
else
{
ResultFlag = 4;
}
switch (ResultFlag)
{
case 0:
printf("result = %s \n", Result[ResultFlag]);
break;
case 1:
printf("result = %s \n", Result[ResultFlag]);
break;
case 2:
printf("result = %s \n", Result[ResultFlag]);
break;
case 3:
printf("result = %s \n", Result[ResultFlag]);
break;
default:
printf("ERROR!result = %s\n", Result[4]);
}
return;
}
if (Age >= AgeLimits[3])
{
ResultFlag = 4;
}
return;
}
#ifndef _BFR_H_
#define _BFR_H_
#include<stdio.h>
#define BMI(Weight,Height) ((Weight) / ((Height)*(Height)))
#define BFR(Bmi,Age,Sex) (1.2*(Bmi)+0.23*(Age)-5.4-10.8*(Sex))
#define HEIGHT_MAX (2.8)
#define HEIGHT_MIN (0.56)
#define WEIGHT_MAX (330.0)
#define WEIGHT_MIN (2.12)
#define AGE_MAX (80)
#define AGE_MIN (18)
float Get_height(void);
float Get_weight(void);
int Get_age(void);
int Judge_sex(void);
void JudgeFemaleBfr(double Bfr, int Age);
void JudgeMaleBfr(double Bfr, int Age);
#endif
#include"BFR.h"
#include<stdio.h>
#include"windows.h"
int main()
{
//采集信息:身高,体重,年龄和性别
float Height = 0.0;
float Weight = 0.0;
int Age = 0;
int Sex = 0;
double Bmi = 0.0;
double Bfr = 0.0;
Height = Get_height();
Weight = Get_weight();
Age = Get_age();
Sex = Judge_sex();
/*printf("Height=%.2f m\n", Height);
printf("weight=%.3f kg\n", Weight);
printf("age=%d\n", Age);*/
printf("Sex=%s\n", Sex == 0 ? "famale" : "male");
//计算Bmi
Bmi = BMI(Weight,Height);
//计算Bfr
Bfr = BFR(Bmi, Age, Sex);
printf("Bmi=%.2f \n", Bmi);
printf("Bfr=%.2f \n", Bfr);
//判断Bfr
if (Sex == 0)
{
JudgeFemaleBfr(Bfr, Age);
}
else
{
JudgeMaleBfr(Bfr, Age);
}
system("pause");
return 0;
}