在线编译器 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++){ a[i+1]=a[i]; } a[0]=save; for (int i=0;i<size;i++){ printf("%d ",a[i]); } return 0; }
这段代码试图将数组元素向右循环移动一位,但实现有误。当前代码从索引1开始,将a[i]的值赋给a[i+1],这会导致数组元素被覆盖,而不是正确移动。

- 你的循环从i=1开始,将a[1]赋给a[2],但此时a[1]的值已经覆盖了a[2]原来的值,后续移动会丢失数据。正确的循环应该从数组末尾开始向前遍历,避免覆盖未移动的元素。
- 你保存了a[9]到save,但循环结束后只将save赋给了a[0]。注意循环中a[9]的值在第一次迭代时就被a[8]覆盖了,所以save保存的值是正确的,但移动过程破坏了其他元素。