4.1 if else 文

処理の流れを2つの方向に分岐します.条件を評価し,その結果によって,二者択一の選択をする場合に用います.if else 文の書き方とフローチャートを図4.1に示します.
図4.1 if else 文
if 文では,まず括弧内の式が計算されます.それが真(式が0でない)であれば文 1 が実行されます.それが偽(式が0)であればelse 以下の文 2 が実行されます.式が偽の場合に実行させる文がないときは,else以下を省略できます.
いくつかの例とそのフローチャートを見てみよう.
例4.1
a がプラスか 0 の場合 x = a + b; が実行され,a がマイナスの場合 x = a - b; が実行されます.
a >= 0 は,演算子の関係演算子をもう一度見てください.
例4.2
else がない場合です.このように,式が偽の場合に実行させる文がないときは,else以下を省略できます.
例4.3
複数の文を実行させる場合,{ } で囲み複文にします.
このようにカッコ { および } は宣言や文をまとめて複文,すなわちブロックにし,それを文法的に単一の文と同等に扱うときに使われます.
例4.4
if 文の中に if 文が使えます.else は一番近い if ( a == b ) に対応します.if ( x == y ) に対応する else はありません.もちろん,else 文の中にも if 文が使えます.
例4.5
ブロックにより,ここでの else は if ( x == y ) に対応しています.if ( a == b ) に対応する else はありません.
if 文における条件式の計算は,論理演算子などを用いて
if ( 1.0 > t && t > 0.0 )
t が 0 < t < 1 の条件を満たすかどうか.
のように使われます.
【注意】
次のような例を考えてみます.
if ( ((x = a + b) > 0) && ((y = c + d) > 0) ) {


z = x + y;
この if 文では x = a + b が計算され,その結果が 0 と比較されます.もしこの条件が不成立なら,if 文としては条件不成立が明らかなので,2つめの (y = c + d) > 0 は評価されません.すなわち y の値は変わりません.

4.2 switch 文

if 文は条件式の真偽により2方向への分岐でしたが,複数の判定結果があり,多方向へ分岐する場合は,switch 文を使うと便利です.switch 文の書式とフローチャートを図4.2 に示します.
図4.2 switch 文
switch 文は,カッコ ( ) 内の式の値が,case の後の定数式の値と一致した文に制御を移します.例えば式が定数式2 と一致した場合には文2,文3,...,文n,文n+1 が実行されます.
default は,他の case のどれもが満足されなかったときに実行されます.
条件に一致した case だけを実行したい場合(例えば式が定数式2 と一致した場合文2 のみを実行させたい場合),break 文を使うことによって実現できます.break文はswitch文の実行を中断し,強制的に終了させることができます.break 文を用いた例を以下に示します.
例4.1

aに1が入力されたときは 

aは1です.

aに2が入力されたときは

aは2です.

aに1, 2以外が入力されたときは

aは1でも2でもありません.

と出力します.

では,以下の例ではどうなるでしょう?考えてみてください.
例4.2

練習問題4.1

3つの整数を入力し,最も大きい整数を表示するプログラムを作成せよ.

練習問題4.2

3択または4択のクイズを3題出題しユーザの解答に対して、正解、不正解の応答をし、最後に正解数および不正解数を表示するプログラムを作成せよ。
クイズの内容はどのような内容でもよい。ユーザの解答は選択した番号の数値を入力するものとする。

出力例