プログラミング基礎 II

第七回: 繰返し

Martin J. Dürst

duerst@it.aoyama.ac.jp

O 棟 529号室

テュールスト マーティン ヤコブ

http://www.sw.it.aoyama.ac.jp/2005/Programming%20Basics%20II/lecture7.html

AGU

© 2005 Martin J. Dürst 青山学院大学

先週の演習題

  1. 二つの文字列を読み込んで、その二つが同じかどちらが大きいのかを調べるプログラムを作って下さい。(正解の例)
  2. 何日何曜日なのかを入力して、次のルールを使ってその日どのようなゴミを出せるのかを出力するプログラムを作って下さい。(正解の例)
  3. 自分の分野や身の回りの問題で条件文を使った面白いプログラムにして下さい。

提出: 来週の授業 (11月 21日) までに 3 番のプログラムと入出力経過を提出して下さい。

繰り返しとは

for 文の例

1 から 10 の 3乗を計算する

int n;
for (n=1; n<=10; n++) {
    printf ("%d の 3乗 = %d.\n", n, n*n*n);
}

for 文の文法

for 文の実行

for 文は次の通りに実行される:

  1. (初期化;;)
  2. (;条件;): 合わないときに繰り返しを断念、for 文の後から続く
  3. { } 内の文を実行
  4. (;;次の繰り返しへのステップ)
  5. 2. から繰り返す

while 文の例

ユーザが止めるまで入力した数の 3乗を計算する:

int n;
printf ("Input a number, 0 to stop: ");
scanf ("%d", &n);
while (n != 0) {
    printf ("Cube of %d is %d.\n", n, n*n*n);
    printf ("Input a number, 0 to stop: ");
    scanf ("%d", &n);
}

for 文と while 文の関係

for 文を while 文で書けるし、逆も可能

変更前 変更後
for (n=0;n<10;n++) {
    /* 処理 */
}
n=0;
while (n<10) {
    /* 処理 */
    n++;
}
while (n != 0) {
    /* 処理 */
}
for (; n!=0; ) {
    /* 処理 */
}

繰り返しと配列

繰り返しは配列の処理によく使われる

配列の長さが決った場合には for 文を使う

20 個のデータの配列の場合に指数 (番号) は 0~19 に注意
(for (i=0; i<20; i++) { ... })

配列の長さが分からない場合に while 文を使う
(例: 文字列: 終端マークまで処理する)

今週の演習題

  1. 1 から 20 の整数の半径の円の面積を計算するプログラムを作りなさい。
  2. 先週のゴミ出しのプログラムをある月の一日の曜日だけを指定して、プログラムがその月の全ての日のゴミ出しを計算するように改造してください (月が全て 31日間の想定で結構です)。
  3. 先週のゴミ出しのプログラムをユーザが何回も入力できる、しかも止めたいときには止める様に変更してください。
  4. 10~20 かける 10~20 の表を作って下さい。(ヒント: printf%d の代わりに %3d を使うと数字が揃う)
  5. ある入力した数字が素数かどうかを判断するプログラムを作って下さい。さらに、1 から n までを素数かどうかのプログラムに変更してください。
  6. 自分の分野や身の回りの問題で繰り返しと条件文を使った面白いプログラムを作って下さい。

次回のための準備