案例描述
BMI 指数(Body Mass Index,身体质量指数)是用体重(以公斤为单位)除以身高(以米为单位)的平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的标准。BMI 指数比对胖瘦程度见表 3-2。
表 3-2 BMI 指数参考表
BMI 值 分档
低于 18.5 过瘦
18.5 ~ 24 (不含) 正常
24 ~ 28 (不含) 过胖
28 ~ 32 (不含) 肥胖
大于等于 32 非常肥胖
案例分析
不要着急动手编程,我们应该根据题目要求,仔细思考程序的执行步骤。
首先让用户输入自己的身高和体重,我们分别将它们存入变量 height 和 weight。然后根据题目给出的公
式计算出 bmi 值,用 JavaScript 表达式表示:
var bmi = weight / Math.pow(height , 2);
接下来就要写多分支的 if 结构体了。根据表 3-2,我们可以写出 5 个分支。
请一定注意“否则如果”,不要书写画蛇添足的语句。每条 else if 分支都暗含了“之前的条件不满足”
的意义。比如正常体重的标准是 bmi 介于 18.5 到 24,可能直觉就会写出 bmi > 18.5 && bmi < 24 这样的语
句,但这是画蛇添足的。因为 bmi 低于 18.5 的人已经是“过瘦”了,所以在判断用户是不是“正常”体型的时
候就不需要验证 bmi > 18.5 了。
案例代码
案例代码如下:
//用户输入身高
var height = prompt("请输入身高,以米为单位");
//用户输入体重
var weight = prompt("请输入体重,以公斤为单位");
//计算 BMI
var bmi = weight / (height * height);
//根据 BMI 弹出结果
if(bmi < 18.5){
alert("过轻!请加强营养!");
}else if(bmi < 24){
alert("正常!请保持!");
}else if(bmi < 28){
alert("过重!要减肥啦!");
}else if(bmi < 32){
alert("肥胖!赶紧多运动减肥!");
}else{
alert("非常肥胖!严重影响健康,请减肥!");
}
程序的每一个 if 分支,都做到了最精简,没有书写没用的语句。
if 语句的嵌套
if 语句非常灵活,可以嵌套使用,即分支中还可以再有分支。
来看一个题目:用户输入年龄和性别,判断用户是否能合法结婚。相关法律法规规定,男性结婚年龄不得早
于 22 周岁,女性不得早于 20 周岁。
用户的年龄和性别综合决定了结果:当用户是男性的时候,年龄的分界点是 22;当用户是女性的时候,年
龄分界点是 20。这就是说,性别是一个“大条件”,在某一个大条件下,再根据年龄这个“小条件”来产生结
果。
根据这个算法思路,我们书写程序如下:
//用户先输入自己的性别,比如男、女。然后输入自己的年龄。
var sex = prompt("请输入性别");
var age = Number(prompt("请输入年龄"));
//先判断性别
if(sex == "男"){
//如果是男性的情况下,继续判断年龄
if(age >= 22){
alert("可以结婚");
}else{
alert("不能结婚");
}
}else if(sex == "女"){
//如果是女性的情况下,继续判断年龄
if(age >= 20){
alert("可以结婚");
}else{
alert("不能结婚");
}
}else{
//性别输入输入的不是男也不是女
alert("请输入正确的性别");
}
程序出现了外层 if 和内层 if 两层结构。外层 if 用来判断用户的性别;内层 if 用来判断用户的年龄。
代码中的 if 语句嵌套了两级,在更为复杂的项目中可能会有更多级别的嵌套。使用多层 if 语句的时候,
我们必须要注重代码缩进,同一个层次的 if 语句,必须缩进到同一个级别上。