Онлайн компилятор C

#include <stdio.h> int main() { int a[10]; int temp; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); } for (int i = 0; i < 9; i++) { for (int j = 0; j < 9 - i; j++) { int ten1 =(a[j]/10) % 10; int ten2 = (a[j + 1]/10) % 10; if (ten1 > ten2) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } for (int i = 0; i < 10; i++) { printf("%d ", a[i]); } return 0; }
这段代码实现了一个冒泡排序,但排序的依据是每个整数的十位数(即数字的十位上的数值),而不是整个数字的大小。程序先读入10个整数,然后根据十位数从小到大排序,最后输出排序后的结果。

- 代码中 `ten1` 和 `ten2` 的计算方式 `(a[j]/10) % 10` 对于负数或个位数(如5)会得到什么结果?考虑一下当数字是负数或只有一位数时,十位数的定义是否合理。
- 冒泡排序的内层循环条件 `j < 9 - i` 是正确的,但注意外层循环 `i < 9` 已经保证了比较次数足够,不过你可以思考一下如果数组长度变化,这个循环边界是否需要调整。