Professional Documents
Culture Documents
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.
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.
Funcin main()
Mediantelasentenciareturn,elprograma
puededevolveruncdigodeterminacinal
procesodellamada(Ej.:enteroaShellde
comandosenUnix).
Elvalordevueltopuedeser0queindica
terminacinnormalounvalorqueidentifica
unerrordetectadoporelprograma.
Elvalordevueltopuedeserusadopara
ejecucincondicionaldecomandosenshell
enUnix.
8
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
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