Title: Introduccin al Lenguaje de Programacin C III: Funciones, Instrucciones y Variables
1Introducción al Lenguaje de Programación C
(III)Funciones, Instrucciones y Variables
- Clase 5
- Introducción a la Programación
- Marcos Sepúlveda(marcos_at_ing.puc.cl)
2Resumen clase anterior
- Tipos de Datos
- Expresiones aritméticas
- Expresiones lógicas
- Además, han ejercitado
- Ayudantía
- Estudio
- Tarea 1
3Qué es una función?
- Funciones matemáticas
- Toman parámetros y retornan un resultado
- C ya trae definidas algunas
- Ejs sin, cos, exp, logNOTA para usarlas debe
incluir la librería matemática, escribiendo en
la primera línea del programaincludeltmath.hgt - El programador también puede definir sus propias
funciones
4Funciones
- Conjunto de instrucciones (posiblemente
acompañadas de algunos datos temporales) que
llevan a cabo una subtarea dentro de un programa
más complejo. - Reciben datos de entrada
- Generan datos de salida
5Funciones
- Parámetros de entrada
- Materia prima con la que trabajará la función
- Valor de retorno
- Resultado del procesamiento llevado a cabo por la
función - Tanto los parámetros de entrada como el valor de
retorno tienen un tipo de datos asociado.
6Sintaxis para la definición de funciones
- lttipo_retornogt ltnombre_funcióngt(ltlista_parámetros
gt) - ltdeclaración_de_variables_localesgt
- ltcuerpo_de_la_funcióngt
- return (ltvalor_retornogt)
-
- Procedimientos
- Funciones que no devuelven ningún valor.
- Se utiliza como tipo de retorno la palabra
reservada void.
7Ejemplos definición de funciones
- int Celsius(int fahrenheit)
- return((fahrenheit-32.0)(5.0/9.0))
-
-
- int Fahrenheit(int celsius)
- return((celsius9.0/5.0)32.0)
-
-
- float AreaCirculo(float radio)
- float area
- area 3.14 radio radio
- return area
8Llamadas a funciones
- Puede ser llamada desde cualquier parte del
programa, luego de ser definida. - Por eso las funciones se definen al principio.
9Sintaxis para llamar a las funciones
- ltvariablegt ltnombre_funcióngt(ltlista_parámetrosgt
) - ltlista_paramétrosgt
- Representan valores que se entregan como entrada
a la función. - Lista de variables denotadas por variables o
constantes asociadas a un tipo, o expresiones de
un tipo. - Deben corresponder en cuanto a cantidad, posición
y tipos a las variables que se definieron como
parámetros de entrada en la definición de la
función. - Si en la definición de la función no se usó
parámetro alguno, entonces en la llamada tampoco
debe escribirse ninguna expresión o variable,
pero los paréntesis deben aparecer.
10Ejemplos llamadas a funciones
- int grados_celsius
- grados_celsius celsius(68) / llamada /
- int grados_farenheit
- grados_farenheit fahrenheit(31) / llamada
/ -
-
- float radio 5.56
- float calculo_area
- calculo_area AreaCirculo(5.56) / llamada /
- calculo_area AreaCirculo(radio) / llamada /
11Para qué sirven las funciones
- No repetir lo mismo varias veces en el código
- Ordenar el código
- Comprender más fácilmente el código
- Separar trabajo entre programadores
- Realizar trabajos más complejos
- La idea de las funciones es generar modularidad,
cajas negras, sólo conocen sus interfaces y no
cómo operan por dentro - Las funciones son MUY importantes!
12Ejercicios
- Desarrollar las siguientes funciones
- Retorne 0 si un numero es par o 1 si es impar
- Retorne el área de un triángulo dado b y h
13Ejemplo Procedimiento
- Imprime la tabla de un numero
void ImprimeTabla(int n) printf("d x 0
0\n", n) printf("d x 1 d\n", n, n)
printf("d x 2 d\n", n, n2) printf("d x
3 d\n", n, n3) printf("d x 4 d\n",
n, n4) main() int numero
printf("Que tabla quieres saber ")
scanf("d", numero) printf("La tabla del d
es", numero) ImprimeTabla(numero)
14Instrucciones
- Órdenes que reconoce un computador mientras se
encuentra ejecutando un programa. - Los programas están escritos en un lenguaje de
programación, el cual define el conjunto de
instrucciones válidas que podemos utilizar al
escribirlos.
15Instrucciones
- Secuenciales
- Declaraciones de variables
- Asignaciones
- Llamado a funciones
- Control de flujo (o decisión)
- If
- switch
- Iteración
- for
- while
- do-while
16Instrucciones
- Sintaxis
- Toda instrucción debe ir terminada por un punto y
coma, de la siguiente manera - ltinstrucciongt
- Bloque de instrucciones
-
- ltinstruccion1gt
- ltinstruccion2gt
- ...
- ltinstruccionNgt
-
17Declaración de Variables
- Sintaxis
- lttipo1gt ltlista_de_variablesgt
- lttipo2gt ltlista_de_variablesgt
- ...
- lttipoNgt ltlista_de_variablesgt
- ltlista de variablesgt
- Serie de identificadores válidos, separados por
comas - ltident1gt, ltidentif2gt, ..., ltidentMgt
- Dar valor inicial a las variables al declararlas
- lttipogt ltidentificadorgt ltvalor_inicialgt
18Declaración de Variables
- Ejemplos
- int suma, producto
- int acumulado0
- static float interes
19Vida útil (o ámbito) de las variables
- Las variables sólo existen dentro de la función
en que son creadas. - Sin embargo, y con cuidado, esta regla se puede
saltar, vía dos mecanismos - Variables globales
- Variables estáticas
20Vida útil (o ámbito) de las variables
- Ámbito global
- Nivel más alto del programa (fuera de toda
función) - Variables son visibles en todo el programa,
incluyendo todas las funciones - Se llaman variables globales
- Ámbito local
- Nivel interno a cada función
- Variables son visibles sólo dentro de la función
en que son declaradas - Se llaman variables locales
- Valores almacenados no perduran para posteriores
llamados a la función en que está declarada - Alternativa variables estáticas
21Vida útil (o ámbito) de las variables
- Ámbito local (static)
- static lttipogt ltidentificadorgt
- Se crea una única vez y el valor guardado
permanece durante toda la ejecución del programa.
22Vida útil (o ámbito) de las variables
- La redefinición, dentro de una función, de una
variable previamente definida en el nivel
exterior, provoca que la definición anterior se
oculte durante la ejecución de la función, por lo
que sólo la variable local podrá ser
referenciada. - Para poder referenciar una variable global dentro
de una función, la declaración debe aparecer
anterior a la definición de la función.
23Vida útil (o ámbito) de las variables
24Ejemplo vida útil de las variables
- int global 0
- void cuenta()
- static int contador 0
- int temporal 0
- printf("El contador (static) vale d\n",
contador) - printf("La temporal (no static) vale d\n",
temporal) - printf("La variable global vale d\n",
global) - contador
- temporal
- global
-
- main()
- int contador 5
- cuenta()
- printf("La global vista desde main d\n",
global) - printf("El contador local de main d\n\n",
contador)
25Ejemplo vida útil de las variables (I1 2001)
- int b 0
-
- int g (int m, int d)
-
- static int c -1
- b
- d
- m
- printf("d d d d ", b, c, d, m)
- return(c--)
-
-
- int h (int f, int i)
-
- int e 5
- int b 0
- b
- f
- printf("d d d \n",b,f,i)
26La función principal main y los programas en C
- Un programa en C está formado por varias
instrucciones. - Estas instrucciones son escritas dentro de
funciones. - Algunas instrucciones son escritas fuera de las
funciones - Directivas como include y define
- Declaración de variables
- Definición de funciones
- Orden de ejecución
- Directivas (include y define)
- Declaraciones de variables globales
- Llamado a la función main
27Estructura de un programa
- directiva include
- Incluye librerías o bibliotecas de funciones
predefinidas - Ejemplos
- include ltstdio.hgt / funciones de entrada y
salida / - include ltstdlib.hgt / funciones básicas /
- include ltmath.hgt / funciones matemáticas
básicas / - include ltstring.hgt / funciones para manejar
cadenas /
28Estructura de un programa
- directiva define
- Definición de constantes simbólicas
- Consiste en asignar a un identificador un valor
que permanecerá constante durante su uso en el
programa - Ejemplo
- define CONSTANTE_PI 3.1415
29Estructura de un programa - resumen
include ltlibreríasgt define ltidentificadorgt
ltconstantegt typedef ltdefinición_de_nuevos_tipos_
de_datosgt ltvariables_globalesgt ltdefinición_de_fu
ncionesgt lttipogt main()
ltcuerpo_de_la_función_principalgt
- Inclusión de librerías
- Constantes
- Definición de tipos
- Variables globales
- Definición de funciones
- Programa principal
por ver
30Algunas recomendaciones
- Hacer código ordenado
- 1 instrucción por línea
- Utilizar nombres de variables autoexplicativos
- Indentar el código
- Comentar el código
31Ejemplos con tipos numéricos
- Haga un programa que
- Calcule el tiempo que falta para llegar un
destino (input velocidad en km/h y distancia
restante, output tiempo en hhmm). - Use funciones!
32Entrada y Salida
- Las de mayor uso son las orientadas a la entrada
y salida de datos con formato (biblioteca
stdio.h) - printf
- Salida con formato
- scanf
- Entrada de datos con formato
- Basadas en una serie de caracteres de conversión
33Salida con formato printf
- Sintaxis
- printf( "cadena-de-formato", ltlista_de_argumentosgt
) - Cadena de formato
- Debe ir delimitada por comillas dobles
- Debe incluir una especificación de conversión por
cada argumento en la lista de argumentos. - Texto aparecerá durante el despliegue, y cada
especificación de conversión será reemplazada por
el correspondiente argumento. - La lista de argumentos consiste de una secuencia
de expresiones que se desean desplegar.
34Especificaciones de Conversión
- Los caracteres de conversión de mayor uso son
- d número entero en notación decimal (base 10)
- c caracter
- s cadena de caracteres (string)
- e número con decimales, expresado en notación
exponencial o de punto flotante (mantisa y
exponente) - f número con decimales, expresado en notación de
punto fijo (parte entera, punto, parte decimal)
35Especificaciones de Conversión
- Pueden incluir
- Un signo menos, que indica que el campo debe
ajustarse a la izquierda. - Un número entero, que indica el tamaño mínimo que
deberá ocupar el campo al desplegarse. - Un punto seguido de un número entero, que indica
las posiciones decimales que deben desplegarse.
De ser necesario, se agregan ceros al final. - Secuencias especiales
- para imprimir un símbolo de
- \n para provocar que el cursor cambie de línea
- \t para producir una tabulación en el despliegue
- \ASCII despliega el caracter con el código ASCII
suministrado
36Ejemplos
- printf("El valor de la variable x es d\n", x)
- El valor de la variable x es 100
- Si x contenía un valor igual a 100. Avanzará a
la siguiente línea luego del despliegue - printf("El valor de dos cinco es d\n", 25)
- El valor de dos cinco es 7
- Avanzará a la siguiente línea luego del
despliegue - printf("El area de un circulo con radio .2f es
.2f\n", - radio, area)
- El area de un circulo con radio 1.00 es 3.14
37Ejemplos
- printf("Este es el numero 2 con formato 5d
5d", 2) - Este es el numero 2 con formato 5d 2
- printf("Numero 2 con formatos -5d y d -5d
d", - 2, 2)
- Numero 2 con formatos -5d y d 2 2
- printf("Este es el caracter c cuyo codigo ASCII
es d", - 'A', 'A')
- Este es el caracter A cuyo codigo ASCII es 65
38Ejemplo Diversos Formatos de Conversión
- / Impresion de los valores de la variable x con
distintos - formatos. /
- main()
- float x 0.001234
-
- / 1 Notacion exponencial /
- printf("x formateado como e ....... e\n",
x) - / 2 Notacion con punto decimal /
- printf("x formateado como f ....... f\n",
x) -
- / 3 Notacion con punto decimal, empleando 10
espacios / - printf("x formateado como 10f ..... 10f\n",
x) -
- / 4 Notacion con punto decimal, empleando 10
espacios - de los cuales 3 estan despues del punto.
/ - printf("x formateado como 10.3f ...
10.3f\n", x)
39Entrada con formato scanf
- Sintaxis
- scanf ( "cadena_de_control", lista_de_argumentosgt
) - La lista de argumentos consiste de una secuencia
de punteros a variables, en las cuales se
almacenarán las entradas dadas por el usuario.
40Contenido de cadena de control
- Espacios en blanco, tabuladores o finales de
línea, los cuales no se tomarán en cuenta. - Caracteres ordinarios (distintos de ), los
cuales se espera que coincidan con el próximo
caracter , distinto de blanco del flujo de
entrada. - Especificaciones de conversión
- Un campo de entrada se define como una cadena de
caracteres delimitada por espacios en blanco
(incluyendo tabulador y fin de línea).
41Caracteres de conversión
- d número entero argumento debe ser puntero a
int. - h número entero argumento debe ser puntero a
short int. - lx número entero argumento debe ser puntero a
long int. - c carácter argumento debe ser puntero a char.
Para leer el primer caracter distinto de blanco
debe emplearse 1s. - s cadena de caracteres argumento debe ser un
puntero a caracter, o el nombre de un vector de
caracteres. - f número con decimales argumento debe ser
puntero a float. Entrada puede ser en notación de
punto fijo (parte entera, punto, decimales), o de
punto flotante (mantisa, E, exponente). - lf número con decimales argumento debe ser
puntero a double.
42Ejemplos
- scanf("d", edad)
- Espera entero que será almacenado en la variable
edad. - scanf("4d", agno)
- Espera el año actual (4 dígitos). Si se ingresan
más de 4 dígitos, los restantes se descartarán, o
se dejarán para la siguiente llamada a scanf. - scanf("d f", edad, salario)
- Espera un número entero y uno con decimales.
- scanf("s", nombre)
- Espera una cadena de caracteres (string).
Entrada se almacenará en el vector nombre, y se
delimitará con un ASCII(0) al final.
43Ejemplo lectura de números enteros
- main()
- int a, b, c
- printf("Ingrese los valores de a b c ")
- scanf("d d d", a, b, c)
- printf("Los valores de a, b y c son d d
d\n", a, b, c)
44Algunos detalles sobre el lenguaje C
- Conversiones de tipos
- Problema de intercambiar dos variables
- Operadores y --
45Conversiones de tipos
- Conversiones automáticas
- De entero a flotante
- a 4 4.0 ? 4.0 4.0 ? 8.0
- De flotante a entero
- b 3.5 3 ? 3.5 3.0 ? 6.5 ? 6
- Conversiones manuales (casting de tipos)
- (float)1 ? 1.0
- (int)1.5 ? 1.0
Para los ejemplos float a int b
46El problema de intercambiar dos variables
tmpA AB Btmp
47El problema de intercambiar dos variables
- main()
- int var1, var2 / Variables enteras que
seran intercambiadas / - int aux / Variable auxiliar
necesaria para hacer - el intercambio /
- var1 10 / Asigna valores a las
variables / - var2 30
- / Imprime el valor antes del intercambio /
- printf("var1 contiene d y var2 contiene
d\n", var1, var2) - aux var1
- var1 var2
- var2 aux
- / Imprime el valor luego del intercambio /
- printf("var1 contiene d y var2 contiene
d\n", var1, var2)
48Operadores y --
- Veamos cual es el resultado del siguiente
programa - include ltstdio.hgt
- int main()
- int b, x
- x 5
- printf("Inicialmente b es indefinido y x es
d\n", x) - printf("Probemos b x\n")
- b x
- printf("-gt b es d y x es d\n", b, x)
- printf("Probemos b x\n")
- b x
- printf("-gt b es d y x es d\n", b, x)
49Operadores y --
- Interpretación correcta
- b x
- notación postfija (asigna a b el valor antes del
incremento) - b x
- notación prefija (asigna a b el valor después del
incremento)