如何用C#编写基于二维数组的BMI指数与体重状态计算程序
C# BMI指数计算程序修复方案
原有代码核心问题
- 仅遍历了第一组体重数据,没有循环输出所有递增体重对应的BMI行,所以只能看到一行结果
- BMI计算用了整数除法,精度丢失导致判断结果完全不符合预期
- 没有处理BMI等于30的边界情况,会出现漏判
- 数组索引范围和定义的长度不匹配,容易出现越界问题
修改后完整代码
int under = 0, nor = 0, over = 0, obes = 0; int m, h; Console.Write("请输入体重(单位:磅):"); m = Convert.ToInt32(Console.ReadLine()); Console.Write("请输入身高(单位:英寸):"); h = Convert.ToInt32(Console.ReadLine()); // 第一行存身高序列,第二行存体重序列,各20个值 int[,] arr = new int[2, 20]; Console.Write("身高(英寸): "); for (int j = 0; j < 20; j++) { arr[0, j] = h++; Console.Write(arr[0, j].ToString().PadLeft(6)); } for (int j = 0; j < 20; j++) { arr[1, j] = m++; } Console.WriteLine(); Console.WriteLine("".PadLeft(10) + new string('_', 120)); Console.WriteLine("体重(磅)"); // 遍历每一个体重,输出一行对应的BMI结果 for (int massIdx = 0; massIdx < 20; massIdx++) { int currentMass = arr[1, massIdx]; Console.Write(currentMass.ToString().PadLeft(7) + " |"); for (int heightIdx = 0; heightIdx < 20; heightIdx++) { int currentHeight = arr[0, heightIdx]; // 改用浮点数计算避免精度丢失 double bmi = currentMass * 703.0 / (currentHeight * currentHeight); int outputVal; if (bmi < 18.5) { under++; outputVal = -1122; } else if (bmi < 24.5) { nor++; outputVal = (int)Math.Round(bmi); } else if (bmi < 29.9) { over++; outputVal = 1122; } // 补全>=30的边界判断 else { obes++; outputVal = 0; } Console.Write(outputVal.ToString().PadLeft(6)); } Console.WriteLine(); } Console.WriteLine("\n统计结果:"); Console.WriteLine("体重过轻总人数:" + under); Console.WriteLine("体重正常总人数:" + nor); Console.WriteLine("体重超重总人数:" + over); Console.WriteLine("肥胖总人数:" + obes);
关键修改说明
- 新增了外层体重遍历循环,每个体重对应输出一行BMI值,解决仅输出一行的问题
- BMI计算公式改用
703.0做浮点运算,避免整数除法截断小数部分导致的判断错误 - 补全了BMI≥30的判断分支,消除边界漏判问题
- 用PadLeft做了输出对齐,阅读更清晰
- 调整了数组循环范围和定义长度一致,避免索引越界
内容的提问来源于stack exchange,提问作者Maria Kayani
相关产品推荐
相关产品推荐

