You need to enable JavaScript to run this app. 如何用C#编写基于二维数组的BMI指数与体重状态计算程序
优惠活动
大模型
产品
解决方案
定价
更多

如何用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);

关键修改说明

  1. 新增了外层体重遍历循环,每个体重对应输出一行BMI值,解决仅输出一行的问题
  2. BMI计算公式改用703.0做浮点运算,避免整数除法截断小数部分导致的判断错误
  3. 补全了BMI≥30的判断分支,消除边界漏判问题
  4. 用PadLeft做了输出对齐,阅读更清晰
  5. 调整了数组循环范围和定义长度一致,避免索引越界

内容的提问来源于stack exchange,提问作者Maria Kayani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 16:54:11