表を入れ替える

第2回目の問題は
今週の問題は整数の奇数個配列に入った数値を逆順にせよ。 という問題。別に偶数でもよいが、入れ換え方の学習である。
次のような方法が一番思いつく方法であろう。
/* --------------------------------------------------------------------- *
 * Filename: c101.c --- 
 * 著者: Kishimoto Ken 
 *  gcc -O2 -g -Wall -o c101 c101.c clect02lib.c 
 * ---------------------------------------------------------------------- */
#include 
#include "clect02lib.h"

int main(void)
{
    int *arr;
    int i, j, n;

    n = 99;	
    arr = pre_arrayi(n);
    printf("N = %d\n", n);
    printf("Before\n");
    print_arrayi(5);
    j = n / 2;
    for (i = 0; i < j; i++) {
	int c = arr[n - i - 1];
	arr[n - i - 1] = arr[i];
	arr[i] = c;
    }
    printf("After\n");
    print_arrayi(5);
    post_arrayi();
    return 0; 
}
もう一つは、
/* --------------------------------------------------------------------- *
 * Filename: c101.c --- 
 * 著者: Kishimoto Ken 
 *  gcc -O2 -g -Wall -o c101 c101.c clect02lib.c 
 * ---------------------------------------------------------------------- */
#include 
#include "clect02lib.h"

int main(void)
{
    int *arr;
    int i, j, n;

    n = 100;	
    arr = pre_arrayi(n);
    printf("N = %d\n", n);
    printf("Before\n");
    print_arrayi(5);
    for (i = 0, j = n - 1; i < j; i++, j--) {
	int c = arr[i];
	arr[i] = arr[j];
	arr[j] = c;
    }
    printf("After\n");
    print_arrayi(5);
    post_arrayi();
    return 0; 
}
である。
実行結果は
N = 100
Before
  0    90  47    85  95    61
  1    10  48    59  96    58
  2    68  49    50  97    68
  3    62  50    75  98     8
  4    34  51    14  99    11
After
  0    11  47    80  95    34
  1     8  48    14  96    62
  2    68  49    75  97    68
  3    58  50    50  98    10
  4    61  51    59  99    90
となる。ここでは、アクセスされるたびに実行されるので、毎回違う結果が出る。
Copyright 2003 Ken Kishimoto