在线编译器 C

#include <stdio.h> int main() { int a[10]; for(int i=0;i<10;i++){scanf("%d",&a[i]);} for(int i=1;i<10;i++){int t=a[i-1];a[i-1]=a[i];a[i-1]=t;} for(int i=0;i<10;i++){printf("%d ",a[i]);} return 0; }
这段代码首先读入10个整数存入数组,然后尝试进行某种交换操作,最后输出数组。但交换部分的逻辑有误:它把a[i-1]的值赋给t,再把a[i]赋给a[i-1],最后又把t赋给a[i-1],导致a[i-1]被覆盖了两次,而a[i]的值没有改变。实际上,这个循环并没有正确交换相邻元素,只是把a[i]的值复制到了a[i-1]位置,而a[i]保持不变。

- 检查交换两个变量的标准方法:需要用一个临时变量保存其中一个值,然后依次赋值。你的代码中临时变量t保存了a[i-1],但后续赋值时又把t赋给了a[i-1],而不是a[i],所以交换没有完成。
- 思考循环的范围:如果目的是将整个数组向右或向左移动一位,那么循环的起始和结束条件需要调整,否则可能会越界或漏掉元素。