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

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