在线编译器 C

#include <stdio.h> int main() { int a, b, c, d, e, max, min,sum; scanf("%d%d%d%d%d",&a,&b,&c,&d,&e); max = a, min = e; if (b > max) max = b; if (c > max) max = c; if (e > max) max = e; if (d > max) max = d; if (a < min) min = a; if (b < min) min = b; if (c < min) min = c; if (d < min) min = d; sum=max+min; printf("%d",sum); }
这段代码的功能是:读入5个整数,找出其中的最大值和最小值,然后计算它们的和并输出。

代码逻辑基本正确,但有一个小问题需要注意。

- 变量 `e` 在输入时是第五个数,但你在初始化 `min = e` 之后,又用 `if (e > max)` 来更新最大值,这没问题。不过你漏掉了对 `e` 是否比当前最小值更小的判断——你只比较了 `a,b,c,d` 与 `min`,但没有比较 `e` 本身。因为 `min` 初始值就是 `e`,所以如果 `e` 本身就是最小值,那没问题;但如果 `e` 不是最小值,而其他某个数更小,`min` 会被更新正确。但这里有一个潜在逻辑:你初始化 `min = e`,然后只检查 `a,b,c,d` 是否小于 `min`,这实际上已经覆盖了所有数,因为 `e` 已经作为初始值了。所以这个逻辑其实是对的,只是写法上容易让人困惑。

- 更关键的问题是:你初始化 `max = a` 和 `min = e`,但之后更新最大值时,你检查了 `b,c,e,d` 是否大于 `max`,却漏掉了检查 `a` 是否大于 `max`(因为 `max` 初始就是 `a`,所以不需要检查)。同样,更新最小值时,你检查了 `a,b,c,d` 是否小于 `min`,但没有检查 `e` 是否小于 `min`(因为 `min` 初始就是 `e`,所以也不需要)。所以逻辑上其实是对的,但代码风格不够统一,容易让人误解。

- 建议:为了让代码更清晰,可以考虑统一初始化 `max` 和 `min` 为第一个数 `a`,然后依次比较所有五个数。这样逻辑更直观,也不容易遗漏。