Escolar Documentos
Profissional Documentos
Cultura Documentos
FUNCIONES
Problema
La declaración de la función
La definición de la función
La llamada a la función
#include <stdio.h>
float suma ( float a, float b); declaración
……..
int main (void)
{
Parámetros Reales
float x, y, z;
x = 23.12;
y = 14.33;
………
z =suma ( x, y); llamada
……….
}
float suma ( flota a, flota b) definición
{
return a+b;
}
Parámetros Formales
Declaración de función en C:
Definición de funciones en C:
int main()
{
.......
func1 ( );
……….
func2 ( );
......
return 0;
}
void func1 ( )
{
.....................
return;
}
void func2 ()
{
......................
return;
}
Ejemplo:
Ejemplo:
Variables Globales
Variables Locales
Ejemplo:
int z;
int Sumar(int x, int y);
int main()
{
int suma;
z = 3;
suma = Sumar(2, 3); /* -> 5*/
printf(“%d”,z); /*z -> 5*/ /*Efecto lateral no deseado*/
}
int Sumar(int x, int y)
{
z = x + y;
return z;
}
Función no portable
Dificultad para realizar cambios en el programa
Imposible trabajar en grupo
TIPOS DE VARIABLES EN FUNCIÓN DEL ESPECIFICADOR DE ÁMBITO
automáticas
externas
estáticas
registro
FunA( ) FunC ( )
{ {
…………… ……..
} }
Variables estáticas locales:
Ejemplo:
void main(void)
{
int i; 2
void Fun(void); 3
4
for (i=0; i<10; i++) 5
Fun( ); 6
} 7
void Fun (void) 8
{ 9
static int count=1; 10
11
count++;
printf(“ %d \n”, count);
}
Fichero1 Fichero2
int a; extern int a;
static int b;
void main(void) FunB ( )
{ {
………. ……….
} }
FunA( ) FunC ( )
{ {
……………} ……..……}
Variables registro:
Ejemplo:
void main(void)
{
register int i;
for (i=0,i<180;i++)
…………..
}
por valor
por referencia.
Ejemplo Paso Por Valor:
void Decremento(int x)
{
x = x - 1;
printf(“%d\n”,x);
return;
3
}
4
void main(void)
{
...
n = 4;
Decremento(n); → 3
printf(“%d\n”,n);
Ejemplo:
void intercambio(int *x, int *y)
{
int z;
z = *x;
*x = *y;
*y = z;
return;}
Gestión de la memoria
Ejemplo: Pila
int doble (int a);
……..
int main(void)
{
int w; Variable z
……….. Parámetro a
w = doble ( 2);
LLamada
……………
}
int doble(int a)
{
int z;
z=2*a; z
return z; a
} Retorno
Traza de Programas
Ejemplo:
int a, b; /* variables globales */
void F1(int *c);
int main() Traza:
{ Linea a b/G c / *c b/L
1) a = 1; 1 1 ?
2) b = 3; 2 1 3
3) F1(&a); 3 1 3 &a /1 ?
4) printf(“ %d %d \n”,a,b); 5 1 3 &a /1 2
return 0; 6 5 3 &a /5 2
} 4 5 3
void F1(int *c)
{
int b;
5) b = 2;
6) *c = a + b + 2;
return;
}
Ejemplo: Mostrar en pantalla los dígitos de un número entero positivo en forma inversa
5675
5765
Ejemplo: Programa para el cálculo de las combinaciones de m elementos tomados de a n mediante módulos
fact.h: /* Fichero de cabecera para calculo de factorial */
float fact(int n); /*declaración*/
argc (argument count) Es un parámetro de tipo entero que contiene el número de argumentos que se
han introducido considerando el nombre del ejecutable.
argv ( argument values) Es un arreglo de punteros a cadenas de caracteres. Contiene los argumentos
que se pasan desde el SO cuando se invoca el programa. Cada argumento debe estar separado por
espacio ó una tabulación
Ejemplo1:
>prueba
argc vale 1
argv[0] apunta a la cadena ”prueba”
Ejemplo2:
Programa que saluda al usuario cuyo nombre lo ingresa como argumento de main() por linea de
comandos del SO.
/*prueba2.c*/
#include <stdio.h>
void main(int argc,char*argv[])
{
float base, altura, area; >prueba2 2.3
if(argc>3) {
printf("Demasiados parámetros.\n"); >Falta un parámetro
exit(1);
}
else >prueba2 2.0 4.0
if(argc<3) {
printf("Falta un parámetros.\n"); >El area es:4.0
exit(1);
}
base = atof(argv[1]);
altura = atof(argv[2]);
area = base * altura /2;
printf("El area es: %f",area);
}
Ejemplo: Programa que muestra en pantalla los argumentos entrados por linea de comandos.
#include <stdio.h>
void main(int argc, char*argv[])
{
while (--argc)
printf(“%s%c”,*++argv, argc = = 1? ‘\n’: ‘ ‘);
}
>......................................