在线编译器 C

#include <stdio.h> int main() { int a[10]; int max1; int max2; int sum; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); } max1 = a[0]; for (int i = 0; i < 10; i++) { if (a[i] > max1) { max1 = a[i]; } } max2 = a[0]-1; for (int i = 0; i < 10; i++) { if (a[i] > max2 && a[i] < max1) { max2 = a[i]; } } sum = max1 + max2; printf("%d ", sum); return 0; }
这段代码的功能是:从键盘输入10个整数,找出其中最大的两个数,并输出它们的和。

代码的思路是先找出最大值max1,然后找出小于max1的最大值作为第二大的数max2。但这里有一个潜在问题:如果数组中有多个相同的最大值,或者所有数都相等,那么max2的初始值设置可能不够安全。

- 注意max2的初始值设为a[0]-1,如果a[0]是整数的最小值(比如-2147483648),减1会导致溢出,变成正数,从而影响比较结果。
- 另外,如果所有数都相等,那么max2永远不会被更新,最终结果可能不正确。考虑一下如何更稳妥地初始化第二大的值。