C プログラミング (C Programming)

[2017/10/2, H.Aman]
[← 演習のページへ戻る]

サンプルプログラム 1 の内容

一つの整数を読み込み,それが 18 ならば「ぴったりです」と表示する.
それ以外の場合は,18 よりも小さいか大きいかを表示したうえで, 入力のやり直しを求める.
 1:   #include <stdio.h>
 2:  	
 3:   int main(void){
 4: 	 int x;
 5:
 6:      do {
 7:         printf("整数を一つ入力してください:");
 8:         scanf("%d", &x);
 9:         if ( x < 18 ){
10:            printf("小さいです\n");
11:         }
12:         else if ( x > 18 ){
13:            printf("大きいです\n");
14:         }
15:         else{
16:            printf("ぴったりです\n");
17:         }
18:      } while( x != 18 );
19:
20:      return 0;
21:   }

6-18 行目:do{ ... } while ( x != 18 );

 5:
 6:      do {
 7:         printf("整数を一つ入力してください:");
 8:         scanf("%d", &x);
 9:         if ( x < 18 ){
10:            printf("小さいです\n");
11:         }
12:         else if ( x > 18 ){
13:            printf("大きいです\n");
14:         }
15:         else{
16:            printf("ぴったりです\n");
17:         }
18:      } while( x != 18 );
19:

このサンプルプログラムでは,読み込んだ整数 x が 18 でない場合, 同じ処理,つまり,再び整数を読み込んでその値に応じた出力を行うという処理を繰り返すことになります.

この繰り返すというところがポイントです.
前回学んだ if 文でも x が 18 かどうかの判定はできますが,それでは 1 回きりになってしまいます.

C 言語では, ある内容をまずは 1 回実行してみて, ある条件が成立している間は,それを繰り返す という場合には do - while 文 というものを使います.

do - while 文は次のかたちで書きます:
   do{

	条件成立している限り繰り返し実行したい内容   

   } while ( 条件 );

上のサンプルプログラムでは
  • 条件」が x != 18
となっていますので,x が 18 でないならば条件成立と見なされます.
つまり,x が 18 でなければ, do{ の後から } while の前まで何度でも繰り返します

逆に,条件が不成立となれば(x が 18 と等しいならば),この繰り返しは終了です.

7-17 行目:do{ ... } while で繰り返す内容

 5:
 6:      do {
 7:         printf("整数を一つ入力してください:");
 8:         scanf("%d", &x);
 9:         if ( x < 18 ){
10:            printf("小さいです\n");
11:         }
12:         else if ( x > 18 ){
13:            printf("大きいです\n");
14:         }
15:         else{
16:            printf("ぴったりです\n");
17:         }
18:      } while( x != 18 );
19:

内容自体は前回の復習レベルなので,あえて説明するまでもないとは思いますが,
  • 7, 8 行目:メッセージを表示して,整数 x を読み込む.
  • 9-11 行目:x が 18 より小さい場合の処理
  • 12-14 行目:x が 18 より大きい場合の処理
  • 15-17 行目:x < 18 でも x > 18 でもない場合なので,x が 18 に等しい場合の処理
となっています.

ここで大切なのは,上の一連の処理が繰り返しの対象になっているということです:
  • まずは,7-17 行目の内容が 1 回実行されます.
  • そして,18 行目で x != 18 であるかどうか確認されます.
  • もしも x != 18 ならば(条件が成立しているならば),
    それで終わりにならず, 再び 7 行目に移動して実行が行われます.
(例)15, 30, 25, 18 という順に入力した場合
  1. まず 7 行目に従って「整数を一つ入力してください:」と表示される.
  2. ユーザが 15 を入力する(8 行目により x = 15 となる).
  3. x < 18 であるため,「小さいです」と表示される.(9-10行目)
  4. x != 18 であるため,7 行目に戻る.

  5. 再び 7 行目で「整数を一つ入力してください:」と表示される.
  6. ユーザが 30 を入力する(x = 30 となる).
  7. x > 18 であるため,「大きいです」と表示される.(12-13行目)
  8. x != 18 であるため,7 行目に戻る.

  9. 再び 7 行目で「整数を一つ入力してください:」と表示される.
  10. ユーザが 25 を入力する(x = 25 となる).
  11. x > 18 であるため,「大きいです」と表示される.(12-13行目)
  12. x != 18 であるため,7 行目に戻る.

  13. 再び 7 行目で「整数を一つ入力してください:」と表示される.
  14. ユーザが 18 を入力する(x = 18 となる).
  15. x < 18 でも x > 18 でもないため,「ぴったりです」と表示される.
  16. x != 18 ではないため,繰り返しが終わる.