在线编译器 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 < 10; i++) { for (int j = 0; j < 10; j++) { if (a[j] % 10 == i) printf("%d ",a[j]) ; } } return 0; }
这段代码的功能是:读取10个整数,然后按照每个数的个位数字(0到9)进行分组输出。具体来说,外层循环变量i从0到9,内层循环遍历数组,如果某个数的个位等于i,就输出该数。这样最终输出的顺序是:先输出所有个位为0的数,再输出所有个位为1的数,依此类推。

- 注意内层循环中,条件 `a[j] % 10 == i` 是在判断个位数字,但数组下标j从0到9,而i也是0到9,这里逻辑是正确的。不过,如果数组中有多个数具有相同的个位数字,它们会按照原始顺序输出,这是符合预期的。

- 一个潜在的问题是:如果输入的整数是负数,`%` 运算的结果在C语言中可能是负数(例如 `-3 % 10` 结果是 -3),这会导致条件判断出错。你可以考虑如何处理负数的情况,比如使用绝对值或者调整判断方式。