在线编译器 C

#include <stdio.h> int main() { int a[10]; int i, j, temp; for (int n = 0; n < 10; n++) { scanf("%d", &a[i]); } for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { int b = a[j] % 10; int c = a[j + 1] % 10; if (c > b) { temp = c; c = b; b = temp; } } } for (int n = 0; n < 10; n++) { printf("%d ", a[n]); } return 0; }
这段代码试图对数组进行排序,但存在几个问题。它读取10个整数,然后尝试按个位数从大到小排序,最后输出数组。

- 第一个循环中,`scanf`使用了未初始化的变量`i`,应该使用循环变量`n`来索引数组。当前代码会导致未定义行为,因为`i`的值不确定。
- 排序部分的问题在于:交换的是局部变量`b`和`c`,而不是数组元素`a[j]`和`a[j+1]`。因此数组内容从未被修改。另外,内层循环的边界`j < 10`会导致访问`a[10]`(越界),因为`j+1`最大为10。