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
