En aquest tema, explorarem com les funcions en C poden rebre dades a través d'arguments i retornar valors. Aquest concepte és fonamental per a la programació modular i reutilitzable.
Continguts
Introducció als Arguments de Funció
Els arguments de funció són valors que es passen a una funció quan aquesta és cridada. Aquests valors permeten que la funció treballi amb dades específiques proporcionades en el moment de la crida.
Sintaxi Bàsica
Exemple
#include <stdio.h> // Definició de la funció amb arguments int suma(int a, int b) { return a + b; } int main() { int resultat = suma(5, 3); // Crida a la funció amb arguments printf("La suma és: %d\n", resultat); return 0; }
Tipus d'Arguments
Arguments per Valor
Quan es passen arguments per valor, es passa una còpia del valor a la funció. Això significa que els canvis fets a l'argument dins de la funció no afecten la variable original.
void incrementa(int x) { x = x + 1; } int main() { int a = 5; incrementa(a); printf("El valor de a és: %d\n", a); // a segueix sent 5 return 0; }
Arguments per Referència
En C, els arguments es poden passar per referència utilitzant punteres. Això permet que la funció modifiqui la variable original.
void incrementa(int *x) { *x = *x + 1; } int main() { int a = 5; incrementa(&a); printf("El valor de a és: %d\n", a); // a ara és 6 return 0; }
Valors de Retorn
Les funcions en C poden retornar un valor al programa que les ha cridat. El tipus de valor retornat es defineix en la declaració de la funció.
Sintaxi Bàsica
retorn_tipus nom_funció(tipus argument1, tipus argument2, ...) { // Cos de la funció return valor; }
Exemple
#include <stdio.h> int multiplica(int a, int b) { return a * b; } int main() { int resultat = multiplica(4, 7); printf("El producte és: %d\n", resultat); return 0; }
Exemples Pràctics
Exemple 1: Funció que Calcula el Factorial
#include <stdio.h> int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int main() { int num = 5; printf("El factorial de %d és: %d\n", num, factorial(num)); return 0; }
Exemple 2: Funció que Intercanvia Dos Valors
#include <stdio.h> void intercanvia(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int x = 10, y = 20; printf("Abans de l'intercanvi: x = %d, y = %d\n", x, y); intercanvia(&x, &y); printf("Després de l'intercanvi: x = %d, y = %d\n", x, y); return 0; }
Exercicis Pràctics
Exercici 1: Funció que Calcula la Mitjana de Tres Nombres
Descripció: Escriu una funció que prengui tres nombres com arguments i retorni la seva mitjana.
#include <stdio.h> float mitjana(int a, int b, int c) { // Escriu el teu codi aquí } int main() { int x = 5, y = 10, z = 15; printf("La mitjana és: %.2f\n", mitjana(x, y, z)); return 0; }
Solució:
#include <stdio.h> float mitjana(int a, int b, int c) { return (a + b + c) / 3.0; } int main() { int x = 5, y = 10, z = 15; printf("La mitjana és: %.2f\n", mitjana(x, y, z)); return 0; }
Exercici 2: Funció que Troba el Màxim de Dos Nombres
Descripció: Escriu una funció que prengui dos nombres com arguments i retorni el més gran.
#include <stdio.h> int maxim(int a, int b) { // Escriu el teu codi aquí } int main() { int x = 5, y = 10; printf("El màxim és: %d\n", maxim(x, y)); return 0; }
Solució:
#include <stdio.h> int maxim(int a, int b) { if (a > b) { return a; } else { return b; } } int main() { int x = 5, y = 10; printf("El màxim és: %d\n", maxim(x, y)); return 0; }
Conclusió
En aquest tema, hem après com passar arguments a les funcions i com retornar valors. Hem vist la diferència entre passar arguments per valor i per referència, i hem practicat amb exemples i exercicis. Aquests conceptes són essencials per escriure codi modular i reutilitzable en C. En el següent tema, explorarem l'àmbit i la durada de les variables dins de les funcions.
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