#c语言,if语句单条件,多范围的判定,出现了两种结果

if (BM < 18.5)
{
    printf("根据中国成年人体质指数评价指标,您属于消瘦体质(营养不良\n)");
}
if (18.5 < BM < 23.9)
{
    printf("根据中国成年人体质指数评价指标,您属于正常体质\n");
 }
if (24 < BM < 27.9)
{
    printf("根据中国成年人体质指数评价指标,您属于超重\n");
 }

if (BM > 28)
{
    printf("根据中国成年人体质指数评价指标,您属于肥胖\n");
}
return 0;

}
这个输出结果会出现两种结果,求解为什么

img

if (18.5 < BM < 23.9) 应该这么写:if (18.5 < BM && BM < 23.9)
if (24 < BM < 27.9) 应该这么写:if (24 < BM && BM < 27.9)

if里面用了条件运算符“<”和“>”,条件运算符的运算顺序是从左到右的
当BM=20.7时
对于条件判断语句“18.5 < BM < 23.9”,执行过程相当于“(18.5< BM )< 23.9”即先判断第一个表达式,并且真时值为1假时值为0。“18.5<BM”是真的故表达式值为1,将表达式的值带入“(18.5 < BM )< 23.9”,因为1<23.9所以表达式值为1,执行if语句打印你是正常体重。
对于条件判断语句“24 < BM < 27.9”,执行过程相当于“(24 < BM )< 27.9”即先判断第一个表达式,并且真时值为1假时值为0。“24<BM”是假的故表达式值为0,将表达式的值带入“(24 < BM )< 27.9”,因为0<27.9所以表达式值为1,执行if语句打印你超重了
望采纳