Online Compiler C

#include <stdio.h> int main() { int a[10]; for(int i=0;i<10;i++){scanf("%d",&a[i]);} for(int i=0;i<9;i++){int t=a[i];a[i]=a[1+i];} for(int i=0;i<1;i++){int t=a[i];a[i]=a[i+9];} for(int i=0;i<10;i++){printf("%d ",a[i]);} return 0; }
这段代码的功能是:读入10个整数到数组a中,然后进行两次交换操作,最后输出数组。但代码的逻辑存在明显问题。

第一个循环正确读入了10个数。第二个循环试图将每个元素与它后面的元素交换,但这样会丢失数据,因为每次循环都把a[i]的值覆盖了,而且没有正确完成交换。第三个循环只执行一次,试图交换a[0]和a[9],但此时数组已经被第二个循环改变了。最终输出结果不是预期的。

- 第二个循环中,你只把a[i]的值赋给了a[i+1],但没有把a[i+1]原来的值保存到a[i]中。交换两个变量需要临时变量保存其中一个值,然后进行两次赋值,而你只做了一次赋值。
- 第三个循环只执行一次,但你的意图可能是要交换首尾元素?注意循环条件i<1只执行i=0一次,但交换操作同样缺少把a[i+9]的值赋给a[i]的步骤。