在线编译器 C

#include <stdio.h> int main() { const int N = 12; int A [N],i,c; for (i=0;i<N;i++) {scanf("%d",&A[i]); }c=A[11]; for (i=N-1;i>0;i--){ A[i]=A[i-1]; A[N-11]=c; } for (i=0;i<N;i++){ printf("%d",A[i]); } return 0; }
这段代码试图将数组元素向右循环移动一位,但实现有误。

代码的主要问题是:在循环内部每次迭代都错误地重新赋值 `A[N-11]=c`,这会导致除了最后一个元素外,其他元素也被覆盖成原来的最后一个值。

- 提示1:循环移位只需要在循环结束后,将保存的最后一个元素放到第一个位置,而不是在每次迭代中都执行这个赋值。
- 提示2:注意 `A[N-11]` 这个索引,当 N=12 时它等于 `A[1]`,这显然不是数组的第一个位置。思考一下循环右移一位后,原来最后一个元素应该放到哪个下标位置。