CodeZine(コードジン)

特集ページ一覧

条件分岐

制御文その1

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/10/07 11:00

 今回と次回で制御文を学びます。制御文は、さまざまな条件でプログラムの流れを制御する交通整理の役割をする命令です。本稿では条件分岐と繰り返しの2種類のルールを学びます。まずは条件分岐からいきましょう。

目次

条件分岐

 分岐は、条件によって処理の流れを振り分ける命令です。C言語では以下のように書きます。

if ( 条件文 ){
   実行文;
}

 英単語どおり、「もし(if)、条件文が成立したら、実行文を実行する」という動作をします。条件文は、本連載の記事「シフト演算」に登場した「比較演算子」を使って記述します。もういちど記載しますので思い出してください。

比較演算子
<、<= 大小比較
== 等しいかどうか
!= 等しくないかどうか
比較演算子の例
x < y xがyよりも小さい(yがxより大きい)とき、この条件が成立します。
x <= y xがyよりも小さい(yがxより大きい)か、等しいとき、この条件が成立します。
x == y xとyが等しいとき、この条件が成立します。
x != y xとyが等しくないとき、この条件が成立します。

もし~

 たとえば、「もし、ある変数Varが10より小さかったら、変数Varに1を加える」という場合は以下のように書きます。

if ( Var < 10 ) {
  Var = Var + 1;
}

 この場合、Var < 10が条件文で、Var = Var + 1;が実行文です。

 では今度は、上記に加えて「Varが10以上だったら、Varを0にする」という処理をさせたいときはどうすればよいでしょうか。以下のように書きます。

if ( Var < 10 ) {
  Var = Var + 1;
}
if ( 10 <= Var ) {
  Var =  0;
}

さもなければ

 実はif文には、elseという便利な命令があります。elseは英語で「さもなければ」という意味です。elseは以下のように使います。

if ( 条件文 ){
  実行文1;
}
else{
  実行文2;
}

 「もし(if)、条件文1が成立したら、実行文1を実行し、さもなければ(else)、条件文2を実行する」と、動作します。elseを使って前記の2つのif文を書き直すと、以下のようになります。

if ( Var < 10 ) {
  Var = Var + 1;
}
else {
  Var =  0;
}

 if文を2つ連ねて書くよりもすっきりしてわかりやすいですね。

さもなく、もし

 if文は、さらに凝った書き方もできるようになっています。たとえば、

  • もしVarが10より小さかったらVarに1を加える
  • さもなく、もしVarが20よりも小さかったらVarに2を加える
  • さもなければ、Varを0にする

 という処理をさせたい場合を考えます。真ん中の、「さもなく、もし」が新しい表現ですね。これはこのままC言語の命令に置き換えればelse ifです。はい、そのとおり書けばOKです。

if ( Var < 10 ) {
  Var = Var + 1;
}
else if ( Var < 20 ){    ← Varが10以上で20未満のときこの条件が成立します
  Var = Var + 2;
}
else {
  Var =  0;
}
プチ解説

 if文では、実行文を中カッコ{}で囲むことに注意してください。文法上は、実行文が1行だけなら{}は不要です。たとえば上記例では、以下のように書いても正しく動作します。

if ( Var < 10 ) 
  Var = Var + 1;
else if ( Var < 20 )
  Var = Var + 2;
else 
  Var =  0;

 しかし、後から実行文を追加したいときには、どうしたらよいでしょうか。ここでは「最後のelseのとき(Varが20以上の場合)、別の変数Tempを1にしたい」を、以下のように追加したとしましょう。

if ( Var < 10 ) 
  Var = Var + 1;
else if ( Var < 20 )
  Var = Var + 2;
else 
  Var =  0;
  Temp = 1;

 試してみるとわかりますが、これは文法上正しいのでビルドでエラーになりません。しかし、elseにおける実行文は1行だけなので、Temp=1;は、if文とは関係ない実行文として解釈されてしまいます。

 つまり、条件に関係なく、Temp=1;が実行されるわけです。ビルドでエラーが出ないので、つい見落としがちなミスです。こういうことを防ぐためにも、実行文が1行だけのときも必ず中カッコ{}をつけるクセをつけておくほうがよいです。

 中カッコの付け方は

if ( 条件 ){
  実行文;
}

 または

if ( 条件 )
{
  実行文;
}

 の2つの流儀が多数派です。どちらでもOKですが、プログラムの中ではどちらかに統一しておくのがプログラムを見やすくするコツです。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • 舘 伸幸(タチ ノブユキ)

    NECマイクロシステム株式会社 勤務 NPO法人SESSAME 所属 開発ツールのソフトウェア開発を経て組込みソフトウェア開発に従事。プライベートにも半田ごては手放さない。 2006年からSESSAME に参加。若い世代に物を作る楽しさを伝えていきたい。

バックナンバー

連載:たった5つのルールではじめるC言語開発

もっと読む

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5