IF221106 · Algoritma dan Pemrograman
Pertemuan 6–7 — Seleksi Kondisi
Eka Prakarsa Mandyartha, ST., M.Kom.
Prodi Informatika · UPN Veteran Jawa Timur
Materi Kuliah · Pertemuan 6 – 7
Seleksi Kondisi
if, else, switch
Membangun logika percabangan agar program dapat mengambil keputusan berdasarkan kondisi — fondasi dari hampir semua pemrograman nyata.
📄 6 Halaman 🔀 4 Struktur 💻 Bahasa C
Progres Belajar
Halaman 1 dari 6
Pengantar
Apa itu Seleksi Kondisi?

Seleksi kondisi adalah konsep pemrograman yang memungkinkan program untuk membuat keputusan berdasarkan kondisi yang diberikan. Tanpa seleksi kondisi, program hanya berjalan lurus dari baris pertama ke baris terakhir — tidak peduli apapun yang terjadi.

Analogi

Bayangkan rambu lalu lintas: "Jika lampu hijau → jalan. Jika lampu merah → berhenti." Program dengan seleksi kondisi bekerja dengan logika yang persis sama — ia memeriksa suatu kondisi, lalu memilih tindakan yang tepat.

Bahasa C menyediakan dua perintah seleksi kondisi: if dan switch. Keduanya mengevaluasi kondisi, lalu memilih blok kode mana yang akan dieksekusi.

🔗 Ingat dari Topik Operator

Ekspresi yang diperiksa oleh seleksi kondisi menggunakan operator relasi (== != > < >= <=) dan operator logika (&& || !) yang sudah dipelajari. Hasilnya selalu 1 (benar) atau 0 (salah) — itulah yang menentukan jalur mana yang dipilih.

Struktur 1 dari 4
Pernyataan if Tunggal

Bentuk paling sederhana: jika kondisi benar, blok pernyataan dieksekusi. Jika kondisi salah, blok dilewati dan program lanjut ke baris berikutnya.

SintaksC
/* Satu pernyataan */
if (kondisi) pernyataan;

/* Beberapa pernyataan — gunakan blok kurung kurawal */
if (kondisi) {
    pernyataan_1;
    pernyataan_2;
    pernyataan_n;
}
Start
kondisi?
BENAR
Blok pernyataan
dieksekusi
SALAH
Lanjut
Contoh: if tunggalC
#include <stdio.h>
int main() {
    int nilai = 75;

    if (nilai >= 60) {
        printf("Selamat, Anda lulus!\n");
    }

    printf("Program selesai.\n"); // selalu dieksekusi
    return 0;
}
/* Output (nilai=75): Selamat, Anda lulus!
                     Program selesai.     */
/* Output (nilai=50): Program selesai.    */
⚠ Kebiasaan baik: Selalu gunakan kurung kurawal {} meskipun hanya ada satu pernyataan di dalam blok if. Ini mencegah kesalahan logika ketika kode bertambah di kemudian hari.
Struktur 2 dari 4
Pernyataan if-else

Menambahkan blok alternatif yang dieksekusi ketika kondisi salah. Program selalu memilih salah satu dari dua jalur — tidak ada yang dilewati.

SintaksC
if (kondisi) {
    pernyataan_jika_benar;
} else {
    pernyataan_jika_salah;
}
Start
kondisi?
BENAR
Blok if
dieksekusi
SALAH
Blok else
dieksekusi
Selesai
Contoh: lulus atau tidak lulusC
#include <stdio.h>
int main() {
    int nilai = 55;

    if (nilai >= 60) {
        printf("Status: LULUS\n");
    } else {
        printf("Status: TIDAK LULUS\n");
    }

    return 0;
}
/* Output (nilai=55): Status: TIDAK LULUS */
Struktur 3 dari 4
Pernyataan if – else if – else

Ketika ada lebih dari dua kemungkinan kondisi, gunakan else if untuk menambahkan pemeriksaan bertingkat. Program memeriksa kondisi dari atas ke bawah — begitu satu kondisi benar, bloknya dieksekusi dan seluruh struktur dilewati.

SintaksC
if (kondisi_1) {
    pernyataan_1;
} else if (kondisi_2) {
    pernyataan_2;
} else if (kondisi_3) {
    pernyataan_3;
} else {
    pernyataan_default; // jika tidak ada yang cocok
}
Contoh: grade nilai mahasiswaC
#include <stdio.h>
int main() {
    int nilai;
    printf("Masukkan nilai (0-100): ");
    scanf("%d", &nilai);

    if (nilai >= 85) {
        printf("Grade: A\n");
    } else if (nilai >= 75) {
        printf("Grade: B\n");
    } else if (nilai >= 65) {
        printf("Grade: BC\n");
    } else if (nilai >= 55) {
        printf("Grade: C\n");
    } else {
        printf("Grade: D (Tidak Lulus)\n");
    }

    return 0;
}
Urutan kondisi penting! Pemeriksaan dilakukan dari atas ke bawah. Karena nilai >= 85 diperiksa lebih dulu, nilai 90 tidak akan "jatuh" ke else if di bawahnya meskipun 90 juga memenuhi nilai >= 75.
Contoh: kondisi ganda dengan &&C
#include <stdio.h>
int main() {
    int suhu = 28;

    if (suhu > 35) {
        printf("Sangat panas — nyalakan AC\n");
    } else if (suhu >= 28 && suhu <= 35) {
        printf("Hangat — kipas cukup\n");
    } else {
        printf("Sejuk — tidak perlu apa-apa\n");
    }
    return 0;
}
/* Output (suhu=28): Hangat — kipas cukup */
Struktur 4 dari 4
Pernyataan switch-case

Ketika program perlu memilih dari banyak nilai diskrit (nilai pasti, bukan rentang), switch menghasilkan kode yang jauh lebih rapi daripada deretan if-else if.

SintaksC
switch (variabel) {
    case nilai_1:
        pernyataan_1;
        break;
    case nilai_2:
        pernyataan_2;
        break;
    case nilai_3:
        pernyataan_3;
        break;
    default:
        pernyataan_default;
        break;
}

Cara kerja: nilai variabel dibandingkan dengan tiap case dari atas ke bawah. Jika cocok, blok pernyataan pada case tersebut mulai dieksekusi.

Penting — Batasan Tipe Data
switch hanya mendukung tipe data tertentu

Ini adalah perbedaan paling mendasar antara switch dan if-else. Ekspresi di dalam switch(...) hanya boleh bertipe bilangan bulat atau karakter — karena switch bekerja dengan nilai diskrit yang dapat dipetakan secara langsung.

Tipe Dataif-elseswitchAlasan
int ✓ Bisa ✓ Bisa Bilangan bulat — nilai diskrit
char ✓ Bisa ✓ Bisa Karakter direpresentasikan sebagai int (ASCII)
short, long ✓ Bisa ✓ Bisa Turunan integer
float ✓ Bisa ✗ Tidak Bilangan pecahan tidak dapat dibandingkan secara eksak
double ✓ Bisa ✗ Tidak Bilangan pecahan presisi ganda
string (char[]) ✓ Bisa (dengan strcmp) ✗ Tidak Array — bukan nilai tunggal yang dapat dipetakan
Ekspresi rentang
misal: nilai >= 60
✓ Bisa ✗ Tidak switch hanya cocok untuk nilai tunggal, bukan rentang
⚠ Kapan TIDAK bisa pakai switch: Gunakan if-else ketika kondisi melibatkan rentang nilai (misal: nilai antara 60–74), tipe float/double, perbandingan string, atau kondisi logika kompleks (&&, ||).
💡 Kapan pilih switch: Gunakan switch ketika variabelnya bertipe integer atau char, dan nilainya adalah pilihan-pilihan tertentu yang jelas — seperti menu pilihan (1/2/3), kode hari (1–7), atau kode operator ('+'/'-'/'*'/'/').
Konsep Paling Kritis dalam switch
Peran break dalam switch-case

Ini adalah bagian yang paling sering menyebabkan bug pada pemula. Setelah sebuah case cocok dan mulai dieksekusi, program tidak berhenti secara otomatis di akhir blok case tersebut. Ia akan terus mengeksekusi case-case berikutnya ke bawah — fenomena ini disebut fall-through. Kata kunci break berfungsi menghentikan eksekusi dan keluar dari blok switch.

Fall-through

Fall-through adalah perilaku switch di mana eksekusi "jatuh" ke case berikutnya setelah case yang cocok selesai dieksekusi — jika tidak ada break. Program tidak memeriksa kondisi case berikutnya, ia langsung mengeksekusi isinya.

Ilustrasi Langsung — hari = 2
Tanpa break vs Dengan break
❌ TANPA break — Fall-through!
int hari = 2;
switch (hari) {
  case 1: printf("Senin\n");
  case 2: printf("Selasa\n");
  case 3: printf("Rabu\n");
  case 4: printf("Kamis\n");
  default: printf("???\n");
}
Jejak eksekusi (hari = 2):
case 1: tidak cocok, dilewati
case 2: cocok → printf "Selasa"
case 3: fall-through! → printf "Rabu"
case 4: fall-through! → printf "Kamis"
default: fall-through! → printf "???"
Output:
Selasa
Rabu
Kamis
???
⚠ Seharusnya hanya "Selasa"!
✅ DENGAN break — Benar!
int hari = 2;
switch (hari) {
  case 1: printf("Senin\n");   break;
  case 2: printf("Selasa\n"); break;
  case 3: printf("Rabu\n");    break;
  case 4: printf("Kamis\n");  break;
  default: printf("???\n");   break;
}
Jejak eksekusi (hari = 2):
case 1: tidak cocok, dilewati
case 2: cocok → printf "Selasa"
break → keluar dari switch
case 3, 4, default: tidak dieksekusi
 
Output:
Selasa
✓ Hanya case yang cocok yang dieksekusi
⚠ Aturan: Hampir selalu tambahkan break; di akhir setiap case, termasuk default. Melupakannya adalah salah satu sumber bug yang paling umum dalam switch-case.
💡 Fall-through yang disengaja: Ada kalanya fall-through memang diinginkan — misalnya ketika beberapa case harus mengeksekusi blok yang sama. Tetapi selalu tambahkan komentar /* fall-through */ agar kode tidak membingungkan.
Fall-through yang DISENGAJA — beberapa case satu aksiC
int hari = 6;
switch (hari) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("Hari kerja\n");
        break;
    case 6:
    case 7:
        printf("Akhir pekan\n");
        break;
    default:
        printf("Hari tidak valid\n");
        break;
}
/* Output (hari=6): Akhir pekan */
Elemen Penting switch
Klausa default

Klausa default dieksekusi ketika tidak ada satu pun case yang nilainya cocok dengan variabel. Mirip dengan else pada pernyataan if.

  • default bersifat opsional — switch tetap valid tanpa default
  • Biasanya diletakkan di paling bawah, namun secara teknis bisa di mana saja
  • Sebaiknya selalu ada untuk menangani nilai yang tidak terduga
Contoh: kalkulator dengan switch + charC
#include <stdio.h>
int main() {
    float a = 10, b = 3, hasil;
    char op;

    printf("Masukkan operator (+,-,*,/): ");
    scanf("%c", &op);

    switch (op) {        // char → valid di switch
        case '+':
            hasil = a + b;
            printf("%.1f + %.1f = %.1f\n", a, b, hasil);
            break;
        case '-':
            hasil = a - b;
            printf("%.1f - %.1f = %.1f\n", a, b, hasil);
            break;
        case '*':
            hasil = a * b;
            printf("%.1f * %.1f = %.1f\n", a, b, hasil);
            break;
        case '/':
            if (b != 0) {
                hasil = a / b;
                printf("%.1f / %.1f = %.2f\n", a, b, hasil);
            } else {
                printf("Error: pembagian dengan nol!\n");
            }
            break;
        default:
            printf("Operator '%c' tidak dikenal.\n", op);
            break;
    }
    return 0;
}
Panduan Memilih
if-else vs switch — Kapan Menggunakan Masing-masing?
Aspekif-elseswitch
Tipe data yang didukung Semua tipe: int, float, double, char, string, dll. Hanya int, char, dan turunannya
Jenis kondisi Rentang nilai, ekspresi logika kompleks Nilai diskrit/pasti saja
Operator logika Bisa menggunakan &&, ||, ! Tidak bisa
Keterbacaan kode Bisa panjang jika banyak kondisi Lebih rapi untuk banyak pilihan diskrit
Risiko bug Lebih aman — tidak ada fall-through Harus ingat break di setiap case
Cocok untuk Grade nilai, validasi rentang, kondisi ganda Menu pilihan, kode hari/bulan, operator karakter
Kesimpulan: Gunakan switch ketika kondisinya adalah "apakah variabel ini sama dengan nilai A, B, atau C?". Gunakan if-else untuk semua kasus lainnya — terutama rentang nilai, float, dan kondisi logika ganda.
Latihan Terpadu
Program: Sistem Nilai Mahasiswa

Program berikut menggabungkan if-else if untuk grade dan switch untuk kategori hasil studi.

nilai_mahasiswa.cC
#include <stdio.h>

int main() {
    int nilai;
    char grade;

    printf("Masukkan nilai (0-100): ");
    scanf("%d", &nilai);

    /* Validasi input dengan if-else */
    if (nilai < 0 || nilai > 100) {
        printf("Nilai tidak valid!\n");
        return 1;
    }

    /* Tentukan grade — if-else if untuk RENTANG */
    if (nilai >= 85)      grade = 'A';
    else if (nilai >= 75) grade = 'B';
    else if (nilai >= 65) grade = 'C';
    else if (nilai >= 55) grade = 'D';
    else                  grade = 'E';

    printf("Nilai : %d\n", nilai);
    printf("Grade : %c\n", grade);

    /* Tampilkan keterangan — switch untuk NILAI DISKRIT */
    switch (grade) {
        case 'A':
            printf("Hasil  : Sangat Memuaskan\n");
            break;
        case 'B':
            printf("Hasil  : Memuaskan\n");
            break;
        case 'C':
            printf("Hasil  : Cukup\n");
            break;
        case 'D':
            printf("Hasil  : Kurang — perlu remidi\n");
            break;
        default:
            printf("Hasil  : Tidak Lulus\n");
            break;
    }

    return 0;
}

/* Contoh output (nilai=78):
   Nilai : 78
   Grade : B
   Hasil : Memuaskan     */
💡 Perhatikan kombinasinya: Program ini menggabungkan keduanya — if-else if untuk menentukan grade dari rentang nilai (hanya bisa dengan if), lalu switch untuk mencetak keterangan berdasarkan grade char yang sudah jelas nilainya (cocok untuk switch).
Ringkasan Pertemuan 6 – 7
Yang Telah Kita Pelajari
4
Struktur Seleksi Kondisi
2
Jenis Perintah (if & switch)
1
Peran break dalam switch
  • if tunggal — eksekusi blok jika kondisi benar, lewati jika salah
  • if-else — dua jalur: satu jika benar, satu jika salah
  • else if bertingkat — periksa banyak kondisi berurutan dari atas ke bawah
  • switch hanya untuk tipe int dan char — tidak bisa float, double, atau string
  • Tanpa breakfall-through: semua case di bawah case yang cocok ikut dieksekusi
  • default menangani nilai yang tidak cocok dengan case manapun
  • Pilih if-else untuk rentang & logika kompleks; pilih switch untuk nilai diskrit yang rapi
🔜 Topik Berikutnya
Perulangan — while, do-while, for
Jika seleksi kondisi mengajarkan cara memilih jalur, perulangan mengajarkan cara mengulang jalur tersebut — kombinasi keduanya adalah inti dari logika program yang sesungguhnya.