3.8 while による繰り返しと if 文による分岐 (場合わけ)

ある条件が満たされている間、文を繰り返し実行するために、while がある。
   while (条件式)
     文;

条件式を作るためには、例えば以下のような比較演算子が使える。

== (等しい)      != (等しくない)
< (小さい)   <= (以下≦)
> (大きい)   >= (以上≧)

条件式が成り立っているかどうかで、次に何を実行するか、場合わけをする ために、if という命令がある。

(1)
    if (条件式) 文;
(2)
   if (条件式)
     文1;
   else
     文2;

prog08a.c

/*
 * prog08a.c --- 実係数2次方程式を解く
 */

#include <stdio.h>
#include <math.h>

int main(void)
{
  double a, b, c, D, sqrtD, re, im, x1, x2;
  printf("2次方程式 a x^2+b x+c=0 を解く。\n");
  printf("a, b, c: ");
  scanf("%lf%lf%lf", &a, &b, &c);
  D = b * b - 4 * a * c;
  if (D > 0) {
    sqrtD = sqrt(D);
    x1 = (- b + sqrtD) / (2 * a);
    x2 = (- b - sqrtD) / (2 * a);
    printf("相異なる2つの実数解: %20.15g, %20.15g\n", x1, x2);
  }
  else if (D == 0.0) {
    printf("ただ一つの実数解(重根): %20.15g\n", - b / (2 * a));
  }
  else {
    re = - b / (2 * a);
    im = sqrt(- D) / (2 * a);
    printf("相異なる2つの虚数解: %20.15g±%20.15g i\n", re, im);
  }
  return 0;
}

prog08.c

/* prog08.c --- while による繰り返しと if 文による分岐 (場合わけ) */

/*
 * 与えられた自然数が偶数ならば 2 で割り、そうでなければ 3 倍して 1 を
 * 加えるという操作を繰り返すと、最後には必ず 1 になる、らしい
 * (簡単そうだが証明されていない)。
 * このことを実験するプログラム。
 */

#include <stdio.h>

int main(void)
{
  int n;

  printf(" 自然数を入力してください: ");
  scanf("%d", &n);

  while (n != 1) {
    printf("%d\n", n);
    if (n % 2 == 0)
      n = n / 2;
    else
      n = 3 * n + 1;
  }
  printf("%d\n", n);
  return 0;
}



桂田 祐史