3.7 for 文による繰り返し (2) 応用: 級数の和

級数の和

$\displaystyle S_n=a_1+a_2+\cdots+a_n
$

を計算するための定跡がある。

$\displaystyle S_0=0
$

と約束すれば

$\displaystyle S_i=S_{i-1}+a_i$   $\displaystyle \mbox{($i=1,2,\dots,n$)}$

という漸化式が成り立つ。これから次の手順を得る。

$ S_n=\sum_{i=1}^n a_i$ の計算手順
(1)
部分和 $ S_i$ を記憶しておく変数 s を定義する。
(2)
s = 0;
(3)
s = s + $ a_i$; $ i=1,2,\dots,n$ について繰り返す。

次のプログラムは、与えられた自然数 $ n$ に対して $ 1^2+2^2+\cdots+n^2$ を計算して表示するものである。

prog07.c

/*
 * prog07.c --- for 文による繰り返し (2)
 */

#include <stdio.h>

int main(void)
{
  int i, n;
  double s;

  printf("自然数を一つ入力してください: ");
  scanf("%d", &n);

  s = 0.0;
  for (i = 1; i <= n; i++) {
    /* 次の文では s に i を加えている。これは s = s + i * i; とも書ける。 */ 
    s += i * i;
  }
  printf(" 1 から %d までの自然数の平方の和=%g\n", n, s);
  return 0;
}

後の練習問題にしておいた、 $ S_n=\dsp\sum_{k=0}^n \frac{1}{k!}$ を計算するプログラムを自力で 書いてみると良い。 ヒント: 一般項 $ a_k=1/k!$ も漸化式で計算すると都合が良い。 「漸化式を使って計算しよう」 という 資料を準備しておいた。



桂田 祐史