CプログラミングⅠ
繰り返し処理 : while文, do~while文
繰り返し処理 : while文
while文
① 条件式の判定
②-1 条件式の判定結果が真の場合,
ブロック内の文を実行した後,①に戻る
②-2 条件式の判定結果が偽の場合,
ブロック内の文を実行せずに繰り返しを終了する
条件式が真の間 文を繰り返し実行する
条件式
文 真
偽
while文の書式
while(
条件式
){文;
文;
:
}繰り返し処理 : while文
while文のフローチャート
継続条件
処理 真
while 偽 継続条件
処理
フローチャート1 フローチャート2
この講義ではなるべく フローチャート1の
記述法を用いる
while ( 式 ) {文;
・ ・ ・
}継続条件
処理内容
while
どちらも同じ内容
を意味する
繰り返し処理の中での変数の利用(while文)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
#include <stdio.h>
int main(void) {
int i = 1;
while( i <= 5 ){
printf("%d番目の繰り返し.¥n", i);
i++;
}
printf("繰り返しが終わりました.¥n");
return 0;
}
繰り返し処理 : while文
注意 : i++ の処理を忘れると...
int i = 1;
while (i <= 5) {
printf("%d番目の繰り返し.¥n",i);
}
永久に条件は偽とならないので 無限に繰り返しをしてしまう
while文を用いた繰り返し処理の例
条件(i <= 5)が 真の場合に 処理を繰り返す
条件に関係する変数の値を更新
実行結果
1番目の繰り返し.
2番目の繰り返し.
3番目の繰り返し.
4番目の繰り返し.
5番目の繰り返し.
繰り返しが終わりました.
重要 『条件に関係する変数の値の更新』では目的の繰り返し処理を
達成したら条件が偽になるように値を更新する
繰り返し処理の中での変数の利用(while文)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
#include <stdio.h>
int main(void) {
int i = 1;
while( i <= 5 ){
printf("%d番目の繰り返し.¥n", i);
i++;
}
printf("繰り返しが終わりました.¥n");
return 0;
}
繰り返し処理 : while文
while文を用いた繰り返し処理の例
実行結果
1番目の繰り返し.
2番目の繰り返し.
3番目の繰り返し.
4番目の繰り返し.
5番目の繰り返し.
繰り返しが終わりました.
① i ( = 1 ) は 5 以下か?
② 5 以下なので, 1番目の繰り返し.を表示
③ i++ が実行される( i が 2 となる)
④ i ( = 2 ) は 5 以下か?
⑤ 5 以下なので, 2番目の繰り返し.を表示
⑥ i++ が実行される( i が 3 となる)
⑦ i ( = 3 ) は 5 以下か?
⑧ 5 以下なので, 3番目の繰り返し.を表示
⑨ i++ が実行される( i が 4 となる)
⑩ i ( = 4 ) は 5 以下か?
⑪ 5 以下なので, 4番目の繰り返し.を表示
⑫ i++ が実行される( i が 5 となる)
⑬ i ( = 5 ) は 5 以下か?
⑭ 5 以下なので, 5番目の繰り返し.を表示
⑮ i++ が実行される( i が 6 となる)
⑯ i ( = 6 ) は 5 以下か?
⑰ 5 以下ではないので, 繰り返し終了
⑱ 繰り返しが終わりました.を表示
繰り返し処理 : while文
i <= 5
start
真 while 偽
i++
i <= 5
start
end
i番目の繰り返し.
繰り返しが終 わりました.
i番目の繰り返し.
繰り返しが終 わりました.
end
i = 1 i = 1
i++
while 繰り返し処理の中での変数の利用(while文)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
#include <stdio.h>
int main(void) {
int i = 1;
while( i <= 5 ){
printf("%d番目の繰り返し.¥n", i);
i++;
}
printf("繰り返しが終わりました.¥n");
return 0;
}
while文を用いた繰り返し処理の例のフローチャート
繰り返し処理 : while文
while文の書式(2)
0以外の値
0
① 条件式の判定
②-1 式の値が0以外の場合,
ブロック内の文を実行した後,①に戻る
②-2 式の値が0の場合,
ブロック内の文を実行せずに繰り返しを終了する
式の値が0以外の間 文を繰り返し実行する
式の値
文
while文の書式
while(
式の値
){文;
文;
:
}条件記述の省略の例 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
#include <stdio.h>
int main(void) {
int num = 1;
while ( num ) {
printf("整数を入力(0で終了)¥n");
scanf("%d",&num);
printf("%dが入力されました.¥n",num);
}
printf("繰り返しが終わりました.¥n");
return 0;
}
繰り返し処理 : while文
0以外の整数 真
0 偽
C言語では
numの値が0以外 → 『真』
numの値が0 → 『偽』
条件記述の省略
実行結果
整数を入力(0で終了) 1[Enter]
1が入力されました.
整数を入力(0で終了) 3[Enter]
3が入力されました.
整数を入力(0で終了) 5[Enter]
5が入力されました.
整数を入力(0で終了) 0[Enter]
0が入力されました.
繰り返しが終わりました.
条件を省略して記述
numの値が0となったとき 条件式は『偽』となり繰り返し
を終了する
整数値を真・偽として用いることで
条件式を省略・簡略化できる
繰り返し処理 : while文
while(num) { ...
}
while(num != 0) { ...
}
while(!num) { ...
}
while(num == 0) { ...
}
省略形 正しい条件式
省略形 正しい条件式
※ ! は否定(NOT)を表す論理演算子。
条件記述の省略
C言語では整数を用いて 真・偽を表すため
このような省略ができるが,
できるだけ正しい条件式を 書けるようにしておくこと
numが0でない場合繰り返すnumが0の場合に繰り返す
文字列を10回表示する(while文)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
#include <stdio.h>
int main(void) {
int i;
i = 0;
while( i < 10 ) {
printf("Hello World !¥n");
i++;
}
return 0;
} 文字列を10回表示する(for文)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
#include <stdio.h>
int main(void) {
int i;
for( i = 0; i < 10; i++ ) { printf("Hello World !¥n");
}
return 0;
}
繰り返し処理 : for文とwhile文
for文をwhile文に書き換える
初期値設定 条件式
後処理
for文とwhile文は
前判定の繰り返し処理となる
繰り返し処理 : do~while文
do~while文
条件式 文
真 偽
① ブロック内の文を実行
②-1 条件式が真の場合,①に戻る
②-2 条件式が偽の場合,
繰り返しを終了する(ブロックを抜ける)
ブロック内{ }の文を 必ず1回実行する
ブロック内{ }の文を 実行してから 条件式の判定を行う
do~while文の書式do {
文;
文;
:
} while( 条件式 );
繰り返し処理 : do~while文
do~while文のフローチャート
真 偽
do while
継続条件
処理
フローチャート1 フローチャート2
この講義ではなるべく フローチャート2の
記述法を用いる
do {文;
・ ・ ・
} while ( 式 );
継続条件 処理内容
do
処理
継続条件 while
どちらも同じ内容 を意味する
処理の後に継続条件を
判定する(後判定)
繰り返し処理の中での変数の利用(do~while文)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
#include <stdio.h>
int main(void) {
int i = 1;
do {
printf("%d番目の繰り返し.¥n",i);
i++;
} while( i <= 5 );
printf("繰り返しが終わりました.¥n");
return 0;
}
繰り返し処理 : do~while文
※ 条件判定の前にブロック内の 処理を行うため
do~while文を用いた繰り返し処理の例
実行結果
1番目の繰り返し.
2番目の繰り返し.
3番目の繰り返し.
4番目の繰り返し.
5番目の繰り返し.
繰り返しが終わりました.
ブロック内の処理を実行
条件 ( i <= 5 ) が偽であれば 繰り返しを終了する
do~while文では,
最低1回はブロック内の処理を
実行する
繰り返し処理の中での変数の利用(do~while文)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
#include <stdio.h>
int main(void) {
int i = 1;
do {
printf("%d番目の繰り返し.¥n",i);
i++;
} while( i <= 5 );
printf("繰り返しが終わりました.¥n");
return 0;
}
繰り返し処理 : do~while文
do~while文を用いた
繰り返し処理の例
実行結果
1番目の繰り返し.
2番目の繰り返し.
3番目の繰り返し.
4番目の繰り返し.
5番目の繰り返し.
繰り返しが終わりました.
① 1番目の繰り返し.を表示
② i++ が実行される( i が 2 となる)
③ i ( = 2 )は 5 以下か?
④ 5 以下なので, 2番目の繰り返し.を表示
⑤ i++ が実行される( i が 3 となる)
⑥ i ( = 3 ) は 5以下か?
⑦ 5 以下なので, 3番目の繰り返し.を表示
⑧ i++ が実行される( i が 4 となる)
⑨ i ( = 4 ) は 5以下か?
⑩ 5 以下なので, 4番目の繰り返し.を表示
⑪ i++ が実行される( i が 5 となる)
⑫ i ( = 5 ) は 5以下か?
⑬ 5 以下なので, 5番目の繰り返し.を表示
⑭ i++ が実行される( i が 6 となる)
⑮ i ( = 6 ) は 5以下か?
⑯ 5 以下ではないので, 繰り返し終了
⑰ 繰り返しが終わりました.を表示
繰り返し処理の中での変数の利用(do~while文)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
#include <stdio.h>
int main(void) {
int i = 1;
do {
printf("%d番目の繰り返し.¥n",i);
i++;
} while(i <= 5);
printf("繰り返しが終わりました.¥n");
return 0;
}
繰り返し処理 : do~while文
do~while文を用いた繰り返し処理の例のフローチャート
start
真 偽
i++
start
end
i 番目の繰り返し.
繰り返しが終 わりました.
i番目の繰り返し.
繰り返しが終 わりました.
end
i = 1 i = 1
i++
do
i <= 5
i <= 5 while
繰り返し処理のコントロール
break文
ブロック内の処理を強制的に終了し,そのブロックから抜ける
繰り返し処理を途中で終了させるために用いる
2重ループなどブロックがネストしている場合には,1つ外のブロックに 抜ける
break文による繰り返し処理の強制終了 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
#include <stdio.h>
int main(void) {
int i, res;
printf("何番目で中止しますか?¥n");
scanf("%d", &res);
for(i = 1; i <= 5; i++){
printf("%d番目の処理です¥n", i);
if (i == res) break;
}
printf("ブロック内の処理を終了しました.¥n");
return 0;
}
実行結果
何番目で中止しますか?
3[Enter]
1番目の処理です.
2番目の処理です.
3番目の処理です.
ブロック内の処理を終了しました.
break文が実行されると
繰り返しブロックの外に出る
条件
i == resが 真になったとき,
breakを実行し,
ブロックから抜ける
i が3のときに条件 ( i == res )が真
continue文による繰り返しステップのスキップ 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
#include <stdio.h>
int main(void) {
int i, res;
printf("何番目での処理を飛ばしますか?¥n");
scanf("%d", &res);
for(i = 1; i <= 5; i++){
if (i == res) continue;
printf("%d番目の処理です¥n", i);
}
printf("ブロック内の処理を終了しました.¥n");
return 0;
}
繰り返し処理のコントロール
continue文
ブロック内の残りの処理を1回スキップする
繰り返しステップでの処理を途中で終了して,次の繰り返しステップの処 理を行うために用いる
実行結果
何番目の処理を飛ばしますか?
3[Enter]
1番目の処理です.
2番目の処理です.
4番目の処理です.
5番目の処理です.
ブロック内の処理を終了しました.
continue文が 実行されると 次の繰り返し ステップに移る
条件
i == resが 真になったとき,
continueを実行し,
次の繰り返しステップに移る
3番目では ( i == res )が真
繰り返し処理のコントロール
start
end
i番目の処理です.
ブロック内の処理を終了 何番目で中止?
resに値を入力
i == res 偽
真
start
end
ブロック内の処理を終了 何番目を飛ばす?
resに値を入力
偽 真
i 番目の処理です.
i == res
break文使用例の フローチャート
continue文使用例の フローチャート
break breakを
実行すると ブロックの
外へ出る
break文は,繰り返し処理 自体を中断する
continueを 実行すると ブロック内の 残った処理を
スキップする そして,
次の繰り返し ステップ移る continue文は,繰り返し処理
自体は継続する
i = 1
i <= 5
i++
真
偽
i = 1
i <= 5
i++
continue
真 偽
繰り返し処理のコントロール
break と continue の違い
break は実行された時点で繰り返し処理を中断し,ブロックの外
(ブロック直後の処理)に抜け出す
continue は実行された時点でブロック内の残りの処理をスキップして
繰り返し処理を継続する
繰り返し処理を 中断して ブロックの外へ
処理1 i = 1
i <= 5
i++
真
偽
処理2
処理1 i = 1
i <= 5
i++
真
偽
処理2
残りの処理を スキップして 次のステップへ continue文が
実行されると break文が
実行されると
講義のまとめ
while文
前判定繰り返し処理
繰り返し回数が不確定のときに用いられることが多い
do~while文
後判定繰り返し処理
繰り返し対象の処理を必ず一度は実行する
繰り返し処理のコントロール
break文
ブロック内処理({}内の処理)を強制的に終了させる
continue文