1. Programación
(L109)
Sesión: 6 y 7
Funciones y variables
Ing. José C. Benítez P.
2. Sesión 6 y 7. Temas
Funciones
Concepto
Sintaxis de una función
Declaración de funciones
Instrucción return
Paso de parámetros a una función
Variables globales y locales
Programación - Prof. Ing. Jose C. Benitez P. 2
3. Sesión 6 y 7. Temas
Funciones
Concepto
Sintaxis de una función
Declaración de funciones
Instrucción return
Paso de parámetros a una función
Variables globales y locales
Programación - Prof. Ing. Jose C. Benitez P. 3
4. Funciones. Concepto
Las funciones son bloques de código utilizados para
dividir un programa en partes más pequeñas, cada
una de las cuáles tendrá una tarea determinada.
Las funciones pueden ser llamadas desde la función
main o desde otras funciones.
Nunca se debe llamar a la función main desde otro
lugar del programa.
Los argumentos de la función y sus variables locales
se destruirán al finalizar la ejecución de la misma.
Programación - Prof. Ing. Jose C. Benitez P. 4
5. Sesión 6 y 7. Temas
Funciones
Concepto
Sintaxis de una función
Declaración de funciones
Instrucción return
Paso de parámetros a una función
Variables globales y locales
Programación - Prof. Ing. Jose C. Benitez P. 5
6. Funciones. Sintaxis
tipo_función nombre_función ( tipo y nombre de argumentos )
{
bloque de sentencias ;
}
tipo_función:
Puede ser de cualquier tipo: char, int , float, etc..
El valor devuelto por la función será de este tipo.
Por defecto, es decir, si no indicamos el tipo, la función
devolverá un valor de tipo entero ( int ).
Si queremos que no retorne ningún valor deberemos
indicar el tipo vacío ( void ).
nombre_función:
Es el nombre que le daremos a la función.
Programación - Prof. Ing. Jose C. Benitez P. 6
7. Funciones. Sintaxis
tipo_función nombre_función ( tipo y nombre de argumentos )
{
bloque de sentencias ;
}
tipo y nombre de argumentos:
Son los parámetros que recibe la función.
Los argumentos de una función no son más que variables
locales que reciben un valor.
Este valor se lo enviamos al hacer la llamada a la función.
Pueden existir funciones que no reciban argumentos.
bloque de sentencias:
Es el conjunto de sentencias que serán ejecutadas cuando
se realice la llamada a la función.
Programación - Prof. Ing. Jose C. Benitez P. 7
8. Sesión 6 y 7. Temas
Funciones
Concepto
Sintaxis de una función
Declaración de funciones
Instrucción return
Paso de parámetros a una función
Variables globales y locales
Programación - Prof. Ing. Jose C. Benitez P. 8
9. Funciones. Declaración.
Al igual que las variables, las funciones también deben
ser declaradas.
Esto es lo que se conoce como prototipo de una
función.
Para que un programa en C sea compatible entre
distintos compiladores es imprescindible escribir los
prototipos de las funciones.
Los prototipos de las funciones pueden escribirse
antes de la función main o bién en otro archivo.
En este último caso le indicaremos al compilador
mediante la directiva #include.
Programación - Prof. Ing. Jose C. Benitez P. 9
10. Funciones. Declaración. Ejemplo.
En el ejemplo vemos la declaración de una
Archivo: funcion2.c
función imprime ( prototipo ).
Al no recibir ni retornar ningún valor, está /* Declaración de funciones. */
declarada como void en ambos lados. #include <stdio.h>
También vemos que existe una variable global void imprime(void); /* prototipo */
llamada num. int num=5; /* variable global */
Esta variable es reconocible en todas las
main() /* Escribe dos números */
funciones del programa. {
Y en la función main encontramos una variable int num=10; /* variable local */
printf("%dn",num);
local llamada num. imprime(); /* llamada */
Al ser una variable local, ésta tendrá preferencia }
sobre la global. void imprime(void)
{
printf("%dn",num);
Por tanto la función escribirá los números 10 y 5. }
Programación - Prof. Ing. Jose C. Benitez P. 10
11. Sesión 6 y 7. Temas
Funciones
Concepto
Sintaxis de una función
Declaración de funciones
Instrucción return
Paso de parámetros a una función
Variables globales y locales
Programación - Prof. Ing. Jose C. Benitez P. 11
12. Instrucción return
Como ya hemos visto, las funciones pueden retornar
un valor. Archivo: funcion3.c
Esto se hace mediante la instrucción return, que
finaliza la ejecución de la función, devolviendo o no un /* Paso de parámetros. */
valor.
#include <stdio.h>
int suma(int,int); /* prototipo */
En una misma función podemos tener más de una main() /* Realiza una suma */
instrucción return. {
int a=10,b=25,t;
La forma de retornar un valor es la siguiente: t=suma(a,b); /* guardamos el valor */
return ( valor o expresión ); printf("%d=%d",suma(a,b),t);
El valor devuelto por la función debe asignarse a una suma(a,b); /* el valor se pierde */
variable. De lo contrario, el valor se perderá. }
int suma(int a,int b)
{
En el ejemplo se puede ver lo que ocurre si no return (a+b);
guardamos el valor en una variable. }
Nota.
A la hora de mostrar el resultado de la suma, en el
printf, también podemos llamar a la función.
Programación - Prof. Ing. Jose C. Benitez P. 12
13. Sesión 6 y 7. Temas
Funciones
Concepto
Sintaxis de una función
Declaración de funciones
Instrucción return
Paso de parámetros a una función
Variables globales y locales
Programación - Prof. Ing. Jose C. Benitez P. 13
14. Paso de parámetros
Archivo: funcion4.c
Existen dos formas de enviar parámetros a una función:
Por valor: /* Paso por valor. */
Cualquier cambio que se realice dentro de la
función en el argumento enviado, NO afectará al #include <stdio.h>
void intercambio(int, int); /* prototipo */
valor original de las variables utilizadas en la main() /* Intercambio de valores */
llamada. {
Es como si trabajaramos con una copia, no con el int a=1,b=2;
printf("a=%d y b=%d",a,b);
original. intercambio(a,b); /* llamada */
No es posible enviar por valor arrays, deberemos printf("a=%d y b=%d",a,b);
hacerlo por referencia. }
Por referencia: void intercambio (int x, int y)
{
Lo que hacemos es enviar a la función la dirección int aux;
de memoria donde se encuentra la variable o dato. aux=x;
Cualquier modificación SI afectará a las variables x=y;
y=aux;
utilizadas en la llamada. printf("a=%d y b=%d",x,y);
Trabajamos directamente con el original. }
Programación - Prof. Ing. Jose C. Benitez P. 14
15. Paso de parámetros
Para enviar un valor por referencia se utiliza el símbolo
& ( ampersand ) delante de la variable enviada. Archivo: funcion5.c
Esto le indica al compilador que la función que se /* Paso por referencia. */
ejecutará tendrá que obtener la dirección de memoria
en que se encuentra la variable. #include <stdio.h>
void intercambio(int *, int *);
main() /* Intercambio de valores */
En el ejemplo anterior podrás comprobar que antes y {
después de la llamada, las variables mantienen su int a=1,b=2;
valor. Solamente se modifica en la función intercambio printf("a=%d y b=%d",a,b);
intercambio(&a,&b); /* llamada */
( paso por valor ). printf("a=%d y b=%d",a,b);
}
En el siguiente ejemplo podrás ver como las variables void intercambio (int *x, int *y)
{
intercambian su valor tras la llamada de la función int aux;
( paso por referencia ). aux=*x;
*x=*y;
Las variables con un * son conocidas como punteros, *y=aux;
printf("a=%d y b=%d",*x,*y);
el único dato en C que pueden almacenar es una }
dirección de memoria.
Programación - Prof. Ing. Jose C. Benitez P. 15
16. Paso de parámetros
Hemos visto que las funciones pueden recibir
argumentos.
Archivo: funcion6.c
La función main también puede recibir
argumentos, en este caso desde el exterior. /* Argumentos de la función main. */
Los argumentos que puede recibir son: #include <stdio.h>
argc: es un contador. Su valor es igual al número de main(int argc, char *argv[]) /* argumentos */
argumentos escritos en la línea de comandos, {
printf("nCurso de Programación en C –
contando el nombre del programa que es el primer Copyright (c) 2007, José C. Benítez P.n");
argumento. printf("Programa de ejemplo.nn");
argv: es un puntero a un array de cadenas de if (argc<2) {
caracteres que contiene los argumentos, uno por printf("Teclee: funcion6 su_nombre");
exit(1); /* fin */
cadena. }
En este ejemplo vamos a ver un pequeño programa printf("Hola %s",argv[1]); /*Solo el 2do argv*/
que escribirá un saludo por pantalla. }
El programa FUNCION6.EXE.
Programación - Prof. Ing. Jose C. Benitez P. 16
17. Llamadas a funciones con arrays
Llamadas a funciones con arrays
Archivo: arrays3.c
Los arrays únicamente pueden ser enviados a
una función por referencia. /* Envío de un array a una función. */
Para ello deberemos enviar la dirección de
memoria del primer elemento del array. #include <stdio.h>
void visualizar(int []); /* prototipo */
Por tanto, el argumento de la función deberá ser main() /* rellenamos y visualizamos */
un puntero. {
int array[25],i;
En el ejemplo se puede apreciar la forma de enviar for (i=0;i<25;i++) {
printf("Elemento nº %d",i+1);
un array por referencia. scanf("%d",&array[i]);
}
La función se podía haber declarado de otra manera, visualizar(&array[0]);
}
aunque funciona exactamente igual: void visualizar(int array[]) /* desarrollo */
{
declaración o prototipo void visualizar(int *); int i;
desarrollo de la función void visualizar(int *array); for (i=0;i<25;i++) printf("%d",array[i]);
}
llamada de la función visualizar(array):
Programación - Prof. Ing. Jose C. Benitez P. 17
18. Sesión 5. Temas
Funciones
Concepto
Sintaxis de una función
Declaración de funciones
Instrucción return
Paso de parámetros a una función
Variables globales y locales
Programación - Prof. Ing. Jose C. Benitez P. 18
19. Variables globales y locales
Según el lugar donde son declaradas puede haber
dos tipos de variables.
Globales: las variables permanecen activas
durante todo el programa. Se crean al iniciarse
éste y se destruyen de la memoria al finalizar.
Pueden ser utilizadas en cualquier función.
Locales: las variables son creadas cuando el
programa llega a la función en la que están
definidas. Al finalizar la función desaparecen de
la memoria.
Programación - Prof. Ing. Jose C. Benitez P. 19
20. Variables globales y locales
/* Variables globales y locales. */
#include <stdio.h>
Si dos variables, una global y una local, int num1=1; /* variable global */
main() /* Escribe dos cifras */
tienen el mismo nombre, la local prevalecerá {
int num2=10; /* variable local */
sobre la global dentro de la función en que printf("%dn",num1);
ha sido declarada. printf("%dn",num2);
}
Dos variables locales pueden tener el mismo
/* Variables globales y locales. */
nombre siempre que estén declaradas en
#include <stdio.h>
funciones diferentes. int num1=1; /* variable global */
main() /* Escribe dos cifras */
{
int num1=10; /* vaiable local */
printf("%dn",num1);
printf("%dn",num1);
}
Programación - Prof. Ing. Jose C. Benitez P. 20
21. Tarea (T6 y 7)
Hacer un programa en C utilizando funciones .
1. Mostrar la tabla del numero x del 1 al 24.
Consola debe mostrar:
Ingrese x:
Tabla del 1 al 24 de x:
2. Llenar la matriz de m x n.
Consola debe mostrar:
Ingrese m:
Ingrese n:
Ingrese los datos de la matriz m x n:
Matriz de m x n:
3. Ordena un arreglo de x números flotantes.
Consola debe mostrar:
Ingrese x:
Ingrese los datos de la matriz x flotantes:
x numeros flotantes ingresados:
x numeros flotantes ordenados:
4. Dado un arreglo de los Países de Latinoamérica y su población, las
ordene por su primera letra y muestre además su población.
Programación - Prof. Ing. Jose C. Benitez P. 21
22. Presentación
Todos los códigos fuentes deben ser presentados en un
solo archivo de texto, cuyo nombre lleve las iniciales del
curso, sus Apellidos, guion bajo y luego el numero de la
tarea. Ejemplo:
PRG_BenitezPalacios_T67.txt
Los códigos deben estar comentados bloque a bloque.
La presentación de esta Tarea es obligatoria y tiene 03
puntos de bonificación en la Tercera Practica Calificada.
Plazo de entrega: Lunes 23/01/12
Las Tareas que no cumplan las
indicaciones no serán
recepcionados por el profesor.
Programación - Prof. Ing. Jose C. Benitez P. 22
23. Sesión 6 y 7. Funciones y variables
Programación
http://utpprogc.blogspot.com
Programación - Prof. Ing. Jose C. Benitez P. 23