C プログラミング (C Programming)

[2017/09/27, H.Aman]
[← 演習のページへ戻る]

サンプルプログラム 5 の内容

成績(整数)を読み込み,その評価(秀,優,良,可,不可,評価できない)を出力する.
 1:   #include <stdio.h>
 2:  	
 3:   int main(void){
 4: 	 int x;
 5:
 6:      printf("成績を入力してください: ");
 7:      scanf("%d", &x);
 8:  
 9:      printf("あなたの成績は");
10:      if ( x >= 90 && x <= 100 ){
11:         printf("秀です\n");
12:      }
13:      else if ( x < 90 && x >= 80 ) {
14:         printf("優です\n");
15:      }
16:      else if ( x < 80 && x >= 70 ) {
17:         printf("良です\n");
18:      }
19:      else if ( x < 70 && x >= 60 ) {
20:         printf("可です\n");
21:      }
22:      else if ( x < 60 && x >= 0 ) {
23:         printf("不可です\n");
24:      }
25:      else {
26:         printf("評価できません\n");
27:      }
28:
29:      return 0;
30:   }

13, 16, 19, 22 行目: else if ( ... ) { ...

 9:      printf("あなたの成績は");
10:      if ( x >= 90 && x <= 100 ){
11:         printf("秀です\n");
12:      }
13:      else if ( x < 90 && x >= 80 ) {
14:         printf("優です\n");
15:      }
16:      else if ( x < 80 && x >= 70 ) {
17:         printf("良です\n");
18:      }
19:      else if ( x < 70 && x >= 60 ) {
20:         printf("可です\n");
21:      }
22:      else if ( x < 60 && x >= 0 ) {
23:         printf("不可です\n");
24:      }
25:      else {
26:         printf("評価できません\n");
27:      }

今回の場合は判定すべきパターンが多いのが特徴です.
  x の値     評価  
(1)   90 以上 100 以下     秀  
(2)   80 以上 90 未満     優  
(3)   70 以上 80 未満     良  
(4)   60 以上 70 未満     可  
(5)   0 以上 60 未満     不可  
(6)   上のいずれでもない     評価できない  

基本はサンプルプログラム 3, 4 と同じであり,単純に判定すべきパターンが多いだけではあります. つまり,
  • まずは (1) の秀に該当するかどうかを if 文でチェックし, それ以外の場合は else 部で対応する.
  • else 部では,残った (2)-(6) のうち,(2) の優に該当するかどうかをさらに if 文でチェックする. 該当しない場合はさらなる else 部で対応する.
  • 同様に (3), (4), (5) について if 文を順に else 部の中に組み込んでいく.
素直に上の手順をプログラムにすると,
if ( x >= 90 && x <= 100 ){  ← (1) のための if 
   printf("秀です\n");
}
else{ ← (1) の else 
   if ( x < 90 && x >= 80 ) {  ← (2) のための if 
      printf("優です\n");
   }
   else{  ← (2) の else 
      if ( x < 80 && x >= 70 ) {  ← (3) のための if 
        printf("良です\n");
      }
      else{  ← (3) の else 
         if ( x < 70 && x >= 60 ) { ← (4) のための if 
            printf("可です\n");
         }
         else{ ← (4) の else 
            if ( x < 60 && x >= 0 ) { ← (4) のための if 
               printf("不可です\n");
            }
            else { ← (4) の else 
               printf("評価できません\n");
            } ← (4) の else の終わり
         } ← (4) の else の終わり
      }  ← (3) の else の終わり
   }  ← (2) の else の終わり
} ← (1) の else の終わり
となってしまい, { と } の対応関係が分かり難くなってしまいます.

もちろん,このように書いても正しく動作するのですが,ミスを誘発しそうでお勧めできません.

このサンプルプログラムのように,判定すべき条件が何パターンもある場合は, あえて else の後の { を書かずにelse if というかたちでつなげていく方がプログラムをスッキリ書くことができます.