if else if else ・・・・if else 文

次の例で説明します。
長さがmm(ミリ)を入力して、10mm以上なら cmの単位で表示し、1000mm以上なら mの単位で表示し、 1000000mm以上ならKmの単位で表示させる次の実行例のようなプログラムです。

ミリメートル>9
9.000000 mm
終了                
ミリメートル>999
99.900000 cm
終了                
ミリメートル>1000
1.000000 m
終了                
ミリメートル>1000000
1.000000 km
終了                  

この場合の流れ図は、次のように書きます。
このプログラムは、次のように作れました。

#include <stdio.h>
main()
{
	double mm;	/* ミリメートル記憶 */
	printf("ミリメートル>");
	scanf("%lf" , & mm );

	if(mm < 10){
		printf("%f mm\n", mm);
	} else {
		if(mm < 1000){
			printf("%f cm\n", mm / 10);
		} else {
			if(mm < 1000000){
				printf("%f m\n", mm / 1000);
			} else {
				printf("%f km\n", mm / 1000000);
			}
		}
	}
	printf("終了\n");
}

これは、正しい書き方の一つです。しかし、この書き方をすると、どんどん右へのインデントが大きくなり、 読み難くなります。このような場合は、{ }を無しにして、インデントを付けないで、 次のように書きます。その方が読みやすいプログラムになります。

#include <stdio.h>
main()
{
	double mm;	/* ミリメートル記憶 */
	printf("ミリメートル>");
	scanf("%lf" , & mm );

	if(mm < 10){
		printf("%f mm\n", mm);

	} else if(mm < 1000){
		printf("%f cm\n", mm / 10);

	} else if(mm < 1000000){
		printf("%f m\n", mm / 1000);

	} else {
		printf("%f km\n", mm / 1000000);

	}
	printf("終了");
}

このような書き方は、前述で示した流れ図を、下のようにも書けるということと、似ています。

前述のプログラムも、そうですが、比較する順番を 書き間違えると、全く違う結果になってしまいます。
つまり、比較する順番が重要なわけです。