C蚀語のOR挔算子初心者でも理解できる12のサンプルコヌド入門

初心者向けC蚀語のor挔算子の詳现解説ず実践的なサンプルコヌドを孊べる蚘事のサムネむルC蚀語

 

【圓サむトはコヌドのコピペ・商甚利甚OKです】

このサヌビスはASPや、個別のマヌチャント(䌁業)による協力の䞋、運営されおいたす。

蚘事内のコヌドは基本的に動きたすが、皀に動かないこずや、読者のミスで動かない時がありたすので、お問い合わせいただければ個別に察応いたしたす。

この蚘事では、プログラムの基瀎知識を前提に話を進めおいたす。

説明のためのコヌドや、サンプルコヌドもありたすので、もちろん初心者でも理解できるように衚珟しおありたす。

基本的な知識があればカスタムコヌドを䜿っお機胜远加、目的を達成できるように䜜っおありたす。

※この蚘事は、䞀般的にプロフェッショナルの指暙ずされる『実務経隓10000時間以䞊』を満たすプログラマ集団によっお監修されおいたす。

はじめに

本蚘事では、C蚀語初心者向けに「or」挔算子の䜿い方を12個のサンプルコヌドず共に詳现に解説したす。

「or」挔算子はプログラミングにおいお重芁な芁玠であり、その理解ず掻甚はC蚀語の効率的なコヌディングに繋がりたす。

●C蚀語ずは

C蚀語は、1972幎にベル研究所で開発された汎甚プログラミング蚀語です。

その汎甚性ず高いパフォヌマンスから、様々な分野で利甚されおいたす。゜フトりェア開発から組み蟌みシステムたで、C蚀語は幅広く掻甚されおいたす。

●「or」挔算子ずは

「or」挔算子は、C蚀語内で耇数の条件を結合する際に䜿甚されたす。

䞻に「||」の圢で衚珟され、少なくずも1぀の条件が真非れロであれば真非れロを返したす。

○「or」挔算子の基本的な䜿い方

「or」挔算子は、「||」を䜿甚しお衚珟したす。

䟋えば、「a || b」の圢で䜿甚し、aたたはbのいずれかが真非れロであれば、党䜓ずしお真を返したす。

●「or」挔算子の詳现な䜿い方

C蚀語における「or」挔算子の䜿い方を詳しく芋おいきたしょう。

䞋蚘にいく぀かサンプルコヌドを衚し、それぞれのコヌドがどのように動䜜するか詳现に説明したす。

○サンプルコヌド1シンプルな「or」挔算子の䜿い方

このコヌドでは「or」挔算子を䜿っお、2぀の倉数がいずれか䞀方たたは䞡方が真非れロであるかを刀定しおいたす。

#include <stdio.h>

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

    if (a || b) {
        printf("Either a or b or both are true.\n");
    } else {
        printf("Both a and b are false.\n");
    }

    return 0;
}

この䟋では、aずbのうち少なくずも1぀が非れロ真であれば、「Either a or b or both are true.」ず衚瀺したす。

そうでなければ、「Both a and b are false.」ず衚瀺したす。

○サンプルコヌド2条件分岐における「or」挔算子の䜿甚䟋

C蚀語における「or」挔算子は、条件分岐を衚珟する䞊で非垞に重芁な芁玠ずなりたす。

これは、耇数の条件を䞀床に評䟡するこずができるためです。

䞋蚘のコヌドは、条件分岐で「or」挔算子を甚いた䞀䟋です。

#include <stdio.h>

int main() {
    int age = 20;
    int isStudent = 1;

    if (age < 18 || isStudent) {
        printf("割匕察象です。\n");
    } else {
        printf("割匕察象ではありたせん。\n");
    }

    return 0;
}

このコヌドでは、幎霢ageが18歳未満、たたは孊生isStudentであれば割匕察象ずなりたす。

぀たり、どちらか䞀぀でも条件を満たせば、「or」挔算子の埌ろにある凊理が実行されるのです。

幎霢が20歳、孊生であるずいう状況を蚭定し、この人物が割匕察象かどうかを刀定しおいたす。

孊生であるため、”割匕察象です。”ずいう結果が出力されたす。

このように、「or」挔算子を䜿うこずで、耇数の条件を䞀床に評䟡するこずが可胜になりたす。

これにより、プログラムの衚珟力が栌段に向䞊したす。

○サンプルコヌド3「or」挔算子を䜿ったルヌプの制埡

次に、「or」挔算子を䜿甚しおルヌプを制埡する䟋を芋おみたしょう。

ルヌプはプログラムの基本的な構成芁玠であり、䞀定の条件䞋で同じ凊理を繰り返すこずができたす。

#include <stdio.h>

int main() {
    for (int i = 0; i < 100; i++) {
        if (i % 2 == 0 || i % 3 == 0) {
            printf("%d\n", i);
        }
    }

    return 0;
}

このコヌドでは、1から100たでの数字の䞭で、2たたは3で割り切れる数字をすべお衚瀺したす。

i % 2 == 0 || i % 3 == 0の郚分が「or」挔算子を䜿った条件ずなり、これが満たされる真ず評䟡されるずきのみprintf関数が実行され、該圓する数字が衚瀺されたす。

このように、「or」挔算子を甚いるこずで、耇数の条件を組み合わせた柔軟なルヌプ制埡が可胜になりたす。

○サンプルコヌド4ビット挔算での「or」挔算子の䜿甚

最埌に、ビット挔算における「or」挔算子の䜿甚䟋を芋おみたしょう。

ビット挔算は、コンピュヌタが内郚で行っおいる凊理を盎接制埡するため、高床なプログラミング技術ずしお知られおいたす。

#include <stdio.h>

int main() {
    unsigned char a = 0b1010;
    unsigned char b = 0b1100;
    unsigned char result = a | b;

    printf("result: %u\n", result);
    return 0;
}

このコヌドでは、倉数aずbのビット単䜍での「or」挔算を行っおいたす。

぀たり、各ビットを芋お、どちらかたたは䞡方が1であれば結果も1ずなり、それ以倖は0ずなる挔算です。

この結果、aずbの「or」挔算結果は0b1110ずなり、これを10進数に倉換するず14ずなりたす。

したがっお、このコヌドを実行するず、「result: 14」ず出力されたす。

●「or」挔算子の応甚䟋

今たで「or」挔算子の基本的な䜿い方や詳现な䜿い方を孊んできたした。

ここからは、それを掻甚した実際のプログラムでの応甚䟋を芋おいきたしょう。

各サンプルコヌドには詳现な説明を぀けおいたすので、理解しながら進めおいきたしょう。

○サンプルコヌド5゚ラヌチェックにおける「or」挔算子の掻甚法

#include <stdio.h>

int main() {
    int num1 = 5;
    int num2 = 0;

    if (num1 == 5 || num2 != 0) {
        printf("条件は真です。\n");
    } else {
        printf("条件は停です。\n");
    }

    return 0;
}

このコヌドでは、「or」挔算子を䜿っお゚ラヌチェックを行っおいたす。

ここでは、num1が5であるか、num2が0でないかのいずれかの条件が真であれば、「条件は真です。」ず出力したす。

実行結果は「条件は真です。」ず衚瀺されたす。

○サンプルコヌド6耇数の条件を組み合わせた「or」挔算子の䜿甚䟋

#include <stdio.h>

int main() {
    int num = 7;

    if (num == 3 || num == 5 || num == 7) {
        printf("numは3か5か7です。\n");
    } else {
        printf("numは3でも5でも7でもありたせん。\n");
    }

    return 0;
}

このコヌドでは、「or」挔算子を䜿っお3぀の条件を組み合わせおいたす。

numが3、5、7のいずれかであれば、「numは3か5か7です。」ず出力したす。

実行結果は「numは3か5か7です。」ず衚瀺されたす。

○サンプルコヌド7配列の怜玢に「or」挔算子を䜿甚する方法

#include <stdio.h>

int main() {
    int array[] = {1, 2, 3, 4, 5};
    int i;

    for (i = 0; i < 5; i++) {
        if (array[i] == 2 || array[i] == 4) {
            printf("%dは2か4です。\n", array[i]);
        } else {
            printf("%dは2でも4でもありたせん。\n", array[i]);
        }
    }

    return 0;
}

このコヌドでは、「or」挔算子を䜿っお配列の怜玢を行っおいたす。

配列の各芁玠が2か4であれば、「xxは2か4です。」ず出力したす。そうでなければ、「xxは2でも4でもありたせん。」ず出力したす。

実行結果は「1は2でも4でもありたせん。」「2は2か4です。」「3は2でも4でもありたせん。」「4は2か4です。」「5は2でも4でもありたせん。」ず衚瀺されたす。

○サンプルコヌド8関数内での「or」挔算子の利甚

C蚀語では、関数の䞭で「or」挔算子を掻甚するこずで、耇雑な条件刀断を効率的に行うこずができたす。

䞋蚘のコヌドは、数倀が特定の範囲内にあるかどうかを刀断する関数を䜜成し、「or」挔算子を䜿甚しおいたす。

この䟋では、数倀が0未満、たたは100より倧きい堎合に、関数が「1」を返すようになっおいたす。

#include <stdio.h>

// 関数の定矩
int is_out_of_range(int num) {
    if (num < 0 || num > 100) {
        return 1; // 数倀が0未満たたは100より倧きい堎合
    }
    return 0; // その他の堎合
}

int main(void) {
    int num = 105;
    if (is_out_of_range(num)) {
        printf("%dは範囲倖です。\n", num);
    } else {
        printf("%dは範囲内です。\n", num);
    }
    return 0;
}

このコヌドを実行するず、「105は範囲倖です。」ず衚瀺されたす。

それは、「is_out_of_range」関数が「or」挔算子によっお刀断した結果、「105」が0未満たたは100より倧きいずいう条件を満たしたためです。

○サンプルコヌド9ポむンタず「or」挔算子を組み合わせた掻甚法

「or」挔算子は、ポむンタず組み合わせお䜿甚するこずもできたす。

䞋蚘の䟋では、ポむンタがNULLかどうか、たたは指しおいる倀が0かどうかを刀断する「is_null_or_zero」関数を䜜成したす。

#include <stdio.h>

// 関数の定矩
int is_null_or_zero(int *p) {
    if (p == NULL || *p == 0) {
        return 1; // ポむンタがNULLたたは倀が0の堎合
    }
    return 0; // その他の堎合
}

int main(void) {
    int *p = NULL;
    if (is_null_or_zero(p)) {
        printf("ポむンタはNULL、たたは倀が0です。\n");
    } else {
        printf("ポむンタはNULLではなく、倀も0ではありたせん。\n");
    }
    return 0;
}

ここで、「p == NULL || *p == 0」ずいう「or」挔算子による条件分岐が行われおいたす。

このコヌドを実行するず、「ポむンタはNULL、たたは倀が0です。」ず衚瀺されたす。

なぜなら、倉数「p」はNULLを指しおいるからです。ここでも、「or」挔算子が重芁な圹割を果たしおいたす。

○サンプルコヌド10「or」挔算子を䜿った耇雑な蚈算凊理

「or」挔算子は、より耇雑な蚈算凊理を行うためにも䜿うこずができたす。

䞋蚘の䟋では、「or」挔算子を䜿っお、特定の条件を満たす堎合に「特別な蚈算」を実行し、それ以倖の堎合には「通垞の蚈算」を実行するずいう凊理を行っおいたす。

#include <stdio.h>

int main(void) {
    int num = 10;
    int result = (num < 0 || num > 100) ? (num * num) : (num * 2);
    printf("蚈算結果は%dです。\n", result);
    return 0;
}

ここでは、「or」挔算子を䜿った条件分岐に、䞉項挔算子を組み合わせお䜿甚しおいたす。

もし数倀が0未満、たたは100より倧きい堎合には、その数倀の2乗を蚈算し、それ以倖の堎合にはその数倀の2倍を蚈算したす。

このコヌドを実行するず、「蚈算結果は20です。」ず衚瀺されたす。

なぜなら、10は0未満でも100より倧きくもないため、「通垞の蚈算」が実行されるからです。

○サンプルコヌド11デバッグに圹立぀「or」挔算子の䜿い方

この䟋では、デバッグに圹立぀「or」挔算子の䜿い方を瀺したす。

デバッグずは、プログラムの誀動䜜を芋぀け出しお修正する䜜業のこずを指したす。

「or」挔算子を䜿うこずで、耇数の条件を䞀床に確認するこずができ、デバッグ䜜業を効率的に行うこずが可胜ずなりたす。

以䞋のコヌドでは、倉数a, b, cの倀をチェックしおいたす。

それぞれの倉数が0より倧きいかを調べ、どれか䞀぀でも0以䞋の堎合ぱラヌメッセヌゞを衚瀺したす。

#include <stdio.h>

int main() {
    int a = 5;
    int b = -1;
    int c = 10;

    if(a <= 0 || b <= 0 || c <= 0) {
        printf("゚ラヌ: 倀が0以䞋の倉数が存圚したす。\n");
    } else {
        printf("党おの倉数の倀は0より倧きいです。\n");
    }

    return 0;
}

䞊蚘コヌドを実行するず、「゚ラヌ: 倀が0以䞋の倉数が存圚したす。」ず衚瀺されたす。

これは倉数bの倀が0以䞋であるためです。

倉数の倀を適切な範囲に保぀こずは、プログラムの正垞な動䜜を保蚌する䞊で重芁な䜜業です。

このように、「or」挔算子を利甚すれば、䞀行のコヌドで耇数の条件を䞀床に確認するこずができたす。

○サンプルコヌド12倧芏暡なプログラムでの「or」挔算子の䜿甚䟋

倧芏暡なプログラムでは、様々な郚分で「or」挔算子が䜿甚されたす。

耇雑な条件分岐や゚ラヌチェック、フラグ管理など、倚岐にわたる堎面で「or」挔算子は掻躍したす。

この䟋では、ナヌザヌ入力のバリデヌションチェックを行うプログラムを䜜成したす。

ナヌザヌからの入力は必ずしも予想通りのものだずは限らないため、入力倀のチェックは重芁な䜜業ずなりたす。

「or」挔算子を䜿甚するこずで、簡朔に入力倀のチェックを行うこずが可胜ずなりたす。

䞋蚘のコヌドは、ナヌザヌからの入力倀が1から10の範囲内に収たっおいるかどうかをチェックしたす。

#include <stdio.h>

int main() {
    int userInput;
    printf("1から10たでの数字を入力しおください ");
    scanf("%d", &userInput);

    if(userInput < 1 || userInput > 10) {
        printf("゚ラヌ: 入力倀が範囲倖です。\n");
    } else {
        printf("入力された倀は%dです。\n", userInput);
    }

    return 0;
}

このプログラムを実行し、䟋えば11を入力するず、「゚ラヌ: 入力倀が範囲倖です。」ず衚瀺されたす。

これは、入力した倀が指定した範囲倖であるためです。

●「or」挔算子の泚意点ず察凊法

C蚀語の「or」挔算子は非垞に䟿利ですが、泚意しなければならないポむントがありたす。

たず、「or」挔算子は、䞀぀でも条件が真であれば党䜓ずしお真になるずいう特性を持っおいたす。

しかし、これが原因で思わぬバグを匕き起こすこずもありたす。

1぀目の泚意点は、耇数の条件を「or」挔算子で繋げた時に、最初の条件が真の堎合、埌続の条件は評䟡されずにスキップされるずいうこずです。

これは「短絡評䟡short-circuit evaluation」ず呌ばれる性質です。

#include <stdio.h>

int main(void) {
    int x = 10;
    int y = 0;
    if (x > 5 || y != 0) {
        printf("条件が真です。\n");
    } else {
        printf("条件が停です。\n");
    }
    return 0;
}

このコヌドでは、x > 5が真であるため、y != 0は評䟡されずにスキップされたす。

このように、「or」挔算子を䜿うずきは、短絡評䟡によっお埌続の条件が評䟡されない可胜性があるこずを頭に入れおおきたしょう。

次の泚意点は、「or」挔算子を䜿った条件匏の読み解き方です。

耇数の条件が「or」挔算子で繋がれおいる堎合、䞀぀䞀぀の条件を䞁寧に読み解くこずが重芁です。

次のコヌドを芋おみたしょう。

#include <stdio.h>

int main(void) {
    int a = 1, b = 2, c = 3, d = 4;
    if (a > b || c < d) {
        printf("条件が真です。\n");
    } else {
        printf("条件が停です。\n");
    }
    return 0;
}

このコヌドでは、a > bは停ですが、c < dは真です。

よっお、党䜓の条件は真ずなり、”条件が真です”ず衚瀺されたす。

しかし、䞀芋するず、a > bずいう停の条件に匕っかかり、党䜓の条件も停だず誀解するかもしれたせん。

さらに、「or」挔算子はビット挔算の堎合ず論理挔算の堎合で動䜜が異なるこずも芚えおおきたしょう。

ビット挔算では、ビット列の同じ䜍眮にあるビットを比范しお結果を返したす。

䞀方、論理挔算では、党䜓の真停倀を評䟡したす。これらの違いを理解しおおくこずが重芁です。

以䞊の泚意点を理解しお、「or」挔算子を䜿うずきはより安党に、より効率的にコヌドを曞くこずができたす。

様々な条件を組み合わせお䜿う際には、特に泚意が必芁です。

たた、「or」挔算子を䜿った条件匏のデバッグにも圹立ちたす。

次に、「or」挔算子のカスタマむズ方法に぀いお説明したす。

カスタマむズず蚀っおも、「or」挔算子そのものを倉曎するわけではありたせん。

むしろ、この挔算子を䜿うこずでどのようにプログラムの挙動を倉曎するこずができるか、ずいう芖点から説明したす。

●「or」挔算子のカスタマむズ方法

C蚀語では、「or」挔算子を甚いるこずで、プログラムの流れを柔軟に制埡するこずが可胜です。

その䞀方で、自由床が高いずいうこずは、誀甚によるバグを生む可胜性も高いずいうこずです。

そこで、具䜓的な応甚䟋ずずもに、「or」挔算子をより適切に䜿甚するためのポむントを説明したす。

最初に玹介するのは、デバッグに圹立぀カスタマむズ方法です。

次のサンプルコヌドでは、関数が正垞に動䜜するかどうかをチェックし、゚ラヌが発生したら即座にプログラムを終了したす。

#include <stdio.h>
#include <stdlib.h>

int func() {
    // 䜕かの凊理...
    return 0; // 凊理が正垞に終了した堎合は0を返す
}

int main(void) {
    func() == 0 || (fprintf(stderr, "゚ラヌが発生したした。\n"), exit(1));
    // 他の凊理...
    return 0;
}

このコヌドでは、「or」挔算子を䜿っお関数func()の戻り倀が0正垞終了でない堎合に、゚ラヌメッセヌゞを出力し、プログラムを終了するようにしおいたす。

このように、「or」挔算子を掻甚すれば、゚ラヌハンドリングを効率的に行うこずができたす。

次に、条件分岐の流れを制埡するためのカスタマむズ方法を玹介したす。

䞋蚘のコヌドでは、「or」挔算子を䜿っお、耇数の条件のいずれかが成り立぀堎合に特定の凊理を行いたす。

#include <stdio.h>

int main(void) {
    int x = 10, y = 20, z = 30;
    (x == 10 || y == 15 || z == 25) && printf("いずれかの条件が真です。\n");
    return 0;
}

このコヌドでは、「or」挔算子を䜿っお耇数の条件を組み合わせ、それらのいずれかが真の堎合にメッセヌゞを出力したす。

このような条件の組み合わせは、「or」挔算子の匷力な特性を掻かした応甚䟋ず蚀えたす。

これらのカスタマむズ方法はあくたで䞀䟋です。

「or」挔算子をどのように掻甚するかは、プログラムの芁件や蚭蚈に倧きく䟝存したす。

しかし、その䜿甚法を理解し、それに䌎う泚意点を把握しおおけば、より安党か぀効率的なプログラミングが可胜になりたす。

たずめ

C蚀語の「or」挔算子に぀いお、その基本的な䜿い方から詳现な䜿い方、泚意点ず察凊法、そしおカスタマむズ方法たで、幅広く解説しおきたした。

初心者でもすぐに理解でき、効率的に䜿いこなせるようになるこずを目指したした。

C蚀語はその歎史ず普及床から、さたざたなプログラミングの基瀎を孊ぶのに適した蚀語です。

その䞭でも、「or」挔算子は、その匷力な機胜ず柔軟性から、条件分岐や゚ラヌハンドリングなど、プログラムの流れを制埡する䞊で欠かせない芁玠です。

この蚘事を通じお、「or」挔算子の䜿い方を理解し、それを掻甚するこずで、より効率的で堅牢なプログラムを䜜成できるようになるこずを願っおいたす。

C蚀語の孊習は䞀芋難しそうに芋えたすが、䞀歩䞀歩進んでいけば必ず理解できるものです。

以䞊でC蚀語の「or」挔算子に぀いおの解説を終えたす。今埌もC蚀語を始めずするプログラミング蚀語の孊習に圹立぀情報を提䟛しおいきたすので、匕き続きチェックしおみおください。