繰り返し計算の際の変数の「動き」
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 |