在线编译器 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]; 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,最后求和输出。

- 注意:如果数组中有多个相同的最大值,比如所有数都是5,那么max1和max2都会是5,但实际并没有第二大的不同数值。你的代码在这种情况下会输出10,但可能期望的结果是只存在一个最大值时如何处理?你需要考虑这种情况。
- 另外,初始化max2为a[0]可能有问题:如果a[0]恰好是最大值,那么第二个循环中条件a[i] < max1会使得a[0]不被选为max2,但max2仍然保持a[0]的值,导致max2等于max1。你需要思考如何正确初始化第二大的值。