C言語のfor文で足し算をして合計を出す

387, 2022-01-11

目次

C言語のfor文で足し算をする

C言語ではfor文足し算を使うことができます。
これらを組み合わせるとループで足し算を行うという処理を書くことができます。
これを応用すると配列の各要素の合計値を求めるという処理も書くことが可能です。

この記事ではfor文で足し算を行う方法について詳しく解説します。

関連記事
C言語のアドレスとは何なのか?【初心者向け解説】
C言語で構造体を代入する方法
C言語でforeachマクロを実装する方法
C言語でフォルダ作成、削除、存在確認を行う方法【Windows & Linux】
C言語のfor文で2ずつカウントする【初心者向け】

for文のおさらい

loop

まずはfor文のおさらいから解説します。
C言語のfor文は↓のような構造になっています。

for (初期化; 判定; 更新) {
    処理;
}

初期化部分と判定部分、それから更新部分はセミコロンで区切られています。
そして波カッコ({)以降にはループさせたい処理を書きます。

たとえば「0から10より下までループして出力する」というfor文は↓のように書きます。

for (int i = 0; i < 10; i += 1) {
    printf("%d\n", i);
}

初期化部分ではint i = 0;でカウント変数を初期化しています。
判定部分ではi < 10;でカウント変数が10より下かどうかチェックしています。
更新部分ではi += 1でカウント変数をインクリメントしています。
処理部分ではprintf()でカウント変数を出力しています。

for文では最初に初期化部分が実行されます。
そして判定部分と更新部分と処理部分が判定が偽になるまで繰り返し実行されます。

足し算のおさらい

addition

C言語では足し算は↓のような式を書きます。

1 + 1;

この足し算の結果を変数で受け取りたい場合は↓のように書きます。

int a = 1 + 1;

↑のようにすると変数aには1 + 1の足し算の結果が保存されます。
変数の値を増加させたい場合は↓のような足し算を書きます。

int a = 1;
a = a + 1;

↑のa + 1の足し算では変数aの値と1が足し算されます。
その結果は変数aに保存されます(結果は2です)。

この式は加算代入を使うと↓のように書き直すことができます。

int a = 1;
a += 1;

+=で右辺を左辺に加算しています。
↑の式の結果、aの値は2になります。

for文で足し算を行う

add

C言語のfor文で足し算を行うにはfor文の処理部分に足し算を書きます。

#include <stdio.h>

int main(void) {
    int a = 0;

    for (int i = 0; i < 10; i += 1) {
        a += 1;  // 足し算
    }

    printf("a = %d\n", a);
    // a = 10

    return 0;
}

↑のようにfor文で「0から10より下まで」ループを回し、処理部分にa += 1;と書きます。
こうすると変数a1が10回足し算されます。
結果はaの値は10になります。

1~10の和を求める

sum

1から10までの値の和を計算したい場合、つまり1 + 2 + 3 + 4 ... + 10という計算を行いたい場合は下のようにコードを書きます。

#include <stdio.h>

int main(void) {
    int sum = 0;

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

    printf("sum = %d\n", sum);
    // sum = 55

    return 0;
}

↑のようにfor文で「1から10以下まで」ループを回します。
そしてカウント変数iを変数sumに加算していきます。
こうするとsumには

sum += 1;
sum += 2;
sum += 3;
...
sum += 10;

という計算結果が蓄積されます。
結果はsumの値は55になります。

1~100の和を求める

hundred

先ほどの1から10までの和を求めるコードを改造すると、1から100までの和を求めることができます。

int sum = 0;

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

しかし、こういった和を求める計算には数学の公式が存在します。

和 = 1 / 2 * n * (n + 1)

↑の公式のn100を当てはめると、1から100までの数列の和が求まります。
C言語のコードにすると↓になります。

#include <stdio.h>

int main(void) {
    double n = 100;

    // 1~100までの数列の和を求める
    double sum = 1.0 / 2.0 * n * (n + 1);

    printf("sum = %f\n", sum);
    // sum = 5050.000000

    return 0;
}

こういった単純な数列の和を求める場合は、for文ではなく数学の公式を使ったほうが計算量が少なくて済みます。

配列の要素の和を求める

array

配列に保存されている要素の値の和を求める場合は↓のようにコードを書きます。

#include <stdio.h>

int main(void) {
    int ary[] = {1, 2, 3, 4, 5};
    int sum = 0;

    for (int i = 0; i < 5; i += 1) {
        sum += ary[i];
    }

    printf("sum = %d\n", sum);
    // sum = 15

    return 0;
}

↑の配列aryには{1, 2, 3, 4, 5}という風に要素が格納されています。
これをfor文で回してカウント変数でary[i]と参照すると、配列の要素を取り出せます。
その要素の値を変数sumに足し算していけば合計値が求まります。

↑の場合はfor文でi < 5;という風に配列の要素数にマジックナンバーを使っています。
このマジックナンバーを無くしたい場合は↓のようなマクロを定義します。

#define numof(ary) (sizeof ary / sizeof ary[0])

sizeof演算子は変数などのバイト数を求める演算子です。
sizeofに配列を使うと配列全体ののバイト数が求まります。
そのバイト数に配列の要素1つ分のバイト数を割ると、配列の要素数が求まります。
このマクロはローカル変数の配列には機能しますが、関数の引数などの配列(ポインタ)には機能しないので注意してください
このマクロを使うと↓のようにコードを書き直すことができます。

#include <stdio.h>

int main(void) {
    int ary[] = {1, 2, 3, 4, 5};
    int sum = 0;

    for (int i = 0; i < 5; i += 1) {
        sum += ary[i];
    }

    printf("sum = %d\n", sum);
    // sum = 15

    return 0;
}

おわりに

end

今回はC言語のfor文で足し算をする方法について解説しました。
for文と足し算の組み合わせはよく使われるので覚えておいて損はありません。

for文で楽をしよう

足し算と組み合わせよう