在线编译器 C

#include <stdio.h> enum {size=10}; int main(){ int a[size]; for(int i=0;i<size;i++){ scanf("%d",&a[i]); } for(int i=0;i<size-1;i++){ if(i==0){ a[9]=a[0]; a[0]=a[1]; }else a[i]=a[i+1]; } for(int i=0;i<size;i++){ printf("%d ",a[i]); } return 0; }
这段代码的目的是将数组中的元素循环左移一位,但实现上有问题。它读取10个整数到数组a中,然后尝试将每个元素移到前一个位置,同时把第一个元素放到最后。

- 你的循环从i=0到size-2,但特殊处理了i==0的情况。这样会导致数组元素被覆盖,比如a[0]被改为a[1]后,后续循环中a[1]的值已经丢失了。循环左移需要保存被覆盖的值,或者从后往前处理。
- 另外,你手动把a[9]设为a[0],但此时a[0]已经被修改为a[1]了,所以最后一位得到的是错误的值。