在线编译器 C

#include <stdio.h> int 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),然后按个位数从小到大排序并输出。

代码中存在一个明显的逻辑错误:数组大小定义为10,但所有循环都只处理前9个元素(i < SIZE-1),导致最后一个元素未被使用。这可能是你无意中造成的。

- 检查循环条件 i < SIZE-1 是否真的符合你的意图。通常处理整个数组应该用 i < SIZE。
- 注意变量 SIZE 被定义为全局变量,但未使用 const 关键字,这在C中不是错误,但建议用 const int SIZE = 10; 来避免意外修改。