关于5名学生成绩统计代码的逻辑疑问:初始最高分设为0是否合理?
成绩统计中最高分查找逻辑的疑问解答
这个细节抓得太到位了!我们结合实际的成绩范围要求,一步步理清这个逻辑的合理性和潜在问题:
1. 当成绩范围是你原本预想的1-100时
把highestmark初始值设为0完全没问题:因为所有学生的成绩都大于0,第一次读取的成绩会直接覆盖初始的0,后续每次循环都能正确比较并更新最高分,最终结果不会出错。
2. 当成绩范围是实际要求的0-100时
这个逻辑在绝大多数场景下是正常工作的,但算不上最严谨的写法:
- 如果所有学生的成绩都是
0:代码里highestmark初始为0,每次判断0>0都不成立,最终结果还是0,和实际最高分一致,是正确的。 - 如果有至少一个学生成绩大于
0:后续的成绩会正常替换掉初始的0,结果也完全正确。
但为什么说它不够严谨?因为如果后续需求调整(比如允许负分,虽然当前题目不要求),或者你不小心把初始值设成了一个超出成绩范围的正数,就会直接导致最高分计算错误。
更通用的优化方案
解决这类问题的稳妥做法是用第一个学生的成绩来初始化最高分,而不是固定值:
如果是逐个读取成绩的场景,可以这样写:
// 先读取第一个学生的成绩,直接作为最高分的初始值 int highestmark; scanf("%d", &highestmark); // 循环读取剩下的4个学生成绩并比较 for (int i = 1; i < 5; i++) { int mark; scanf("%d", &mark); if (mark > highestmark) { highestmark = mark; } }
这种写法完全不依赖成绩的具体范围,不管成绩是0-100还是其他合法区间,都能准确找到最高分,从根源上避免了初始值设置不当的问题。
内容的提问来源于stack exchange,提问作者Gyu
相关产品推荐
相关产品推荐

