09 繰り返し その1
繰り返し
条件が成立する間、あるブロック内を繰り返し実行するのが繰り返しです。
繰り返しには、for文、while文、do-while文があります。
for文
まずはfor文から学んでいきましょう。
for文は、回数をカウントしながら、繰り返して同じことをするための文です。通常、繰り返した回数を数えるための変数(カウンタ変数)を用意して処理を行います。
for (カウンタに初期値を代入; 繰り返すための条件; 回数のカウント) {
文1;
文2;
}
for文の流れは、実際にC言語のソースコードを見た後のほうがわかりやすいと思いますので、先にコードを見ていきましょう。ファイル名は、for.cとします。
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 3; i++) {
printf("%d\n", i);
}
return 0;
}
この時の処理の流れを表にすると、このようになります。
変数iの値 | 条件 i <= 3 | i++ | 内容 |
1 | 成立する | i = 2 | 繰り返す→1回目繰り返す |
2 | 成立する | i = 3 | 繰り返す → 2回目繰り返す |
3 | 成立する | i = 4 | 繰り返す → 3回目繰り返す |
4 | 成立しない | i = 4 | 終わる |
for文の流れを図に表すと、このようになります。
2重for文
繰り返しの中では、さらに繰り返しをすることができます。これを使うと、簡単にかけ算九九を計算することが出来ます。実際にやってみましょう。ファイル名は、kuku.cとします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(void)
{
int i;
int j;
for (i = 1; i <= 9; i++) {
for (j = 1; j <= 9; j++) {
printf("%d * %d = %02d\n", i, j, i * j);
}
}
return 0;
}
for文の中のif文
また、for文の中にif文を組み込むこともできます。
以下のコードを見てみましょう。1から20までの数字を出力し、奇数であれば(奇数)と表示し、そうでなければただ改行するプログラムです。ファイル名は、odd.cとします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 20; i++) {
printf("%d", i);
if (i % 2 == 0) {
printf("\n");
} else {
printf("(奇数)\n");
}
}
return 0;
}
continue文
continue文は、繰り返しの処理を飛ばし、ブロックの先頭位置に戻って処理を続ける処理を行います。
では、実際にcontinue文を使ったプログラムを書いてみましょう。これは、continue文を利用して1から100までの奇数の総和を求めるプログラムです。ファイル名はcontinue.cとします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(void)
{
int i;
int odd_sum = 0;
for(i = 1;i <= 100; i++){
if(i % 2 == 0)//iが奇数か偶数かを判断する
continue;
odd_sum += i;//odd_sum = odd_sum + i;
}
printf("1から100までの奇数の和は%dです\n",odd_sum);
return 0;
}
if(i % 2 == 0)//iが奇数か偶数かを判断する
continue;
このようにif文の中が1行だけなら{}は省略することができます。
練習問題
1. かけ算九九の改良
かけ算九九のプログラムを改良し、各段の最初に「1の段」などと表示するようにしましょう。ファイル名は、kuku2.cとします。
2. 世界のナベアツ
1から100までの整数をカウントし、3の倍数であればアホになるプログラムを作成しなさい。ファイル名は、aho.cとします。(3のつく整数の時の対応はしなくて良い)
おまけ問題
07 条件分岐 その1 練習問題 2.FizzBuzz問題 のプログラムを修正し、繰り返し処理を用いて1~100までの数字の判定結果を画面に出力してください。ファイル名はfizzbuzz2.cとします。