Funciones en C Felipe Osorio http://www.ies.ucv.cl/fosorio Instituto de Estadı́stica Pontificia Universidad Católica de Valparaı́so Marzo 26, 2015 1/8 Funciones en C I C es esencialmente funciones! I Provee un mecanismo para producir programas más eficientes. I Programas son más fáciles para entender, modificar y mantener. 2/8 Definiendo una función El formato general para definir funciones es el siguiente: tipo nombre función(argumento1 , argumento2 , . . . ) donde tipo representa uno de los siguientes tipos básicos: 1. int 2. float 3. double 4. char 5. void 3/8 Función valor absoluto # include < stdio .h > /* declaración de funciones */ double fun_abs ( double ); main () { /* función ’ principal ’ */ double number ; printf ( " Ingrese un numero : " ); scanf ( " % lf " , & number ); number = fun_abs ( number ); printf ( " El valor absoluto es % g \ n " , number ); return ; } double fun_abs ( double x ) { /* calcula el valor absoluto de un número real */ if ( x < 0.0) x = -x ; return x ; } 4/8 Recursividad I Las funciones en C tienen la facultad de ser invocadas por ellas mismas. I Esta caracterı́stica se denomina recursividad. I Aunque esta caracterı́stica permite construir programas flexibles, no es muy recomendable (puede consumir mucha memoria) 5/8 Cálculo del factorial de n El factorial de n se define como el producto de todos los enteros desde 1 a n,1 es decir: n! = 1 · 2 · · · (n − 1) · n. Se puede notar que, el factorial de n, satisface la relación de recurrencia: n! = (n − 1)! n 1 Recuerde que 0! = 1. 6/8 Cálculo del factorial de n: versión recursiva long int factorial ( long int n ) { /* calcula el factorial de ’n ’. versión recursiva */ long int ans ; if ( n == 0) ans = 1; else ans = n * factorial ( n - 1); return ans ; } 7/8 Trabajando con arreglos # include < stdio .h > /* declaracion de funciones */ double minimo ( double a [] , int n ); main () { /* función ’ principal ’ */ double a [5] = {157. , -8. , -37. , 26. , 10.} , b [7] = {12.3 , 25.1 , 31. , 5.5 , 3.2 , 8. , 9.9}; printf ( " minimo de a : % g \ n " , minimo (a , 5)); printf ( " minimo de b : % g \ n " , minimo (b , 7)); return ; } double minimo ( double a [] , int n ) { double ans ; int i ; ans = a [0]; for ( i = 1; i < n ; i ++) { if ( a [ i ] < ans ) ans = a [ i ]; } return ans ; } 8/8 Intercambiar dos números # include < stdio .h > /* declaracion de funciones */ void i n t e r c a m b i a r _ 2 _ n u m e r o s ( double , double ); main () { /* función ’ principal ’ */ double a = 0. , b = 1.; printf ( " a = %g , b = % g \ n " , a , b ); printf ( " \ n I nt er c am bi an d o ...\ n " ); i n t e r c a m b i a r _ 2 _ n u m e r o s (a , b ); printf ( " a = %g , b = % g \ n " , a , b ); return ; } void i n t e r c a m b i a r _ 2 _ n u m e r o s ( double a , double b ) { double x ; /* a <-> b */ x = a; a = b; b = x; return ; } 9/8