記事には広告を含む場合があります。

C言語入門講座

【C言語】if・else文で複数条件分岐する方法と条件式の書き方

2022年5月14日

おゆ

組み込み系プログラマとして5年働いていた元エンジニアです。得意言語はC言語とC++。本サイトでは学生および新人組み込み系プログラマに向けてプログラミング知識をわかりやすく解説しています。

if・else分を使うと複数の条件によって処理を分岐できます。

記事の内容

  • if・else文を用いた複数条件の分岐
  • 処理が1つの時の省略した書き方
  • 入れ子(ネスト)構造
  • 条件式の書き方と演算子(等号・比較・AND・OR・否定)
  • 条件式の真偽値とは何か

if・else文を用いた複数条件の分岐

条件分岐とは条件によって処理を分けることです。

例:

#include <stdio.h>
void main()
{
    int a=1;
    if(a==0) //aが0かチェック、偽なので次のelse ifに飛ぶ
    {
        printf("a is 0\n"); //実行されない
    }
    else if(a>0) //aが0より大きいかチェック、真なので{ }内の処理を実行
    {
        printf("a is plus\n"); //画面に文字を表示してif・else文から抜ける
    }
    else //無視される
    {
        printf("a is minus\n"); //無視される
    }
    printf("end\n"); 
}

実行結果

a is plus
end

真とは条件に合うという意味で、偽とは条件に合わないという意味です。

例では変数aの値が0、正の数、負の数それぞれの場合で処理を分けています。

if・else文では( )内に書かれた条件が真か偽かチェックし、偽であれば直後の{ }内の処理は飛ばして次のelse ifまたはelse文を見に行きます真であれば直後の{ }内の処理を実行し、残りのif・else文は無視されます。

if・elseの使い方

if (条件式1)
{
    処理(条件式1が真ならば実行)
}
else if(条件式2)
{
    処理(条件式2が真ならば実行)
}
else
{
    処理(条件式1も2も偽のときに実行)
}

else ifを増やすことで条件式はいくつでも増やせます。else if文とelse文は無しでif文だけでもOKです。

if・else文で処理が1つの時の省略した書き方

条件式が真だった場合に実行する処理が1つなら省略して書けます。例えば上の例文は以下のように書き直せます。

例:

#include <stdio.h>
void main()
{
    int a=1;
    if(a==0) printf("a is 0\n");
    else if(a>0) printf("a is plus\n");
    else printf("a is minus\n");
    printf("end\n"); 
}

実行結果

a is plus
end

条件式の後にスペースで区切り、真の場合に実行される処理を1つだけ書きます。2つ以上の処理を1行に書くことはできません。

if・else文の入れ子(ネスト)構造

入れ子(ネスト)構造とはif・else文の中にさらにif・else文を書くことです。

例:

#include <stdio.h>
void main()
{
    int a=1, b=0;
    if(a==0)
    {
        printf("a is 0\n");
    }
    else
    {
        if(b==0)
        {
            printf("b is 0\n");
        }
        else
        {
            printf("a*b = %d\n",a*b);
        }
    }
}

実行結果

b is 0

入れ子構造は複数の変数を元に条件を分けたいときに使えます。

ただし何重にも入れ子にすると見づらいコードになってしまいます。見やすくするにはコーディングを工夫して3重くらいでやめておくのがいいかと思います。

条件式の書き方と演算子(等号・比較・AND・OR・否定)

条件式とはif・else文の( )内に書く式です。条件式で主に使う演算子と使用例はこちらです。

演算子 使用例 意味
== a==0 aが0に等しいと真
!= a!=0 aが0でないと真
< a<0 aが0より小さいと真
<= a<=0 aが0以下だと真
> a>0 aが0より大きいと真
>= a>=0 aが0以上だと真
&& a==0 && b==0 a=0かつb=0ならば真
|| a==0 || b==0 a=0またはb=0ならば真
! !(a==0) aが0に等しくなければ真

等しい場合の条件式はa==0のようにイコールを二重に書きます。しかし間違えてa=0のように書いてもエラーが出ない上にaに0が代入されてしまうので注意です。(よくあるミス)

複数の条件式を使う場合は( )でくくることで優先的に条件判定できます。

例:

#include <stdio.h>
void main()
{
    int a=1, b=-1, c=1;
    if(a==0 && b>0 || c>0) //真
    {
        printf("if1\n");
    }
    if(a==0 && (b>0 || c>0)) //偽
    {
        printf("if2\n");
    }
}

実行結果

if1

2つあるif文の条件式は「b>0 || c>0」を( )でくくるか否か以外は同じです。しかし実行結果にはif1のみ表示されます。

1つ目のif文の条件式ではまず「a==0 && b>0」が判定されます。bは負の数なのでこれは偽ですが、条件式は「|| c>0」と続いています。「c>0」は真なのでOR判定の結果は真です。

2つ目のif文の条件式ではまず( )でくくってある「b>0 || c>0」が判定されます。これは真ですが、まだ「a==0 &&」が残っています。「a==0」は偽なのでAND判定の結果は偽です。

このように( )でくくった条件式は優先的に判定されます。

条件式には算術演算子も使えます。例:if(a+b>0 && a-b<0)

条件式の真偽値とは何か

真・偽って具体的に何?プログラム内でどうやって処理されているのかイメージがわかない。

このような疑問を持った方もいらっしゃるかもしれません。実は真偽はプログラム内で以下のように定義されています。

真:0以外
偽:0

例:

#include <stdio.h>
void main()
{
    int a=0;
    if(0) printf("0\n");    //0なので偽
    if(1) printf("1\n");    //0以外なので真
    if(-1) printf("-1\n"); //0以外なので真
    printf("a==0 is %d\n",a==0);
    printf("a!=0 is %d\n",a!=0);
}

実行結果

1
-1
a==0 is 1
a!=0 is 0

if文の条件式に直接0を入れると処理は実行されませんが、0以外を入れると実行されます。

普段条件式に入れている「a==0」「a!=0」をprintfで出力してみるとそれぞれ1、0と出力されました。実は条件式も結果によって1(真)か0(偽)に分けられています。

まとめ

if・else文を使えば条件に合わせた複雑な処理が可能です。上の例では初期化した変数値をそのまま使って分岐していますが、キーボードから入力した値によって処理を変えたい場合などにはif・else文がより活躍します。使いこなせばプログラムの幅が格段に広がります。

ブログランキング参加中。クリックしてもらえると励みになります。

ブログランキング・にほんブログ村へ

-C言語入門講座