ホーム | ブログ | C++辞典 | サイトマップ | FAQ | 掲示板 | リンク集
メイン・メニュー
プログラミング
その他

if文による場合分け

これまでの解説では、データの出力・入力と、オブジェクトの設定について書いてきました。C++の文は、関数の中では順番に実行されていきますので、決まりきった処理を行うプログラムなら、これまでの解説でほぼ書けるようになったはずです。ところが、プログラムは決まりきった処理だけで済むものではありません。入力されたデータに応じて異なる反応をしなければ、じゃんけんゲームでさえ作ることは難しいでしょう(今回の解説だけでは、まだじゃんけんゲームは作れませんが...)。

というわけで、今回は場合分けについて解説したいと思います。あまり難しい話題を扱っても混乱するだけですので、入力した整数の絶対値を返すようなプログラムを作ってみたいと思います。それでは、早速ソースコードをご覧ください。

#include <iostream>

int main()
{
  int x;
  std::cin >> x;
  if (x < 0)
    x = -x;
  std::cout << x << std::endl;
  return 0;
}

これまでになかった書き方が2行現れていますね。

  if (x < 0)
    x = -x;

のところです。これを if 文といいます。if 文は、if の後の括弧の中に条件を書きます。そして、その条件に合うなら(条件が「真」なら)、その直後の文(「副文」といいます)を実行します。上の場合には、x の値が 0 より小さければ(マイナスなら)、x = -x; を実行するわけです。

次に、x = -x; です。引き算のための - は以前に解説しましたが、ここで出てきている - は、符号を反転させるためのものです。つまり、数学的な意味と同じで、元の x の値がプラスであればマイナスに、マイナスであればプラスにします。直前の if の条件で、x がマイナスであることは調べが付いていますから、この文はマイナスの値を持つ x の絶対値を求めているわけです。確認のために、上のソースコードをコンパイル、実行してみてください。

今度は、入力された値がマイナスだったときだけ、その絶対値を出力するプログラムに変更してみます。これもソースコードから見てください。

#include <iostream>

int main()
{
  int x;
  std::cin >> x;
  if (x < 0)
  {
    x = -x;
    std::cout << x << std::endl;
  }
  return 0;
}

書き方は何通りかあるのですが、解説の都合もあって、ここでは上のようにしました。今回は、if の次の行以降が波括弧 {} でくくられていますね。この波括弧の部分を「複合文」または「ブロック」といいます。「複合文」というように、これも一種の「文」なのですが、終わりにセミコロン ; は付いていません。波括弧でくくっているので、文の最初と最後がはっきりしているので、セミコロンはいらないのです。このように、if 文の「副文」に「複合文」を指定することで、条件に合う場合の処理が少々複雑であっても、簡単に書くことができるのです。

これまでは、「条件に合えば〜」という処理の書き方でしたが、「条件に合えば〜、そうでなければ〜」という書き方をしたいときもあります。そこで、「そうでなければ〜」の書き方をこれから解説します。例として、x がマイナスであれば "x < 0" と出力し、そうでなければ "x = 0 or x > 0" と出力するプログラムを書いてみます。

#include <iostream>

int main()
{
  int x;
  std::cin >> x;
  if (x < 0)
    std::cout << "x < 0" << std::endl;
  else
    std::cout << "x = 0 or x > 0" << std::endl;
  return 0;
}

ご覧のように、「そうでなければ〜」という書き方をするには、else を使います。else にも、やはり「副文」があります。else の「副文」にも、「複合文」を指定することができますので、ちょっと複雑な処理を書くのも簡単です。また、「副文」として if 文を使うこともできます。そうすることで、次のような書き方もできるのです。

#include <iostream>

int main()
{
  int x;
  std::cin >> x;
  if (x < 0)
    std::cout << "x < 0" << std::endl;
  else if (x > 0)
    std::cout << "x > 0" << std::endl;
  else
    std::cout << "x = 0" << std::endl;
  return 0;
}

真ん中の else if のところが、else の副文に if 文を使おうとしているところです。ところで、これまで副文は次の行に書いてきましたが、C++では上のように、改行してもしなくても同じ意味になります。ただし、elseif のように続けて書いてしまうと、何が何かわからなくなってコンパイラが混乱しますので、間に空白(スペース)かタブか改行を入れる必要があるのです。上の書き方は、パッと見は理解しにくいかもしれませんので、次のように考えると分かりやすいと思います。

#include <iostream>

int main()
{
  int x;
  std::cin >> x;
  if (x < 0)
    std::cout << "x < 0" << std::endl;
  else
  {
    if (x > 0)
      std::cout << "x > 0" << std::endl;
    else
      std::cout << "x = 0" << std::endl;
  }
  return 0;
}

これならどうでしょうか?最初の else の副文の中に、if 文が収まっています。後の else は、二番目の if 文に付いているものです。

このように、if 文を使えば、条件に応じてプログラムの流れを変えることができます。次回は、if 文でも使っている条件の書き方について、もう少し詳しく解説します。

プリンタ出力用画面
前のページ
初期化と代入
コンテンツのトップ 次のページ
条件と真理値


 ホーム | プロフィール | メール | ログイン | 管理
Copyright © 2005-2009 by TAKAGI Nobuhisa