在线编译器 C

#include <stdio.h> int main(){ int c=0; int a,i,b; scanf("%d",&a); int const N=100; int A[N]; while(a>0){ A[c]=a%10; c++; a=a/10; } int max=0; for(i=0;i<c-1;i++){ if (A[i]>A[max]){ max=i; } } for(i=0;i<c;i++){ b=A[0]; A[0]=A[max]; A[max]=b; } for(i=0;i<c;i++){ printf("%d",A[i]); } return 0; }
这段代码的目的是:读入一个整数,将其各位数字提取到数组中,然后试图将最大数字交换到数组首位,最后输出数组。

代码的主要逻辑是:
1. 用 `while` 循环将数字的每一位存入数组 `A`,顺序是低位在前(个位在 `A[0]`)。
2. 用 `for` 循环找到数组中最大数字的位置(索引 `max`)。
3. 用另一个 `for` 循环将 `A[0]` 与 `A[max]` 交换。
4. 输出数组。

代码中存在逻辑错误,导致结果不符合预期。

- 交换操作被放在了 `for` 循环里,循环了 `c` 次,这会导致多次交换,最终结果不是只交换一次。交换只需要执行一次,不需要循环。
- 另外,`for(i=0;i<c-1;i++)` 这个循环中,`c-1` 可能漏掉最后一个元素的比较,但这里 `max` 初始为 0,所以如果最大值在最后一个位置,可能不会被正确找到。