Online Compiler C

#include <stdio.h> int main() { int a[10]; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); } for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { int a = a[j] % 10; int b = a[j + 1] % 10; if (a > b) { int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } for (int i = 0; i < 10; i++) { printf("%d ", a[i]); } return 0; }
这段代码试图对数组按个位数字进行冒泡排序,但存在几个关键问题。

- 在内部循环中,你声明了 `int a`,这覆盖了数组名 `a`,导致后续对 `a[j]` 的访问出错。变量名不能和数组名冲突。
- 冒泡排序的内层循环条件 `j < 9` 是正确的,但外层循环需要执行多次才能保证完全排序,目前只执行了一次遍历,可能无法完成排序。
- 交换元素时,你使用了 `t = a[j]`,但此时 `a` 已经被重新定义为整数变量,所以 `a[j]` 不再指向数组元素。

- 检查变量命名:避免在函数内重新定义与数组同名的变量。
- 思考冒泡排序需要几层循环才能保证所有元素按顺序排好。