C言語

【C言語】等差数列の生成、及び総和の計算


プログラミング初心者向けの練習問題の一つとして、等差数列の生成、そして、その和を求める計算があります。

この記事では、等差数列の生成、及び総和の計算をプログラムに実装する方法について解説しています。

等差数列の概要

プログラムを作成する前に、等差数列についての簡単な説明を行います。

等差数列とは

「隣接する項が共通の差(公差)を持つ数列」のことを指します。

例としては、以下のような数値の並びです。隣接する項の全てで互いに差が3となっています。

2 5 8 11 14 17 20 23 26 29 32 35

等差数列の\( n \)番目の項は \( a_{n} \) は初項 \( a_{1} \)と公差 \( d \) から以下の式で求められます。

$$ a_{n} = a_{1} + (n – 1) d $$

なお、等差数列の総和 \( S_{n} \) を求める式としては以下の通りです。

$$ S_{n} = \frac{n(a_{1} + a_{n})}{2} = \frac{n[2 a_{1} + (n-1)d]}{2} $$

実際にプログラムを作成してみる

前述の公式に従ってプログラムを作成します。

プログラム作成の手順

プログラム作成の手順は以下の通りです。

  1. 初項、公差、項数を指定する
  2. 指定した条件に従い、等差数列を生成する
  3. 生成した等差数列の総和を求める

実装例

上記の手順に従ってプログラムを作成します。使用する言語はC言語です。

#include <stdio.h>

int main(void){

  int a1, d, n;

  /* 初項a1、公差d、項数nを指定する */
  printf("Arithmetic Progression\n");
  printf("a1 = ");
  scanf("%d", &a1);
  printf("d  = ");
  scanf("%d", &d);
  printf("n  = ");
  scanf("%d", &n);
  printf("----------------------\n");

  /* 指定した条件で等差数列を生成する */
  for (int i=1; i<=n; i++) {
    int an = a1 + (i - 1) * d;
    printf("%d ", an);
  }

  /* 生成した等差数列の総和を求める */
  int sum = (n * (2 * a1 + (n - 1) * d)) / 2;
  printf("(Sum : %d)\n", sum);

  return 0;
}

このプログラムを実行すると以下の出力結果が得られます。

Arithmetic Progression
a1 = 2
d  = 3
n  = 4
----------------------
2 5 8 11 (Sum : 26)