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

#include <stdio.h> int main() { int arr[10]; // 正确声明包含 10 个元素的数组 // 1. 读取 10 个整数存入数组 for (int i = 0; i < 10; i++) { if (scanf("%d", &arr[i]) != 1) { return 0; } } // 2. 冒泡排序:按照最后一位数字从小到大排序 for (int i = 0; i < 10 - 1; i++) { for (int j = 0; j < 10 - i - 1; j++) { // 提取相邻两个数的最后一位数字 int last_digit1 = arr[j] % 10; int last_digit2 = arr[j + 1] % 10; // 如果左边的个位数大于右边的个位数,则交换它们整体的位置 if (last_digit1 > last_digit2) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } // 3. 打印排序后的数组 for (int i = 0; i < 10; i++) { printf("%d", arr[i]); if (i < 9) { printf(" "); // 元素之间用空格隔开 } } printf("\n"); return 0; }
这段代码的功能是:读取10个整数,然后根据每个数的个位数(最后一位数字)进行冒泡排序,最后输出排序后的数组。

代码整体逻辑正确,但有一个潜在问题需要注意:

- 当两个数的个位数相同时,代码没有规定它们的相对顺序。冒泡排序是稳定排序,但这里只比较了个位数,没有考虑原数本身的大小。如果题目要求个位数相同时保持原顺序,当前代码是稳定的,符合要求;但如果要求个位数相同时再按原数大小排序,则缺少这一层比较。

- 输入检查部分,如果输入不是整数,程序直接返回0,没有给出任何提示信息,用户可能不知道发生了什么。