Selection Statements pada 1-c-programming-language | belajar system-programming | Peskom Guide
Home

Selection Statements

Last Updated : 30 March 2025 / 13 min read

Kita sudah melihat banyak contoh dari operators dalam bahasa C. Tapi kita belum banyak melihat contoh dari statements yang dapat mempengaruhi alur program kita. Sejauh ini, kita baru pernah melihat 2 jenis statements , yaitu return statement dan expression statement .

Selain dari 2 jenis statements tersebut, terdapat 3 jenis statements lainnya yang dapat kita gunakan, yaitu selection statement , iteration statement , dan jump statement . Ada juga compound statement yang dapat kita gunakan untuk mengelompokkan beberapa statements menjadi satu dan null statement yang tidak memiliki efek apapun.

pada modul ini, kita akan membahas tentang selection statement yang di dalamnya terdapat if statement , if-else statement , dan switch statement . Namun sebelum itu, kita akan membahas tentang logical expression terlebih dahulu.

Logical Expression

Selection statement akan menguji apakah suatu kondisi atau nilai dari ekspresi yang diberikan adalah true atau false .

Sebagai contoh, ekspresi x > 0 akan menghasilkan nilai true jika nilai dari x lebih besar dari 0, dan false jika nilai dari x kurang dari atau sama dengan 0. Nilai true dan false inilah yang dimaksud dengan tipe data boolean .

Boolean data type
 #include <stdio.h>
#include <stdbool.h> // Include header file to support boolean data type
 
int main() {
    bool a = true;
    bool b = false;
 
    printf("%d\n", a); // Output: 1
    printf("%d\n", b); // Output: 0
 
    return 0;
}  

Bisa dilihat dari output diatas, nilai true dan false di representasikan dengan nilai 1 dan 0.

Operator > dalam ekspresi x > 0 adalah relational operator yang digunakan untuk membandingkan nilai dari x dengan 0. Dan tidak hanya itu, terdapat juga relational operator lainnya seperti >= , < , dan <= .

  • > : lebih besar dari
  • >= : lebih besar dari atau sama dengan
  • < : kurang dari
  • <= : kurang dari atau sama dengan

Perlu diketahui kalau relational operator itu secara prioritas lebih rendah dari arithmetic operator . Sehingga a - b > c + d akan di evaluasi mejadi (a - b) > (c + d) .

Operator lain yang tidak kalah penting adalah equality operator yang terdiri dari == dan != yang juga akan menghasilkan nilai true atau false .

  • == : sama dengan
  • != : tidak sama dengan
Equality operator
 #include <stdio.h>
 
int main() {
    int a = 1;
    int b = 2;
 
    printf("%d\n", a == 1); // Output: 1 = true
    printf("%d\n", a == b); // Output: 0 = false
    printf("%d\n", a != b); // Output: 1 = true
 
    return 0;
}  

Equality operator memiliki prioritas yang lebih rendah dibanding relational operator . Sehingga ekspresi a < b == c > d akan di evaluasi menjadi (a < b) == (c > d) .

Ada juga logical operator yang terdiri dari && , || , dan ! .

  • && : AND, ekspresi akan menghasilkan nilai true jika kedua ekspresi yang diuji adalah true .
  • || : OR, ekspresi akan menghasilkan nilai true jika salah satu dari ekspresi yang diuji adalah true .
  • ! : NOT, ekspresi akan menghasilkan nilai true jika ekspresi yang diuji adalah false , dan false jika ekspresi yang diuji adalah true .
Logical operator
 #include <stdio.h>
 
int main() {
    int a = 10;
    int b = 20;
 
    printf("%d\n", a == 10 && b == 20);
    printf("%d\n", a == 10 && b == 10);
    printf("%d\n", a == 10 || b == 20);
    printf("%d\n", a == 10 || b == 10);
    printf("%d\n", !(a == 10 && b == 20));
 
    return 0;
}  

Penjelasan dari contoh diatas adalah sebagai berikut:

  • a == 10 && b == 20 akan menghasilkan nilai true jika a sama dengan 10 dan b sama dengan 20. Artinya, kedua ekspresi yang diuji harus bernilai true .
  • a == 10 && b == 10 akan menghasilkan nilai false karena b tidak sama dengan 10. Artinya, salah satu dari ekspresi yang diuji harus bernilai false .
  • a == 10 || b == 20 akan menghasilkan nilai true karena a sama dengan 10. Artinya, salah satu dari ekspresi yang diuji harus bernilai true .
  • a == 10 || b == 10 akan menghasilkan nilai true karena a sama dengan 10. Artinya, salah satu dari ekspresi yang diuji harus bernilai true .
  • !(a == 10 && b == 20) akan menghasilkan nilai false karena a sama dengan 10 dan b sama dengan 20. Artinya, ekspresi yang diuji harus bernilai false .

Buat yang masih bingung. Jangan khawatir, logical operator memang membutuhkan banyak latihan untuk memahaminya.

The if Statement

Selection statement pertama dan mungkin yang paling sering kita temui adalah if statement . Dimana inti dari if statement ini adalah untuk menjalankan suatu blok kode jika suatu kondisi terpenuhi.

Bentuk dari if statement adalah sebagai berikut:

 if (condition) {
    // Block of code to be executed if condition is true
}  

Kita kan sebelumnya sudah membahas tentang logical expression . nah, umumnya, logical expression inilah yang akan kita gunakan sebagai condition di dalam if statement .

If statement
 #include <stdio.h>
 
int main() {
    int a = 10;
 
    if (a > 0) {
        printf("a is greater than 0\n");
    }
 
    printf("the value of a is %d\n", a);
 
    return 0;
}  

Output dari program diatas adalah:

Output from if statement program
 a is greater than 5
the value of a is 10  

Sekarang, bagaimana jika kita dengan sengaja membuat agar kondisi menjadi tidak terpenuhi?

If statement with false condition
 #include <stdio.h>
 
int main() {
    int a = 2;
 
    if (a > 5) {
        // Condition is false, so this block will not be executed
        printf("a is greater than 5\n");
    }
 
    printf("the value of a is %d\n", a);
 
    return 0;
}  

Output dari program diatas adalah:

Output from if statement program
 the value of a is 2  

Bisa dilihat dari output diatas, bahwa blok kode yang ada di dalam if statement tidak dijalankan karena kondisi yang diuji tidak terpenuhi.

Contoh yang lebih kompleks adalah sebagai berikut:

If statement with more complex conditions
 #include <stdio.h>
 
int main() {
    int a = 50;
 
    if (a > 30 && a < 70) {
        printf("a is between 30 and 70\n");
    }
 
    printf("the value of a is %d\n", a);
 
    return 0;
}  

Output dari program diatas adalah:

Output from if statement program
 a is between 30 and 70
the value of a is 50  

The if-else Statement

Sekarang bagaimana jika kita ingin menjalankan suatu blok kode jika kondisi terpenuhi, dan jika tidak terpenuhi, kita ingin menjalankan suatu blok kode lain? Disinilah peran else statement berada.

Bentuk dari if-else statement adalah sebagai berikut:

If-else statement clause
 if (condition) {
    // Block of code to be executed if condition is true
} else {
    // Block of code to be executed if condition is false
}  

Perlu diperhatikan kalau else statement ini tidak membutuhkan kondisi atau ekspresi untuk berjalan. Dikarenakan karena, else statement ini akan menjalankan blok kode yang ada di dalamnya jika kondisi di dalam if statement tidak terpenuhi. Jadi, kapanpun kondisi dari if statement bernilai false , maka blok kode yang ada di dalam else statement akan dijalankan.

If-else statement example
 #include <stdio.h>
 
int main() {
    int a = 20;
 
    if (a > 30) {
        printf("a is greater than 30\n");
    } else {
        printf("a is less than or equal to 30\n");
    }
 
    printf("the value of a is %d\n", a);
 
    return 0;
}  

output dari program diatas adalah:

Output from if-else statement program
 a is less than or equal to 30
the value of a is 20  

Dari contoh diatas, kita dapat melihat bahwa blok kode yang ada di dalam else statement akan dijalankan dikarenakan kondisi di dalam if statement tidak terpenuhi.

Dan perlu diketahui juga kalau tidak ada batasan terhadap statement apa yang bisa kita gunakan di dalam if-else statement . Bahkan kita bisa menulis if-else statement di dalam if-else statement seperti ini:

If-else statement nested
 #include <stdio.h>
 
int main() {
    int a = 50;
 
    if (a > 30) {
        printf("a is greater than 30\n");
        if (a > 40) {
            printf("a is greater than 40\n");
 
            if (a == 50) {
                printf("a is equal to 50\n");
            } else {
                printf("a is not equal to 50\n");
            }
        }
    } else {
        printf("a is less than or equal to 30\n");
 
        if (a < 20) {
            printf("a is less than 20\n");
        }
    }
}  

Output dari program diatas adalah:

Output from if-else statement program
 a is greater than 30
a is greater than 40
a is equal to 50  

Penggunaan if-else statement di dalam if-else statement disebut dengan nested if-else statement dan percayalah, ini bukanlah hal yang jarang kita temui.

Dan faktanya, saking seringnya kita temui kode nested if-else statement ini, banyak bahasa pemrograman di dunia, termasuk bahasa C, memiliki fitur untuk mempermudah kita dalam menulis kode nested if-else statement yang dinamakan dengan cascaded if statement .

Dan jika kita menulis ulang kode kita diatas dengan menggunakan cascaded if statement , maka kode tersebut akan menjadi seperti ini:

Cascaded if statement
 #include <stdio.h>
 
int main() {
    int a = 50;
 
    if (a > 50) {
        printf("a is greater than 50\n");
    } else if (a == 50) {
        printf("a is equal to 50\n");
    } else if (a > 40) {
        printf("a is greater than 40\n");
    } else if (a > 30) {
        printf("a is greater than 30\n");
    } else if (a < 20) {
        printf("a is less than 20\n");
    } else {
        printf("a is less than or equal to 30\n");
    }
}  

Agak sedikit berantakan, tapi bentuk inti dari cascaded if statement ini adalah seperti ini:

Cascaded if statement
 if (condition) {
    // Block of code to be executed if condition is true
} else if (condition) {
    // Block of code to be executed if condition is true
} else if (condition) {
    // Block of code to be executed if condition is true
} else {
    // Block of code to be executed if all previous condition is false
}  

Perlu diperhatikan kalau cascaded if statement ini bukan ingin menggantikan nested if-else statement , melainkan memberikan kita pilihan lain untuk menulis kode if-else statement yang lebih mudah dibaca dan lebih mudah di maintain.

Lalu apakah dengan adanya cascaded if statement ini, kita tidak perlu menggunakan if-else statement lagi? Jawabannya adalah tidak . Ada banyak kasus dimana kita tetap ingin menulis if-else statement bersamaan dengan cascaded if statement . Ingat, cascaded if statement ini bukan pengganti dari nested if-else statement .

Conditional (Ternary) Operator

Jika if-else statement memungkinkan kita untuk menjalankan satu atau lebih perintah berdasarkan nilai dari suatu kondisi, maka conditional operator juga memungkinkan kita melakukan hal yang sama.

Conditional operator dalam bahasa C atau yang terkadang lebih dikenal juga dengan ternary operator , terdiri dari 2 simbol, yaitu simbol ? dan : .

Basic usage of conditional operator
 Condition ? Expression1 : Expression2  

Cara membaca ekspresi diatas adalah:

  • Jika Condition bernilai true , maka Expression1 akan dieksekusi.
  • Jika Condition bernilai false , maka Expression2 akan dieksekusi.

Sehingga, dalam dalam pengaplikasiannya, kita bisa menulis ulang kode yang menggunakan if-else statement menjadi menggunakan conditional operator seperti ini:

Rewriting if-else statement using conditional operator
 #include <stdio.h>
 
int main() {
    int a = 50;
 
    int b;
    if (a > 40) {
        b = 1;
    } else {
        b = 0;
    }
 
    b = a > 40 ? 1 : 0; // b is now 1
 
    printf("%d\n", b); // Output: 1
    return 0;
}  

Bisa dilihat kalau kita bisa menulis ulang 4 baris kode menjadi hanya 1 baris kode saja.

Namun perlu diingat kalau meskipun penggunaan conditional operator ini bisa mempermudah kita dalam menulis kode, tidak berarti kalau kita harus menggunakannya di setiap kondisi yang ada. Perlu diingat kalau penggunaan conditional operator ini bisa membuat kode menjadi sulit dibaca dan sulit di maintain.

Umumnya, jika kondisi atau ekspresi yang ingin kita uji terlalu kompleks, lebih baik gunakan if-else statement daripada conditional operator .

The switch Statement

Gak bakalan lengkap kalo kita belum bahas tentang switch statement .

Kita udah lihat sebelumnya, kalo kita punya banyak pengkondisian, maka yang terjadi adalah, seringkali kita menemukan diri kita menulis if-else statement secara berulang-ulang sampai semua kondisi kita terpenuhi. Hal ini valid-valid aja, tapi ada cara lain yang lebih baik untuk menulis kode ini, yaitu dengan menggunakan switch statement .

Previous if-else statement before rewritten using switch statement
 int x = 2;
 
if (x == 1) {
    printf("x is one\n");
} else if (x == 2) {
    printf("x is two\n");
} else if (x == 3) {
    printf("x is three\n");
} else {
    printf("x is something else\n");
}  

Kode diatas adalah salah satu contoh kode yang kita tulis dengan menggunakan if-else statement . Disini kita akan menulis ulang kode tersebut dengan menggunakan switch statement .

Rewriting if-else statement using switch statement
 int x = 2;
 
switch (x) {
    case 1:
        printf("x is one\n");
        break;
    case 2:
        printf("x is two\n");
        break;
    case 3:
        printf("x is three\n");
        break;
    default:
        printf("x is something else\n");
        break;
}  

Output dari program diatas adalah:

Output from switch statement program
 x is two  

Ketika setiap baris dari switch statement dijalankan, maka setiap case yang ada akan dijalankan dan diuji apakah nilai dari x sama dengan nilai dari case tersebut. Jika ya, maka blok kode yang ada di dalam case tersebut akan dijalankan.

Setiap case akan diuji satu per satu secara berurutan. Dan jika tidak ada case yang terpenuhi, maka blok kode yang ada di dalam default akan dijalankan. Dalam hal ini, blok default itu bisa dianggap sama seperti else statement di dalam if-else statement dimana ekspresi di dalam blok tersebut akan dijalankan jika semua pengecekan kondisi sebelumnya tidak terpenuhi.

Peran dari break statement memang cukup mencurigakan. Tapi pada dasarnya, peran dari break statement ini sudah dijelaskan dari nama statement itu sendiri. Adanya break statement ini adalah untuk menghentikan seluruh eksekusi yang ada di dalam switch statement dan keluar dari switch statement .

Jika kita tidak menulis break statement di dalam case tersebut, maka blok kode yang ada di dalam case tersebut akan dijalankan dan eksekusi akan dilanjutkan ke blok kode yang ada di dalam case berikutnya.

Apakah konten ini membantu ? Jika ya, kami akan sangat menghargai jika Anda bisa memberikan bintang pada GitHub Repository kami dan ikuti sosial media dari komunitas Peskom di Facebook . Dukungan Anda membantu kami untuk terus berkembang! 🌟

Dan juga jika Anda menemukan kesalahan, typo, kekurangan, atau kesalahan pada artikel ini, kami sangat terbuka untuk masukan. Silakan laporkan temuan Anda melalui halaman Github Issues ini . Mari bersama-sama meningkatkan kualitas konten untuk komunitas Peskom! 🚀

Semoga semangat open source turut senantiasa menyertaimu.