【C言語】複雑な条件分岐について解説!(if文,else文,else if文, ネスト,switch文)

はじめに

今回は、if文を用いた少し複雑な処理について解説します。

先の2投稿では初歩的なif文の使い方、比較演算子などについて解説しておりますので、併せてご確認ください。

if文

少しおさらいですが、条件分岐のif文は次のような書式となっています。

if(条件式){
   処理
}

かっこ内の条件式が成り立つ時、{}内の処理が実行されます。

前回の解説では一行で書いていましたが、内部処理が複数行に及ぶ場合はこのように書きます。

if〜else文

if文は「ある条件が成り立つ」時に実行する処理を記述する構文ですが、成り立たない場合の処理も記述したい場合はif~else文を使用することで、対処できます。

if~else文の書式は以下のようになります。

if(条件式){
   処理1
}else{
   処理2
}

この場合、処理1はif文の条件式が成立するときに実行され、そうでない時、処理2が実行されます。

if〜else文を用いた例文

以下の例文を見てみましょう。

#include <stdio.h>

int main(){
     int a;
     printf("数値を入力:");
     //キーボードから整数を入力
     scanf("%d",&a);
     //入力された値が、正の数かどうか調べる
     if(a>0){
          printf("aは正の数です。¥n");//a>0の時の処理
     }else{
          printf("aは正の数ではありません。¥n");//a<=0の時の処理
     }
     return 0;
}

int型変数aにキーボードから値を入力し、それが正の数かそれ以外かを識別するコードです。

正の数を入力した時それ以外を代入した時の結果はそれぞれ以下のようになります。

数値を入力:1 //正の数を入力した場合
aは正の数です。  
数値を入力:0 //それ以外の数を入力した場合
aは正の数ではありません。

else if文

ifとelseを用いると、ある条件が成り立つ場合と成り立たない場合の2通りの処理を書き分けることができました。しかし、3つ以上の条件からなる場合も当然存在します。そういう時にはelse ifを使います。

else if文の書式は以下のようになります。

if(条件式1){
   処理1
}else if(条件式2){
   処理2
}else{
   処理3
}
  • 条件1が成立する時、処理1が実行される
  • 条件2が成立する時、処理2が実行される
  • いずれの条件も満たさないとき、処理3が実行される

ちなみに、else if文はifの後にいくらでも追加することが出来ます。つまり、いくつでも条件を追加可能です。

else if文を用いた例文

else if文を用いた複雑な条件分岐のコードを書いてみましょう。以下のコードは、入力された数値が1か2かそれ以外かを判断し、値に応じた結果を出力するコードです。

指示に従わない人は裏切り者認定されます。

#include <stdio.h>

int main(){
     int a;
     printf("1または2を入力してください: ");
     //キーボード入力
     scanf("%d",&a);
     //変数aの値の確認
     if(a == 1 ){
          printf("1を入力しました。¥n");
     }else if(a == 2){
          printf("2を入力しました。¥n");
     }else{
          printf("1,2以外の数値を入力しましたね!この裏切り者!¥n");
     }
     return 0;
}

実行結果は以下になります。

1または2を入力してください: 1
1を入力しました。
1または2を入力してください: 2
2を入力しました。
1または2を入力してください: 810
1,2以外の数値を入力しましたね!この裏切り者!

きちんと分岐処理がうまくいっていますね!

if文のネスト

ネストとは入れ子構造のことで、繰り返し処理などでしばしばみられる書式です。

「処理の中に処理が含まれてるのがネスト」と覚えましょう。

if(条件式1){
    if(条件式2){
        処理
    }
}

条件式1が成り立っているとき、条件式2が成り立てば処理が実行されます。

仮に条件式1が成り立っていても、条件式2が成り立っていなければ処理が実行されません。また、条件式1が成り立たなければ中のif文も実行されません。

ちなみに3重以上にネストすることも可能です。ただネストしすぎるとプログラムが複雑になり、わかりにくくなるので気をつけましょう。

Switch文

最後に、条件分岐はswitch文でも書くことが出来ます。書式は以下。

switch(値){
case 値1:
    処理1
    break;
case 値2:
    処理2
    break;
    ・・・
default:
    処理N
    break;
}

条件は ” case 値: ” のように書きます。最後の ” default: ”という条件は、caseで出てきたいずれの条件にも当てはまらない場合の条件です。

case、defaultの後に出てくる break は処理の終了を意味し、switch文から抜け出します。

つまり()内の値が、値1なら処理1が実行され、値2なら処理2が実行され、いずれのcaseにも該当しなければ、処理Nが実行され処理が終了します。

switch文を用いた例文

switch文を用いた例文も見てみましょう。

入力された値が1,2,3ならそれぞれの英単語が、それ以外の場合はGLAYの誘惑の2番のサビが流れるように書きました。

適当でええんです。細かいコトは。

#include <stdio.h>

int main(){
   int a;
   printf("任意の整数を入力してください : ");
   //キーボード入力
   scanf("%d",&a);
   //分岐処理
   switch (a){
   case 1:
        printf("one¥n");
        break;
   case 2:
        printf("two¥n");
        break;
   case 3:
        printf("three¥n");
        break;
   default:
        printf("ZEROを手にしたお前は強く because I Love You ¥n");
        break;
   }
   return 0;
}

それぞれの出力結果は以下。

任意の整数を入力してください : 1
one
任意の整数を入力してください : 2
two
任意の整数を入力してください : 3
three
任意の整数を入力してください : 114514
ZEROを手にしたお前は強く because I Love You 

GLAYは最高ですね。先年度末の紅白歌合戦も大変格好良かったです。

C言語における条件分岐の解説は以上になります。

最後に

本日は、C言語における条件分岐の解説を行いました。

不明点などございましたら、問い合わせフォームからお願いいたします!

最後までご覧いただき、ありがとうございました!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA