Este documento presenta los tipos básicos de datos en C, incluyendo constantes, operadores unarios, datos lógicos y caracteres. Explica cómo declarar y usar variables de diferentes tipos, y describe funciones matemáticas como las de la librería math.h y funciones para generar números aleatorios. El objetivo es que los estudiantes conozcan los conceptos fundamentales para trabajar con datos en el lenguaje C.
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
Programación 1: tipos básicos de datos en C
1. Programación 3
Tipos básicos de datos en C
Angel Vázquez-Patiño
angel.vazquezp@ucuenca.edu.ec
Departamento de Ciencias de la Computación
Universidad de Cuenca
17 de abril de 2017
2. 17/04/17 Angel Vázquez-Patiño 2/52
Objetivos
1. Conocer los tipos básicos de datos en C
2. Conocer cómo se manejan constantes en C
3. Conocer los principales operadores en C
4. Usar funciones/librerías predefinidas de C
3. 17/04/17 Angel Vázquez-Patiño 3/52
Contenido
Tipos básicos de datos
Manejo de constantes
Operadores unarios
Prefix y postfix
Datos lógicos
Caracteres
Librería <math.h>
Otras funciones
4. 17/04/17 Angel Vázquez-Patiño 4/52
Tipos básicos de datos
Statically-typed
● Todas las variables deben primero ser
declaradas antes de ser usadas. Se debe
especificar el tipo de la variable y el nombre:
int miVariable = 1;
● El tipo de dato de una variable determina el
valor que esta puede contener, además indica
las operaciones que se pueden hacer con/en
esta
¿Cómo se debe nombrar una variable?
6. 17/04/17 Angel Vázquez-Patiño 6/52
Tipos básicos de datos
Eficiencia
● Los datos enteros ocupan menos memoria que
los datos reales
● Las operaciones entre datos enteros suelen ser
mucho más rápidas (¿Y con los CPUs
actuales?)
8. 17/04/17 Angel Vázquez-Patiño 8/52
Manejo de constantes
Constante
● Variable que mantiene un valor inmutable a lo
largo de toda la vida del programa
Definición
#define NOMBRE valor
#define PI 3.14
#define TAMANIO 100
#define CARACTER 'u'
9. 17/04/17 Angel Vázquez-Patiño 9/52
Manejo de constantes
//Inclusión de cabeceras
#include <stdio.h>
//Definición de constantes. No se termina con ;
#define CONSTANTE1 16
#define CONSTANTE2 20
void main()
{
//Declaración de variables
int variable1=123, variable2=456;
char caracter1='a';
float f;
}
10. 17/04/17 Angel Vázquez-Patiño 10/52
Manejo de constantes
#include <stdio.h>
#define D_SEM 7
#define D_LAB 5
int main()
{
printf("Días de la semana: %dn", D_SEM);
printf("Días laborables: %dn", D_LAB);
return 0;
}
13. 17/04/17 Angel Vázquez-Patiño 13/52
Operadores unarios
Operador Descripción
+ operador unario más; indica un valor
positivo (números son positivos sin el
operador)
- operador unario menos; niega una
expresión
++ operador de incremento; incrementa un
valor en 1
-- operador de decremento; decrementa
un valor en 1
! operador lógico de complemento;
invierte un valor booleano
14. 17/04/17 Angel Vázquez-Patiño 14/52
Operadores unarios
#include <stdio.h>
int main()
{
int r = +1;
// r contiene 1
printf("%dn", r);
r--;
// r contiene 0
printf("%dn", r);
r++;
//r contiene 1
printf("%dn", r);
r = -r;
// r contiene -1
printf("%dn", r);
_Bool exitoso = 0;
// falso
printf("%dn", exitoso);
printf(exitoso?"Truen":"Falsen");
// true
printf("%dn", !exitoso);
printf(!exitoso?"True":"False");
}
15. 17/04/17 Angel Vázquez-Patiño 15/52
Operadores unarios
Prefix y postfix
● Los operadores de incremento y decremento
pueden ser aplicados antes (prefix) o después
(postfix) del operando. Ambas versiones tienen
el mismo resultado final; sin embargo, por
ejemplo, ++res es evaluado con el valor
incrementado y res++ con el valor original
16. 17/04/17 Angel Vázquez-Patiño 16/52
Operadores unarios
¡Importante!
Si se usa el incremento o decremento en una
operación simple, no importa la versión usada.
Pero, puede haber una diferencia significativa en
una expresión más larga
18. 17/04/17 Angel Vázquez-Patiño 18/52
Precedencia de operadores
Operador Operación Orden de evaluación
op++ op-- posfijos Primero
++op --op
+op -op !
unarios Segundo
* Multiplicación Tercero. Si hay varios
operadores de este tipo,
son evaluados de izq a der
/ División
% Residuo
+ Adición Cuarto. Si hay varios
operadores de este tipo,
son evaluados de izq a der
- Sustracción
< > <= >= Relacional Quinto
= Asignación Evaluado al final
19. 17/04/17 Angel Vázquez-Patiño 19/52
Operadores unarios
1) int x = -3 + 2 * 4 – 12 / 6 + 5 ;
2) int y = -3 + 2 * (14 – 2) / 6 + 5 ;
3) int i = 10; int n = i++ % 5; printf(n); n =
++i % 5; printf(n);
4) X = 7 % 2;
5) X = 8 % 3;
6) int x=5; y=5; int z; z=x++;
7) z=++y;
8) int i = 1; printf(i); printf(++i);
printf(i);
9) i = 1; printf(i); printf(i++); printf(i);
24. 17/04/17 Angel Vázquez-Patiño 24/52
Datos lógicos
Operadores de comparación
● Evaluación de datos
● Devuelve valor lógico
_Bool boolVar;
boolVar = 2<3;
printf("¿2<3?: %dn", boolVar);
printf("¿4=5?: %dn", 4==5);
25. 17/04/17 Angel Vázquez-Patiño 25/52
Datos lógicos
Operador algebraico Operador C Condición C de
ejemplo
Operadores de igualdad
= == x == y
≠ != x != y
Operadores relacionales
> > x > y
< < x < y
≥ >= x >= y
≤ <= x <= y
26. 17/04/17 Angel Vázquez-Patiño 26/52
Datos lógicos
Operador Asociatividad Tipo
* / % Izquierda a derecha Multiplicativo
+ - Izquierda a derecha Aditivo
< <= > >= Izquierda a derecha Relacional
== != Izquierda a derecha Igualdad
= Derecha a izquierda Asignación
Precedencia y asociatividad de los operadores
27. 17/04/17 Angel Vázquez-Patiño 27/52
Datos lógicos
Operador Asociatividad
( )
not Derecha
and Izquierda
xor Izquierda
or Izquierda
Precedencia y asociatividad de los operadores
28. 17/04/17 Angel Vázquez-Patiño 28/52
Datos lógicos
Ejemplo
● not p se evalúa p y después se aplica la
negación
● p and q se evalúa p y después se evalúa p and
q
● not p or q se evalúa (not p) or q ya que el
operador not tiene más prioridad que el
operador or
29. 17/04/17 Angel Vázquez-Patiño 29/52
Datos lógicos
Con a=5, b=e, c=-12
1) a > 3
2) b < c
3) b != c
4) a == 3
5) a * b == -30
6) c/b < a
7) (a+b==8) && (a-b==2)
8) a > 3 && b > 3 && c < 3
1) True
2) False
3) True
4) False
5) False
6) True
7) True
8) False
31. 17/04/17 Angel Vázquez-Patiño 31/52
Caracteres
American Standard Code for Information Interchange
● Un tipo de dato caracter contiene sólo un elemento
como su valor. Elementos establecidos y
normalizados por el estándar llamado ASCII, el cual
establece cuáles son los elementos y el orden de
precedencia entre los mismos. Los elementos son
las letras (mayúsculas y minúsculas), números (0-9)
y símbolos especiales (e.g., !, @, #, $, %)
disponibles en el teclado de la computadora y
algunos otros elementos gráficos. El código ASCII no
es único, pero es el más utilizado internacionalmente
37. 17/04/17 Angel Vázquez-Patiño 37/52
Type casting
Type casting
● Una forma de convertir un tipo de dato a otro
Cast operator
(type_name) expression
38. 17/04/17 Angel Vázquez-Patiño 38/52
Type casting
Cast operator
int sum = 17, count = 5;
double mean;
mean = (double) sum / count;
printf("Media: %fn", mean);
39. 17/04/17 Angel Vázquez-Patiño 39/52
Type casting
Promoción entera
● Proceso mediante el cual los valores enteros
“más pequeños” que int o unsigned int son
convertidos a int o unsigned int
int i = 17;
char c = 'c'; // valor ascii: 99
int sum = i + c;
printf("Suma: %dn", sum);
40. 17/04/17 Angel Vázquez-Patiño 40/52
Type casting
Conversiones aritméticas usuales
● Son implícitamente realizadas para convertir
sus valores a un tipo común
● El compilador primero realiza la promoción
entera
● Si los operandos aún tienen diferentes tipos,
son convertidos al tipo que aparece en lo más
alto de la siguiente jerarquía
41. 17/04/17 Angel Vázquez-Patiño 41/52
Type casting
● Las conversiones
aritméticas usuales
no son realizadas por
los operadores de
asignación ni para los
operadores lógicos
&& y ||
long double
double
float
unsigned long long
long long
unsigned long
long
unsigned int
int
42. 17/04/17 Angel Vázquez-Patiño 42/52
Type casting
int i = 17;
char c = 'c'; // valor ascii: 99
float sum = i + c;
printf("Suma: %fn", sum);
● C primero convierte c a int pero como el valor
final es doble, se aplica la conversión aritmética
usual y el compilador convierte i y c en float
y los añade obteniendo un resultado float
44. 17/04/17 Angel Vázquez-Patiño 44/52
Librería <math.h>
● double acos(double x): arco coseno de x
en radianes
● double asin(double x)
● double atan(double x)
● double atan2(double y, double x):
arco tangente en radianes de y/x basado en los
signos de ambos valores para determinar el
cuadrante correcto
● double exp(double x): ex
45. 17/04/17 Angel Vázquez-Patiño 45/52
Librería <math.h>
● double log(double x): logaritmo natural
(base e) de x
● double log10(double x)
● double pow(double x, double y)
● double sqrt(double x)
● double ceil(double x): el valor entero
más pequeño mayor o igual a x
● double fabs(double x): ABS. Para
enteros: int abs(int x), <stdlib.h>
46. 17/04/17 Angel Vázquez-Patiño 46/52
Librería <math.h>
● double floor(double x): el valor más
grande menor o igual a x
● double fmod(double x, double y):
residuo de x/y
● double round(double x)
● float roundf(float x)
● long double roundl(long double x)
● Constante pi: M_PI
● Más: https://goo.gl/eEnRiY
50. 17/04/17 Angel Vázquez-Patiño 50/52
Conceptos y términos importantes
● Librerías
● Type casting
● Tipos básicos
● Operadores
● Reglas de precedencia
51. 17/04/17 Angel Vázquez-Patiño 51/52
Referencia
● Gustedt, J., 2017. Modern C. France.
● C Programming Operators,
https://goo.gl/7wHPax
● C - Type Casting, https://goo.gl/VOh2pV
● Más funciones:
http://www.tutorialspoint.com/c_standard_library
/