// control de flux

Condicionals en C

if, else, switch i l'operador ternari: com fa un programa per prendre decisions segons una condició.

if executar només si es compleix una condició

Sintaxi

if (condició) {
    // s'executa només si condició és certa
}

Exemple

int nota = 7;
if (nota >= 5) {
    printf("Aprovat\n");
}

Si nota >= 5 és certa, s'executa el cos. Si és falsa, simplement es continua després del bloc, sense fer res.

else l'alternativa

Exemple

int nota = 3;
if (nota >= 5) {
    printf("Aprovat\n");
} else {
    printf("Suspès\n");
}

El bloc else s'executa exactament quan la condició de l'if és falsa. Sempre s'executa un dels dos blocs, mai els dos.

else if encadenar diverses condicions

Exemple

int nota = 6;
if (nota >= 9) {
    printf("Excel·lent\n");
} else if (nota >= 7) {
    printf("Notable\n");
} else if (nota >= 5) {
    printf("Aprovat\n");
} else {
    printf("Suspès\n");
}

Es comproven les condicions en ordre, d'una en una. En el moment que una és certa, s'executa el seu bloc i ja no es comprova cap més condició de la cadena.

switch triar entre valors concrets

Quan cal comparar una mateixa variable amb molts valors possibles, un switch és més clar que una cadena llarga d'else if.

Sintaxi

switch (variable) {
    case valor1:
        // ...
        break;
    case valor2:
        // ...
        break;
    default:
        // si no coincideix amb cap cas
}

Exemple

int dia = 3;
switch (dia) {
    case 1:
        printf("Dilluns\n");
        break;
    case 2:
        printf("Dimarts\n");
        break;
    case 3:
        printf("Dimecres\n");
        break;
    default:
        printf("Dia no vàlid\n");
}

El default és opcional i s'executa quan cap case coincideix.

Compte amb oblidar el break!

Si un case no acaba amb break, l'execució continua cap al case següent encara que no hi torni a haver cap comprovació — es diu fall-through, i sol ser un error involuntari.

int x = 1;
switch (x) {
    case 1:
        printf("u\n");
        // falta el break!
    case 2:
        printf("dos\n");
        break;
}
// imprimeix "u" I "dos", encara que x només val 1

?: operador ternari

Una forma compacta d'escriure un if-else que retorna un valor, útil quan només vols triar entre dues expressions.

Sintaxi

condició ? valor_si_certa : valor_si_falsa

Exemple

int a = 5;
int b = 8;
int max = (a > b) ? a : b;
printf("%d\n", max);

Equival a: si a > b, max val a; si no, val b. Aquí a > b és fals, així que max val 8.

Mira quin camí pren el programa

Tria una variant i avança pas a pas per veure quina condició es compleix i quin bloc s'acaba executant.

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?