在线编译器 C

#include <stdio.h> enum {size=10}; int main(){ int a[size]; for(int i=0;i<size;i++){ scanf("%d",&a[i]); }int save=a[9]; for(int i=1;i<size-1;i++){ int temp=a[i]; a[i]=a[i-1]; a[i+1]=temp; }a[0]=save; for (int i=0;i<size;i++){ printf("%d ",a[i]); } return 0; }
这段代码试图将数组元素循环右移一位,但实现逻辑有误。当前代码从索引1开始遍历,每次交换相邻元素,这会导致元素被多次覆盖,而不是整体右移。

- 循环右移的正确思路是:先保存最后一个元素,然后将所有元素从后往前依次后移一位,最后把保存的元素放到第一个位置。你的代码中保存了最后一个元素,但移动方向是从前往后,这会导致数据错乱。
- 注意循环的范围:你从i=1到i<size-1,这漏掉了索引0和最后一个元素的处理,而且每次交换会覆盖a[i+1]的值,导致丢失数据。