在线编译器 C

#include <stdio.h> int main() { int SIZE = 10; int i; int max1, max2; int a[SIZE]; int cymma; for (i = 0; i < SIZE; i++) { scanf("%d", &a[i]); if (a[0] > a[1]) { max1 = a[0]; max2 = a[1]; } else { max1 = a[1]; max2 = a[2]; } } for (i = 2; i < SIZE; i++) { if (a[i] > max1) { max1 = a[i]; max2 = max1; } else if (a[i] > max2) { max2 = a[i]; } cymma = max1 + max2; printf("%d", cymma); } } return 0; }
这段代码试图找出数组中的两个最大值并求和,但存在几个逻辑错误。

- 第一个循环中,每次输入新数后都重新比较a[0]和a[1],这会导致max1和max2被反复覆盖,而且当i=0或1时a[1]或a[2]可能还未输入。初始化最大值应该在所有输入完成后进行,而不是在输入循环中。
- 第二个循环中,当更新max1时,你把max2赋值为旧的max1,但顺序错了:应该先把旧的max1保存到max2,再更新max1。另外,求和与打印放在了循环内部,导致每次更新都输出一次,而不是最后输出一次。
- 变量名"cymma"可能是笔误,但逻辑上没问题。