Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Aplicaciones Computacionales
1
Helmut Contreras
INTRODUCCIÓN AL LENGUAJE C
Aplicaciones Computacionales
2
Helmut Contreras
HISTORIA
• El “Antiguo Testamento”
Aplicaciones Computacionales
3
Helmut Contreras
UN EJEMPLO DE PROGRAMA
#include <stdio.h>
#include <stdlib.h>
Aplicaciones Computacionales
4
Helmut Contreras
ESCRITURA DE PROGRAMAS EN C
• Formato libre
– La interpretación del código no depende del formato del texto.
– // este también.
Aplicaciones Computacionales
5
Helmut Contreras
UNA FUNCIÓN TIENEN UN ENCABEZADO Y UN CUERPO
Aplicaciones Computacionales
6
Helmut Contreras
TIPOS DE DATOS EN C
Aplicaciones Computacionales
7
Helmut Contreras
TIPOS DE DATOS EN C
• Un dato cualquiera tiene.
– Un tipo (carácter, entero, punto flotante)
Aplicaciones Computacionales
8
Helmut Contreras
TIPOS DE DATOS EN C: DECLARACIÓN
• Declaración de variables:
– <tipo dato> <identificador>;
• Declaración múltiple
– <tipo dato> <identificador1>, <identificador2>, <identificador3>;
Aplicaciones Computacionales
9
Helmut Contreras
TIPOS DE DATOS EN C
Aplicaciones Computacionales
10
Helmut Contreras
TIPOS DE DATOS EN C : FUNDAMENTALES
Aplicaciones Computacionales
11
Helmut Contreras
TIPO DE DATO CHAR
• Al menos de 8 bits (1 byte).
– Debe poder almacenar un carácter ASCII.
– Internamente almacena números que representan caracteres y otros
símbolos en el computador.
• Rangos mínimos.
– signed char: -128 a 127.
– unsigned char: 0 a 255.
• El rango de char depende del compilador.
– Por omisión, puede ser signed o unsigned.
Aplicaciones Computacionales
12
Helmut Contreras
TIPO DE DATO CHAR
• Declaración:
– char a;
– char a, b, c;
• Inicialización:
– char a = ‘A’; (entre comillas simples)
– char a = 65;
Aplicaciones Computacionales
13
Helmut Contreras
ASCII 256 CARACTERES
Aplicaciones Computacionales
14
Helmut Contreras
TIPO DE DATO INT
• int
– Enteros con signo de 2 - 4 bytes.
– Rangos:
• 2 bytes: -32768 a 32767 (-215 –> 215 - 1)
– 16 bits o 32 bits?
• A elección de la implementación.
Aplicaciones Computacionales
15
Helmut Contreras
TIPO DE DATO INT
• unsigned int
– 32 bits (4 bytes).
– Rango:
• 0 a 4.294.967.295 (0 –> 232-1)
• signed int
– 32 bits (4 bytes).
– Rango.
• -2.147.483.648 a 2.147.483.647 (-231 –> 231 -1)
• short int
– Al menos de 16 bits (2 bytes).
– Rangos mínimos:
• short: -32768 (-215) a 32767 (215 – 1)
Aplicaciones Computacionales
17
Helmut Contreras
TIPO DE DATO INT
• long int
– Datos de 32 bits (4 bytes) – 64 bits (8 bytes).
– Rangos:
• long 32 bits: -2.147.483.648 (-231) a 2.147.483.647 (231-1)
Aplicaciones Computacionales
18
Helmut Contreras
TIPO DE DATO INT
• Declaración:
– int num;
• Inicialización:
– int num = 100;
Aplicaciones Computacionales
19
Helmut Contreras
PUNTO FLOTANTE
Aplicaciones Computacionales
20
Helmut Contreras
PUNTO FLOTANTE
Aplicaciones Computacionales
21
Helmut Contreras
TIPOS DE DATOS _BOOL
• _Bool
– Introducido por ISO C99.
• No todos los compiladores lo incluyen.
– Definido en <stdbool.h>
• No está presente en Dev-C++
Aplicaciones Computacionales
22
Helmut Contreras
DECLARACIONES
• Declaración básica.
• Ejemplos:
– int i;
Aplicaciones Computacionales
23
Helmut Contreras
VARIABLES EN MEMORIA
• I: entero (4 bytes)
– Valor inicial: 0x00000015
• letra1: caracter (1 byte)
– Valor inicial: ‘A’
• letra2, letra3: carácter
– Valor inicial indeterminado
• dirección: short (2 bytes)
– Valor inicial: 0x3F65
• numero: entero (4 bytes)
– Valor inicial: 034 Memoria
Aplicaciones Computacionales
24
Helmut Contreras
EJEMPLO DE DECLARACIONES
salida
#include <stdio.h> entero = 100
#include <stdbool.h> flotante = 331.790009
doble = 844000000000.000000
int main() carácter = W
{ verdad = 0
int entero = 100;
Nótese que los números de punto
float flotante = 331.79; flotante se imprimen con 6 decimales
double doble = 8.44e+11;
char caracter = ‘W’;
bool verdad = false;
printf(“entero = %d\n flotante = %f\n doble = %lf\n caracter = %c\n verdad
= %i\n”, entero, flotante, doble, caracter, verdad);
}
Aplicaciones Computacionales
25
Helmut Contreras
OPERADORES
• Tipo de operadores en C
– Aritméticos.
• Incremento/Decremento.
– De relación.
– Lógicos.
• Manejo de Bits.
– Asignación.
– Condicionales.
Aplicaciones Computacionales
26
Helmut Contreras
OPERADORES ARITMÉTICOS
Operador Acción Ejemplo
- Resta x = 5 - 2; // x vale 3
+ Suma x = 5 + 2; // x vale 7
Aplicaciones Computacionales
28
Helmut Contreras
Modificación para calculo de división.
Observar que los valores enteros Numerador y Denominador se cambiaron de
enteros a flotantes antes de realizar la división.
Con este cambio de tipo de dato, se logra un resultado con decimales.
Aplicaciones Computacionales
29
Helmut Contreras
Programa que pide como entrada el radio, con lo que calcula y muestra
el perímetro y área de la circunferencia y el volumen de la esfera para
ese mismo radio.
Formulas a emplear:
Siendo r = radio y ^= elevado
Longitud circunferencia = 2·Pi·r
Área círculo = Pi·r^2
Volumen esfera = 4/3 · Pi · r ^3
Aplicaciones Computacionales
30
Helmut Contreras
PROGRAMA PARA CONVERTIR TEMPERATURA DE
GRADOS FAHRENHEIT - CELSIUS
Aplicaciones Computacionales
31
Helmut Contreras
PROGRAMA PARA CONVERTIR TEMPERATURA DE
GRADOS FAHRENHEIT – CELSIUS USANDO CICLO WHILE
Aplicaciones Computacionales
32
Helmut Contreras
PROGRAMA PARA ESCALAR TEMPERATURA DE GRADOS
CELSIUS A SEÑAL DE 4 – 20 (mA)
• Realice un programa que ingresando un valor de temperatura de 10 a 100
°C entregue el valor correspondiente de corriente en mA, producto de un
escalamiento lineal, usando una ecuación de la recta.
• Recuerde que la ecuación de la recta es y=𝑛∗𝑥+𝑏
𝑦2 − 𝑦1
• Donde n es la pendiente y se determina con 𝑛=
𝑋2 − 𝑋1
Y (mA)
Y2 = 20
Y1 = 4
X1 = 10 X2 = 100 X(°C)
Aplicaciones Computacionales
33
Helmut Contreras
OPERADORES ARITMÉTICOS
7 % 12 = 7 (7 = 0* 12 + 7)
Aplicaciones Computacionales
35
Helmut Contreras
OPERADORES ARITMÉTICOS
• Incremento y decremento.
– Este tipo de operadores añaden o restan una unidad a
su operador.
• ++ aumenta en 1
• - - decrementa en 1
• Postincremento y preincremento
• A = B++; copia el valor de B en A y luego incrementa B
• A = ++B; incrementa B y luego copia el valor de B en A
• Postdecremento y predecremento
• A = B--; copia el valor de B en A y decrementa B
• A = --B; decrementa B y copia el valor de B en A
Aplicaciones Computacionales
36
Helmut Contreras
Aplicaciones Computacionales
37
Helmut Contreras
OPERADORES RELACIONALES
• Al igual que en matemáticas, estos operadores nos permiten evaluar las
relaciones (igual, mayor, etc.,) entre un par de operandos.
Falso (false) 0
Verdadero (true) Cualquier valor distinto de 0, aunque
normalmente se utiliza el 1
Aplicaciones Computacionales
38
Helmut Contreras
EJEMPLO EXPRESIÓN BOOLEANA
Aplicaciones Computacionales
39
Helmut Contreras
EJEMPLO EXPRESIÓN BOOLEANA
• El tipo bool (_Bool) fue definido para C99 (stdbool.h)
Operador Acción
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
== Igual
Aplicaciones Computacionales
41
Helmut Contreras
EJEMPLO OPERADORES RELACIONALES
Aplicaciones Computacionales
42
Helmut Contreras
OPERADORES LÓGICOS
• Denominamos como operador lógico, a aquellos operadores
que nos permiten “conectar” un par de propiedades (al igual
que en lógica).
• Hay que tener especial cuidado con los operadores && y ||,
dado que si se escribe como & o |, estamos hablando de una
operación a nivel de bits.
Aplicaciones Computacionales
43
Helmut Contreras
OPERADORES LÓGICOS: OR (||)
• Cond1 OR Cond2
Aplicaciones Computacionales
44
Helmut Contreras
OPERADORES LÓGICOS: AND (&&)
• Cond1 AND Cond2
Aplicaciones Computacionales
45
Helmut Contreras
OPERADORES
• Ej:
y j no se incrementa.
Aplicaciones Computacionales
46
Helmut Contreras
EJEMPLO OPERADORES LÓGICOS
Aplicaciones Computacionales
47
Helmut Contreras
OPERADORES LÓGICOS, MANEJO DE BITS
Aplicaciones Computacionales
48
Helmut Contreras
OPERADORES LÓGICOS, MANEJO DE BITS
•Operadores a nivel de bit.
Operador Acción
& AND a nivel de bit
| OR a nivel de bit
^ XOR a nivel de bit
~ Complemento
<< Desplazamiento a la izquierda
<<= Asignación con desplazamiento a la izquierda
>> Desplazamiento a la derecha
>>= Asignación con desplazamiento a la derecha
Aplicaciones Computacionales
49
Helmut Contreras
RECORDATORIO OPERADORES
Aplicaciones Computacionales
50
Helmut Contreras
OPERADORES LÓGICOS, MANEJO DE BITS
• Operador AND (&).
– Compara dos bits; si los dos son 1 el resultado es 1, caso
contrario 0.
c1 = 0x45 --> 01000101
c2 = 0x71 --> 01110001
-----------------------------------------
c1 & c2 = 0x41 --> 01000001
• Operador OR (|).
– Compara dos bits; si cualquiera de los dos bits es 1 el
resultado es 1, caso contrario 0.
i1 = 0x47 --> 01000111
i2 = 0x53 --> 01010011
-------------------------------------
i1 | i2 = 0x57 --> 01010111
Aplicaciones Computacionales
51
Helmut Contreras
OPERADORES LÓGICOS, MANEJO DE BITS
Salida:
Aplicaciones Computacionales
53
Helmut Contreras
OPERADORES LÓGICOS, MANEJO DE BITS
C = 0x1C 00011100
Aplicaciones Computacionales
54
Helmut Contreras
EJEMPLO OPERADORES LÓGICOS, MANEJO DE BITS
Aplicaciones Computacionales
55
Helmut Contreras
OPERADORES LÓGICOS: && VS. &
• &&: AND lógico • &: AND de bits
– int a = 5, b = 13; – int a = 5, b = 13;
– c = a && b; – c = a & b;
• Equivale a AND entre • Equivale a AND entre
variables enteras los valores binarios
– a y b son != 0 – a = 01012
– Valor final de c es 1 – b = 11012
(verdadero) – a AND b = 01012
– Valor final de c es 5
Aplicaciones Computacionales
56
Helmut Contreras
OTROS OPERADORES
• Operador de asignación (=).
– En otros lenguajes de programación se considera la
asignación como una sentencia especial. En C, esto no es así.
– La asignación es un operador más.
– Este operador, tiene como lvalue (left value, el valor a la
izquierda del operador) una variable y como rvalue una
expresión válida.
– Se realizan de izquierda a derecha.
– Puesto que es un operador, el todo es una expresión:
– Ejemplos: X = Y = 0;
X = X + 2;
X + = 2;
Aplicaciones Computacionales
57
Helmut Contreras
EJEMPLO OPERADOR ASIGNACIÓN
Aplicaciones Computacionales
58
Helmut Contreras
SENTENCIAS
• Sentencia Simple:
– Cualquier expresión en C que se espera que tenga alguna
consecuencia.
– Derivadas de expresiones de asignación, aritméticas, lógicas, llamada
a funciones.
• Bloque de sentencias:
– Conjunto de sentencias simples y/o declaraciones que está
delimitados por llaves {….} para formar un bloque de código.
– Define el alcance ó ámbito de la declaración de datos.
Aplicaciones Computacionales
59
Helmut Contreras
SENTENCIAS DE CONTROL DE FLUJO
Aplicaciones Computacionales
60
Helmut Contreras
SENTENCIAS
Selección Iteración
Aplicaciones Computacionales
61
Helmut Contreras
SENTENCIAS CONDICIONALES
• IF
– Ejecución condicional.
Aplicaciones Computacionales
63
Helmut Contreras
IF, EJEMPLO
#include <stdio.h>
int main ()
{
int valor = 0, resultado = 0;
If ((valor % 2) == 0) OJO! Si se utiliza más
resultado = 1; de una sentencia, hay
que usar llaves!!
return 0;
}
Aplicaciones Computacionales
64
Helmut Contreras
IF - ELSE
• Si la condición se evalúa como verdadera entonces se ejecuta
el bloque IF.
• Si la condición se evalúa como falsa se ejecuta el bloque ELSE.
if (Condición) {
/* La(s) sentencia(s) se van a ejecutar si la condición es verdadera */
sentencia11;
sentencia12;
…
}
else
{
/* La(s) sentencia(s) se van a ejecutar si la condición es falsa*/
sentencia21;
sentencia22;
…
} Aplicaciones Computacionales
65
Helmut Contreras
DIAGRAMA DE FLUJO DE “IF – ELSE”
Aplicaciones Computacionales
66
Helmut Contreras
EJEMPLO DE SENTENCIA IF - ELSE
• Dada la edad de una persona dar un mensaje de que es o no mayor de
edad, suponiendo que una persona mayor de edad tiene por lo menos 18
años, el procedimiento será el siguiente.
Aplicaciones Computacionales
67
Helmut Contreras
EJERCICIO CON IF - ELSE
• Realice un programa que ingresando la edad de una persona, determine el
rango en el que esta se encuentra. Los rangos son los siguientes:
• Entre [1 y 12] “Es niño”
• Entre [13 y 18] “Es adolecente”
• Entre [18 y 65] “Es adulto”
• Mayor a 65 “Es anciano”
• El programa debe ser capas de detectar edades menores a 1 año y
superiores a 120 años, en cuyos casos debe enviar un mensaje de “Edad
no valida”.
• Use solo variables enteras INT.
• Use solo sentencia IF - ELSE
Aplicaciones Computacionales
68
Helmut Contreras
EJERCICIO 2. USO DE IF-ELSE
• Realice un programa que funcione como una calculadora.
Aplicaciones Computacionales
69
Helmut Contreras
Aplicaciones Computacionales
70
Helmut Contreras
IF – ELSE ANIDADOS
• Si “Condición1” es verdadera:
– Se ejecuta sentencia1, de lo
contrario se salta al “else if”.
• Si “Condición2” es verdadera:
– Se ejecuta la “sentencia 2”; de lo
Aplicaciones Computacionales
72
Helmut Contreras
ELSE
if (n > 0) if (n > 0)
if (a > b) {
z = a; if (a > b)
else z = a;
z = n; }
• Indentación confunde else
relación if-else. z = n;
– else pertenece al segundo
if!!!
• Forma correcta
Consejos:
- utilizar SIEMPRE llaves, aunque sea una línea respetar indentación!
Aplicaciones Computacionales
73
Helmut Contreras
CONSIDERACIONES :
Aplicaciones Computacionales
74
Helmut Contreras
== V/S =
Aplicaciones Computacionales
75
Helmut Contreras
SWITCH
• Decisión múltiple
– Prueba si una expresión coincide con uno de una serie
de valores enteros constantes
switch (expresión)
{
case const1:
sentencia;
case const2:
sentencia;
default:
sentencia;
}
Aplicaciones Computacionales
76
Helmut Contreras
DIAGRAMA DE FLUJO SWITCH
Aplicaciones Computacionales
77
Helmut Contreras
EJEMPLO DE SWITCH
switch (verdad)
{
case 0:
printf (“falso\n”);
default:
printf(“verdadero\n”);
}
Aplicaciones Computacionales
78
Helmut Contreras
SWITCH Y BREAK
• Sentencia Break
• La sentencia break se utiliza para
terminar la ejecución de bucles o salir
de una sentencia switch.
• Es necesaria en la sentencia switch
para transferir el control fuera de la
misma.
• En caso de bucles anidados, el control
se transfiere fuera de la sentencia
más interna en la que se encuentre,
pero no fuera de las externas.
Aplicaciones Computacionales
79
Helmut Contreras
EJEMPLO SWITCH Y BREAK
Aplicaciones Computacionales
80
Helmut Contreras
CICLO WHILE
• Repetición condicional
WHILE (condición)
sentencia1;
1. Primero se evalúa la condición
2. Si la condición se cumple, se ejecuta la sentencia
• Se repite hasta que condición no se cumpla
• Si la condición es inicialmente falsa no ingresa al ciclo.
• Si la condición es siempre verdadera: Loop infinito.
Aplicaciones Computacionales
81
Helmut Contreras
DIAGRAMA DE FLUJO WHILE
Aplicaciones Computacionales
82
Helmut Contreras
EJEMPLO DE CICLO WHILE
int i = 10, j = 0;
while (i > 0)
{
i = i – 1;
j = j + 1;
}
• Valor final de j es 10
• Si la condición no se cumple inicialmente, la
sentencias no se ejecutan!
Aplicaciones Computacionales
83
Helmut Contreras
EJEMPLO CICLO WHILE
Aplicaciones Computacionales
84
Helmut Contreras
DO-WHILE
• Repetición condicional
do
sentencia1;
while (condición);
1. Primero se ejecuta la sentencia
Aplicaciones Computacionales
85
Helmut Contreras
DIAGRAMA DE FLUJO DO-WHILE
Aplicaciones Computacionales
86
Helmut Contreras
EJEMPLO DE CICLO DO-WHILE
int i = 10, j = 0;
do
{
j = j + 1;
i = i - 1;
}
while (i > 0);
• Valor final de j es 10
Aplicaciones Computacionales
87
Helmut Contreras
EJEMPLO CICLO DO-WHILE
Aplicaciones Computacionales
88
Helmut Contreras
WHILE VS. DO-WHILE
Aplicaciones Computacionales
90
Helmut Contreras
CICLO FOR
for (expr1; expr2; expr3)
sentencia;
• La(s) sentencia(s) se ejecuta(n) si la condición expr2 es
verdadera.
Aplicaciones Computacionales
91
Helmut Contreras
CICLO FOR
for (expr1; expr2; expr3)
sentencia;
• Generalmente:
– expr1: Inicialización
– expr2: Condición
– expr3: Modificación
for (i = 0; i < 10; i++)
Aplicaciones Computacionales
92
Helmut Contreras
CICLO FOR
• Expresiones expr1, expr2, expr3 pueden ser omitidas
for (;;): Ciclo infinito
• Cada una de ellas puede ser una sentencia
compuesta
for (i = 0, j = 10, k = 20;i < (j*k*k);i = i + 1, j = j – 2, k = k - 3)
Aplicaciones Computacionales
93
Helmut Contreras
DIAGRAMA DE FLUJO FOR
Aplicaciones Computacionales
94
Helmut Contreras
EJEMPLO FOR
Aplicaciones Computacionales
95
Helmut Contreras
EJEMPLO FOR
Aplicaciones Computacionales
96
Helmut Contreras
CICLO FOR Y CICLO WHILE
for (expr1; expr2; expr3)
sentencia;
• Equivale a
expr1;
while (expr2)
{
sentencia;
expr3;
}
Aplicaciones Computacionales
97
Helmut Contreras
EJEMPLO:
CONVERSIÓN TEMPERATURA CICLO WHILE
Aplicaciones Computacionales
98
Helmut Contreras
EJEMPLO:
CONVERSIÓN TEMPERATURA CICLO FOR
Aplicaciones Computacionales
99
Helmut Contreras