C初級:繰り返し処理を使って数値の合計を求める

C言語初級カテゴリのロゴ画像C言語初級
スポンサーリンク

プログラミング言語を学んで、for文、while文などの繰り返し処理の使い方が分かったとしても、どう利用したらいいか分からないと意味がありません。

この記事では、for文やwhile文などの繰り返し処理を複数の数値の合計を求める処理に利用してみます。

スポンサーリンク

考え方

合計を求めるために必要なことは、以下の3点です。

1.合計を保存する変数の準備

例) int gokei;

2.合計を保存する変数の初期値を0にする

例) gokei = 0;

3.合計用変数に累計していく

例) gokei = gokei + n;

3つ目の合計用変数に累計していくの部分ですが、繰り返し処理の中に入れる必要があります。

ですから重要な部分のイメージは、こんな感じになります。

int gokei;

gokei = 0;

for(条件){
	処理
	 :
	gokei = gokei + N;
}

ちなみにこれは、合計を求めるためのアルゴリズムとも呼ばれます。
以下、実際のプログラムを通して上記3つのポイントを確認してみて下さい。

基本例1:キーボードから入力した10個の数の合計を求める

#include <stdio.h>

int main(void)
{
	int i, n;
	int gokei;	/* ①合計を保存する変数の準備 */
	
	gokei = 0;	/* ②合計を保存する変数の初期値を0にする */
	
	for(i=0; i<10; i++){
		printf("%2d番目の数? ", i+1);
		scanf("%d", &n);
		
		gokei = gokei + n;	/* ③合計用変数に累計していく */
	}
	
	printf("\n合計は %dです\n", gokei);
	
	return 0;
}

実行イメージ

1番目の数? 1
2番目の数? 2
3番目の数? 3
4番目の数? 4
5番目の数? 5
6番目の数? 6
7番目の数? 7
8番目の数? 8
9番目の数? 9
10番目の数? 10

合計は 55です

ちなみに同じ処理をwhile文で行った場合は、こうなります。
わたしはfor文の書き方の方が好きです。(カウンタ変数のiの処理がwhile文だと何行にも渡るので)

#include <stdio.h>

int main(void)
{
	int i, n;
	int gokei;	/* ①合計用変数を準備 */
	
	i=0;
	gokei = 0;	/* ②合計用の変数を0クリア */

	while( i<10){
		printf("%2d番目の数? ", i+1);
		scanf("%d", &n);
		
		gokei = gokei + n;	/* ③合計用変数に累計していく */
		i++;
	}
	
	printf("\n合計は %dです\n", gokei);
	
	return 0;
}

基本例2:配列の中身を全て合計する

配列の先頭からループカウンタを使って順に参照して合計用変数に累計します。

#include <stdio.h>

int main(void)
{
	int i;
	int suti[] = {10, 20, 30, 40, 50};
	int gokei;	/* ①合計用変数を準備 */
	
	gokei = 0;	/* ②合計用の変数を0クリア */

	for(i=0; i<5; i++){
		gokei = gokei + suti[i];	/* ③合計用変数に累計していく */
	}
	
	printf("\n合計は %dです\n", gokei);
	
	return 0;
}

実行結果

合計は 150です

上記プログラムで利用している配列については、以下をご覧ください。

C初級:数値配列
変数を拡張した考え方として配列があります。 配列も変数です。通常の変数と違うのは添え字(そえじ)呼ばれる番号がついている点です。 以下は、5つの数値を配列に代入してその合計値を表示するサンプルです。

応用例1:1~100までの数の合計を求める

ループカウンタ変数を使って1~100までの数の合計を求めて表示してみます。
for文の条件を変更すれば1~1000でも、1~10000でも簡単に応用出来ることが分かります。

#include <stdio.h>

int main(void)
{
	int i;
	int gokei;	/* ①合計用変数を準備 */
	
	gokei = 0;	/* ②合計用の変数を0クリア */

	for(i=1; i<=100; i++){
		gokei = gokei +i;		/* ③合計用変数に累計していく */
	}
	
	printf("1~100までの合計は %dです\n", gokei);
	
	return 0;
}

実行結果

1~100までの合計は 5050です

応用例2:1~100までの偶数の合計を求める

では、1から100までの間の数値の中から偶数のみ取り出して累計するとどうでしょうか。
これには条件が必要です。
偶数は2で割り切れる(2で割って余りがない数)のことを指すので、

if(数値 % 2 == 0){
	/* 合計を求める */
}

とすれば良いことが分かります。(%は、割り算の余りを求める演算子)
以下プログラムです。

#include <stdio.h>

int main(void)
{
	int i;
	int gokei;	/* ①合計用変数を準備 */
	
	gokei = 0;	/* ②合計用の変数を0クリア */

	for(i=1; i<=100; i++){
		/* 偶数のとき */
		if(i % 2 == 0){
			gokei = gokei +i;		/* ③合計用変数に累計していく */
		}
	}
	
	printf("合計は %dです\n", gokei);
	
	return 0;
}

実行結果

合計は 2550です

以上、繰り返し処理を使って数値の合計を求めるでした。
色々と応用してみて下さい。

コメント