Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で等比数列の和を求めるプログラムの書き方【初心者向け解説】

このプログラムでは、3つの入力値を受け取ります。1つ目は「a」(等比数列の初項)、2つ目は「r」(公比)、3つ目は「n」(和を求める項数)です。

等比数列とは、隣り合う項同士の比が常に一定である数列のことです。入力された「a」「r」「n」をもとに、a, ar, ar2, ar3, ar4, … という等比数列を生成し、その総和 a + ar + ar2 + ar3 + ar4 + … を計算します。

入力例1

a = 1
r = 0.5
n = 5

出力例1

1.937500

入力例2

a = 2
r = 2.0
n = 8

出力例2

510.000000

問題を解くためのアプローチ

  • 入力値 a(初項)、r(公比)、n(項数)を受け取ります。

  • 等比数列の各項を順番に加算していき、総和を求めます。

アルゴリズム

開始
関数 float sumgeometric(float a, float r, int n) 内
    ステップ1→ 変数 sum を宣言し、0 で初期化する
    ステップ2→ i = 0 から i < n の間、i を 1 ずつ増やしながら繰り返す
        sum = sum + a を実行
        a = a * r を実行
    ステップ3→ sum を返す
関数 int main() 内
    ステップ1→ a = 1 を宣言・初期化
    ステップ2→ float r = 0.5 を宣言・初期化
    ステップ3→ n = 5 を宣言・初期化
    ステップ4→ sumgeometric(a, r, n) の結果を出力
終了

サンプルコード

#include <stdio.h>
// 等比数列の和を計算する関数
float sumgeometric(float a, float r, int n){
    float sum = 0;
    for (int i = 0; i < n; i++){
        sum = sum + a;
        a = a * r;
    }
    return sum;
}
int main(){
    int a = 1; // 初項
    float r = 0.5; // 公比
    int n = 5; // 項数
    printf("%f", sumgeometric(a, r, n));
    return 0;
}

出力結果

上記のコードをコンパイルして実行すると、以下の出力が得られます。

1.937500

補足:公式を使った効率的な計算方法

ループで各項を順に加算する代わりに、等比数列の和の公式を利用することも可能です。

  • r ≠ 1 の場合:Sn = a × (1 − rn) / (1 − r)

  • r = 1 の場合:Sn = a × n

この公式を使えば、計算量が O(n) から O(1) に改善されるため、n が非常に大きい場合でも高速に総和を求めることができます。用途に応じて、ループによる実装と公式による実装を使い分けるとよいでしょう。

  1. C言語でcos(x)級数の合計を計算するプログラム

    本記事では、角度 x と項数 n が与えられたときに、cos(x)級数の合計を求めるC言語プログラムを解説します。ここで、x は余弦(コサイン)を求める角度、n は cos(x) 級数に含める項の数を表します。cos(x)とはcos(x) は三角関数の一つで、角度 x に対する余弦の値を計算するために使用される関数です。単位円上では、角度 x における点の x座標が cos(x) の値に対応します。数式cos(x) は以下のように無限級数(マクローリン展開)で表すことができます。$$\cos (x) = \displaystyle\sum\limits_{k=0}^\infty \frac{(

  2. C言語で最初のn個の自然数の立方和を求めるプログラム

    この記事では、最初のn個の自然数(1からnまで)の立方和を求める方法について解説します。基本的なアプローチとしては、1からnまで繰り返すforループを1つ使い、各ステップでその項の立方を計算して合計に加算していきます。この方法の計算量はO(n)です。しかし、O(1)つまり定数時間でこの問題を解きたい場合は、以下の級数の公式を利用できます。1³ + 2³ + 3³ + … + n³ = {n(n+1)/2}²アルゴリズムcubeNNatural(n)begin sum := 0 for i in range 1 to n, do sum := sum + i^3