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<j;i++){ printf("%d",A[j]); } return 0; }
这段代码的目的是:读取一个整数,将其各位数字提取到数组中,然后对数组进行降序排序,最后输出排序后的数字。但代码中存在几个问题。

- 在最后的输出循环中,变量 `i` 和 `j` 的作用域和值有问题。`j` 在排序循环结束后仍然存在,但它的值是 `c-1`,而输出循环的条件 `i<j` 和打印 `A[j]` 会导致只重复打印最后一个元素,而不是遍历整个数组。你需要重新考虑输出循环的写法,确保正确遍历数组并打印每个元素。

- 排序部分使用了冒泡排序,但外层循环的结束条件 `i<c-1` 是正确的,内层循环的结束条件 `j<c-1` 也是正确的。不过注意,冒泡排序通常需要两层循环,外层控制轮数,内层控制比较交换,这里逻辑基本正确,但可以思考一下是否真的需要两层循环都到 `c-1`。