表を入れ替える

第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     3  47    38  95    81
  1     4  48    82  96    17
  2    23  49    38  97    79
  3    70  50    57  98    20
  4    42  51    13  99    38
After
  0    38  47    76  95    42
  1    20  48    13  96    70
  2    79  49    57  97    23
  3    17  50    38  98     4
  4    81  51    82  99     3
となる。ここでは、アクセスされるたびに実行されるので、毎回違う結果が出る。
Copyright 2003 Ken Kishimoto