Online Compiler C

#include <stdio.h> enum { SIZE = 10 }; int main() { int a[SIZE]; for (int i = 0; i < SIZE - 1; i++) { scanf("%d", &a[i]); } int n_min, c; for (int i = 0; i < SIZE - 1; i++) { n_min = i; for (int j = i + 1; j < SIZE; j++) { if (a[n_min] % 10 > a[j] % 10) { n_min = j; } } if (n_min != i) { c = a[i]; a[i] = a[n_min]; a[n_min] = c; } } for (int i = 0; i < SIZE - 1; i++) { printf("%d ", a[i]); } return 0; }
这段代码实现了一个选择排序算法,但排序的依据是每个整数的个位数(即除以10的余数)。代码读取9个整数(因为循环条件是 `i < SIZE - 1`,而SIZE=10),然后按个位数从小到大排序,最后输出排序后的9个数。

- 注意第一个循环只读取了9个数,但数组大小是10。检查一下循环条件 `i < SIZE - 1` 是否是你想要的。如果希望读取10个数,应该用 `i < SIZE`。
- 排序的内层循环中,`j` 从 `i+1` 到 `SIZE`,但数组只有前9个位置有有效数据(因为只读了9个)。这可能导致访问未初始化的数组元素,从而产生不可预测的结果。思考一下数组的有效数据范围与循环边界是否一致。