Vous êtes sur la page 1sur 23

Funciones en lenguaje C

Funciones
Definicin:
Lasfuncionessonlosbloquesdeconstruccin
bsicosdeC.Dentrodeellassedatodala
actividaddelprograma.
Criteriosparacrearlas:
SeusalaestrategiadeDividiryConquistar,en
otraspalabras,esrealizarlaparticindelatarea
ensubtareasmsfcilesdeabordar.
Todoproblemasepuederesolverconfuncioneso
sinellas,perosuusoadecuadohacequeel
programaseamseficiente,fcildeleeryprobar.

2
Funciones: ventajas

1. Facilitaeldiseodescendente.
2.Losprocedimientosdentrodeellassepueden
ejecutarvariasveces.
3.Facilitaladivisindetareas.
4.Sepuedenprobarindividualmente
5.Confuncionesapropiadamentediseadas,es
posibleignorarcomoserealizaunatarea,
sabiendoquesloquehacen.

3
Funciones: Especificacin formal
tipo nombre_funcion(lista de parmetros){
cuerpo de la funcin
}

tipo : especificaeltipodevalorquedevuelvela
funcin.Sinoseespecificatipo,elcompiladorasume
queesentero(int).
lista de parmetros : eslalistadenombresde
variablesseparadosporcomasconsustipos
asociadosquerecibenlosvaloresdelosargumentos
actualesdelallamadaalafuncin.

4
La sentencia return

Fuerzalasalidainmediatadelafuncinenquese
encuentra.
Sepuedeutilizarparadevolverunvalor.

5
Funciones

Lasfuncionesterminansuejecucinyaseaa
travsdelaejecucindelaltimainstruccino
utilizandolasentenciareturn.
Unfuncinpuederetornarvalorslocuandoel
tipoderetornonoesvoid.
Lasfuncionesquesondetiposdistintosdevoid
puedenserutilizadascomooperandosenotras
expresionesdellenguaje.

6
Funciones: modos de uso
1.Funcionesdiseadaspararealizar
operacionesapartirdesusargumentosy
devolverunvalorbasadoensusclculos.
2.Funcionesquenorecibenargumentos,
realizanunprocesoydevuelvenunvalor.
3.Funcionesquenotienenargumentosni
valorderetornoexplcito,operansobreel
entornodevariablesglobalesoatributosdel
sistemaoperativo.

7
Funcin main()

Mediantelasentenciareturn,elprograma
puededevolveruncdigodeterminacinal
procesodellamada(Ej.:enteroaShellde
comandosenUnix).
Elvalordevueltopuedeser0queindica
terminacinnormalounvalorqueidentifica
unerrordetectadoporelprograma.
Elvalordevueltopuedeserusadopara
ejecucincondicionaldecomandosenshell
enUnix.
8
Variables locales y globales
VariablesLocales:
Sedeclarandentrodelafuncinysloestn
disponiblesdurantesuejecucin.
Secreancuandoseentraenejecucinuna
funcinysedestruyencuandosetermina.
Variablesglobales:
Sedeclaranfueradelasfunciones.Puedenser
utilizadasportodaslasfunciones.
Existendurantetodalavidadelprograma.

9
Argumentos de funciones
Sonvariableslocalesconocidascomoparmetros
formalesyseutilizancomounmedioparaentregarle
informacinalafuncin.
Losparmetrosformalesrecibensusvaloresiniciales
desdelosparmetrosreales,esdecirdesdelosvalores
queselespasanatravedelallamada.Ejemplo:

Parmetro real (llamada)


main( ){ Parmetro formal (declaracin)
imprimeEntero(5);
}
void imprimeEntero(int x){
printf(%d\n, x);/* x vale 5 */
}
10
Transferencia de Informacin

por valor: copiaelvalordeunargumentodela


llamadaenelparmetroformaldelafuncin.Por
lotanto,loscambiosenlosparmetrosdela
funcinnoafectanalasvariablesqueseusanen
lallamada.
por referencia: secopialadireccindel
argumentoenelparmetro.Loscambioshechos
alosparmetrosafectanalasvariablesusadas
enlallamadaalafuncin.

11
Ejemplo

Construyaunprogramaquecalculeel
cuadradodelos10primerosnmeros
enteros.

12
Solucin
#include <stdio.h>

int cuadrado(int x){


int r;
r=x*x;
return r;
}

main(){
int i,resultado;
for (i=0;i<10;i++){
resultado = cuadrado (i);
printf("Cuadrado de %d: %d\n",i,resultado);
}
return 0;
}

13
Ejemplo

Construyaunafuncinquecalculelasumade
loskprimerosnmerosenterosimpares.

14
Solucin ?
#include <stdio.h>

int sumaImpares(-------){
------------------
return r;
}

15
Ejemplo

Construyaunafuncinquerealiceintercambio
delosvaloresentre2variables.

16
Solucin con error porqu?
#include <stdio.h>
void intercambio(int x, int y){
int temp;
temp=x;
x=y;
y=temp;
printf( x=%d y=%d temp=%d\n,x,y,temp);
}
main(){
int a=1,b=2;
printf("a=%d b=%d\n",a,b);
intercambio(a,b);
printf("a=%d b=%d\n",a,b);
return 0;
}
17
Solucin correcta
#include <stdio.h>
void intercambio(int *x, int *y){
int temp;
temp=*x;
*x=*y;
*y=temp;
printf( x=%d y=%d temp=%d\n,*x,*y,temp);
}
main(){
int a=1,b=2;
printf("a=%d b=%d\n",a,b);
intercambio (&a,&b);
printf("a=%d b=%d\n",a,b);
return 0;
}

18
Ejemplo

Realizarunafuncin,enelcualseingresaun
nmeroenterodevariascifrasyunentero
conunaposicinyseretornaeldgitode
dichaposicin.
Ejemplo:
Entrada:9872
Salida:8

19
Programa
#include <stdio.h>
int buscar(int x,int k){
int i,n;
if (k<=0 || x<0) return -1;
for (i=0;i<k-1;i++)
x=x/10;
return (x%10);
}
void main(){
int n,k,digito;
printf("Ingrese numero y posicion:");
scanf("%d %d",&n,&k);
digito=buscar(n,k);
if (digito<0) printf("No encontrado\n");
else printf("El digito encontrado es: %d\n",digito);
return 0;
}

20
Prototipos
Uso:
Identificareltipoderetornodelafuncin.
Especificareltipoyelnmerodeargumentosque
utilizalafuncin.
Elprototipodebeaparecerantesdequese
hagacualquierllamadaalafuncin.
Noesnecesarioincluirlosnombresrealesde
losparmetros.

21
Prototipo (cont.)
#include <stdio.h>

int cuadrado(int x); /*Prototipo*/


main(){
int i,resultado;
for (i=0;i<10;i++){
resultado = cuadrado (i);
printf("El cuadrado de %d es %d\n",i,resultado);
}
return 0;
}
int cuadrado(int x){
int a;
a=x*x;
return a;
}

22
Prototipo (cont.)
#include <stdio.h>
void intercambio(int *, int *) /*Prototipo*/
main(){
int a=5,b=3;
printf("a=%d b=%d\n",a,b);
intercambio (&a,&b);
printf("a=%d b=%d\n",a,b);

return 0;
}
void intercambio(int *x, int *y){
int temp;
temp=*x;
*x=*y;
*y=temp;
}

23

Vous aimerez peut-être aussi