Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Funciones PDF
Funciones PDF
Contenido
INTRODUCCIN ........................................................................................................................ 2
Declaracin de una funcin........................................................................................................... 3
Definicin de una funcin............................................................................................................. 4
FUNCION MAIN ......................................................................................................................... 5
Llamada a una funcin .................................................................................................................. 6
Variables Locales .......................................................................................................................... 6
Variables Globales ........................................................................................................................ 7
Paso por valor y Referencia .......................................................................................................... 8
Funciones para el manejo de cadenas.11
Ejercicios Resueltos .................................................................................................................. 133
Ejercicios Propuestos ................................................................................................................ 177
INTRODUCCIN
Una funcin es un fragmento de cdigo que realiza una tarea bien definida. Por ejemplo, la
funcin printf imprime por la salida estndar los parmetros que le pasamos. Al igual que esta
funcin, existen otras funciones que realizan diversas tareas ya definidas en el estndar ANSY
C y que pueden ser utilizadas por el programador. Este tipo de funciones predefinidas son
denominadas funciones de biblioteca. Sin embargo, cada programador define sus propias
funciones de acuerdos a sus necesidades. Las funciones que define el programador son
conocidas como funciones de usuario.
La utilizacin de funciones nos permite dividir un programa extenso en pequeos segmentos
que realizan tareas concretas. Probablemente, dentro de un mismo programa se realicen las
mismas tareas varias veces, lo que se facilita mediante la utilizacin de funciones. Sin embargo,
es probable que ciertas funciones no sean reutilizables, pero al usarlas se mejora la legibilidad
del programa.
Con el propsito de permitir un manejo eficiente de los datos, las funciones en C no se pueden anidar. En
otras palabras, una funcin no se puede declarar dentro de otra funcin, por lo que todas las funciones son
globales o externas, lo que hace que puedan llamarse desde cualquier parte de un programa.
Las funciones son los bloque constructores en C, y el lugar donde se centra toda la actividad del
programa siendo una de las caractersticas principales de C.
El bloque es el cuerpo de la funcin y el nombre del bloque es el nombre de la funcin, cuando
se declara una funcin adems del cuerpo y el nombre de la misma tambin hay que especificar
los parmetros o argumento y el tipo de resultado que retornara.
Un argumento es el valor que se le pasa a una funcin cuando estas es llamada, dicho valor ser
almacenado en el parmetro correspondiente de la funcin.
Ej:
Tipo_Retorno Nombre_funcion(Lista_de_parametros)
{
//Cuerpo_de_la_Funcion
//Valor retornado
}
Donde:
tipo_de_retorno: es el tipo del valor devuelto por la funcin, o, en caso de que la
funcin no devuelva valor alguno, la palabra reservada void.
Nombre_funcin: es el nombre o identificador asignado a la funcin.
Lista_de_parmetros: es la lista de declaracin de los parmetros que son pasados
a la funcin. stos se separan por comas. Debemos tener en cuenta que pueden
existir funciones que no utilicen parmetros.
Cuerpo_de_la_funcin: est compuesto por un conjunto de sentencias que llevan
2
//Declaracin de la funcin
//Definicin de la funcin
{
//Cuerpo de la funcin
}
3
Las variables declaradas en el cuerpo de la funcin son locales y por definicin solamente son
accesibles dentro del mismo.
El Tipo especifica el tipo de datos retornados por la funcin, este puede ser cualquier tipo de
valor menos una matriz o una funcin, si no se especifica se supone que en int. Para indicar que
no devuelve nada se utiliza la palabra reservada void. Ej:
void sumar(int x,int y);
FUNCION MAIN
La filosofa en la que se base el diseo de C es el empleo de funciones. Por esta razn, un
programa en C contiene al menos una funcin, la funcin main. Esta funcin es particular dado
que la ejecucin del programa se inicia con las instrucciones contenidas en su interior. Una vez
iniciada la ejecucin del programa, desde la funcin main se puede llamar a otras funciones y,
posiblemente, desde estas funciones a otras. Otra particularidad de la funcin main es que se
llama directamente desde el sistema operativo y no desde ninguna otra funcin. De esta manera,
un programa en C slo puede contener una funcin main.
Su definicin es:
void main(void)
{
//Cuerpo de la funcin
}
EJ: El siguiente programa calcula el cubo de los nmeros del 1 al 5 utilizando una funcin definida por
el usuario.
#include <stdio.h>
int cubo(int base);
main()
{
int numero;
for(numero=1; numero<=5; numero++)
{
printf("El cubo del nmero %d es %d\n", numero, cubo(numero));
}
return 0;
}
int cubo(int base)
{
int potencia;
potencia = base * base * base;
return potencia;
}
La salida es:
El cubo del nmero 1 es 1
El cubo del nmero 2 es 8
El cubo del nmero 3 es 27
El cubo del nmero 4 es 64
El cubo del nmero 5 es 125
Variables Locales
Las variables locales se crean en el momento en que se activa la funcin, y desaparecen en el
momento en que la funcin termina. Veamos un ejemplo.
#include <stdio.h>
#include <ctype.h>
int suma_d (int x)
{
int d, suma;
//Variables locales
suma=0;
d = x % 10;
while (x >0)
{
suma = suma + d;
x = x/10;
d = x%10;
}
return (suma);
}
void main ()
{
int a;
printf ("Escribe el numero:\n");
scanf ("%d",&a);
printf ("La suma de digitos es %d\n",suma_d(a));
}
Variables Globales
A diferencia de las variables locales cuyo mbito estaba confinado a la funcin donde estaban
declaradas, el mbito de las variables globales se extiende desde el punto en el que se definen
hasta el final del programa. En otras palabras, si definimos una variable al principio del
programa, cualquier funcin que forme parte de ste podr utilizarla simplemente haciendo uso
de su nombre.
La utilizacin de variables globales proporciona un mecanismo de intercambio de informacin
entre funciones sin necesidad de utilizar argumentos. Por otra parte, las variables globales
mantienen el valor que se les ha asignado dentro de su mbito, incluso despus de finalizar las
funciones que modifican dicho valor. Debemos tener en cuenta que el uso de variables globales
para el intercambio de informaciones entre funciones puede resultar til en algunas situaciones
(como cuando se desea transferir ms de un valor desde una funcin), pero su utilizacin podra
llevarnos a programas de difcil interpretacin y complejos de depurar.
Ej: Utilizacin de variables globales como mecanismo de intercambio de informacin entre funciones.
#include<stdio.h>
void unaFuncion();
void otraFuncion();
int variable;
void main()
{
variable = 9;
printf("El valor de variable es: %d\n", variable);
unaFuncion();
otraFuncion();
printf("Ahora el valor de variable es: %d\n", variable);
return 0;
}
void unaFuncion()
{
printf("En la funcin unaFuncion, variable es: %d\n", variable);
}
void otraFuncion()
{
variable++;
printf("En la funcin otraFuncion, variable es: %d\n",variable);
}
La salida es:
El valor de variable es: 9
En la funcin unaFuncion, variable es: 9
En la funcin otraFuncion, variable es: 10
Ahora el valor de variable es: 10
Dado que lo que se pasa a la funcin modificar es una copia de la variable i, el valor de sta en
la funcin main no se ve alterado cuando dentro de la funcin modificar se cambia el valor de
variable. De ah, la salida del ejemplo anterior es la siguiente:
i=1 antes de llamar a la funcin modificar
variable = 1 dentro de modificar
variable = 9 dentro de modificar
i=1 despus de llamar a la funcin modificar
Como ya hemos visto, cuando se pasa un argumento por valor, realmente se pasa una copia de
ste, y si esta copia se modifica el argumento original no se ve alterado. Sin embargo, en
muchas ocasiones lo que queremos es que una funcin cambie los valores de los argumentos
que le pasamos. Para lograrlo se utiliza lo que se conoce como paso de argumentos por
referencia. En estos casos, no se pasa una copia del argumento, sino el argumento mismo.
Cuando realizamos un paso de argumentos por referencia en C, realmente lo que estamos
pasando son direcciones de memoria. En otras palabras, lo que le pasamos a la funcin son las
direcciones de memoria de los argumentos. Como hemos visto en la unidad anterior, esta
operacin se logra mediante la utilizacin de punteros. De este modo, cuando llamamos a una
funcin, lo que realmente le pasamos son punteros a los argumentos que deseamos modificar.
Veamos el ejemplo anterior utilizando el paso de argumentos por referencia:
#include <stdio.h>
void modificar(int *variable);
void main()
{
int i = 1;
printf("\ni=%d antes de llamar a la funcin modificar", i);
8
modificar(&i);
printf("\ni=%d despus de llamar a la funcin modificar", i);
return 0;
}
void modificar(int *variable)
{
printf("\nvariable = %d dentro de modificar", *variable);
*variable = 9;
printf("\nvariable = %d dentro de modificar", *variable);
}
La salida de este ejemplo sera:
i=1 antes de llamar a la funcin modificar
variable = 1 dentro de modificar
variable = 9 dentro de modificar
i=9 despus de llamar a la funcin modificar
Como se puede observar, el valor de i ha cambiado puesto que la funcin modificar ha utilizado
la direccin de memoria de esta variable en la sentencia de asignacin *variable = 9.
Analicemos detenidamente este ejemplo. Lo primero que tenemos que tener en cuenta es que la
premisa de que en C todos los argumentos se pasan por valor sigue siendo cierta. Lo que sucede
es que en este caso estamos pasando el valor de la direccin de memoria de la variable i y no el
valor de su contenido (1). Para pasar la direccin de memoria de una variable se utiliza el
operador &. Al finalizar la funcin, el valor de dicha direccin permanece igual y lo que se ha
modificado es el contenido de esa direccin de memoria. Dentro de la funcin se utilizan los
punteros para trabajar con las direcciones de memoria (*variable).
Dado que el paso de argumentos por referencia es comn en C, conviene que en este punto
ampliemos el concepto de puntero. Consideremos las siguientes declaraciones:
int dato;
int *puntero;
La primera de las declaraciones reserva memoria para almacenar una variable de tipo entero
(int) mientras que la segunda declaracin reserva memoria para almacenar una direccin. A
pesar de que apunta a una variable de tipo entero, lo que se va a almacenar es una direccin.
Como en el fondo un puntero puede apuntar a cualquier cosa, C permite la declaracin de
punteros tipo void. Supongamos que el compilador reserva la direccin en hexadecimal bffff120
para la variable dato y la direccin en hexadecimal 0012fed4 para puntero.
En la Figura 3.1 se muestra grficamente la representacin de la declaracin de las variables
Anteriores
dato = 99;
puntero = &dato;
El resultado en la memoria se muestra en la Figura 3.2. Debemos recordar que mediante el
operador & obtenemos la direccin de una variable.
10
Descripcion
Copia una cadena de caracteres en otra.Se detiene cuando encuentra el
terminador nulo.
Aade una cadena de caracteres a otra.
Busca, en una cadena, un caracter dado.
Compara dos cadenas.
Macro que compara dos cadenas sin distinguir entre maysculas y minsculas
Copia una cadena.
Busca segmentos que no contienen un subconjunto de un conjunto especificado
de caracteres.
Copia una cadena a una nueva localidad.
Genera un mensaje de error definido por el programador.
Retorna el apuntador al mensaje asociado con el valor del error.
Compara dos cadenas sin diferenciar entre maysculas y minsculas
Determina la longitud de una cadena.
Convierte las maysculas de una cadena en minsculas.
Aade el contenido de una cadena al final de otra.
Compara parte de una cadena con parte de otra.
Compara parte de una cadena con parte de otra, sin distinguir entre maysculas y
minsculas.
Copia un un nmero de bytes dados, desde una cadena hacia otra.
Compara parte de una cadena con parte de otra, sin distinguir entre maysculas y
minsculas.
Hace que un grupo de elementos de una cadena tengan un valor dado.
Busca la primera aparicin, en una cadena, de cualquier caracter de un conjunto
dado.
Busca la ltima aparicin de un caracter en una cadena.
Invierte el orden de los caracteres de una cadena.
Hace que los elementos de una cadena tengan un valor dado.
Busca en una cadena el primer segmento que es un subconjunto de un conjunto
de caracteres dado
Busca en una cadena la aparicin de una subcadena dada.
Convierte la hora actual a una cadena.
Convierte una cadena a un valor double long double.
Convierte una cadena a un valor long.
Convierte una cadena a un valor unsigned long.
Convierte las minsculas de una cadena a maysculas.
11
strcmp()
Strcmp (cadena1, cadena2) ;
strcmpi()
strcpy (cadena1, cadena2);
strlwr()
strlwr (cadena);
strrev()
strrev (cadena);
/ * Programa de ejemplo para utilizar las funciones de cadena * /
# Include <stdio.h>
# Include <string.h>
void main ()
{
char s1 [20], s2 [20], s3 [20];
int X, L1, L2, L3;
printf ("Introduzca las cadenas");
scanf ("% s% s", s1, s2);
x = strcmp (s1, s2);
if (x! = 0)
{
printf ("\ nStrings no son iguales \ n");
strcat (s1, s2);
}
printf ("\ nStrings son iguales");
strcpy (s3, s1);
l1 = strlen (s1);
l2 = strlen (s2);
l3 = strlen (s3);
printf ("\ ns1% s = \ longitud t =% d caracteres \ n", s1, L1);
printf ("\ ns2% s = \ longitud t =% d caracteres \ n", s2, l2);
printf ("\ ns3% s = \ longitud t =% d caracteres \ n", s3, l3);
}
12
Ejercicios Resueltos
Realizar una funcin llamada par, que toma un nmero entero como parmetro, y
devuelve 1 si es par o devuelve 0 si es impar. NOTA: Para saber si un nmero entero es
par, al dividirlo entre 2 su resto debe ser 0.
#include<stdio.h>
int par(int); // o int par(int numero);
int main()
{
int numero, resultado;
printf(Introduzca un nmero:\n);
scanf(%i,&numero);
resultado=par(numero);
if (resultado==1)
printf(Es par.\n);
else
printf(Es impar.\n);
return(0);
}
/* Funcin par: Devuelve un valor indicando si un nmero entero es par o no. */
int par(int numero)
{
if((numero%2)==0)
return(1);
else
return(0);
}
13
Realizar una funcin llamada media2, que toma dos nmeros reales como parmetros, y
devuelve un nmero real que es la media de los dos nmeros pasados como parmetros.
NOTA: Para calcular la media de dos nmeros, se suman, y ese resultado se divide entre 2.
#include<stdio.h>
float media2(float,float);
//o float media2(float n1, float n2);
int main()
{
float n1, n2, resultado;
printf(Introduzca un nmero real:\n);
scanf(%f,&n1);
printf(Introduzca otro nmero real:\n);
scanf(%f,&n2);
resultado=media2(n1,n2);
printf(La media es: %f.\n,resultado);
return(0);
}
// Funcin media2: Devuelve la media de 2 nmeros.
float media2(float n1, float n2)
{
float resultado;
resultado=(n1+n2)/2;
return(resultado);
}
14
Realizar una funcin llamada media3, que toma tres nmeros reales como parmetros, y
no devuelve nada. Esa funcin debe calcular la media de los tres nmeros pasados como
parmetros y mostrar con un mensaje cul es la media calculada. NOTA: Para calcular la
media de tres nmeros, se suman, y ese resultado se ivide entre 3.
#include<stdio.h>
void media3(float,float,float);
//o void media3(float n1,float n2,float n3);
int main()
{
float n1, n2, n3;
printf(Introduzca un nmero real:\n);
scanf(%f,&n1);
printf(Introduzca otro nmero real:\n);
scanf(%f,&n2);
printf(Introduzca otro nmero real:\n);
scanf(%f,&n3);
media3(n1,n2,n3);
return(0);
}
// Funcin media3: Informa de la media de void media3(float n1, float n2, float n3)
3 nmeros.
{
float resultado;
resultado=(n1+n2+n3)/3;
printf(La media es:%f\n,resultado);
}
15
Realizar una funcin llamada negativo, que toma un nmero entero como parmetro, y
devuelve 1 si es negativo o 0 si no lo es.
#include<stdio.h>
int negativo(int numero);
int main()
{
int n,resultado;
printf(Introduzca un nmero:\n);
scanf(%i,&n);
resultado=negativo(n);
if (resultado==1)
printf(Es un nmero negativo.\n);
else
printf(No es negativo.\n);
return(0);
}
/* Funcin negativo: Devuelve 1 si es negativo el nmero entero pasado como parmetro, o 0 si
no lo es. */
int negativo(int numero)
{
int res;
if (numero<0)
res=1;
else
res=0;
return(res);
}
16
Ejercicios Propuestos
1. 1-Realice un programa en C que contenga una funcin llamada invertir que
reciba un parmetro de tipo char y que retorne la cadena invertida.
2. Disee un Programa en C que contenga una funcin llamada primo que reciba
como parmetro un numero entero positivo. Retorne 1 si en numero es primo de
los contrario retorne 0. Ojo, los nmeros primos slo son divisibles por el
mismo y por la unidad (1).
3. Disee un programa en C que contenga un funcin llamada factorial que reciba
como parmetro un numero entero positivo y muestre su facturial.
4. Disee un programa en C que contenga 4 funciones (sumar, restar, dividir,
multiplica), las cuales recibirn 2 parmetros de tipo entero y retorne el
resultado de la operacin. Haga uso del switch.
5. Disee un programa con una funcin llamada potencia, que dada una cifra entera
positiva, sea elevada a una potencia introducida por el usuario, la funcin
recibir 2 parmetros enteros y retornara el resultado de la operacin . (Ejemplo:
5^2=25).
6. Escribir una funcin reemplaza, la cual toma una cadena como parmetro, le
reemplaza todos los espacios en blanco de la cadena por un guin bajo, y
devuelve el nmero de espacios reemplazados.
17