制御の流れ
(ループ処理,while, for, do-while 文)
電気情報工学科∗ 1 年 通年 情報処理基礎
2009 年 7 月 30 日 (木)
概要
この講義では,繰り返し同じ文を実行するループ処理を行う,while, for, do-while
文を説明する.
1 講義内容概略
まず始めに,本日の講義内容と目標を示す.
講義内容 本講義では,同じ文を繰り返し実行するループ処理を行う,while, for, do-while
文について説明する.
本講義は,4 章の p.132∼152 の内容を取り扱っている.具体的には,以下が目標である.
目標
以下が今日の目標である.ここまでは,できるようになろう.
• while を使ったループ処理が書ける.これはループ処理に先立って,判断を行い,そ
れが正しい限り処理を続行する.
• for を使ったループ処理が書ける.通常,この文は繰り返し回数が予め分かってい
るような処理に使う.
• do–while を使ったループ処理が書ける.これは,一度ループ処理を行い,処理の後
に繰り返しの判断を行う.
∗
独立行政法人 国立高等専門学校機構 秋田工業高等専門学校 電気情報工学科
1
2 繰り返し処理
ここでは,先に示した 3 通りの繰り返し処理の構文を取り扱う.3 通りの構文で同じ内
容のプログラムを示し,その違いを見ていく.ここで,例に示しているプログラムの動作
は全て同一で,以下のようになっている.
• 「1 からいくつまで加算しますか?」と質問を行い,ユーザーはそれに答える.
• そして,1 からユーザーが答えた整数までの和を計算する.すなわち,以下の sum
を計算する.
sum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + · · · + ユーザーが入力した整数
2.1
2.1.1
while 文
while 文のプログラム例
リスト 1 に while 文を使った例を示す.その動作は,以下のとおり.
1. 「1 からいくつまで加算しますか?」と質問を行い,ユーザーはそれに答える.入力
した値は,imax に格納される.
2. 変数 sum と i に 0 と 1 を代入し,初期化を行っている1 .
3. while を使ったループ処理のブロックでは,i <= imax が正しい限り,以下の文を
繰り返し実行する.ただし,一度実行すると,i <= imax が正しいか否か,再度判
断を行う.
• sum に i の値を加えている.sum += i は sum = sum+i と同じ意味.
• i の値を 1 増加させている.i++は i=i+1 と同じ意味.これをインクリメント
と言う.教科書 [1] の p.135–137 を見よ.
リスト 1: while 文を使った整数の加算プログラム
1
2
3
4
5
6
7
8
9
10
# i n c l u d e < s t d i o . h>
i n t main ( v o i d ) {
i n t i , imax ;
i n t sum ;
p r i n t f ( ” 1 からいくつまで加算しますか ? \ t ” ) ;
s c a n f ( ”%d ” , &imax ) ;
sum = 0 ;
1
変数を宣言した時点では,変数にはでたらめな数字が格納されているだけである.初期化をして,意図
した初期値を変数に格納する必要がある.
2
11
12
13
14
15
16
17
18
19
20
21
22
i = 1;
w h i l e ( i <=imax ) {
sum += i ;
i ++;
}
p r i n t f ( ” sum = %d \ n ” , sum ) ;
return 0;
}
2.1.2
while 文の書き方
これは,前判定繰り返しである.ループのブロックを実行する前に判断を行う—のでそ
のように呼ばれる.次に述べる for 文も前判定繰り返し文であるが,予め繰り返し回数
が分からないときには,while 文が使われることが多い.
「条件式が正しければ,ループ
繰り返す.条件式が誤りになれば,そのループから抜け出す」という構文である.次のよ
うに,書く.
¶
書式
³
while(継続条件式){
文 1;
文 2;
文 3;
}
µ
´
継続条件式
真
while(継続条件式){
文1;
文2;
文3;
}
文1
文2
文3
図 1: while を使ったループ処理
3
偽
2.2
2.2.1
for 文
for 文のプログラム例
リスト 2 に for 文を使った例を示す.その動作は,以下のとおり.
1. 「1 からいくつまで加算しますか?」と質問を行い,ユーザーはそれに答える.入力
した値は,imax に格納される.
2. 変数 sum に 0 を代入し,初期化を行っている.
3. for を使ったループ処理のブロックでは,次のように動作する.
• 初期値として,i に 1 を代入している.
• 継続条件式 i <= imax が正しければ,中括弧で囲まれた繰り返しのブロック
を実行する.誤りであれば,for のループから抜け出る.
• 再設定式である i++により,i の値を 1 増加させる.
• 継続条件式に戻り,繰り返す.
リスト 2: for 文を使った整数の加算プログラム
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# i n c l u d e < s t d i o . h>
i n t main ( v o i d ) {
i n t i , imax ;
i n t sum ;
p r i n t f ( ” 1 からいくつまで加算しますか ? \ t ” ) ;
s c a n f ( ”%d ” , &imax ) ;
sum = 0 ;
f o r ( i =1; i <=imax ; i ++){
sum += i ;
}
p r i n t f ( ” sum = %d \ n ” , sum ) ;
return 0;
}
2.2.2
for 文の書き方
while とは異なり,繰り返しの回数が予め分かっているとき,for 文がつかわれる.こ
れも,前判定繰り返し文となっている.実際の動作は図 2 のフローチャートを見て理解し
てほしい.動作の順序は,初期値設定 → 継続条件式 → ループブロックの処理 → 再設定
4
式 → 継続条件式 → ループブロックの処理となる.初期条件式は,最初の 1 回のみで,継
続条件式が正しい限り,ループを繰り返す.
¶
書式
³
for(初期値設定式; 継続条件式; 再設定式){
文 1;
文 2;
文 3;
}
µ
´
これは,
「継続条件が正しい限り,文 1 と文 2,文 3 を実行する」となる.もし,制御式が
誤り (偽) であれば,これら文は実行されず,ブロックの外側に出る.図 2 にこの構文のフ
ローチャートを示す.
初期値設定式
for(初期値設定式; 継続条件式; 再設定式){
文1;
文2;
文3;
}
継続条件式
偽
真
文1
文2
文3
再設定式
図 2: for を使ったループ処理
2.3
2.3.1
do–while 文
do-while 文のプログラム例
リスト 3 に do–while 文を使った例を示す.その動作は,以下のとおり.
1. 「1 からいくつまで加算しますか?」と質問を行い,ユーザーはそれに答える.入力
した値は,imax に格納される.
5
2. 変数 sum と i に 0 と 1 を代入し,初期化を行っている.
3. do–while を使ったループ処理のブロックでは,次のように動作する.
• sum に i の値を加える.
• i の値をインクリメント—1 加算—する.
• 継続条件式が正しければ,ループを繰り返す.誤りであれば,do–while のルー
プから抜け出す.
リスト 3: do–while 文を使った整数の加算プログラム
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# i n c l u d e < s t d i o . h>
i n t main ( v o i d ) {
i n t i , imax ;
i n t sum ;
p r i n t f ( ” 1 からいくつまで加算しますか ? \ t ” ) ;
s c a n f ( ”%d ” , &imax ) ;
sum = 0 ;
i = 1;
do {
sum += i ;
i ++;
} w h i l e ( i <=imax ) ;
p r i n t f ( ” sum = %d \ n ” , sum ) ;
return 0;
}
2.3.2
do–while 文の書き方
これは後判定繰り返しで,予め繰り返し回数が分からないときに使われることが多い.
「ループ内を実行し,継続条件式が正しければ,さらにループを繰り返す.条件式が誤り
になれば,そのループから抜け出す」という構文に使われる.どのような場合でも,必ず
ループが 1 度は実行されるところが,前判定繰り返しと異なる.do–while 文は,次のよ
うに書く.
6
¶
書式
³
do{
文 1;
文 2;
文 3;
}while(継続条件式);
µ
´
これは,
「文 1 と文 2,文 3 を実行し,継続条件が正しければ,これを繰り返す」となる.も
し,制御式が誤り (偽) であれば,ブロックの外側に出る.図 3 にこの構文のフローチャー
トを示す.
文1
do{
文1;
文2;
文3;
}while(継続条件式);
文2
文3
真
継続条件式
偽
図 3: do while の後判定繰り返し文
7
3 練習問題
本日の学習内容の理解を深めるために,以下の練習問題のプログラムを作成して,実行
してみよ.
[練習 1] キーボードから奇数を読み込んで,1∼読み込んだ奇数まで合計するプロ
グラムを作成せよ.while と for,do–while のそれぞれの構文を使った
3 種類のプログラムを作成すること.
sum = 1 + 3 + 5 + 7 + . . .
(1)
[練習 2] 以下のような三角関数の表を作成せよ.
-------------------------------------------------deg
sin
cos
tan
==================================================
0
0.000000
1.000000
0.000000
1
0.017452
0.999848
0.017455
2
0.034899
0.999391
0.034921
3
0.052336
0.998630
0.052408
4
0.069756
0.997564
0.069927
5
0.087156
0.996195
0.087489
6
0.104528
0.994522
0.105104
このあたりは省略
357
-0.052336
0.998630
-0.052408
358
-0.034899
0.999391
-0.034921
359
-0.017452
0.999848
-0.017455
360
-0.000000
1.000000
-0.000000
--------------------------------------------------[練習 3] 二次関数 f (x) = −3x2 + 9x − 6 の最大値と最大になる x の値を求めよ.求
める x の精度は,0.001 以内であること.これは,適当な x の初期値— 例
えば x = −100—を決めて, x を 0.001 ずつ増加させて, f (x) が最大にな
る値を捜す.
4 課題
今回は課題はありません.期末試験の範囲はここまでになるので,しっかりと復習して
ください.
質問がある場合は,いつでも気軽に坂本まで質問にくること.
参考文献
[1] 内田智史,“C 言語によるプログラミング 基礎編” オーム社,2001
8
ダウンロード

ループ処理,while, for, do-while文