Online Compiler C

#include <stdio.h> int main(){ int c=0; int a; scanf("%d",&a); int const N=100; int A[N]; while(a>0){ A[c]=a%10; c++; a=a/10; } int d=0; for(int i=0;i<c-1;i++){ for (int j=0;j<c-1;j++){ if (A[j]<A[j+1]){ d=A[j]; A[j]=A[j+1]; A[j+1]=d; } } } for (i=0;i<c;i++){ printf("%d",A[i]); } return 0; }
这段代码的作用是:读入一个整数,将其各位数字提取到数组中,然后对数组进行降序排序,最后输出排序后的数字序列。

代码中存在几个问题:

- 在最后的 `for` 循环中,变量 `i` 没有声明类型。C 语言要求在使用变量前先声明,所以这里应该写 `int i = 0` 而不是 `i = 0`。

- 排序的逻辑是冒泡排序,但外层循环的条件 `i < c - 1` 是正确的,内层循环的条件 `j < c - 1` 也是正确的,不过冒泡排序通常内层循环的范围会随着外层循环的进行而缩小,以提高效率。当前写法虽然能工作,但做了多余的比较。

- 代码没有处理输入为负数或零的情况。如果输入 0,`while` 循环不会执行,`c` 保持为 0,后续的循环和输出可能不会按预期工作。