example5.c |
/* example5.c -- 級数の和 */ #include <stdio.h> int main() { int k,n; double Sk,Ak; printf("数列の和を計算します。\n"); printf("何項までの和を計算しますか ?\n"); scanf("%d", &n); Sk = 0.0; for (k = 1; k <= n; k++) { Ak = k; Sk = Sk + Ak; printf("k=%3d, Ak=%e, Sk=%e\n", k, Ak, Sk); } return 0; } |
このプログラムで を計算してみる。
実行結果 |
oyabun% ./example5 数列の和を計算します。 何項までの和を計算しますか ? 100 k= 1, Ak=1.000000e+00, Sk=1.000000e+00 k= 2, Ak=2.000000e+00, Sk=3.000000e+00 k= 3, Ak=3.000000e+00, Sk=6.000000e+00 k= 4, Ak=4.000000e+00, Sk=1.000000e+01 k= 5, Ak=5.000000e+00, Sk=1.500000e+01 k= 6, Ak=6.000000e+00, Sk=2.100000e+01 k= 7, Ak=7.000000e+00, Sk=2.800000e+01 k= 8, Ak=8.000000e+00, Sk=3.600000e+01 k= 9, Ak=9.000000e+00, Sk=4.500000e+01 k= 10, Ak=1.000000e+01, Sk=5.500000e+01 中略 k= 99, Ak=9.900000e+01, Sk=4.950000e+03 k=100, Ak=1.000000e+02, Sk=5.050000e+03 oyabun% |
参考までに配列を使った (同じ計算をする) プログラムを掲げておく (こちら の方がもとの数式の表現に近いが、メモリーを余分に消費することになる)。
example5a.c |
/* example5a.c -- 級数の和(配列の利用) */ #include <stdio.h> #define MAXN 2000 int main() { int k, n; double S[MAXN+1], A[MAXN+1]; printf("数列の和を計算します。\n"); printf("何項まで計算しますか ? "); scanf("%d", &n); if (n > MAXN) exit(0); for (k = 1; k <= n; k++) A[k] = k; S[1] = A[1]; for (k = 2; k <= n; k++) S[k] = S[k - 1] + A[k]; for (k = 1; k <= n; k++) printf("k=%3d, Ak=%e, Sk=%e\n", k, A[k], S[k]); return 0; } |