Está en la página 1de 6

Fundamentos de Programación

Funciones en C
Objetivos
 Comprender cómo construir programas de manera modular mediante pequeñas piezas llamadas
funciones.
 Presentar las funciones matemáticas disponibles en la biblioteca estándar de C.
 Crear nuevas funciones.
 Comprender el mecanismo utilizado para pasar información entre funciones.
 Introducir las técnicas de simulación mediante la generación de números aleatorios.
 Comprender cómo escribir y utilizar funciones que se invocan a sí mismas.

Introducción.
La mayoría de los programas que resuelven problemas reales son mucho más
grandes que los que resolvemos en las guías de ejercicios, y ya hablamos de que
La modularización
la mejor manera de desarrollar y mantener un programa grande es dividirlo en
módulos más pequeños (técnica divide y vencerás.), los cuales son más del código se
manejables que el programa original. implementa en C
mediante el concepto
A los módulos en C se les llama funciones. Por lo general, los programas en C de función. Una
se escriben combinando nuevas funciones que escribe el programador con función está asociada
funciones ya disponibles en la biblioteca estándar de C. con un identificador o
nombre, que se utiliza
Cada función debe limitarse a realizar una sola tarea bien definida, y el nombre para referirse a ella
de la función debe expresar de manera clara dicha tarea. Esto facilita la
desde el resto del
abstracción y promueve la reutilización de software.
programa. Toda
La biblioteca estándar de C proporciona una rica colección de funciones para función en C debe estar
realizar cálculos matemáticos comunes, manipulación de cadenas, manipulación declarada mediante su
de caracteres, entrada/salida, y muchas otras operaciones útiles. Esto hace que el prototipo, definida
trabajo de programador sea más fácil, debido a que estas funciones mediante el código de
proporcionan muchas de las capacidades que los programadores necesitan. la función e invocada
desde la función
El programador puede escribir funciones para definir tareas específicas que se
podrían utilizar en muchos puntos del programa. A éstas se les llama funciones definidas por el programador.
Las instrucciones reales que definen a las funciones se escriben solamente una vez, y están ocultas a las demás
funciones.

Las funciones se invocan mediante una llamada a función, la cual especifica el nombre de la función y
proporciona información (como argumentos) que la función invocada necesita para llevar a cabo su tarea.
Fundamentos de Programación

Ventajas del uso de Funciones.

 Permiten reducir complejidad.


 Permiten programar modularmente.
 Optimizan el uso de memoria.
 Reutilización.
 Promueven el trabajo en equipo.
 Orientan a la creación de librerías/bibliotecas.

Sintaxis de una función

valor_de_retorno nombre_función (lista-parámetros ) {


bloque de sentencias
}

valor_de_retorno
Puede ser de cualquier tipo de los que conocemos. El valor devuelto por la función será de este tipo. Por defecto,
es decir, si no indicamos el tipo, la función devolverá un valor de tipo entero ( int ). Si no queremos que retorne
ningún valor deberemos indicar el tipo vacío ( void ).

nombre_función Es el identificador que usaremos como nombre de la función. Elegir nombres


significativos de funciones y de parámetros hace que los programas sean más legibles, y ayuda a evitar el uso
excesivo de comentarios.

Si usted no puede elegir un nombre conciso que exprese lo que hace la función, es posible que su función intente
realizar demasiadas tareas. Por lo general, es mejor dividir dicha función en varias funciones más pequeñas.

lista-parámetros
Son los parámetros que recibe la función. Los argumentos de una función no son más que variables locales que
reciben un valor. La lista-parámetros es una lista separada por comas que especifican los parámetros recibidos por
la función cuando ésta es invocada. Si la función no recibe valor alguno, lista-parámetros es void. Se debe indicar
de manera explícita un tipo para cada parámetro, a menos que el parámetro sea de tipo int. Si no se especifica un
tipo, de manera predeterminada se asume el tipo int.

Aunque no es incorrecto hacerlo, en la definición de la función no utilice el mismo nombre para los argumentos
que se pasan a una función y para sus parámetros correspondientes, esto ayuda a evitar la ambigüedad.

Como buena práctica, se recomienda que se incluya el tipo de cada parámetro en la lista de parámetros, incluso si
el parámetro es del tipo predeterminado int.

Bloque de sentencias
Es el conjunto de sentencias que serán ejecutadas cuando se realice la llamada a la función, se encuentran dentro
de llaves y forman el cuerpo de la función. Las funciones pueden ser llamadas desde la función main o desde
otras funciones. Nunca se debe llamar a la función main desde otro lugar del programa.

Por último, recalcar que los argumentos de la función y sus variables locales se destruirán al finalizar la ejecución
de la misma y una función no puede definirse dentro de otra función, bajo ninguna circunstancia.
Fundamentos de Programación

Figure 1 - Ejemplo de función hipotenusa.

Declaración de una función

Al igual que las variables, las funciones también han Olvidar el prototipo de una función provoca un
de ser declaradas. Esto es lo que se conoce como error de sintaxis si en el programa el tipo del valor
prototipo de una función. Para que un programa en de retorno no es int y la definición de la función
C sea compatible entre distintos compiladores es aparece después de la llamada a la función. De lo
imprescindible escribir los prototipos de las contrario, olvidar un prototipo de función puede
funciones. provocar errores en tiempo de ejecución y un
resultado inesperado.
Los prototipos de las funciones pueden escribirse
antes de la función main o bien en otro fichero. Es Es recomendable incluir los prototipos de todas las
común cuando arrancamos, olvidar el punto y coma funciones, para aprovechar las capacidades de
al final del prototipo de la función, es un error de verificación de tipos de C. Utilice la directiva de
sintaxis común al arrancar. preprocesador #include para obtener los prototipos
de función correspondientes a las funciones de la
Los prototipos de las funciones permiten al biblioteca estándar, a partir de los encabezados en
compilador verificar que las funciones se invocan de las bibliotecas apropiadas, o para obtener
manera correcta, además, tener en cuenta que el encabezados que contengan prototipos de funciones
compilador ignora los nombres de variables desarrolladas por usted y/o sus compañeros de
mencionadas en el prototipo de la función. grupo.
Fundamentos de Programación
Encabezados
Cada biblioteca estándar tiene un encabezado correspondiente que contiene los prototipos de las funciones de
dicha biblioteca y las definiciones de los distintos tipos de datos y constantes necesarios para dichas funciones.

Encabezado de la Explicación
biblioteca estándar
<assert.h> Contiene macros e información para agregar diagnósticos y ayudar en la depuración
de programas.
<ctype.h> Contiene los prototipos de las funciones que evalúan ciertas propiedades de los
caracteres, prototipos de funciones para convertir letras de minúscula a mayúscula y
viceversa.
<errno.h> Define macros que son útiles para reportar condiciones de error.
<float.h> Contiene los límites del sistema con respecto al tamaño de los números de punto
flotante.
<limits.h> Contiene los límites del sistema con respecto al tamaño de números enteros.
<locale.h> Contiene prototipos de funciones e información adicional que permite modificar un
programa para adecuarlo al “local” en el que se ejecuta. La idea de “local” permite
al sistema de cómputo manipular diferentes convenciones para expresar datos como
fechas, horas, montos en moneda y grandes números alrededor del mundo.
<math.h> Contiene los prototipos de las funciones matemáticas de la biblioteca.
<setjmp.h> Contiene los prototipos de las funciones que permiten evitar la llamada de función
usual y la secuencia de retorno.
<signal.h> Contiene prototipos de funciones y macros para manipular varias condiciones que se
pudieran presentar durante la ejecución del programa.
<stdarg.h> Define macros para tratar con una lista de argumentos correspondientes a una
función, cuyos números y tipos son desconocidos.
<stddef.h> Contiene definiciones comunes de los tipos utilizados por C para realizar ciertos
cálculos.
<stdio.h> Contiene los prototipos de las funciones de entrada/salida de la biblioteca estándar,
y la información que utilizan.
<stdlib.h> Contiene los prototipos de las funciones para la conversión de números a texto y de
texto a números, asignación de memoria, números aleatorios, y otras funciones de
utilidad.
<string.h> Contiene los prototipos de las funciones para el procesamiento de cadenas.
<time.h> Contiene prototipos de funciones y tipos para manipular la fecha y la hora.
Table 1 - Algunos de los encabezados de la biblioteca estándar.
Fundamentos de Programación
Llamada a funciones.

Una función se invoca mediante una llamada a dicha Existen dos maneras de invocar funciones en la
función. La llamada a la función menciona a la mayoría de los lenguajes de programación, la
función por su nombre y proporciona información llamada por valor y la llamada por referencia.
(como argumentos) que la función necesita para Cuando los argumentos se pasan por valor, se
realizar su tarea. crea una copia del argumento y se pasa a la función
que se invocó. Los cambios hechos a la copia no
Por lo general, las funciones se invocan en un afectan al valor original de la variable dentro de la
programa, escribiendo el nombre de la función función que hace la llamada. Cuando un argumento
seguido por un paréntesis izquierdo, seguido por el se pasa por referencia, la función que hace la
argumento de la función (o una lista de argumentos llamada en realidad permite a la función llamada
separada por comas) y por el paréntesis derecho modificar el valor original de la variable.
como se muestra en la siguiente imagen:
La llamada por valor se debe utilizar siempre que las
funciones que hacen la llamada no necesiten
modificar el valor de la variable original de la
Cada argumento de función puede ser una
llamada. Esto evita los efectos colaterales
constante, una variable, o una expresión y deben
accidentales que afectan de manera importante el
coincidir en número, tipo y orden con los parámetros
desarrollo de sistemas de software correcto y
en la definición de la función.
confiable. La llamada por referencia sólo se debe
utilizar con funciones confiables que necesiten
Cuando un programa encuentra una llamada a una
modificar la variable original.
función, el control se transfiere desde el punto de
invocación hasta la función que fue invocada, las
En C, todas las llamadas se pasan por valor,
instrucciones de la función invocada se ejecutan y el
aunque es posible simular la llamada por referencia
control regresa a la invocación de la función.
mediante los operadores de dirección e indireccción.

Cuando un argumento se pasa por valor, se crea una copia del valor de la
variable y dicha copia se pasa a la función invocada y los cambios que se hagan
a esta copia dentro de la función no afectan el valor de la variable original.

Funciones matemáticas de la biblioteca.


Como ya se ha se comentado, en una expresión también pueden intervenir funciones tanto las definidas por el
programador como las que proporciona el compilador.

Las funciones matemáticas de la biblioteca permiten al programador realizar ciertos cálculos matemáticos
comunes.

Por ejemplo, un programador que quiere calcular e imprimir la raíz cuadrada de 900.0 podría escribir
printf( “%.2f”, sqrt( 900.0 ) );

Cuando se ejecuta esta instrucción, se llama a la función sqrt de la biblioteca estándar para que calcule la raíz
cuadrada del número contenido entre los paréntesis (900.0). El número 900.0 es el argumento de la función sqrt.
La instrucción anterior imprimirá 30.00. La función sqrt toma un argumento de tipo doublé y devuelve un
resultado de tipo double. Todas las funciones matemáticas de la biblioteca devuelven tipos de datos double.
Fundamentos de Programación
En C, cada biblioteca estándar tiene un encabezado correspondiente, el cual contiene los prototipos de todas las
funciones de la biblioteca, así como las definiciones de las distintas constantes simbólicas necesarias para dichas
funciones.

Las funciones matemáticas más comunes que proporciona el C incluidas en la librería math.h son:

Función Descripción Ejemplo


sqrt( 900.0 ) es 30.0
sqrt( x ) la raíz cuadrada de x
sqrt( 9.0) es 3.0
exp( 1.0 ) es 2.718282
exp( x ) función exponencial ex
exp( 2.0 ) es 7.389056
log( 2.718282 ) es 1.0
log( x ) logaritmo natural de x (base e)
log( 7.389056 ) es 2.0
log10( 1.0 ) es 0.0
log10 ( x ) logaritmo de x (base 10) log10( 10.0 ) es 1.0
log10( 100.0 ) es 2.0
fabs( 5.0 ) es 5.0
fabs( x ) valor absoluto de x fabs( 0.0 ) es 0.0
fabs( -5.0 ) es 5.0
ceil( 9.2 ) es 10.0
ceil( x ) redondea x al entero más pequeño no menor que x
ceil( -9.8 ) es -9.0
floor( 9.2 ) es 9.0
floor( x ) redondea x al entero más grande no mayor que x
floor( -9.8 ) es -10.0
pow( 2, 7 ) es 128.0
pow( x, y) x elevada a la potencia y (xy)
pow( 9, 5 ) es 3.0
fmod ( x, y ) residuo de x/y como un número de punto flotante fmod( 13.657, 2.333 ) es 1.992

sin( x ) seno trigonométrico de x (x en radianes) sin( 0.0 ) es 0.0

cos( x ) coseno trigonométrico de x (x en radianes) cos( 0.0 ) es 1.0

tan( x ) tangente trigonométrica de x (x en radianes) tan( 0.0 ) es 0.0


Table 2 - Funciones matemáticas comunes de la biblioteca.

En todas estas funciones, tanto los valores de x e y como los resultados


son de tipo double. Los ángulos para las funciones trigonométricas
deben estar expresados en radianes.

También podría gustarte