初心者必見!C言語の比較演算子を使いこなす15の方法

初心者がC言語の比較演算子を学ぶためのイメージC言語
この記事は約16分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

プログラミングを学ぶ上で重要な要素の一つが比較演算子です。

特にC言語では、これらの比較演算子が多くの機能を支えています。今回の記事では、初心者でも理解しやすいように、C言語の比較演算子の使い方を15の具体的なステップとサンプルコードで解説します。

これから学ぶ皆さんにとって有益な情報を提供できることを願っています。

●C言語とは

C言語は、1972年にAT&Tベル研究所で開発されたプログラミング言語です。

その汎用性と効率性から、さまざまなソフトウェア開発で広く使用されています。

特に、オペレーティングシステムや組み込みシステムの開発では欠かせない言語となっています。

●比較演算子とは

比較演算子は、その名の通り2つの値を比較するための演算子です。

比較の結果は真(1)か偽(0)となり、この結果は条件分岐やループ制御などのプログラムの流れを決定するのに使われます。

具体的な比較演算子には次のようなものがあります。

○等しい(==)

‘==’は2つの値が等しいかどうかを判断する演算子です。

例えば、’a == b’と書いた場合、aとbが等しい時に真を返し、等しくない場合は偽を返します。

○等しくない(!=)

‘!=’は2つの値が等しくないかどうかを判断する演算子です。

‘a != b’と書いた場合、aとbが等しくない時に真を返し、等しい場合は偽を返します。

○より大きい(>)

‘>’は左の値が右の値より大きいかどうかを判断する演算子です。

‘a > b’と書いた場合、aがbより大きい時に真を返し、それ以外の場合は偽を返します。

○より小さい(<)

‘<‘は左の値が右の値より小さいかどうかを判断する演算子です。

‘a < b’と書いた場合、aがbより小さい時に真を返し、それ以外の場合は偽を返します。

○以上(>=)

‘>=’は左の値が右の値以上かどうかを判断する演算子です。

‘a >= b’と書いた場合、aがb以上(つまり、aがbより大きいか、またはaとbが等しい)時に真を返し、それ以外の場合は偽を返します。

○以下(<=)

‘<=’は左の値が右の値以下かどうかを判断する演算子です。

‘a <= b’と書いた場合、aがb以下(つまり、aがbより小さいか、またはaとbが等しい)時に真を返し、それ以外の場合は偽を返します。

これらの比較演算子を上手く使うことで、プログラムの流れを自由に操ることができます。

●比較演算子の使い方

比較演算子は、C言語のプログラムにおいて条件判定に使われます。

具体的な使用法とその理解を深めるために、一つひとつの比較演算子を実際のコードとともに見ていきましょう。

○サンプルコード1:等しい(==)

C言語では、「等しい」を判断するために「==」という比較演算子を使用します。

下記のコードでは、整数aとbが等しいかどうかを判断しています。

#include <stdio.h>

int main(void) {
    int a = 5;
    int b = 5;

    if(a == b){
        printf("aとbは等しい\n");
    } else {
        printf("aとbは等しくない\n");
    }

    return 0;
}

このコードでは、まず整数aとbにそれぞれ5を代入しています。

その後、if文の中でaとbが等しいかどうか(a == b)を判断しています。

もしaとbが等しければ、「aとbは等しい」と出力され、等しくなければ「aとbは等しくない」と出力されます。

このコードを実行すると、「aとbは等しい」と表示されます。

なぜなら、変数aとbには同じ値の5が代入されているからです。

○サンプルコード2:等しくない(!=)

次に、「等しくない」を表す比較演算子「!=」について説明します。

このコードでは、整数aとbが等しくないかどうかを判断しています。

#include <stdio.h>

int main(void) {
    int a = 5;
    int b = 10;

    if(a != b){
        printf("aとbは等しくない\n");
    } else {
        printf("aとbは等しい\n");
    }

    return 0;
}

この例では、変数aに5、変数bに10を代入し、その後でif文を用いてaとbが等しくないかどうか(a != b)を判断しています。

もしaとbが等しくなければ、「aとbは等しくない」と出力され、等しければ「aとbは等しい」と出力されます。

このコードを実行すると、「aとbは等しくない」と表示されます。

それは変数aとbに異なる値が代入されているからです。

○サンプルコード3:より大きい(>)

続いて、「より大きい」を判断するための比較演算子「>」について説明します。

このコードでは、整数aがbより大きいかどうかを判断しています。

#include <stdio.h>

int main(void) {
    int a = 10;
    int b = 5;

    if(a > b){
        printf("aはbより大きい\n");
    } else {
        printf("aはbより大きくない\n");
    }

    return 0;
}

この例では、変数aに10、変数bに5を代入しています。

その後、if文を使ってaがbより大きいかどうか(a > b)を判断しています。

もしaがbより大きければ、「aはbより大きい」と出力され、そうでなければ「aはbより大きくない」と出力されます。

このコードを実行すると、「aはbより大きい」と表示されます。

それは変数aの値がbよりも大きいためです。

○サンプルコード4:より小さい(<)

それでは、次に「より小さい(<)」について学びましょう。

この演算子は二つの数値を比較し、左の数値が右の数値より小さければ真(1)、そうでなければ偽(0)を返します。

例えば、5 < 10という式は、「5は10より小さいか?」という質問に相当します。

ここで5は10より小さいので、この式は真(1)を返します。

しかし、10 < 5という式は、「10は5より小さいか?」という質問になり、10は5より小さくないので、この式は偽(0)を返します。

それでは、C言語での実装を見てみましょう。

#include<stdio.h>

int main() {
    int a = 5;
    int b = 10;

    if(a < b) {
        printf("aはbより小さい\n");
    } else {
        printf("aはbより小さくない\n");
    }

    return 0;
}

このコードでは、aがbより小さいかどうかを比較し、その結果に基づいて異なるメッセージを表示します。

変数aとbの値はそれぞれ5と10なので、”aはbより小さい”というメッセージが表示されます。

コードを実行すると、次の結果が得られます。

aはbより小さい

これが、「より小さい(<)」演算子を使って二つの数値を比較する例です。

数値が小さいかどうかを判断するための条件分岐によく使われます。

また、繰り返し処理(ループ)の制御にも使われます。

○サンプルコード5:以上(>=)

次に、「以上(>=)」について見ていきましょう。

この演算子は、左の数値が右の数値以上であれば真(1)、そうでなければ偽(0)を返します。

つまり、「等しい(==)」と「より大きい(>)」の両方の条件を満たす場合に真を返します。

例えば、5 >= 5という式は、「5は5以上か?」という質問に相当します。

5は5以上なので、この式は真(1)を返します。

それでは、C言語での具体的な実装を見てみましょう。

#include<stdio.h>

int main() {
    int a = 5;
    int b = 5;

    if(a >= b) {
        printf("aはb以上\n");
    } else {
        printf("aはb未満\n");
    }

    return 0;
}

このコードでは、aがb以上かどうかを比較し、その結果に基づいて異なるメッセージを表示します。

変数aとbの値は共に5なので、”aはb以上”というメッセージが表示されます。

コードを実行すると、次の結果が得られます。

aはb以上

これが、「以上(>=)」演算子を使って二つの数値を比較する例です。

これらの比較演算子を理解し、適切に使用することで、C言語プログラミングの幅が広がります。

○サンプルコード6:以下(<=)

(<=)は、ある数値がもう一つの数値と同じまたはそれより小さいかを比較するための演算子です。

この比較演算子の働きを具体的に理解するためのコードをご覧ください。

#include <stdio.h>

int main() {
    int a = 10;
    int b = 20;

    if(a <= b) {
        printf("aはb以下です。\n");
    } else {
        printf("aはb以上です。\n");
    }

    return 0;
}

このコードでは、まず二つの変数aとbを定義しています。

aには10が、bには20が格納されています。

if文を使って、「aがb以下である(a <= b)」という条件を設けています。

もしaがbと同じまたはそれより小さい場合、”aはb以下です。”と表示します。

それ以外の場合、つまりaがbより大きい場合は、”aはb以上です。”と表示します。

上記のコードを実行すると、”aはb以下です。”と表示されます。なぜなら、aの値(10)はbの値(20)以下だからです。

この結果から、’以下(<=)’演算子が正しく機能していることが確認できます。

これが「以下(<=)」比較演算子の基本的な使用方法です。自分で数値を変えて試してみることで、この演算子の動作をより深く理解できるでしょう。

また、これらの比較演算子はC言語プログラムの各種制御構造(if文、while文、for文など)において重要な役割を果たします。

その具体的な応用例については、次のセクションで説明します。

次に進む前に、以下(<=)演算子に関して一つ注意点を挙げておきます。

それは、以下(<=)演算子を使用する際、等号(=)は必ず後になることです。

つまり、「=<」と書くとエラーが発生します。

「<=」と正しく記述することを忘れないようにしましょう。

●比較演算子の応用例

比較演算子の真価は、プログラムの制御フロー、すなわちif文やループなどと組み合わせた時に発揮されます。

比較演算子と主要な制御フローを組み合わせたサンプルコードをご紹介します。

○サンプルコード7:if文と組み合わせる

C言語のif文は、特定の条件が満たされたときに特定のコードブロックを実行するために使われます。

比較演算子とif文を組み合わせることで、特定の条件に基づいて動作を変えるプログラムを作ることができます。

下記のコードは、変数aとbの値を比較し、それらが等しい場合と等しくない場合で異なるメッセージを出力する例です。

#include <stdio.h>

int main() {
    int a = 5;
    int b = 3;

    if (a == b) {
        printf("aとbは等しいです。\n");
    } else {
        printf("aとbは等しくありません。\n");
    }

    return 0;
}

このコードを実行すると、「aとbは等しくありません。」というメッセージが出力されます。

なぜなら、変数aの値は5で、bの値は3で、これらは等しくないからです。

○サンプルコード8:while文と組み合わせる

while文は、特定の条件が満たされている間、特定のコードブロックを繰り返し実行します。

比較演算子とwhile文を組み合わせることで、特定の条件下でループを続けるプログラムを作成できます。

次のコードは、変数iの値が10より小さい間、「変数iの値は10より小さいです」というメッセージを出力し、その後iの値を1増加させる例です。

#include <stdio.h>

int main() {
    int i = 0;

    while (i < 10) {
        printf("変数iの値は10より小さいです。\n");
        i++;
    }

    return 0;
}

このコードを実行すると、メッセージが10回出力されます。

それは、変数iの初期値が0で、その値が10より小さい間、メッセージが出力されるからです。

その後、iの値は1増加し、これが10回繰り返されます。

○サンプルコード9:for文と組み合わせる

for文もまた、特定のコードブロックを繰り返し実行するための制御フローですが、初期化、条件チェック、更新の3つの要素を1行にまとめて書くことができます。

次のコードは、for文と比較演算子を組み合わせて、0から9までの数字を出力する例です。

#include <stdio.h>

int main() {
    for (int i = 0; i < 10; i++) {
        printf("%d\n", i);
    }

    return 0;
}

このコードを実行すると、0から9までの数字が順に出力されます。

for文の中の比較演算子を用いた条件(i < 10)が真である限り、ループが続きます。

●比較演算子の注意点と対処法

さて、ここまでで比較演算子の基本的な使い方とその応用を見てきました。

しかし、それらを使用する際にはいくつか注意すべき点があります。

そのため、本節では、比較演算子を使用する際の注意点とそれらの対処法を解説します。

まず、一つ目の注意点は、「等しい(==)」と「代入(=)」を混同しないことです。

これはプログラミング初心者にとってよくある間違いで、代入演算子と比較演算子の混同は意図しない結果を引き起こす可能性があります。

この間違いを避けるには、演算子の使い方を正しく理解し、常に確認することが大切です。

次に、浮動小数点数を使用する際の注意点です。

浮動小数点数の比較は、その性質上、誤差を伴う可能性があります。これは、コンピュータが数値を2進数で表現するため、10進数で完全に表現できない数値が存在するからです。

次のコードは、浮動小数点数の比較に関する一例です。

#include<stdio.h>

int main() {
    double a = 0.1;
    double b = 0.2;
    double c = 0.3;

    if(a + b == c) {
        printf("等しい\n");
    } else {
        printf("等しくない\n");
    }

    return 0;
}

このコードでは、0.1と0.2を足して0.3と等しいか比較しています。

しかし、実行すると「等しくない」と出力されます。

これは、浮動小数点数の誤差が原因で、正確に0.3とはならないからです。

この問題を回避するためには、絶対値を取って差が十分小さいかどうかで比較する方法があります。

#include<stdio.h>
#include<math.h>

int main() {
    double a = 0.1;
    double b = 0.2;
    double c = 0.3;
    double eps = 1e-10;

    if(fabs(a + b - c) < eps) {
        printf("等しい\n");
    } else {
        printf("等しくない\n");
    }

    return 0;
}

このコードでは、0.1と0.2の和と0.3との差の絶対値が十分小さいかどうかで比較しています。

fabs関数は絶対値を返す関数で、epsは誤差の許容範囲を表します。

このように浮動小数点数の比較では誤差を考慮することが重要です。

これらの注意点を頭に入れて、比較演算子を使用することで、予期しないエラーやバグを避けることが可能となります。

●比較演算子のカスタマイズ方法

C言語は比較演算子をカスタマイズするための直接的な方法を提供していませんが、関数を作成することで目的を達成することが可能です。

このセクションでは、比較演算子の動作をカスタマイズする一例を紹介します。

まずは、「より大きい」を表すカスタム関数を作成しましょう。

この関数は二つの整数を引数に取り、片方が他方より大きければ1を、そうでなければ0を返します。

#include <stdio.h>

int custom_greater(int a, int b) {
    return a > b ? 1 : 0;
}

int main() {
    int x = 10;
    int y = 5;
    printf("結果:%d\n", custom_greater(x, y));
    return 0;
}

このコードでは、カスタム関数custom_greaterを使用してxyより大きいかを評価しています。

この例では、xの値は10で、yの値は5なので、「結果:1」を出力します。

次に、「より小さい」を表すカスタム関数を作成しましょう。

この関数も二つの整数を引数に取り、片方が他方より小さければ1を、そうでなければ0を返します。

#include <stdio.h>

int custom_less(int a, int b) {
    return a < b ? 1 : 0;
}

int main() {
    int x = 5;
    int y = 10;
    printf("結果:%d\n", custom_less(x, y));
    return 0;
}

このコードでは、カスタム関数custom_lessを使用してxyより小さいかを評価しています。

この例では、xの値は5で、yの値は10なので、「結果:1」を出力します。

これらのカスタム関数を用いて、比較演算子の動作をカスタマイズすることが可能です。

ただし、これらはあくまで一例であり、具体的な実装はプログラムの要件に応じて調整する必要があります。

このように、C言語では直接的な比較演算子のカスタマイズは提供されていませんが、関数を作成することで目的の動作を実現することができます。

これにより、プログラムの複雑さを管理しながら、より柔軟なコードを書くことが可能になります。

まとめ

これまでに紹介した内容を理解して、C言語の比較演算子を使いこなすことができれば、プログラムの制御フローをより効果的に管理できるようになるでしょう。

また、比較演算子は、if文、while文、for文といった制御文と組み合わせて使用することで、その真価を発揮します。

そして、比較演算子の注意点と対処法を理解することで、予期しないバグや問題を防ぐことができます。

最後に、比較演算子のカスタマイズ方法を学ぶことで、プログラムに更なる柔軟性と効率性をもたらすことができます。

初心者の方でも、本記事のステップとサンプルコードを参考にすれば、C言語の比較演算子の使い方を簡単に理解することができるはずです。

あなたのC言語学習が、さらに充実したものとなることを願っています。