在线编译器 C

#include <stdio.h> enum{p = 10 }; int main() { int A[p], B[p]; for(int i = 0; i < p; i++) { scanf ("%d", &A[i]); } for(int i = 0; i < p; i++) { if (i == 0) { B[i] = A[p-1-i]; } else { B[i] = A[i-1]; } } for(int i = 0; i < p; i++) { printf ("%d", B[i]); } return 0; }
这段代码的目的是读取10个整数到数组A,然后生成一个新数组B,但目前的转换逻辑有问题。它试图实现某种移位或反转操作,但条件判断写错了。

- 你的 `if (i == 0)` 分支里用了 `A[p-1-i]`,当 i=0 时就是 `A[9]`,这像是想把最后一个元素放到B的第一个位置。但 `else` 分支里却是 `A[i-1]`,这会把前一个元素复制过来,而不是实现一个统一的循环移位或反转。
- 检查一下你真正想要的效果:是循环右移一位、循环左移一位,还是完全反转数组?目前的混合逻辑会导致B[0]得到A[9],而B[1]得到A[0],B[2]得到A[1]……这看起来像是循环右移一位,但B[0]的值不对(应该是A[9]才对,但其他位置又像是左移)。请重新思考每个B[i]应该对应A中的哪个下标。