3 if〜else if〜else

「もし○○ならば $ \circledast\circledast$する.さもなければ,もし□□ならば $ \boxtimes\boxtimes$する.さもなければ,もし $ \bigtriangleup\bigtriangleup$ならば $ \bigtriangledown\bigtriangledown$する.さもなければ, $ \circledcirc\circledcirc$ する.」というよう構文を書きたい場合がある.条件に合致しなければ,次々と条件を変 化させる.このような構文には,if〜else if〜else文を使う.

3.1 プログラム例

リスト2に,if〜else if〜elseを使った例を示す. 動作は説明しなくても分かるだろう.温度を入力すると,それに従い「極寒です」,「寒い です」,「快適です」,「暑いです」,「猛暑です」と表示する.これは,先ほどの switch文では不可能である.なぜならば,温度の変数tempは倍精度実数で,か つ値の範囲により動作内容が異なるからである.
   1 #include <stdio.h>
   2 
   3 int main(void)
   4 {
   5   double temp;
   6 
   7   printf("今の気温は?\t");
   8   scanf("%lf",&temp);
   9 
  10   if(temp<-30){
  11     printf("極寒です\n");
  12   }else if(-30 <= temp && temp < 10){
  13     printf("寒いです\n");
  14   }else if(10 <= temp && temp < 25){
  15     printf("快適です\n");
  16   }else if(25 <= temp && temp < 35){
  17     printf("暑いです\n");
  18   }else{
  19     printf("猛暑です\n");
  20   }
  21     
  22   return 0;
  23 }

3.2 文の書き方

ifelse ifelseを使った多分岐の書式は,次のとおりである.最初に マッチしたブロックのみ実行される.
書式
	if(制御式1){
	   文1;
	   文2;
	}else if(制御式2){
	   文3;
	   文4;
	}else if(制御式3){
	   文5;
	   文6;
	}else{
	   文7;
	   文8;
	}
これは,「制御式1が正しい(真)ならば,文1と文2を実行する.さもなければ,制御式2が 正しいならば,文3と文4を実行する.さもなければ,制御式3が正しいならば,文5と文6 を実行する.さもなければ,文7と文8を実行する.」となる.

この構文のフローチャートを,図2に示す.このフローチャートを見てわか るように,最初に真となった制御式に続くブロック内が実行されのみである.それ以降, 真になっても,そのブロックは実行されない.どの制御式も真にならない場合,最後の elseのブロックが実行される.即ち,実行されるブロックは1個のみである. else ifの段数をいくらでも増やせることは,言うまでもない.

また,elseが無い構文も許される.この場合,真となる制御式がない場合,どの ブロックも実行されず,この構文から抜ける.

図 2: if〜else if〜elseを使った多分岐
\includegraphics[keepaspectratio, scale=1.0]{figure/if_3.eps}



ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成18年7月19日


no counter