next up previous contents
Next: B.6.2 がベクトル値の場合 Up: B.6.1 が実数値の場合 Previous: B.6.1 が実数値の場合

B.6.1.0.1 注意

上のプログラムは、古い K&R スタイルで書いてある。関数のプロトタイプ 宣言の使える ANSI C ならば
ANSI C の関数プロトタイプを用いたプログラム

#include <stdio.h>

#define N 100

int main()
{
    int j;
    double a[N+1], F(double);

    printf("a[0]: "); scanf("%lf", &a[0]);
    for (j = 0; j < N; j++) {
        a[j+1] = F(a[j]);
        printf("a[%d]=%g\n", j+1, a[j+1]);
    }
    return 0;
}

double F(double x)
{
    return 0.25 * x + 1.0;
}
とする。

ところが、残念なことに、 $ N$ が大きいときには、このプログラムの書き 方はあまり良くない。配列 a[] を記憶するために大きなメモリーが必 要になってしまう。そこで、次のようなプログラムを書くのが普通である。
配列を用いず、変数を書き換えて済ますプログラム

#include <stdio.h>

#define N 100

int main()
{
    int j;
    double a, F(double);

    printf("a[0]: "); scanf("%lf", &a);
    for (j = 0; j < N; j++) {
        a = F(a);
        printf("a[%d]=%g\n", j+1, a);
    }
    return 0;
}

double F(double x)
{
    return 0.25 * x + 1.0;
}


next up previous contents
Next: B.6.2 がベクトル値の場合 Up: B.6.1 が実数値の場合 Previous: B.6.1 が実数値の場合
Masashi Katsurada
平成18年4月28日