第11回
繰り返し情報処理演習（テキスト：第８章）

今日の内容第２回C言語レポート課題の出題
1. 定回反復とその必要性
2. 繰り返し
3. for 文
4. 不定回反復とその必要性
5. while 文
6. do-while 文
7. ループの途中での実行の制御
8. 今日の練習問題

第２回C言語レポート課題
課題： 繰り返しと配列を利用したプログラムを作成する
形式： プログラムだけを提出するのではなく，プログラムの説明を書くこと．実行結果をキャプチャして貼付けること．
問題： テキスト pp.117〜120 の練習問題から１つ以上を選んで答えなさい〆切： クラスによって案内がある

1. 定回反復とその必要性
あらかじめ定められた回数がある．
その回数の中で同じことを繰り返すことを言う．
定回反復を表す命令(ｆｏｒ 制御構造)の必要性• Aを画面に3回書け．
printf("A"); printf("A"); printf("A");または，printf("AAA");• Aを画面に20回書け．
printf("AAAAAAAAAAAAAAAAAAAA");• Aを画面に10,000回書け．
printf("AAAAAAAAAA ... AAA ");10,000文字？？

2. 繰り返し C言語での繰り返しは次の3通り

 for 文 while 文 do-while 文
 ループ変数（ループカウンタ）

 繰り返しの回数を数える変数
 インクリメント
値を1増やす デクリメント
値を1減らす

（i++）
（i--）

3. for 文（テキスト84ページ）

for (初期設定式; 継続条件式; 再設定式) {ブロック}• 初期設定式はループに先立って1回だけ実行される．
• 継続条件式が成り立っている間，ブロックを実行する．
• 条件が成り立たなければ，ループは終了する．
• ブロックの実行後，再設定式が評価される．

初期設定式
継続条件式
Tブロック
再設定式

F

3. for 文の使用例
 ２の段のかけ算を表示するプログラム

 2×1、2×2、2×3、…
 数値を9つ横に並べる
 数値と数値の間は適当な空白を入れる
 下のような表示を得る
2 4 6 8 10 12 14 16 18
 数値を表示する処理を9回繰り返す

２の段の表を表示するプログラム#include <stdio.h>/* ２の段を表示する */int main(int argc, const char * argv[]) {int i, j;for(j = 1; j <= 9; j++){printf("%3d", i * j);}return 0;}

九九の表
 九九の表を表示するプログラム

1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 34 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81• 横に9つの数値• 縦に9行

九九の表を表示するプログラム#include <stdio.h>/* 九九を表示する */int main(int argc, const char * argv[]) {int i, j;for(i = 1; i <= 9; i++){for(j = 1; j <= 9; j++){printf("%3d", i * j);}printf("¥n");// 改行する}
return 0;}

4. 不定回反復とその必要性
不定回反復の必要性

繰り返しの回数がまえもって分からない場合は，for 文で記述するのは不適
論理式が正しい間，繰り返す
while( 論理式 ){文1
文2

do{}

} while( 論理式 );文1
文2

5. while 文
while (継続条件式) {ブロック}（テキスト94ページ）

継続条件式

FTブロック• 継続条件式が成り立っている間，ブロックを実行する• 条件が成り立たなければ，ループは終了する• ブロックの実行前に条件を評価するので，ブロックが1回も実行されない場合もあるwhile 文の使用例#include <stdio.h>/* 0が入力されるまで入力値を加算していく */int main(int argc, const char * argv[]) {int sum, x;
sum = 0;
printf("data? ");scanf("%d", &x);
while(x != 0){ /* 0が入力されるまで繰り返される */sum += x;sum = sum + x を意味する
printf("data?");scanf("%d", &x);}
printf("sum = %d", sum);
return 0;}

sum += i とは（テキスト54ページ）□ は sum という変数の中身を表す
ループに入る前

sum = 00iが1で実行sum = sum + 1
0+1

iが2で実行

0iがnで実行+1

sum = sum + 2
0+1+20+1

sum2 = sum1+ 2+2

sum = sum + n
0+1+2+ … +nsum1 = sum0+ 1

sumn = sumn-1+ n

0+1+2+ … +(n-1)+n6. do - while 文（テキスト94ページ）

do {ブロック} while (継続条件式);

ブロック

T

継続条件式
F

• 継続条件式が成り立っている間，ブロックを実行する．
• 条件が成り立たなければ，ループは終了する．
• ブロックを実行した後に条件を評価するので，ブロックを必ず1回は実行する．

do - while 文の使用例#include <stdio.h>/* 0が入力されるまで入力値を加算していく */int main(int argc, const char * argv[]) {int sum, x;
sum = 0;do{
printf("data?");scanf("%d", &x);
sum += x;} while(x != 0);
printf("sum = %d", sum);
return 0;}

1から10までの合計
 3種類のループはどれを使っても構わない

for ループ
int sum = 0;
for (int k = 1; k <= 10; k++) {sum += k;}

変数 k はループ変数（ループの回数を数えるための変数）

while ループ

do-while ループ

int sum = 0;
int k = 1;
while (k <= 10) {sum += k;k++;}int sum = 0;
int k = 1;
do {sum += k;k++;} while (k <= 10)

7. ループ途中での実行の制御
 ループの途中で，繰り返している処理を…

 終了させたい（ループから抜ける）
 break 文
 ループのブロック，switch 制御構造のブロックで使用可能

 ループ内の残りの処理を省きたい（ループは続行） continue 文
 ループのブロックで使用可能

2つの制御文の流れ
for 制御構造でループを記述した場合

更新条件

処理

continue 文

ループの制御break 文

8. 今日の練習問題
Level問題C

整数を読み込み，その整数より小さい数をすべて表示するプログラムを作りなさいB

整数を読み込み，その整数より小さい 3 の倍数をすべて表示するプログラムを作りなさいA
A

整数を読み込み，その整数より小さい数で3という数字が入っている数をすべて表示するプ
ログラムを作りなさい
テキスト p.99 の練習問題の3（凝った表示の九九の表）を表示するプログラムを作成せよ