【C言語】1からnまでの和を求める方法を解説(for文/while文/do-while文)

今回は、C言語で1からnまでの和を求める方法について解説します。

目次

for文を使った方法

コードの説明

C言語で1からnまでの和を求めるには、for文を使用することで行えます。以下がそのコードです。

#include <stdio.h>

int main() {
    int n, sum = 0;
    printf("正の整数nを入力してください: ");
    scanf("%d", &n);

    for (int i = 1; i <= n; ++i) {
        sum += i;
    }

    printf("1から%dまでの和は%dです。\n", n, sum);
    
    return 0;
}

このプログラムでは、ユーザーに正の整数nを入力してもらい、forループ内で変数sumに1からnまでの値を加算しています。

実行例と出力結果の解説

上記コードを実行した場合、以下のような出力結果が得られます。

正の整数nを入力してください: 10
1から55までの和は55です。

この場合、ユーザーが「10」という数字を入力したため、「1から10まで」すべて足し合わせた「55」という答えが表示されました。

while文を使った方法

C言語で1からnまでの和を求める別の方法として、while文を使用する方法があります。

for文と同様に、1からnまでの値を順番にご慶長の変数に加算しています。

#include <stdio.h>

int main() {
    int n, i = 1, sum = 0;
    
    printf("正整数nを入力してください:");
    scanf("%d", &n);
    
    while (i <= n) {
        sum += i;
        i++;
    }
    
    printf("1から%dまでの和は%dです。\n", n, sum);
    
    return 0;
}

このプログラムでは、変数iに初期値として1が代入されています。

そして、whileループ内では条件式 i <= n を満たす限り繰り返されます。

ループ内部では sum += i; によって現在処理中の i の値が加算されていきます。最後に i++ が実行されることで次回ループ時には次の数字へ移動します。

実行例と出力結果の解説

上記コード例を実行する際は、「正整数nを入力してください:」というメッセージが表示されるため、任意の正整数(例えば10)を入力します。

その後Enterキー(リターンキー)など適当なキー操作で確定させることで処理が開始されます。

プログラムはwhileループ内部で繰り返しながら各数字(1~10) を加算し合計値(sum) を求めています。

最後に、「1から10までの和は55です」という結果メッセージが表示されれば成功です。

正整数nを入力してください:10
1から10までの和は55です

do-while文を使った方法

do-while文は、条件式の評価が後ろに来る点以外はwhile文と同じです。

そのため、最低でも一度は処理を実行することが保証されます。この性質を利用して、1からnまでの和を求めるプログラムも書くことが出来ます。

コードの説明

以下がdo-while文を使って1からnまでの和を求めるプログラムです。

#include <stdio.h>

int main() {
    int n, sum = 0, i = 1;
    
    printf("正整数n:");
    scanf("%d", &n);
    
    do {
        sum += i;
        i++;
    } while (i <= n);
    
    printf("1から%dまでの和: %d\n", n, sum);

    return 0;
}

変数sumに合計値、変数iに現在加算する値(初期値は1)を代入します。

そして、doブロック内では現在加算する値isum に加えています。その後 i++(インクリメント) を行い次回ループ時に加算対象となる数字(i) を更新しています。

繰り返し処理部分では、「i<=n」という条件式が成立していればループ処理(ブロック内) を継続し、「i<=n」という条件式が成立しなくなった場合はループ処理(ブロック内) の実行終了します。

実行例と出力結果の解説

上記コード中、「正整数n:」と表示されたら任意の自然数(例:10)を入力します。

すると下記のような結果を得られます。

正整数n:1
から10までの和: 55

再帰関数を使った方法

再帰関数を使った方法でも1からnまでの総和を計算できます。

int sum(int n) {
    if (n == 1) {
        return 1;
    } else {
        return n + sum(n-1);
    }
}

このコードでは、引数 n を受け取り、もし n が1だった場合はそのまま1を返します。それ以外の場合は、n 自身と sum(n-1) の和を返します。

例えば、引数に5を渡した場合は以下のようになります。

int result = sum(5);
printf("%d", result); // 出力結果: 15

この場合、最初に sum(5) を呼び出すと、

sum(5)
= 5 + sum(4)
= 5 + (4 + sum(3))
= 5 + (4 + (3 + sum(2)))
= 5 + (4 + (3 + (2+sum(1))))
= 5 +(4+(3+(2+1)))
=15

という計算過程が行われます。

つまり、「自分自身から始めて次々と小さくなっていく値」がある時に再帰関数が有効です。

ただし注意点もあります。再帰関数は無限ループに陥るとメモリを圧迫するため、必ず停止条件(今回の例では if(n==1))が必要です。

また、大量の処理や深い階層で実行される場合はスタックオーバーフローなどの問題も起こり得ます。

以上がC言語で再帰関数を使って「1からnまでの和」を求める方法です。

まとめ

本記事では、C言語を使って1からnまでの和を求める方法について解説しました。

for文、while文、do-while文、再帰関数の4つの方法を紹介しましたが、どの方法も同じ結果が得られます。

また、「1からnまで」だけでなく、「mからnまで」や「偶数だけの和」「奇数だけの和」といった条件付きでも同様に計算することが可能です。

C言語プログラミング初心者でもわかりやすく実装可能な内容となっていますので是非参考にしてみてください!

目次