• 検索結果がありません。

繰り返し処理: while 文, do ~ while 文 CプログラミングⅠ

N/A
N/A
Protected

Academic year: 2021

シェア "繰り返し処理: while 文, do ~ while 文 CプログラミングⅠ"

Copied!
20
0
0

読み込み中.... (全文を見る)

全文

(1)

CプログラミングⅠ

繰り返し処理 : while文, do~while文

(2)

繰り返し処理 : while文

while文

① 条件式の判定

②-1 条件式の判定結果が真の場合,

ブロック内の文を実行した後,①に戻る

②-2 条件式の判定結果が偽の場合,

ブロック内の文を実行せずに繰り返しを終了する

条件式が真の間 文を繰り返し実行する

条件式

文 真

while文の書式

while(

条件式

){

文;

文;

}

(3)

繰り返し処理 : while文

while文のフローチャート

継続条件

処理 真

while継続条件

処理

フローチャート1 フローチャート2

この講義ではなるべく フローチャート1の

記述法を用いる

while ( 式 ) {

文;

・ ・ ・

}

継続条件

処理内容

while

どちらも同じ内容

を意味する

(4)

繰り返し処理の中での変数の利用(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番目の繰り返し.

繰り返しが終わりました.

重要 『条件に関係する変数の値の更新』では目的の繰り返し処理を

達成したら条件が偽になるように値を更新する

(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 以下ではないので, 繰り返し終了

⑱ 繰り返しが終わりました.を表示

(6)

繰り返し処理 : 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文を用いた繰り返し処理の例のフローチャート

(7)

繰り返し処理 : while文

while文の書式(2)

0以外の値

① 条件式の判定

②-1 式の値が0以外の場合,

ブロック内の文を実行した後,①に戻る

②-2 式の値が0の場合,

ブロック内の文を実行せずに繰り返しを終了する

式の値が0以外の間 文を繰り返し実行する

式の値

while文の書式

while(

式の値

){

文;

文;

}

(8)

条件記述の省略の例 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となったとき 条件式は『偽』となり繰り返し

を終了する

整数値を真・偽として用いることで

条件式を省略・簡略化できる

(9)

繰り返し処理 : while文

while(num) { ...

}

while(num != 0) { ...

}

while(!num) { ...

}

while(num == 0) { ...

}

省略形 正しい条件式

省略形 正しい条件式

※ ! は否定(NOT)を表す論理演算子。

条件記述の省略

C言語では整数を用いて 真・偽を表すため

このような省略ができるが,

できるだけ正しい条件式を 書けるようにしておくこと

numが0でない場合繰り返す

numが0の場合に繰り返す

(10)

文字列を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文は

前判定の繰り返し処理となる

(11)

繰り返し処理 : do~while文

do~while文

条件式 文

真 偽

① ブロック内の文を実行

②-1 条件式が真の場合,①に戻る

②-2 条件式が偽の場合,

繰り返しを終了する(ブロックを抜ける)

ブロック内{ }の文を 必ず1回実行する

ブロック内{ }の文を 実行してから 条件式の判定を行う

do~while文の書式

do {

文;

文;

} while( 条件式 );

(12)

繰り返し処理 : do~while文

do~while文のフローチャート

真 偽

do while

継続条件

処理

フローチャート1 フローチャート2

この講義ではなるべく フローチャート2の

記述法を用いる

do {

文;

・ ・ ・

} while ( 式 );

継続条件 処理内容

do

処理

継続条件 while

どちらも同じ内容 を意味する

処理の後に継続条件を

判定する(後判定)

(13)

繰り返し処理の中での変数の利用(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回はブロック内の処理を

実行する

(14)

繰り返し処理の中での変数の利用(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 以下ではないので, 繰り返し終了

⑰ 繰り返しが終わりました.を表示

(15)

繰り返し処理の中での変数の利用(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

(16)

繰り返し処理のコントロール

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 )が真

(17)

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 )が真

(18)

繰り返し処理のコントロール

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

(19)

繰り返し処理のコントロール

break と continue の違い

break は実行された時点で繰り返し処理を中断し,ブロックの外

(ブロック直後の処理)に抜け出す

continue は実行された時点でブロック内の残りの処理をスキップして

繰り返し処理を継続する

繰り返し処理を 中断して ブロックの外へ

処理1 i = 1

i <= 5

i++

処理2

処理1 i = 1

i <= 5

i++

処理2

残りの処理を スキップして 次のステップへ continue文が

実行されると break文が

実行されると

(20)

講義のまとめ

while文

前判定繰り返し処理

繰り返し回数が不確定のときに用いられることが多い

do~while文

後判定繰り返し処理

繰り返し対象の処理を必ず一度は実行する

繰り返し処理のコントロール

break文

ブロック内処理({}内の処理)を強制的に終了させる

continue文

ブロック内処理({}内の処理) において,continue文以降

の処理を一度スキップする

参照

関連したドキュメント

本事業では、繰り返し使える容器のシェアリングサービス「 Re&amp;Go cup 」をスターバックス の

 実施にあたっては、損傷したHIC排気フィルタと類似する環境 ( ミスト+エアブロー ) ※1 にある 排気フィルタ

前処理フィルタ2B 漏えい個所 漏えいあり 腐⾷あり スラッジ塊あり 異常なし. 

社会学文献講読・文献研究(英) A・B 社会心理学文献講義/研究(英) A・B 文化人類学・民俗学文献講義/研究(英)

• De Glauwe,P などによると、 「仮に EU 残留派が勝 利したとしても、反 EU の動きを繰り返す」 → 「離脱 した方が EU

り分けることを通して,訴訟事件を計画的に処理し,訴訟の迅速化および低

 かつての広葉樹は薪炭林としての活用が主で、20〜40年の周期

(注)