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

#include<stdio.h> int main() { int arr[10]; int i; int temp; for(i=0;i<10;i++){ scanf("%d",&arr[i]); } for(i=0;i<2;i++){ temp=arr[i]; arr[i]=arr[4-i]; arr[4-i]=temp; } for(i=0;i<2;i++) { temp=arr[5+i]; arr[5+i]=arr[9-i]; arr[9-i]=temp; } for(i=0;i<10;i++){ printf("%d",arr[i]); } return 0; }
这段代码的功能是:先读入10个整数存入数组,然后分别将数组的前半部分(索引0-4)和后半部分(索引5-9)各自进行逆序操作,最后输出整个数组。

- 注意前半部分逆序的循环条件:`for(i=0;i<2;i++)` 只交换了索引0和4、1和3,但索引2(中间元素)没有被交换,这是正确的。但后半部分逆序的循环条件同样是 `for(i=0;i<2;i++)`,交换了索引5和9、6和8,索引7(中间元素)也没有被交换,这也是正确的。不过,请检查一下数组索引的范围:前半部分最大索引是4,后半部分起始索引是5,你的交换逻辑中 `arr[4-i]` 和 `arr[9-i]` 是否覆盖了所有需要交换的元素?提示:当 i=0 时,前半部分交换 arr[0] 和 arr[4];当 i=1 时,交换 arr[1] 和 arr[3]。后半部分类似。但请思考:如果数组长度是奇数,中间元素是否应该被交换?你的代码中前半部分有5个元素(0-4),中间索引2没有被交换,这是合理的。但后半部分也有5个元素(5-9),中间索引7也没有被交换,这也是合理的。所以整体逻辑没有明显错误。

- 不过,输出时没有空格或换行,所有数字会连在一起,可能不符合预期。建议在 `printf` 中添加分隔符,比如 `printf("%d ", arr[i]);` 或 `printf("%d\n", arr[i]);`。