You are on page 1of 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.

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.

Funciones

Lasfuncionesterminansuejecucinyaseaa
travsdelaejecucindelaltimainstruccino
utilizandolasentenciareturn.
Unfuncinpuederetornarvalorslocuandoel
tipoderetornonoesvoid.
Lasfuncionesquesondetiposdistintosdevoid
puedenserutilizadascomooperandosenotras
expresionesdellenguaje.

Funciones: modos de uso


1.Funcionesdiseadaspararealizar
operacionesapartirdesusargumentosy
devolverunvalorbasadoensusclculos.
2.Funcionesquenorecibenargumentos,
realizanunprocesoydevuelvenunvalor.
3.Funcionesquenotienenargumentosni
valorderetornoexplcito,operansobreel
entornodevariablesglobalesoatributosdel
sistemaoperativo.

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.

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 *)
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);

/*Prototipo*/

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

You might also like