変数の中身の交換

1.変数の中身の交換
2つの変数の中身を交換することを考えてみよう。
変数aと変数bの中身を交換するとはどういうことかというと,次の例のようなことです。
交換前の状態
変数aの値
123
変数bの値
456
交換後の状態
変数aの値
456
変数bの値
123
交換の作業をプログラムで行ってみよう。
a=b;
b=a;
この2行で出来るかというと,そうはいかない。2つの変数ともに456になってしまいます。
どうすればよいかというと,別な変数を1つ用意して,次のようにします。
tmp=a;
a=b;
b=tmp;
これで成功。

配列の例で考えてみよう。
int ary[100] の配列があり,ary[10]とary[20]の中身を交換するときも同様です。
tmp=ary[10];
ary[10]=ary[20];
ary[20]=tmp;
これで成功。

2.配列の中身を逆順にするプログラム
int ary[100] を逆順にしてみよう。0号室から99号室まであるので,
ary[0]とary[99]を交換
ary[1]とary[98]を交換
ary[2]とary[97]を交換
ary[3]とary[96]を交換
  :
ary[48]とary[51]を交換
ary[49]とary[50]を交換
を行えばうまくいきます。

プログラムにすると次のようになります。
for (i=0, j=99; i<50; i++, j--) {
    tmp=ary[i];
    ary[i]=ary[j];
    ary[j]=tmp;
}

一般性をもたせ,int ary[100] の先頭からn個を逆順にしてみよう。
重要:nが偶数のときでも,奇数のときでも,うまくいくことを自分で確認しなさい。
for (i=0, j=n-1; i<n/2; i++, j--) {
    tmp=ary[i];
    ary[i]=ary[j];
    ary[j]=tmp;
}
次のような終了条件でも良い。
for (i=0, j=n-1; i<j; i++, j--) {
    tmp=ary[i];
    ary[i]=ary[j];
    ary[j]=tmp;
}