for文を使った反復処理についての補足

このページでは、1から10までの総和を例に、for文の動作と記法について補足する。

繰り返し計算の際の変数の「動き」

for文を使って1から10までの合計を求める例題プログラムについて、内部の変数の動きをシミュレーションしてみよう。

#include <stdio.h>
main( )
{
     int n, sum ;
     sum=0 ;
     for (n=1 ; n<=10 ; n=n+1) {
        sum = sum + n ;
     }
     printf("1から10までの合計: %d\n",sum) ;
}

プログラムの各ステップで、変数の値がどのように変化するかを、時系列的に表にしてみた(長くなるので、途中は省略)。 太文字は「ただいま処理中」の箇所を示している。 慣れないうちは、このようにプログラムの動作を、特に、変数(メモリー)の値の変化に注目しながら、頭の中で(あるいは紙の上で)追いかけてみると良いだろう。

実行・評価される箇所 動作 nの値 sumの値 繰り返し回数
int n,sum ; 変数(メモリー)の確保 領域確保 領域確保
sum = 0 ; sumの値を0にセット 0
for (n=1 ; n<=10 ; n=n+1) { nを1にセット
この部分は「最初の1回」
だけ実行される
1 0
for (n=1 ; n<=10 ; n=n+1) { n<=10かどうかチェック
nは1なので条件を満足。
反復箇所を実行。
1 0 1回目
  sum = sum + n ; 0 + 1 を sumにセット 1 0→1
for (n=1 ; n<=10 ; n=n+1) { nの値を1増やす。 1→2 1
for (n=1 ; n<=10 ; n=n+1) { n<=10かどうかチェック
nは2なので条件を満足。
反復箇所を実行。
2 1 2回目
  sum = sum + n ; 1 + 2 を sumにセット 2 1→3
for (n=1 ; n<=10 ; n=n+1) { nの値を1増やす。 2→3 3
for (n=1 ; n<=10 ; n=n+1) { n<=10かどうかチェック
nは3なので条件を満足。
反復箇所を実行。
3 3 3回目
  sum = sum + n ; 3 + 3 を sumにセット 3 3→6
for (n=1 ; n<=10 ; n=n+1) { nの値を1増やす。 3→4 6
for (n=1 ; n<=10 ; n=n+1) { n<=10かどうかチェック
nは4なので条件を満足。
反復箇所を実行。
4 6 4回目
  sum = sum + n ; 6 + 4を sum にセット 4 6→10

途 中 省 略
  sum = sum + n ; 45 + 10をsumにセット 10 45→55 11回目
for (n=1 ; n<=10 ; n=n+1) { nの値を1増やす。 10→11 55
for (n=1 ; n<=10 ; n=n+1) { n<=10かどうかチェック
nは11なので条件を満足しない。
反復を中止。
11 55
printf("1から10までの合計: %d\n",sum) ; 答えを表示 11 55


for文を使って1から10までの総和の計算するプログラム(別バージョン)

for文の動作をより理解するため、総和の別バージョンをいくつか紹介しておこう:

#include <stdio.h>
main()
{
    int sum,n;
    sum=0;
    n=1 ;
    for ( ; n<=10 ; ) {
        sum=sum+n ;
        n=n+1 ;
    }
	printf("1から10までの総和= %d\n",sum) ;
}

反復を開始する前の処理をfor文の前に出し、反復の都度実行する文を、反復内容の中に記述した例。 このように、for文の項目は空欄でも構わないが、区切りのセミコロン ; は必ず必要。


#include <stdio.h>
main()
{
    int sum,n;
    sum=0;
    for (n=1 ; n<=10 ; sum=sum+(n-1)) {
        n=n+1 ;
    }
	printf("1から10までの総和= %d\n",sum) ;
}

総和を足し上げる文と、nを1ずつ増やす文の場所を入れ替えた例。sumに加える「前」に、nはすでに1だけ増えているので、 sum=sum+(n-1)となる。


#include <stdio.h>
main()
{
   int sum,n;
   for (sum=0,n=1 ; n<=10 ; sum=sum+n,n=n+1) { }
   printf("1から10までの総和= %d\n",sum) ;
}

ここで使われている,コンマ演算子と呼ばれ、 変数宣言の際に使われるコンマと同様の働きをする。

sumの初期化と更新を、for文の三点セットの中に入れた例。 このように、文をコンマ(,)で区切って、各項目に複数の文を並べることも許されている。 このときも、for( )の中にはセミコロンは二つでなければならない。