while文


ソースコード

while (継続条件式) {
  文1;
  文2;
  ...
 }


ソースコード

源文件
  1|/* while01.c */
  2|
  3|#include <stdio.h>                                                          
  4|
  5|int main(void)
  6|{
  7|  int i = 10;
  8|
  9|  while (i > 0){
 10|    printf("%2d回目の実行です\n",11-i);
 11|    i--;
 12|  }
 13|  return 0;
 14|}

実行結果

 1回目の実行です
 2回目の実行です
 3回目の実行です
 4回目の実行です
 5回目の実行です
 6回目の実行です
 7回目の実行です
 8回目の実行です
 9回目の実行です
10回目の実行です

while(1)とすると、いつまでたっても継続条件式が真なので無限ループとなります。脱出あ break 文を使います。



次に、テストの平均点を出すプログラムを作ってみましょう。

  1. 合計点を sum とし、最初に sum を0にしておきます。
  2. 最初の生徒の点数をpとすると合計は「sum = sum + p」で求められます。
  3. 次の生徒の点数を p とするとやはり合計は「sum = sum + p」で求められます。

ソースコード

源文件
  1|/* sum01.c */
  2|
  3|#include <stdio.h>
  4|
  5|int main(void)
  6|{
  7|  int sum = 0, p;                                                           
  8|
  9|  while(1){
 10|    printf("点数(999で終了)----");
 11|    scanf("%d", &p);
 12|    if (p == 999){
 13|      break;
 14|    }
 15|    sum = sum + p;
 16|  }
 17|  printf("合計点は%d\n", sum);
 18|  return 0;
 19|}

実行結果

点数(999で終了)----1
点数(999で終了)----3
点数(999で終了)----4
点数(999で終了)----5
点数(999で終了)----7
点数(999で終了)----876453
点数(999で終了)----2354
点数(999で終了)----999
合計点は878827


しかし sum01.c は while 文をわざと無限ループにしており、本来の while 文の使い方ではないですね。では、sum01.c を書き直して while 文の本来の使い方のプログラムにしてみましょう。

ソースコード

源文件
  1|/* ave01.c */                                                               
  2|
  3|#include <stdio.h>
  4|
  5|int main(void)
  6|{
  7|  int sum = 0, p = 0, n = 0;
  8|
  9|  while(p != 999){
 10|    printf("点数(999で終了)----");
 11|    scanf("%d", &p);
 12|    if(p != 999){
 13|      sum = sum + p;
 14|      n ++;
 15|    }
 16|  }
 17|    printf("%d人の合計点数は%d点です\n", n, sum);
 18|    printf("平均点数は%5.1fです\n", (double)sum / n);
 19|
 20|  return 0;
 21|}

実行結果

点数(999で終了)----99
点数(999で終了)----88
点数(999で終了)----77
点数(999で終了)----66
点数(999で終了)----55
点数(999で終了)----44
点数(999で終了)----33
点数(999で終了)----22
点数(999で終了)----11
点数(999で終了)----999
9人の合計点数は495点です
平均点数は 55.0です

p が999でない限り while 文のところでループします

最初に p に何か数値を入れておかないと、継続条件式のところでまずいことが起こります。それで、p は0で初期化しています。

また、p に999が入ったとき、これを点数に合計したり、人数にカウントしてはまずいです。そこで、if 文で p が999以外のとき、合計を計算したり人数をカウントするようにしています。



for 文による無限ループ

ソースコード

源文件
  1|/* for04.c */
  2|
  3|#include <stdio.h>
  4|
  5|int main(void)
  6|{
  7|  int i = 1;
  8|
  9|  for(;;){     /* 全部省略して無限ループ */
 10|    printf("%2d回目\n",i);
 11|
 12|    if(i >= 10){
 13|      break;
 14|    }
 15|      i++;
 16|  }                                                                         
 17|  return 0;
 18|}

実行結果

 1回目
 2回目
 3回目
 4回目
 5回目
 6回目
 7回目
 8回目
 9回目
10回目


13行目を break を抜いたらどうなるかぁ〜〜

Chapter4 @ C言語目録 @ HomeWork List @ 昭亮's Homepage