ここでは,先に示した3通りのの繰り返し処理の構文を学習する.3通りの構文で同じ内容
のプログラムを示し,その違いを学習する.ここで,例に示しているプログラムは,全て
同一で,以下のようになっている.
- 「1からいくつまで加算しますか?」と質問を行い,ユーザーはそれに答える.
- そして,1からユーザーが答えた整数までの和を計算する.すなわち,以下の
を計算する.
ユーザーが入力した整数 |
|
リスト
1に
while文を使った例を示す.その動作は,以下のとおり.
- 「1からいくつまで加算しますか?」と質問を行い,ユーザーはそれに答える.入
力した値は,imaxに格納される.
- 変数sumとiに0と1を代入している.これを初期化と言う.
- whileを使ったループ処理のブロックでは,i <= imaxが正しい限り,
以下の文を繰り返し実行する.ただし,一度実行すると,i <= imaxが正し
いか否か,再度判断を行う.
- sumにiの値を加えている.sum += iはsum = sum+i
と同じ.教科書 [1]のp.87を見よ.
- iの値を1増加させている.i++はi=i+1と同じ.これをイ
ンクリメントと言う.教科書 [1]の
p.135-137を見よ.
1 #include <stdio.h>
2
3 int main(void){
4 int i, imax;
5 int sum;
6
7 printf("1からいくつまで加算しますか?\t");
8 scanf("%d", &imax);
9
10 sum = 0;
11 i = 1;
12
13 while(i<=imax){
14 sum += i;
15 i++;
16 }
17
18
19 printf("sum = %d\n", sum);
20
21 return 0;
22 }
これは,前判定繰り返しである.ループのブロックを実行する前に判断を行う--のでそ
のように呼ばれる.次に述べる
for文も前判定繰り返し文であるが,予め繰り返し回
数が分からないときには,
while文が使われることが多い.「条件式が正しければ,
ループ繰り返す.条件式が誤りになれば,そのループから抜け出す」という構文である.
次のように,書く.
|
書式
while(継続条件式){
文1;
文2;
文3;
}
|
リスト
2に
for文を使った例を示す.その動作は,以下のとおり.
- 「1からいくつまで加算しますか?」と質問を行い,ユーザーはそれに答える.入
力した値は,imaxに格納される.
- 変数sumに0を代入し,初期化を行っている.
- forを使ったループ処理のブロックでは,次のように動作する.
- 初期値として,iに1を代入している.
- 継続条件式i <= imaxが正しければ,中括弧で囲まれた繰り返しのブロックを実
行する.誤りであれば,forのループから抜け出る.
- 再設定式であるi++により,iの値を1増加させる.
- 継続条件式に戻り,繰り返す.
1 #include <stdio.h>
2
3 int main(void){
4 int i, imax;
5 int sum;
6
7 printf("1からいくつまで加算しますか?\t");
8 scanf("%d", &imax);
9
10 sum = 0;
11
12 for(i=1; i<=imax; i++){
13 sum += i;
14 }
15
16
17 printf("sum = %d\n", sum);
18
19 return 0;
20 }
whileとは異なり,繰り返しの回数が予め分かっているとき,
for文がつかわれ
る.これも,前判定繰り返し文となっている.実際の動作は図
4のフローチャー
トを見て理解してほしい.動作の順序は,初期値設定
継続条件式
ループブロックの処理
再設定式
継続条件式
ループブロックの処理となる.初期条件式は,最初の1回のみで,継続条件
式が正しい限り,ループを繰り返す.
|
書式
for(初期値設定式; 継続条件式; 再設定式){
文1;
文2;
文3;
}
|
これは,「継続条件が正しい限り,文1と文2,文3を実行する」となる.もし,制御式が誤り
(偽)であれば,これら文は実行されず,ブロックの外側に出る.図
4にこの
構文のフローチャートを示す.
リスト
3に
do-
while文を使った例を示す.その動作は,
以下のとおり.
- 「1からいくつまで加算しますか?」と質問を行い,ユーザーはそれに答える.入
力した値は,imaxに格納される.
- 変数sumとiに0と1を代入し,初期化を行っている.
- do-whileを使ったループ処理のブロックでは,次のように動作する.
- sumにiの値を加える.
- iの値をインクリメント--1加算--する.
- 継続条件式が正しければ,ループを繰り返す.誤りであれば,
do-whileのループから抜け出す.
1 #include <stdio.h>
2
3 int main(void){
4 int i, imax;
5 int sum;
6
7 printf("1からいくつまで加算しますか?\t");
8 scanf("%d", &imax);
9
10 sum = 0;
11 i = 1;
12
13 do{
14 sum += i;
15 i++;
16 }while(i<=imax);
17
18
19 printf("sum = %d\n", sum);
20
21 return 0;
22 }
これは後判定繰り返しで,予め繰り返し回数が分からないときに使われることが多い.
「ループ内を実行し,継続条件式が正しければ,さらにループを繰り返す.条件式が誤り
になれば,そのループから抜け出す」という構文に使われる.どのような場合でも,必ず
ループが1度は実行されるところが,前判定繰り返しと異なる.
do-
while文
は,次のように,書く.
|
書式
do{
文1;
文2;
文3;
}while(継続条件式);
|
これは,「文1と文2,文3を実行し,継続条件が正しければ,これを繰り返す」となる.
もし,制御式が誤り(偽)であれば,ブロックの外側に出る.図
5にこの
構文のフローチャートを示す.
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成18年9月7日