表を入れ替える

第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    91  47    66  95    16
  1    12  48    27  96    62
  2    38  49     2  97    87
  3    78  50    56  98    35
  4    56  51    20  99    91
After
  0    91  47    10  95    56
  1    35  48    20  96    78
  2    87  49    56  97    38
  3    62  50     2  98    12
  4    16  51    27  99    91
となる。ここでは、アクセスされるたびに実行されるので、毎回違う結果が出る。
Copyright 2003 Ken Kishimoto