C言語入門(条件分岐-if文 その1)

C言語

どうもサンチョです!
今回は条件分岐(if文)に触れていきましょう。

前回の練習問題の解答例

前回の練習問題は、キーボードから入力された2つの整数を用いて、
四則演算と剰余算を行うものでした。
※前回の練習問題はこちら⇒C言語入門(キーボードからの入力)の練習問題

解答例は以下のとおりです。

#include<stdio.h>
int main() {
    int x,y;
    printf("x の値:");
    scanf("%d", &x);    // ここはscanf_sでもOK
    printf("y の値:");
    scanf("%d", &y);    // ここはscanf_sでもOK

    printf("%d + %d = %d\n", x, y, x + y);
    printf("%d - %d = %d\n", x, y, x - y);
    printf("%d * %d = %d\n", x, y, x * y);
    printf("%d / %d = %d\n", x, y, x / y);
    printf("%d %% %d = %d\n", x, y, x % y);
}

解答例ではscanfを用いていますがscanf_sでもOKです。
今となってはscanf_sを使った方が良いかもしれないですね。

条件分岐(if文)

これまでに作ってきたプログラムは、どれも上から順番に処理を実行するだけのものでしたが、
より複雑なプログラムを作るためには処理を分岐させなくてはなりません。
今回は、条件に応じて処理を分岐させる方法について学んでいきましょう。

if文とは

例えば、日常生活において「もし天気予報が雨だったら傘を持っていく」というように
あなたも条件に応じてその後の行動を変化させますよね?
それと同じように、条件に応じて処理の流れを分岐させるための構文です。

入力された値が「5」未満か否かで振る舞いが変わるサンプルをご用意したので
まずはコピペして動きを確認してみてください。

#include<stdio.h>
int main() {
    int x;
    printf("数値を入力してください:");
    scanf("%d", &x);
    if (x < 5) {
        printf("入力された値は5未満です。\n");
    }
}

if文の構成要素

if文の構成要素は以下のとおりです。

if( 条件式 ){
    条件が一致した際に実行する処理内容
}

条件式の結果が真であれば、{}内の処理が実行されます。

C言語における真と偽とは

C言語での条件式は次のように判定されます。

  • 結果が0以外であれば真
  • 結果が0であれば偽

次のプログラムを実行するとイメージしやすいと思います。

#include<stdio.h>
int main() {
    if (1) {
        printf("if文内の処理が実行されます。\n");
    }
    if (0) {
        printf("if文内の処理は実行されません。\n");
    }
}

これを応用すると、次のようなやり方で入力された値を判定するプログラムが作れます。

#include<stdio.h>
int main() {
    int x;
    printf("1を入力してください:");
    scanf_s("%d", &x);
    if (x - 1) {
        printf("入力値が1ではありません。\n");
    }
}

出力結果(「1」を入力した場合と「2」を入力した場合)

「1」を入力した場合は何も表示されずに処理が終了しましたが、
「2」を入力した場合はif文の{}内の処理が実行されました。

比較用の演算子

先ほど、入力された値を判定するプログラムを紹介しましたが、
実際は比較用の演算子を用いて判定することがほとんどです。
尚、比較用の演算子はfor文やwhile文でも使用できます。

等価演算子

2つの値が等しいか否かを判定するための演算子です。

記号 真になる条件
== 2つの値が等しい
!= 2つの値が等しくない
使用例は以下のとおりです。
if ( x == 1 ) { printf("xの値は1です。"); }
if ( x != 1 ) { printf("xの値は1ではありません。"); }

※「=」との使い分けに注意!
C言語において「=」は代入を意味します。
以下ようにif文の条件式に「=」を用いると、代入が行われてしまうので注意してください。

int x = 0;
if ( x = 1 ) { printf("xの値は1です。\n"); } // xに1が代入されて条件式の結果が真真になってしまう。
関係演算子

2つの値の大小を比較するための演算子です。

記号 真になる条件
> 左の値が右の値より大きい
>= 左の値が右の値以上(等価も含む)
< 左の値が右の値より小さい
<= 左の値が右の値以下(等価も含む)

文章の説明を読んだだけだと混乱する方が多いので、
使用例からイメージをつかんでいただいた方が良いと思います。

if ( x > y ) {  printf("xの値はyの値より大きいです。\n"); }
if ( x >= y ) { printf("xの値はyの値以上です。\n"); }
if ( x < y ) {  printf("xの値はyの値より小さいです。\n"); }
if ( x <= y ) { printf("xの値はyの値以下です。\n"); }
論理演算子

条件分岐させるとき、複数の条件式を判定したいときがあります。
そんな時に使用するのが論理演算子です。

記号 読み方 真になる条件
&& AND(かつ)演算子 左右の条件が両方とも真
|| OR(または)演算子 左右の条件のいずれかが真
! NOT(否定)演算子 判定結果が偽であるとき真
こちらも使用例からイメージをつかんでください。
if( (x > 0) && (X < 10) ){ printf("xの値は0~10の間です。\n"); }
if( (x > 0) || (X < 10) ){ printf("xの値は0より大きい、または10より小さいです。\n"); }
if( !(x == 0) ){ printf("xの値は0ではありません。\n"); }

※プログラミング初心者が躓きやすいポイント
プログラミングに慣れていないうちは、次のようなプログラムを書いて躓くことが多いです。

if( 0 <= x <= 10 ){ printf("xの値は0~10の間です。\n"); }

xの値が「0以上かつ100以下」を判定したくてこのように書いているのですが、
この書き方だと例えばxに「-1」や「101」を入れても真になってしまいます。
これはプログラミングではOR演算として処理されてしまうためです。
試しにOR演算子を用いた例を実行してみると分かります。

if( (0 <= x) || (x <= 10) ){ printf("xの値は0~10の間です。\n"); }

数学的にはAND演算になる式なので、混乱する初心者さんはとても多いです。
う~ん…これは違うものであると強く認識してもらうしかないかなぁ(^ω^;)

練習問題

【問1】
キーボードから点数を入力し、0~100の間の点数が入力されたときだけ
以下の例のように表示するプログラムを作成してください。

【例】
点数を入力してください:50
入力された点数は50点です。

まとめ

今回は条件分岐(if文)と比較演算子の使い方をご紹介しました。

簡単にまとめると以下のとおりです。
・if文とは条件に応じて処理の内容を分岐させるもの。
・比較演算子を用いて条件式を作成する。
・単純な比較には等価演算子(==、!=)、関係演算子(<、<=、>、>=)を用いる。
・複数の条件式をつなぎ合わせたいときは論理演算子(&&、||、!)を用いる。
・数学的表現( 0 <= x <= 10 など)だと&&ではなく||扱いになる。

とっても長くなってしまいましたが、条件分岐はもうちょっとだけ続きます!
次回は「条件分岐の場合分け(偽だったときにどう処理するか)」をご紹介します。

それでは、今回もお疲れ様でした!

コメント

タイトルとURLをコピーしました