IF221106 · Algoritma dan Pemrograman
Pertemuan 8–9 — Perulangan (Looping)
Eka Prakarsa Mandyartha, ST., M.Kom.
Prodi Informatika · UPN Veteran Jawa Timur
Materi Kuliah · Pertemuan 8 – 9
Perulangan
while · do-while · for
Mengotomasi pengulangan proses — fondasi dari perhitungan, pencarian data, pemrosesan daftar, dan hampir semua algoritma nyata.
📄 7 Halaman 🔁 3 Struktur 💻 Bahasa C
Progres Belajar
Halaman 1 dari 7
Pengantar
Mengapa Perulangan Dibutuhkan?

Bayangkan ingin mencetak angka 1 sampai 1000. Tanpa perulangan, kita harus menulis printf sebanyak 1000 baris. Dengan perulangan, cukup beberapa baris kode — dan komputer akan mengulanginya sendiri.

Definisi

Perulangan (loop) adalah struktur kendali yang membuat serangkaian pernyataan dieksekusi berulang kali selama suatu kondisi bernilai benar. Begitu kondisi menjadi salah, perulangan berhenti dan program melanjutkan ke baris berikutnya.

Bahasa C menyediakan tiga struktur perulangan: while, do-while, dan for. Ketiganya mengerjakan hal yang sama pada dasarnya — bedanya pada kapan kondisi diperiksa dan bagaimana variabel kontrol dikelola.

Struktur 1 dari 3
Perulangan while

Perulangan while memeriksa kondisi sebelum badan perulangan dieksekusi. Jika kondisi sudah salah sejak awal, badan perulangan tidak akan pernah dijalankan sama sekali.

SintaksC
/* inisialisasi variabel kontrol dilakukan di LUAR */
int i = 1;

while (kondisi) {
    pernyataan_1;
    pernyataan_n;
    update variabel kontrol; // WAJIB! atau infinite loop
}
Start
kondisi?
BENAR
Eksekusi badan
perulangan
Update variabel
kontrol
↑ kembali ke kondisi
SALAH
Keluar loop
Contoh: cetak 1–5 dengan whileC
#include <stdio.h>
int main() {
    int i = 1;           // ① inisialisasi variabel kontrol

    while (i <= 5) {     // ② kondisi diperiksa SEBELUM badan
        printf("%d\n", i);
        i++;              // ③ update — tanpa ini: infinite loop!
    }
    return 0;
}
/* Output: 1  2  3  4  5 */
💡 Kapan pakai while: Ketika jumlah iterasi tidak diketahui sebelumnya dan bergantung pada kondisi yang bisa berubah — misalnya membaca input sampai user mengetik angka negatif, atau mencari data sampai ditemukan.
Struktur 2 dari 3
Perulangan do-while

Perulangan do-while memeriksa kondisi setelah badan perulangan dieksekusi. Artinya badan perulangan selalu dijalankan minimal satu kali — tidak peduli apapun nilai kondisinya.

SintaksC
do {
    pernyataan_1;
    pernyataan_n;
    update variabel kontrol;
} while (kondisi);   // ← kondisi diperiksa SETELAH badan
                        //   jangan lupa titik koma di sini!
Perbedaan Paling Kelihatan
while vs do-while ketika kondisi awal sudah SALAH

Inilah kasus yang paling jelas menunjukkan perbedaan keduanya. Kita set kondisi yang langsung salah sejak awal: i = 10 dengan kondisi i < 5.

while — kondisi awal SALAH
int i = 10;
while (i < 5) {
    printf("Baris ke-%d\n", i);
    i++;
}
printf("Selesai.\n");
Jejak eksekusi:
🔍
Periksa: 10 < 5 ?
SALAH → langsung keluar
printf → tidak pernah dijalankan
Output:
Selesai.
Badan loop tidak pernah berjalan
do-while — kondisi awal SALAH
int i = 10;
do {
    printf("Baris ke-%d\n", i);
    i++;
} while (i < 5);
printf("Selesai.\n");
Jejak eksekusi:
Langsung jalankan badan
🖨️
printf → cetak "Baris ke-10"
🔍
Periksa: 11 < 5 ?
SALAH → keluar loop
Output:
Baris ke-10
Selesai.
Badan dieksekusi SEKALI meskipun kondisi salah
Kunci Perbedaan
while
Kondisi diperiksa SEBELUM badan.
Badan bisa tidak pernah berjalan jika kondisi awal salah.
do-while
Kondisi diperiksa SETELAH badan.
Badan selalu berjalan minimal sekali — tidak peduli kondisinya.
💡 Kapan pakai do-while: Ketika badan perulangan harus dieksekusi setidaknya sekali sebelum kondisi diperiksa — paling umum untuk menu program, validasi input pertama kali, dan skenario "coba dulu, periksa kemudian".
Bahaya Perulangan
Infinite Loop — Perulangan Tanpa Akhir

Infinite loop terjadi ketika kondisi perulangan tidak pernah menjadi salah, sehingga program terjebak mengulang selamanya dan tidak pernah berlanjut. Program menjadi tidak responsif (hang/freeze) dan harus dihentikan paksa.

🔄 INFINITE LOOP TERDETEKSI
Iterasi 1 → Iterasi 2 → Iterasi 3 → ... → Iterasi 10.000 → ...
Program tidak akan pernah selesai ↑ ↑ ↑
⚠ Akibat Infinite Loop:
CPU digunakan 100% terus-menerus  ·  Program tidak bisa menerima input  ·  Memori bisa habis jika ada alokasi di dalam loop  ·  Harus dihentikan paksa dengan Ctrl+C atau menutup paksa proses

Penyebab paling umum:

Contoh-contoh infinite loop — JANGAN JALANKAN!C
/* ❌ Kasus 1: Lupa update variabel kontrol */
int i = 1;
while (i <= 5) {
    printf("%d\n", i);
    // i++ terlupa! → i selalu 1, kondisi selalu benar
}

/* ❌ Kasus 2: Kondisi selalu benar */
while (1) {   // angka 1 = selalu benar
    printf("Tidak akan berhenti\n");
}

/* ❌ Kasus 3: Update salah arah */
int j = 1;
while (j > 0) {
    printf("%d\n", j);
    j++;   // j bertambah terus, padahal kondisi j > 0
           // seharusnya j-- agar akhirnya j = 0
}
💡 Cara menghindari infinite loop:
① Pastikan selalu ada update variabel kontrol di dalam loop
② Pastikan update mengarah ke kondisi yang akhirnya menjadi SALAH
③ Lacak nilai variabel di atas kertas sebelum menjalankan kode
Catatan: Ada kalanya infinite loop memang disengaja — misalnya pada sistem tertanam (embedded) yang harus terus berjalan, atau menu program yang baru berhenti saat user memilih keluar. Dalam kasus ini, gunakan break atau flag untuk mengontrol kapan keluar.
Aplikasi Nyata do-while
Menu Program — Keluar Saat User Ketik 'Y'

Salah satu penggunaan paling umum do-while adalah menu interaktif. Menu harus ditampilkan dulu sebelum user bisa memilih, sehingga do-while lebih tepat daripada while.

menu_program.c — keluar dengan 'Y'C
#include <stdio.h>

int main() {
    int pilihan;
    char keluar;

    do {
        /* Tampilkan menu — dijalankan DULU sebelum cek kondisi */
        printf("\n===== MENU UTAMA =====\n");
        printf("1. Hitung Luas Persegi Panjang\n");
        printf("2. Hitung Keliling Lingkaran\n");
        printf("3. Tampilkan Tabel Perkalian\n");
        printf("======================\n");
        printf("Pilih menu (1-3): ");
        scanf("%d", &pilihan);

        switch (pilihan) {
            case 1: {
                float p, l;
                printf("Panjang: "); scanf("%f", &p);
                printf("Lebar  : "); scanf("%f", &l);
                printf("Luas   = %.2f\n", p * l);
                break;
            }
            case 2: {
                float r;
                printf("Jari-jari: "); scanf("%f", &r);
                printf("Keliling = %.2f\n", 2 * 3.14 * r);
                break;
            }
            case 3: {
                int n;
                printf("Angka: "); scanf("%d", &n);
                for (int i = 1; i <= 10; i++) {
                    printf("%d x %d = %d\n", n, i, n*i);
                }
                break;
            }
            default:
                printf("Pilihan tidak valid.\n");
        }

        /* Tanya apakah ingin keluar */
        printf("\nApakah Anda ingin keluar? (Y/T): ");
        scanf(" %c", &keluar); // spasi sebelum %c: abaikan newline

    } while (keluar != 'Y' && keluar != 'y');
    // Loop terus jika user TIDAK mengetik Y atau y

    printf("Terima kasih. Program selesai.\n");
    return 0;
}
Mengapa do-while lebih tepat daripada while di sini?
Menu harus ditampilkan dahulu sebelum user bisa memilih apakah ingin keluar. Dengan while, kita perlu menginisialisasi variabel keluar dengan nilai awal tertentu sebelum loop — yang tidak alami. Dengan do-while, menu langsung tampil dan kondisi baru diperiksa setelah user memberi respons.
Struktur 3 dari 3
Perulangan for

Perulangan for adalah pilihan terbaik ketika jumlah iterasi diketahui sejak awal. Keunggulannya: inisialisasi, kondisi, dan update variabel kontrol semuanya ditulis dalam satu baris — sehingga lebih ringkas dan mudah dibaca.

Anatomi Sintaks for
for ( ekspresi_1 ; ekspresi_2 ; ekspresi_3 )
Inisialisasi
ekspresi_1
Dijalankan sekali di awal. Biasanya mendeklarasikan variabel kontrol.
Contoh: i = 0
Kondisi
ekspresi_2
Diperiksa sebelum tiap iterasi. Loop berjalan selama kondisi benar.
Contoh: i <= 10
Update
ekspresi_3
Dijalankan setelah tiap badan selesai. Mengubah variabel kontrol menuju kondisi berhenti.
Contoh: i++
Alur eksekusi for secara lengkapC
for (i=1; i<=5; i++) {
    printf("%d\n", i);
}

/* Urutan eksekusi:
   ① i=1          → inisialisasi (hanya sekali)
   ② 1 <= 5? Ya   → cek kondisi → masuk badan
      printf(1)
   ③ i++          → update: i=2
   ② 2 <= 5? Ya   → cek kondisi → masuk badan
      printf(2)
   ③ i++          → update: i=3
   ... (berlanjut)
   ② 6 <= 5? Tidak → kondisi salah → keluar loop  */
Pentingnya Variabel Kontrol pada for
Variabel Kontrol — Penjaga Perulangan

Variabel kontrol adalah variabel yang nilainya berubah setiap iterasi dan menentukan kapan loop berhenti. Pada perulangan for, ketiga elemen variabel kontrol ditulis eksplisit dalam satu baris — ini justru membuat pengelolaan lebih aman dan mudah dibaca.

❌ Tanpa update — Infinite Loop
for (i=1; i<=5; ) {
    printf("%d\n",i);
    // i++ lupa → i tetap 1
    // 1<=5 selalu benar
    // INFINITE LOOP!
}
✅ Dengan update — Berjalan Normal
for (i=1; i<=5; i++) {
    printf("%d\n",i);
    // i bertambah setiap
    // iterasi → i=1,2,3,4,5
    // lalu 6<=5 salah → stop
}
⚠ Aturan wajib variabel kontrol:
Nilai variabel kontrol harus selalu bergerak menuju kondisi berhenti. Jika kondisi i <= 10, maka update harus i++ (naik menuju 11), bukan i-- yang justru menjauh.
Variasi penggunaan variabel kontrolC
/* Hitung mundur: 10 ke 1 */
for (int i = 10; i >= 1; i--) {
    printf("%d ", i);   // 10 9 8 7 6 5 4 3 2 1
}

/* Loncat 2: 0, 2, 4, 6, 8, 10 */
for (int i = 0; i <= 10; i += 2) {
    printf("%d ", i);
}

/* Menggunakan dua variabel kontrol */
for (int a=1, b=10; a<=5; a++, b--) {
    printf("a=%d b=%d\n", a, b);
}
Perulangan Bersarang
Nested Loop — Loop di Dalam Loop

Sebuah perulangan dapat diletakkan di dalam perulangan lain. Loop di dalam disebut inner loop dan loop luar disebut outer loop. Setiap kali outer loop menjalankan satu iterasi, inner loop menyelesaikan seluruh iterasinya dari awal sampai selesai.

for (baris = 1; baris <= 3; baris++)    ← outer loop
|
for (kolom = 1; kolom <= 4; kolom++)   ← inner loop
printf("*");
printf("\n");
Baris 1: inner loop jalan 4x → cetak ****
Baris 2: inner loop jalan 4x → cetak ****
Baris 3: inner loop jalan 4x → cetak ****
Total eksekusi printf("*"): 3 × 4 = 12 kali
Contoh: pola bintang segitigaC
#include <stdio.h>
int main() {
    int n = 5;
    for (int i = 1; i <= n; i++) {     // outer: baris
        for (int j = 1; j <= i; j++) { // inner: bintang per baris
            printf("* ");
        }
        printf("\n");
    }
    return 0;
}
/* Output:
   *
   * *
   * * *
   * * * *
   * * * * *     */
Contoh: tabel perkalian 3x3C
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        printf("%3d", i * j);
    }
    printf("\n");
}
/*  1  2  3
    2  4  6
    3  6  9  */
Kendali Tambahan
break dan continue
Kata kunciFungsiKapan digunakan
break Keluar sepenuhnya dari loop saat ini Ketika kondisi tertentu terpenuhi dan perulangan harus langsung dihentikan — misal: data ditemukan
continue Lewati sisa badan iterasi ini, lanjut ke iterasi berikutnya Ketika ingin melewati data tertentu tanpa menghentikan keseluruhan loop — misal: lewati angka genap
Contoh: break dan continueC
/* break: henti loop saat menemukan angka 4 */
for (int i = 1; i <= 10; i++) {
    if (i == 4) break;
    printf("%d ", i);  // Output: 1 2 3
}

/* continue: lewati angka ganjil */
for (int i = 1; i <= 10; i++) {
    if (i % 2 != 0) continue;
    printf("%d ", i);  // Output: 2 4 6 8 10
}
⚠ break pada nested loop: break hanya keluar dari loop terdalam tempat ia berada — bukan dari semua loop sekaligus. Untuk keluar dari semua level nested loop, gunakan variabel flag atau goto (dengan hati-hati).
Panduan Memilih
while, do-while, atau for — Kapan Menggunakan Masing-masing?
Aspekforwhiledo-while
Jumlah iterasi Diketahui sebelumnya Tidak diketahui Tidak diketahui
Pemeriksaan kondisi Sebelum badan Sebelum badan Setelah badan
Minimum eksekusi badan 0 kali (bisa tidak jalan) 0 kali (bisa tidak jalan) 1 kali selalu
Variabel kontrol Terkelola dalam satu baris Dideklarasikan di luar Dideklarasikan di luar
Gunakan untuk Iterasi array, cetak pola, hitung 1 s.d. N Baca hingga kondisi, cari data Menu program, validasi input
Diagram Alur — Pilih Struktur Loop yang Tepat
Mulai menentukan loop
Apakah jumlah iterasi
diketahui dari awal?
YA
for
Iterasi array, hitung 1-N, pola
TIDAK
Harus jalan
minimal sekali?
YA
do-while
Menu program, validasi input
TIDAK
while
Cari data, baca sampai kondisi
Perbandingan Kode — Tugas yang Sama
Cetak 1 sampai 5 dengan Ketiga Struktur
for
for(int i=1;
    i<=5; i++) {
  printf("%d\n",i);
}
while
int i=1;
while(i<=5){
  printf("%d\n",i);
  i++;
}
do-while
int i=1;
do {
  printf("%d\n",i);
  i++;
}while(i<=5);
Ketiganya menghasilkan output yang sama (1 2 3 4 5) untuk kasus ini — karena kondisi awal (i=1, i<=5) sudah benar. Perbedaan baru terasa ketika kondisi awal bisa salah, atau ketika badan harus dijalankan minimal sekali.
Latihan Terpadu
Program: Validasi Input + Hitung Nilai Rata-rata

Program ini menggabungkan do-while untuk validasi input, for untuk iterasi sejumlah N data, dan while untuk menu utama.

rata_rata.cC
#include <stdio.h>

int main() {
    char lanjut = 'T';

    /* while: menu utama — ulangi program */
    while (lanjut != 'Y' && lanjut != 'y') {

        int n;
        /* do-while: validasi jumlah data (harus 1-100) */
        do {
            printf("Berapa data yang akan diinput (1-100)? ");
            scanf("%d", &n);
            if (n < 1 || n > 100)
                printf("Tidak valid! Masukkan antara 1-100.\n");
        } while (n < 1 || n > 100);

        float total = 0, nilai;
        /* for: iterasi sejumlah n yang sudah diketahui */
        for (int i = 1; i <= n; i++) {
            printf("Nilai ke-%d: ", i);
            scanf("%f", &nilai);
            total += nilai;
        }

        printf("\nRata-rata dari %d data = %.2f\n",
               n, total / n);

        printf("Keluar? (Y/T): ");
        scanf(" %c", &lanjut);
    }

    printf("Program selesai.\n");
    return 0;
}
💡 Perhatikan pilihan loop di program ini:
do-while untuk validasi input — harus ditampilkan dahulu sebelum dicek
for untuk iterasi n data — jumlahnya sudah diketahui setelah validasi
while untuk menu utama — kondisi keluar diperiksa sebelum masuk lagi
Ringkasan Pertemuan 8 – 9
Yang Telah Kita Pelajari
3
Struktur Perulangan
2
Kata kunci kontrol (break & continue)
1
Bahaya Infinite Loop
  • while — kondisi diperiksa sebelum badan; bisa tidak pernah jalan
  • do-while — kondisi diperiksa setelah badan; selalu minimal sekali
  • for — inisialisasi, kondisi, update dalam satu baris; terbaik untuk jumlah iterasi yang diketahui
  • Variabel kontrol wajib diupdate menuju kondisi berhenti — jika tidak, terjadi infinite loop
  • Infinite loop menyebabkan program hang — CPU 100%, tidak responsif, harus dihentikan paksa
  • Nested loop: inner loop menyelesaikan semua iterasinya untuk setiap satu iterasi outer loop
  • break keluar dari loop; continue lanjut ke iterasi berikutnya
🔜 Topik Berikutnya
Array — Menyimpan Banyak Data dalam Satu Variabel
Perulangan for yang baru dipelajari akan menjadi pasangan utama array — iterasi elemen satu per satu adalah pola yang akan terus digunakan.