MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
しんで覚えるC言語
しんで覚えるC言語

比較を行う文

条件判断
今まで作ってきたプログラムは、すべて一方通行のプログラムでした。
つまり、始めから終わりまで、書かれている順番通りに文を実行し、
文がなくなれば終わりになると言う、もっとも単純な仕組みでした。

本当に単純なプログラムであればこれでも何とかなるのですが、
少しでも複雑な処理をさせようとすると、すぐに行き詰まります。

この問題を解決するには、条件によって、処理の内容を変えるようにします。

ランチの判断
お金に余裕がある ならば 焼肉定食
お金に余裕がない ならば 素うどん

のような、条件による判断が必要になってきます。

コンピュータの世界では、条件と言えば、数値の値に他ありません。
さらに具体的に言えば、2つの数値の比較こそが条件となりえます。
条件判断をする文
C言語には、条件による判断を行う文として、if(イフ)文が用意されています。
if文は、2つの数値の値を比較して、その結果を元に処理分けを行います。
if文の使い方は、次の通りになります。

if文の使い方
if (条件式) 文 ;

if文による数値の比較は、非常に明快で単純です。
すなわち、指定された数値が、0 であるかそうでないかを判定するだけです。
C言語では、条件による判定を行う場合、0を偽の値、0以外を真の値、と呼んでいます。

キーワード
【真の値】

条件判断の呼び方で、0以外の数値(負の数ですら)を意味する。
true と表記することもある。



キーワード
【偽の値】

条件判断の呼び方で、0を意味する。
false と表記することもある。


if文では、指定された数値が真である(数値が0以外の)場合だけ横の文を実行します。
そうでない場合は、文は飛ばされて、if文の後の文を実行します。
次のプログラムは、数値が真(数値が0以外の)の時だけ、数値を表示します。

ソースコード
#include <stdio.h>

int main(void)
{
    int suuti = 10;
    if (suuti)
        printf("%d\n", suuti);
    return 0;
}

このプログラムの実行結果は、次の通りになります。

実行結果
10

このプログラムでは、int suuti=10; としていますが、
これは、宣言と同時に代入を行う場合の書き方です。
この書き方は、変数の値を最初に決められるため、初期化と呼ぶことがあります。

キーワード
【初期化】

変数の宣言と同時に数値を代入すること。


このプログラムでは、suuti の値を 0 にすると何も表示されませんが、
それ以外の値にした時は、その値が表示されます。
比較のための演算子
前節を読んだだけでは、if文はかなり使い道のない文に見えるかもしれません。
なにしろ、0 かそうでないかの判定しか出来ないのですから。

しかし、普通の計算とif文を組み合わせれば、もっと高度な比較が可能です。
たとえば、値が同じ数同士を減算すると、答えは当然 0 になります。
この性質を利用すれば、引き算によって、値の判定が可能になります。
次のプログラムは、その性質を利用し、入力された数が 10 であるかを判定します。

ソースコード
#include <stdio.h>

int main(void)
{
    int suuti;
    scanf("%d", &suuti);
    if (suuti - 10)
        printf("入力値は 10 ではありません。\n");
    return 0;
}

このプログラムを実行させて 10 を入力した場合の結果は、次の通りになります。

実行結果
10 入力したデータ

このプログラムを実行させて 10 以外を入力した場合の結果は、次の通りになります。

実行結果
135 入力したデータ
入力値は 10 ではありません。

この方法をさらに複雑に応用すれば、非常に高度な比較も可能になります。

しかし、変数の値が 10 かどうかを調べるのに、減算しなければならないと言うのは面倒です。

そこで、C言語には、比較専用の演算子が用意されています。
2つの数値が等しいかどうかを調べる場合には、==演算子を使用します。
この演算子は、2つの値が等しい時には結果が真になるという計算を行います。

=と==
プロでも = と == をうっかり間違えてしまうことが良くあります。
= は 左の変数への代入、== は右と左の数値が等しいかの比較です。
思うように動かない時には、まずはここを疑ってみてください。

次のプログラムは、==演算子で入力された値が 10 かどうかを調べる例です。

ソースコード
#include <stdio.h>

int main(void)
{
    int suuti;
    scanf("%d", &suuti);
    if (suuti == 10)
        printf("入力値は 10 です。\n");
    return 0;
}

このプログラムを実行させて 10 を入力した場合の結果は、次の通りになります。

実行結果
10 入力したデータ
入力値は 10 です。

このプログラムを実行させて10以外を入力した場合の結果は、次の通りになります。

実行結果
135 入力したデータ

先ほどと表示・非表示の対応が反対ですが、ちゃんと判定が行われています。


本サイトについて

苦しんで覚えるC言語(苦C)は
C言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。

第0部:プログラム概要編
  1. プログラムとは何か?
2章:プログラムの書き方
  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2
3章:画面への表示
  1. 文字列の表示
  2. 改行文字
  3. 練習問題3
6章:キーボードからの入力
  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6
9章:回数が決まっている繰り返し
  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9
10章:回数がわからない繰り返し
  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10
13章:複数の変数を一括して扱う
  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13
20章:複数のソースファイル
  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20

コメント
COMMENT

💬 コメント投稿欄を開く