在线编译器 C

#include <stdio.h> int main() { int a[100]={0}; int x, n = 0; scanf("%d", &x); while (x != 0) { a[n] = x % 10; n++; x = x / 10; } int n_max, c; for (int i = 0; i < n - 1; i++) { n_max = i; for (int j = i + 1; j < n; j++) { if (a[n_max] < a[j]) { n_max = j; } } if (n_max != i) { c = a[i]; a[i] = a[n_max]; a[n_max] = c; } } for (int i = 0; i < n; i++) { printf("%d", a[i]); } return 0; }
这段代码的功能是:从键盘读入一个整数,将其各位数字按从大到小排序后输出。例如输入 312,输出 321。

代码首先将整数的每一位数字提取出来存入数组 a,然后使用选择排序对数组进行降序排列,最后输出排序后的数字。

- 注意:代码中变量 `c` 用于交换,但它的类型是 `int`,这没有问题。不过变量 `n_max` 和 `c` 没有初始化,虽然在使用前会被赋值,但良好的习惯是声明时初始化。

- 思考一下:如果输入的数字是负数,程序会如何处理?当前代码只处理了 `x != 0` 的情况,但负数取模和除法在 C 语言中的行为可能导致意外结果。你可以考虑如何让程序正确处理负数。