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 が非常に大きい場合でも高速に総和を求めることができます。用途に応じて、ループによる実装と公式による実装を使い分けるとよいでしょう。
-
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{(
-
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