在线编译器 C

#include <stdio.h> int main() { int arr[10]; int a, b, c; for (int a = 0; a < 10; a++) { scanf("%d", &arr[a]); } for (a = 0; a < 9; a++) { for (b = 0; b < 9 - a; b++) { int last1 = arr[b] % 10; int last2 = arr[b + 1] % 10; if (last1 > last2) { c = arr[b]; arr[b] = arr[b + 1]; arr[b + 1] = c; } } } for (int a=0; a < 10 a++) { printf("%d ", arr[a]); } return 0; }
这段代码实现了一个冒泡排序,但排序的依据是每个整数的个位数字(即除以10的余数),而不是整数本身的大小。代码从标准输入读取10个整数,然后按个位数字从小到大排序并输出。

- 在第三个for循环中,`for (int a=0; a < 10 a++)` 这一行缺少了一个分号,应该是 `a < 10; a++`。这个语法错误会导致编译失败。
- 变量 `a` 在第一个for循环中被重新声明为局部变量(`int a`),但后面又直接使用 `a` 作为循环变量。虽然这在C语言中是允许的(内层声明会隐藏外层),但容易引起混淆。建议检查变量作用域是否清晰。