// aprenentatge de bucles

Bucles en C

while, for i do-while: com repeteix un programa instruccions, com es controla amb break i continue, i com llegir-ne l'execució pas a pas.

Per què repetim instruccions?

Un bucle executa un bloc de codi repetidament mentre es compleixi (o fins que es compleixi) una condició. Evita haver d'escriure la mateixa instrucció moltes vegades i permet processar llistes de dades, comptar, o esperar un esdeveniment.

while mentre la condició sigui certa

Comprova la condició abans de cada volta. Si és falsa des del principi, el cos no s'executa mai.

Sintaxi

while (condició) {
    // cos: s'executa mentre condició sigui certa
}

Exemple

int i = 1;
while (i <= 5) {
    printf("%d\n", i);
    i++;
}

S'imprimeixen els nombres 1 a 5. Cada volta: es comprova i <= 5, s'executa el cos, i s'incrementa i manualment — si oblidéssim l'i++, el bucle no acabaria mai.

for comptador amb tres parts

Agrupa en una sola línia la inicialització, la condició i l'increment. És la forma habitual quan ja saps quantes voltes vols fer.

Sintaxi

for (inicialització; condició; increment) {
    // cos
}

Exemple

for (int i = 1; i <= 5; i++) {
    printf("%d\n", i);
}

int i = 1 s'executa una única vegada, al principi. Després, a cada volta: es comprova i <= 5; si és certa s'executa el cos i, en acabar, s'executa i++; llavors es torna a comprovar la condició.

do-while primer el cos, després la condició

Igual que while, però la condició es comprova després del cos. Per això el cos s'executa sempre com a mínim una vegada, encara que la condició sigui falsa des del principi.

Sintaxi

do {
    // cos: s'executa sempre com a mínim un cop
} while (condició);

Exemple

int i = 9;
do {
    printf("%d\n", i);
    i++;
} while (i <= 5);

Encara que 9 <= 5 és fals, s'imprimeix un cop el 9 abans de comprovar-ho. És útil, per exemple, quan vols demanar una dada a l'usuari almenys una vegada i repetir-ho si la introdueix malament.

Control del flux dins un bucle

De vegades cal sortir abans d'hora, o saltar-nos una volta concreta sense sortir del tot.

break

Talla el bucle immediatament: no es torna a comprovar la condició, s'ix directament del bucle.

for (int i = 1; i <= 10; i++) {
    if (i == 4) {
        break;
    }
    printf("%d\n", i);
}
// imprimeix: 1 2 3

continue

Salta directament a la següent volta (a l'increment, en un for), sense executar la resta del cos d'aquesta volta.

for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        continue;
    }
    printf("%d\n", i);
}
// imprimeix: 1 2 4 5  (el 3 no s'arriba a imprimir)

Mira el bucle executar-se pas a pas

Tria una variant i avança pas a pas (o deixa-ho en reproducció automàtica) per veure com evolucionen les variables i la sortida per terminal.

Codi

Variables

NomValor

Terminal

Pas 1 / 1

Exercicis d'autoavaluació

Cada exercici es genera amb valors nous a l'atzar. Llegeix el codi, pensa quina serà la sortida per terminal i comprova-ho.

Quina serà la sortida per terminal d'aquest programa?