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
| Nom | Valor |
|---|
Terminal
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?