En aquest tema, aprendrem sobre l'ús de la sentència switch
en C, que és una estructura de control que permet seleccionar una de diverses alternatives basant-se en el valor d'una expressió. Aquesta estructura és especialment útil quan es tenen múltiples condicions que depenen del valor d'una sola variable.
Conceptes Clau
- Sintaxi del
switch
: La forma bàsica de la sentènciaswitch
. - Casos (
case
): Cada possible valor que la variable pot tenir. - Sentència
break
: Utilitzada per sortir delswitch
després d'executar un cas. - Cas per defecte (
default
): Executat si cap dels casos coincideix.
Sintaxi del switch
La sintaxi bàsica d'una sentència switch
és la següent:
switch (expressió) { case valor1: // codi a executar si expressió == valor1 break; case valor2: // codi a executar si expressió == valor2 break; // més casos... default: // codi a executar si cap cas coincideix }
Explicació de la Sintaxi
expressió
: És una expressió que es compara amb els valors dels casos. Aquesta expressió ha de ser de tipus enter o caràcter.case valor
: Cada cas representa un valor que l'expressió pot tenir. Si l'expressió coincideix amb aquest valor, s'executa el codi associat.break
: Aquesta sentència s'utilitza per sortir delswitch
després d'executar el codi d'un cas. Si s'omet, l'execució continuarà amb el següent cas (això es coneix com a "fall-through").default
: Opcional. S'executa si cap dels casos coincideix amb l'expressió.
Exemple Pràctic
Vegem un exemple pràctic per entendre millor com funciona el switch
:
#include <stdio.h> int main() { int dia = 3; switch (dia) { case 1: printf("Dilluns\n"); break; case 2: printf("Dimarts\n"); break; case 3: printf("Dimecres\n"); break; case 4: printf("Dijous\n"); break; case 5: printf("Divendres\n"); break; case 6: printf("Dissabte\n"); break; case 7: printf("Diumenge\n"); break; default: printf("Dia invàlid\n"); } return 0; }
Explicació de l'Exemple
- Variable
dia
: Té el valor 3. switch (dia)
: Compara el valor dedia
amb els valors dels casos.case 3
: Com quedia
és 3, s'executa el codi dins d'aquest cas, imprimint "Dimecres".break
: Després d'imprimir, la sentènciabreak
fa que el programa surti delswitch
.
Exercicis Pràctics
Exercici 1
Escriu un programa que llegeixi un caràcter de l'usuari i determini si és una vocal o una consonant utilitzant una sentència switch
.
Solució
#include <stdio.h> int main() { char lletra; printf("Introdueix una lletra: "); scanf("%c", &lletra); switch (lletra) { case 'a': case 'e': case 'i': case 'o': case 'u': case 'A': case 'E': case 'I': case 'O': case 'U': printf("És una vocal.\n"); break; default: printf("És una consonant.\n"); } return 0; }
Exercici 2
Escriu un programa que llegeixi un número del 1 al 12 i imprimeixi el nom del mes corresponent. Utilitza una sentència switch
.
Solució
#include <stdio.h> int main() { int mes; printf("Introdueix un número del 1 al 12: "); scanf("%d", &mes); switch (mes) { case 1: printf("Gener\n"); break; case 2: printf("Febrer\n"); break; case 3: printf("Març\n"); break; case 4: printf("Abril\n"); break; case 5: printf("Maig\n"); break; case 6: printf("Juny\n"); break; case 7: printf("Juliol\n"); break; case 8: printf("Agost\n"); break; case 9: printf("Setembre\n"); break; case 10: printf("Octubre\n"); break; case 11: printf("Novembre\n"); break; case 12: printf("Desembre\n"); break; default: printf("Número invàlid\n"); } return 0; }
Errors Comuns i Consells
- Ometre la sentència
break
: Si oblides posarbreak
després d'un cas, el programa continuarà executant els casos següents fins que trobi unbreak
o arribi al final delswitch
. - No utilitzar
default
: És una bona pràctica incloure sempre un casdefault
per gestionar valors inesperats. - Comparar valors no enters o caràcters: Recorda que l'expressió del
switch
ha de ser de tipus enter o caràcter.
Resum
En aquesta secció, hem après com utilitzar la sentència switch
per seleccionar una de diverses alternatives basant-se en el valor d'una expressió. Hem vist la sintaxi bàsica, un exemple pràctic i hem practicat amb alguns exercicis. Ara estem preparats per avançar al següent tema sobre break
i continue
.
Curs de Programació en C
Mòdul 1: Introducció al C
- Introducció a la Programació
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsiques
Mòdul 2: Tipus de Dades i Variables
Mòdul 3: Flux de Control
Mòdul 4: Funcions
- Introducció a les Funcions
- Arguments de Funció i Valors de Retorn
- Àmbit i Durada de les Variables
- Funcions Recursives
Mòdul 5: Arrays i Strings
Mòdul 6: Punteres
Mòdul 7: Estructures i Unions
Mòdul 8: Assignació Dinàmica de Memòria
Mòdul 9: Gestió d'Arxius
- Introducció a la Gestió d'Arxius
- Lectura i Escriptura d'Arxius
- Posicionament d'Arxius
- Gestió d'Errors en Operacions d'Arxius
Mòdul 10: Temes Avançats
- Directives del Preprocessador
- Arguments de Línia de Comandes
- Llistes d'Arguments Variables
- Multifil en C
Mòdul 11: Millors Pràctiques i Optimització
- Llegibilitat del Codi i Documentació
- Tècniques de Depuració
- Optimització del Rendiment
- Consideracions de Seguretat