Online Compiler C

#include <stdio.h> int main() { int A[10]; int m1, m2, cymma, j=0; scanf("%d", &A[0]); m1 = A[0]; for (int i = 1;i <= 10; i++) { scanf("%d", &A[0]); if (A[i] >= m1) { m2 = m1; m1 = A[i]; j++; } if (i == 10 &&j == 0){ m2 = A[1]; for(int k = 1;k<= 10; k++) { if(A[k] >= m2) { m2 = A[k]; } } } } cymma = m1+m2; printf("%d", m1+m2); return 0; }
这段代码试图找出输入的10个整数中最大的两个数并求和,但存在几个关键问题。

- 你只读取了第一个数到 `A[0]`,后续循环中每次 `scanf` 都覆盖 `A[0]`,导致数组其他元素未正确存储。循环中 `A[i]` 访问的是未初始化的值。
- 变量 `j` 用于标记是否找到过第二大值,但逻辑不完整:当 `A[i] >= m1` 时更新 `m1` 和 `m2`,但若 `A[i]` 小于 `m1` 却大于当前 `m2`,你没有更新 `m2`。
- 循环条件 `i <= 10` 会导致数组越界,因为 `A[10]` 不存在(有效索引是0到9)。