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
相关产品推荐
相关产品推荐

