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

#include <stdio.h> int main() { const int n = 12; int arr[n]; int i, a,b,c,d; for (i = 0; i < 12; i++) { scanf("%d", &arr[i]); } a=arr[8]; b=arr[9]; c=arr[10]; d=arr[11]; for(i=9;i>0;i--){ arr[i]=arr[i-4]; } arr[0]=a; arr[1]=b; arr[2]=c; arr[3]=d; for(i=0;i<12;i++){ printf("%d",arr[i]); if (i!=11){ printf(" "); } } printf("\n"); return 0; }
这段代码的功能是:读取12个整数存入数组,然后将数组的最后4个元素(索引8-11)移动到数组的开头(索引0-3),同时将原来的前8个元素(索引0-7)依次向后移动4个位置。最后输出移动后的数组。

你的代码逻辑基本正确,但有一个细节需要注意:

- 在循环 `for(i=9;i>0;i--)` 中,你从索引9开始向前移动元素,但循环条件 `i>0` 导致索引0没有被处理。实际上,你需要将索引0到7的元素都向后移动4位,所以循环应该覆盖到索引0。检查一下循环的终止条件,确保索引0的元素也被正确移动。