You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#基于数组计算班级测试平均分的代码问题修复求助

C#班级平均分计算代码修复方案

现有代码问题梳理

  • 数组索引使用错误:C#数组从0开始索引,你初始化了长度为12的数组,但所有循环均从i=1启动到i<12结束,仅遍历了11个元素,缺失了索引0对应的第一位学生数据,实际仅统计了11人的成绩
  • 平均分计算位置错误:你将平均分计算、输出逻辑放在了分数累加的循环内部,每累加一个分数就会输出一次临时平均分,最终会输出11次错误结果,而非全局统计后的最终平均分
  • 整数除法精度丢失:你使用int类型的total直接除以int类型的12,C#会优先执行整数除法自动舍去小数部分,再将结果转为double,会丢失小数精度,无法得到准确的平均分

修复后完整代码

string[] studentnames = new string[12];
int[] testscore = new int[12];

int i;
int index;
double average;
int total = 0;

//title
Console.Write("\n\nStudent lists:\n");
Console.Write("******************\n");

//asks user to input names
Console.Write("Enter student names:\n");
// 循环从0开始,覆盖全部12个元素
for (i = 0; i < 12; i++)
{
    Console.Write("Student name {0} : ", i+1);
    studentnames[i] = Console.ReadLine();
    //asks user to enter student's test score
    Console.Write("Please enter their test score: ");
    testscore[i] = Convert.ToInt32(Console.ReadLine());
}

//outputs all values user has entered
Console.WriteLine("\nStudent marks: ");
// 循环从0开始
for (i = 0; i < 12; i++)
{
    Console.WriteLine("Name: ");
    Console.WriteLine("{0} ", studentnames[i]);
    Console.WriteLine("Test score: ");
    Console.WriteLine("{0} ", testscore[i]);
}

// 先完成所有分数累加
for (index = 0; index < 12; index++)
{
    total = total + testscore[index];
}
// 累加完成后再计算平均分,将total转为double避免整数除法
average = (double)total / 12;
// 仅输出一次最终结果
Console.WriteLine("The class average was: " + average);
Console.ReadKey();

修复说明

  • 所有遍历数组的循环均调整为从i=0启动,遍历i<12,覆盖全部12个数组元素,确保12个学生的信息都被录入、统计,展示学生序号时用i+1适配用户的阅读习惯
  • 平均分计算、输出逻辑移到累加循环外部,等所有分数全部累加完毕后再计算最终值,仅输出一次全局平均分
  • 计算平均分时先将total强制转换为double类型,再除以12,执行浮点数除法保留小数精度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:15:06