Online Compiler C

#include <stdio.h> int main() { int a[12]; int temp; for (int i = 0; i < 12; i++) { scanf("%d", &a[i]); } for (int i = 0, j = 3; i < j; i++, j--) { temp = a[i]; a[i] = a[j]; a[j] = temp; } for (int i = 4, j = 7; i < j; i++, j--) { temp = a[i]; a[i] = a[j]; a[j] = temp; } for (int i = 8, j = 11; i < j; i++, j--) { temp = a[i]; a[i] = a[j]; a[j] = temp; } for (int i = 0; i < 12; i++) { printf("%d ", a[i]); } return 0; }
这段代码的功能是:读取12个整数存入数组,然后将数组分成三个长度为4的段(索引0-3、4-7、8-11),分别对每个段内的元素进行反转(即段内首尾交换),最后输出反转后的数组。

- 注意第一个反转循环的范围:`i=0, j=3` 只交换了索引0和3、1和2,但索引0-3这个段实际上有4个元素(0,1,2,3)。你的循环条件 `i < j` 是正确的,但请检查这个段是否真的包含了索引0到3的全部元素?思考一下段内元素个数和循环次数是否匹配。

- 另外,三个反转循环的结构完全相同,只是起始和结束索引不同。你可以考虑用一个外层循环来避免重复代码,但这不是必须的。重点在于确认每个段的反转是否正确覆盖了所有元素。