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

#include <stdio.h> int main() { int arr[10]; int res[10]; for (int i = 0; i < 5; i++) { scanf("%d", &arr[i]); res[i] = arr[4 - i]; } for (int i = 0; i < 5; i++) { res[i+5] = arr[9- i]; } printf("%d ", res[10]); return 0; }
这段代码试图将数组 `arr` 的前5个元素反转后存入 `res` 的前5个位置,再将后5个元素反转后存入 `res` 的后5个位置,最后打印 `res[10]`。但存在几个问题。

- 你只读取了5个整数到 `arr` 中,但 `arr` 有10个元素,后5个元素未初始化,导致 `res[5]` 到 `res[9]` 的值不可预测。
- 在第一个循环中,`res[i] = arr[4 - i]` 在 `i=0` 时访问 `arr[4]`,但此时 `arr[4]` 刚被输入,而 `arr[0]` 到 `arr[3]` 还未被赋值,导致结果错误。
- `printf("%d ", res[10])` 访问了数组 `res` 的第11个元素(索引从0开始),这超出了数组范围,会导致未定义行为。