Онлайн компилятор C

#include <stdio.h> int main() { int arr[12], a[4]; int i; for(i=0;i<12;i++) { scanf("%d", &arr[i]); } for(i=0;i<4;i++) { a[i]=arr[8+i]; } for(i=7;i>=0;i--) { arr[i+4]=arr[i]; } for(i=0;i<4;i++) { arr[i]=a[i]; } for(i=0;i<12;i++) { printf("%d ", arr[i]); } return 0; }
这段代码的功能是:先读取12个整数存入数组arr,然后将arr的最后4个元素(索引8到11)复制到临时数组a,接着将arr的前8个元素(索引0到7)整体向后移动4个位置(到索引4到11),最后把a中的4个元素放到arr的前4个位置(索引0到3)。最终输出循环右移4位后的数组。

- 注意循环右移时,移动元素的顺序很重要。你从索引7开始向前遍历,将arr[i]赋值给arr[i+4],这样会覆盖后面还未移动的元素。思考一下,如果从索引0开始向后遍历,结果会有什么不同?哪种顺序能正确保留原始数据?
- 临时数组a的大小是4,但arr中索引8到11正好是4个元素,这个范围选择是正确的。不过,如果题目要求的是循环左移而不是右移,你的代码逻辑需要调整。请确认你的移动方向是否符合题目要求。