- Encabezamiento: Es la interfaz pública de la función y, por tanto, constituye la parte visible y accesible de ésta. Consiste en su tipo y su nombre o identificador, además del tipo y el identificador de cada uno de sus parámetros, si existen.El tipo de una función coincide con el valor devuelto por ésta. El tipo por omisión es entero (int).
- Cuerpo: Es el código de la función y está encerrado entre llaves. Tanto las variables declaradas dentro del cuerpo, denominadas variables locales, como las sentencias ejecutables pertenecientes a dicho cuerpo, son privadas y desconocidas para el resto de las funciones.
Ejemplo: printf()
#include <stdio.h>Parámetros formales: Variables que se colocan en la declaración de la función, entre los paréntesis, separados por comas y precedidos por su tipo, como cualquier variable.
int main() {
int cont = printf("... y le dio un soponcio a Pilatos.\n\n");
printf("Caracteres impresos: %d.\n\n", cont);
system("pause");
return 0;
}
return x; /* resultado de la función: valor de "x" */
puts("Esta sentencia NUNCA se ejecuta.");
puts("Y ésta tampoco.");
}
- Operador de dirección (&): Indica la dirección en que se ha almacenado la variable afectada por dicho operador.
- Operador de indirección (*): Accede al valor que se encuentra en una dirección.
tipo *variable;
#include <stdio.h>
int main() {int entero = 4;
int *puntent; /* puntero a entero */
puntent = &entero; /* "puntent" apunta a "entero" */
printf("El entero apuntado por \"puntent\" es %d.\n", *puntent);
/* "*puntent": acceso indirecto al valor de "entero" */
system("pause");
return 0;
}
Ejemplo 3.6. Ejecutar el siguiente programa y comprobar que, tras la llamada a la función intercambia(), los valores de los parámetros reales (las variables x e y) ahora sí resultan modificados por dicha función. En este caso, la función intercambia() no se limita a recibir los valores de x e y, sino que ahora recibe las direcciones de estas variables. Por tanto, la función auxiliar conoce en qué posición de memoria se encuentra cada una y, a través de sus direcciones, puede acceder a dichas variables indirectamente para consultar sus valores y modificarlos.
#include <stdio.h>
void intercambia(int *, int *); /* encabezamiento o prototipo */
int main() {
int x = 5, y = 10;
printf("Antes: x = %d e y = %d.\n\n", x, y);
intercambia(&x, &y); /* paso por referencia */
printf("Ahora: x = %d e y = %d.\n\n", x, y);
system("pause");
void intercambia(int *a, int *b) {
return 0;
}
int temp = *a;
*a = *b;
*b = temp;
}
system("pause");
return 0;
}
int cuadrante(int x, int y) { /* parámetros formales: "x" e "y" */
if (x == 0 || y == 0) return 0;
if (x > 0) {
return 3;
if (y > 0) return 1;
return 4;
}
if (y > 0) return 2;
}
- Para obtener el máximo común divisor de dos enteros positivos se utilizará el algoritmo de Euclides (ver capítulo de ejercicios del guión anterior).
- La suma de los cien enteros siguientes a uno dado (x) puede calcularse como la suma iterada de los enteros comprendidos entre x + 1 y x + 100, ambos inclusive.
system("pause");
return 0;
}
unsigned mcd(unsigned x, unsigned y) {
while (x != y)
if (x > y)
x -= y;
else
y -= x;
return x;
}
unsigned suma_cien(unsigned x) {
unsigned sum = 0, tope = x + 100;
x++; /* x = x + 1; */
while (x <= tope) {
sum += x; /* sum = sum + x; */
x++; /* x = x + 1; */
}
return sum;
}
#include <stdio.h>
void mensaje(int); /* encabezamiento o prototipo */
int main() {
mensaje(5 + 5); /* cualquier expresión puede funcionar
como parámetro real */
system("pause");
return 0;
}
void mensaje(int arg) {
puts("Subprograma demostrativo.");
printf("Valor del argumento: %d.\n", arg);
}
#include <stdio.h>
void prueba(void); /* encabezamiento o prototipo */
int a = 5; /* variable global y externa a las funciones */
int main() {
a = 1;
prueba();
system("pause");
return 0;
}
void prueba() {
printf("La variable \"a\" vale: %d.\n", a);
}
Fibo(0) = 0La función fibo() calcula el término n-simo de forma iterativa: A partir de los dos primeros términos se van obteniendo sucesivamente los demás hasta llegar al término solicitado, cuyo número de orden se ha suministrado como parámetro a dicha función.
Fibo(1) = 1
Fibo(n) = Fibo(n - 1) + Fibo(n - 2)
#include <stdio.h>Ejemplo: Cálculo del término undécimo de la sucesión de Fibonacci.
unsigned fibo(unsigned); /* encabezamiento o prototipo */
int main() {
unsigned x;
printf("Introducir entero: ");
...
printf("\nFibonacci(%u) = %u.\n\n", x, fibo(x));
...
return 0;
}
unsigned fibo(...) {
...
unsigned i = 2;
if (n == 0 || n == 1) return n;
/* casos base: fibo (0) == 0 y fibo(1) == 1 */
s1 = 0;
s2 = 1;
... (i <= n) { /* caso general: fibo(n) */
s3 = s1 + s2;
s1 = s2; /* preparar siguiente iteración */
s2 = s3;
...
}
...
}
Fibo(0) = 0;
Fibo(1) = 1;
Fibo(2) = Fibo(1) + Fibo(0) = 0 + 1 = 1;
Fibo(3) = Fibo(2) + Fibo(1) = 1 + 1 = 2;
Fibo(4) = Fibo(3) + Fibo(2) = 2 + 1 = 3;
Fibo(5) = Fibo(4) + Fibo(3) = 3 + 2 = 5;
Fibo(6) = Fibo(5) + Fibo(4) = 5 + 3 = 8;
Fibo(7) = Fibo(6) + Fibo(5) = 8 + 5 = 13;
Fibo(8) = Fibo(7) + Fibo(6) = 13 + 8 = 21;
Fibo(9) = Fibo(8) + Fibo(7) = 21 + 13 = 34;
Fibo(10) = Fibo(9) + Fibo(8) = 34 + 21 = 55;