苦しんで覚える 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
コメントシステムを読込中・・・