表紙 <戻 進>

   3つ以上の場合分け   

  1. 第1項:条件が複数の場合の処理
  2. 第2項:見やすい書き方

[1]条件が複数の場合の処理

今までに習ってきた方法では、1択ないしは2択の処理しか出来ませんでした。
しかし、現実には、3択以上の判断を必要とすることがいくらでもあります。

例えば、ある動物園の入場料と年齢の関係が次の通りだったとします。
区分 年齢 入場料
幼児 3歳以下 無料
子供 4〜12歳 250円
大人 13歳以上 400円
年齢を入力すると、必要な入場料を表示するプログラムを考えてみます。
次のプログラムは、if文を使って正直に作成した例です。


#include <stdio.h>

int main(void)
{
	int age;
	printf("年齢:");
	scanf("%d",&age);
	if (age <= 3) printf("幼児:無料\n");
	if (age >= 4 && age <= 12) printf("子供:250円\n");
	if (age >= 13) printf("大人:400円\n");
	return 0;
}
一見するとこのプログラムでも問題がないように見えるのですが、
良く考えてみると、幼児でも子供でもなければ確実に大人だと断言出来ますし、
同様に、幼児でなければ子供か大人のどちらかしかあり得ないにもかかわらず、
わざわざ年齢を確認するのは無駄に思えてきます。

この無駄をなくすには、if〜else文を連続させれば良いのです。
つまり、else文の実行文として、if文を使用することで、
直前に判断した内容を生かすことが出来、無駄がなくなるのです。
この考えかたで修正したプログラムは、次の通りになります。


#include <stdio.h>

int main(void)
{
	int age;
	printf("年齢:");
	scanf("%d",&age);
	if (age <= 3) {
		printf("幼児:無料\n");
	} else {
		if (age <= 12) {
			printf("子供:250円\n");
		} else {
			printf("大人:400円\n");
		}
	}
	return 0;
}
このプログラムのポイントは、else文で実行する文にif文を使っている点です。
まず、始めのif文で、幼児であるのかどうかを判定します。
もし、幼児でなかった場合は、次に子供であるかを判定します。
もし、子供でなかった場合は、確実に大人なので、判断せずに表示します。

目次に戻る


[2]見やすい書き方

i-mobile
前項のプログラムでは、確かに処理上の無駄はなくなったのですが、
プログラム自体はお世辞にも見やすいとは言えませんでした。
しかも、インデントによってどんどん右にずれていくために、
条件が3つよりも多くなるとますます見にくくなることが予想されます。

これを見やすい文にするには、インデントを無視するしか方法はありません。
次のプログラムは、インデントを無視することで見やすくした例です。


#include <stdio.h>

int main(void)
{
	int age;
	printf("年齢:");
	scanf("%d",&age);
	if (age <= 3) {
		printf("幼児:無料\n");
	} else if (age <= 12) {
		printf("子供:250円\n");
	} else {
		printf("大人:400円\n");
	}
	return 0;
}
このプログラムでは、else文のすぐ後ろにif文をつなげています。
その為、この書き方を、俗にelse-if文と呼ぶことがあります。

この書き方の良い所は、条件がいくつ増えても横に長くならないことです。
else文にifを書き足していくことで、下にどんどん伸びていきますが、
横方向には決して伸びないので、比較的見やすいプログラムになります。


これは、インデントを無視すると読みやすくなる特殊な例です。
ほとんどの場合にはインデントを使用した方が読みやすくなります。

目次に戻る



<−前に戻る  先頭に戻る  次へ進む−>