在线编译器 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]; } for (int i = 0; i < 10; i++) { printf("%d ", res[10]); } return 0; }
这段代码试图将输入的5个整数进行某种对称变换并输出10个结果,但存在几个问题。

首先,代码只读取了5个整数,但数组arr有10个元素,未初始化的部分可能包含垃圾值。其次,第一个循环中res[i] = arr[4 - i]在i=0时访问arr[4],但此时arr[4]还未被输入(因为输入顺序是从arr[0]到arr[4]),这会导致使用未初始化的值。最后,输出循环中printf打印的是res[10],这是数组越界访问,应该打印res[i]。

- 第一个循环中,你试图在读取arr[i]的同时立即使用arr[4-i],但此时arr[4-i]可能还没有被输入。考虑先完成所有输入,再进行变换。
- 输出循环中,printf("%d ", res[10])访问了数组第11个元素,这是越界的。应该使用循环变量i来依次访问res[0]到res[9]。