SlideShare a Scribd company logo
1 of 23
Lenguaje C
Tipos, operadores y expresiones
Material basado en el libro The C Programming Language. Brian W. Kernighan, Dennis M.
Ritchie. Prentice-Hall 1988. ISBN 0-13-110362-8 (paperback); ISBN 0-13-110370-9
1
Nombres de variables
● Letras mayúsculas y minúsculas
● Guión bajo
○ Cuenta como letra
● Números
○ No como primera letra
x1
windSpeed
reactive_power
No se debe comenzar por guión bajo.
Convenio habitual: variables con
minúsculas, constantes con mayúsculas.
2
Tipos de datos
Tipos básicos
char
int
float
double
Calificadores
short
long
long long
signed
unsigned
short int sh;
long int contador;
int se suele omitir:
short sh;
long contador;
3
Los límites están en:
<limits.h>
<float.h>
sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)
1 ≤ sizeof(char)
2 ≤ sizeof(short) ≤ sizeof(int)
4 ≤ sizeof(long)
8 ≤ sizeof(long long)
sizeof(float) ≤ sizeof(double) ≤ sizeof(long double)
Tipos de datos
Tamaños
#include <limits.h>
…
short s; int i;
…
if (i < SHRT_MAX) s = i;
4
Límites de enteros
<limits.h>
Mínimo Máximo
char
signed char
unsigned char
CHAR_MIN
SCHAR_MIN
UCHAR_MIN
CHAR_MAX
SCHAR_MAX
UCHAR_MAX
(signed) short
unsigned short
SHRT_MIN
USHRT_MIN
SHRT_MAX
USHRT_MAX
(signed) int
unsigned
INT_MIN
UINT_MIN
INT_MAX
UINT_MAX
long
unsigned long
LONG_MIN
ULONG_MIN
LONG_MAX
ULONG_MAX
long long
unsigned long
long
LLONG_MIN
ULLONG_MIN
LLONG_MAX
ULLONG_MAX
5
Límites de reales
<float.h>
Formato Mínimo Máximo
float FLT_RADIX
FLT_MANT_DIG
FLT_EPSILON
FLT_DIG
FLT_MIN
FLT_MIN_EXP
FLT_MIN_10_EXP
FLT_MAX
FLT_MAX_EXP
FLT_MAX_10_EXP
double DBL_RADIX
DBL_MANT_DIG
DBL_EPSILON
DBL_DIG
DBL_MIN
DBL_MIN_EXP
DBL_MIN_10_EXP
DBL_MAX
DBL_MAX_EXP
DBL_MAX_10_EXP
long double LDBL_RADIX
LDBL_MANT_DIG
LDBL_EPSILON
LDBL_DIG
LDBL_MIN
LDBL_MIN_EXP
LDBL_MIN_10_EXP
LDBL_MAX
LDBL_MAX_EXP
LDBL_MAX_10_EXP
6
Constantes
Ejemplos
char
signed char
unsigned char
'@', 'x2f', '013', 't'
(signed) short
unsigned short
1234
1234U, 1234u
(signed) int
unsigned
long
unsigned long
1234L, 1234l
1234UL, 1234ul
long long
unsigned long long
1234LL, 1234ll
1234ULL, 1234ull
7
Constantes
Ejemplos
float 12.34f, 1234e-2F
double 12.34, 1234e-2
long double 12.34l, 1234e-2L
Debe aparecer punto o exponente o ambos.
Ejemplos límite: .0, 1.
8
Caracteres especiales
a Campana  Barra invertida
b Retroceso ? Signo de interrogación
f Form feed ' Comilla simple
n Nueva línea " Comilla doble
r Retorno de carro ooo Código octal
t Tabulador horizontal xhh Código hexadecimal
v Tabulador vertical 0 Terminador de cadenas
9
Cadenas de texto
"Soy una cadena"
"" // cadena vacía
"Soy una cadena" " muy larga"
● Son vectores de caracteres
char str[5] = "Hola";
Siempre hay un caracter
terminador ‘0’ al final
¡OJO! ‘x’ no es lo mismo que “x”
10
Constantes simbólicas
#define NOMBRE expresión_constante
#define MAXLEN 10
enum Color {
Rojo = 1,
Verde = 2,
Azul = 4,
};
enum Mes {
Ene, Feb, Mar, Abr,…
};
char str[MAXLEN];
int c = Rojo + Verde;
int mes = Feb;
O bien indicando el valor de
alguno:
enum Mes {
Ene = 1, Feb,
Mar,…
};
11
Declaraciones
int lower, upper, step;
char c, line[1000];
char esc = '';
int i = 0;
const double e = 2.7182818284;
const char msg[] = "warning";
int strlen(const char s[]) {
…
}
● Declarar antes de usar
● Es posible inicializar con
valor
● Es posible calificar como
const
○ Variable no va cambiarse
○ Argumento no se modifica
12
Operadores
Aritméticos + - * / %
++ --
De relación > >= < <= ==
!=
Lógicos ! && ||
De bits ~ | & ^ >>
<<
De asignación = += -= *= /=
%=
~= |= &= ^= ~=
>>= <<=
De arrays y punteros & * -> []
Especiales ?: , (tipo) sizeof
13
Operadores aritméticos
Binarios: + - * / %
x % y Resto de dividir x entre y (solo
enteros)
x / y División entera o real según tipos de x
e y
Unarios: + - ++ --
Precedencia: unarios, * / %, + -
Asociatividad: binarios de izquierda a derecha
unarios de derecha a
izquierda 14
Op. de relación y lógicos
Binarios: < <= > >=
&& ||
Unarios: !
Precedencia: !, aritméticos, relación, &&, ||
Asociatividad: binarios de izquierda a derecha
unarios de derecha a
izquierda
15
Conversiones de tipo
Cuando un operador tiene operandos de distintos tipos se
convierten a un tipo común
● De forma automática hacia tipos más amplios sin pérdida de información
● Se prohíben expresiones sin sentido (e.g. float como índice de vector)
● Expresiones que pueden perder información generan advertencias pero
no son ilegales
int atoi(char s[]) { // convierte s a entero
int i, n;
n = 0;
for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
n = 10 * n + (s[i] - '0');
return n;
}
Conversión char → int
16
Reglas de conversión implícita
Si un operador binario tiene dos operandos de distinto tipo
● Si un operando es long double, convierte el otro a long double
● En caso contrario, si uno es double, convierte el otro double
● En caso contrario, si uno es float, convierte el otro float
● En caso contrario, convierte char y short a int
● Después, si uno es long long convierte el otro a long long
● Después, si uno es long convierte el otro a long
int i; int i;
char c; char c;
i = c; c = i;
c = i; i = c;
No hay conversión automática
float → double
Enteros grandes a enteros pequeños
se convierten truncando bits más
significativos
Puede perder
información
17
Reglas de conversión implícita
Llamadas a función
En ausencia de prototipo
● char y short de convierten a int
● float se convierte a double
El ABI puede imponer
más conversiones
Si hay prototipo aplica
reglas de conversión
implícita
double f(double x);
int main() {
printf("%lf", f(2));
}
double f(double x) {
return x*x
+ 2*x
- 5;
}
Prototipo imprescindible para
que funcione correctamente
biblioteca
independiente
18
Conversión de tipos explícita
Operador de coerción (type cast)
(tipo) expresión
● Convierte expresión al tipo indicado
● Como si se hubiera asignado a una variable del tipo indicado
19
Operadores ++ y --
Versión prefijo y postfijo
● Prefijo incrementa antes de que el valor se use
● Postfijo incrementa después de que el valor se use
n = 5; n = 5;
x = n++; x = ++n;
Ejemplo: Concatenar cadenas
void strcat(char s[], char t[]) {
int i = 0, j = 0;
while (s[i] != '0') i++;
while ((s[i++] = t[j++]) != '0') ;
}
x == 6, n == 6
x == 5, n == 6
Busca final de s
Copia t
20
Ejercicios
1. Implementar la función
int htoi(char str[])
que convierte una cadena que contiene un número
hexadecimal en el entero correspondiente
2. Implementar la función
void squeze(char str[], int c)
que elimina todas las ocurrencias del caracter c en la
cadena str.
21
Operadores de bits
& AND bit a bit
| OR bit a bit
^ XOR bit a bit
<< Desplazamiento a la izquierda
>> Desplazamiento a la derecha
~ NOT bit a bit (complemento a 1)
0 0 1 0 0 1 0 1
0
0
1
1
0
0
1
1
char a = 0x25; b = 0x33;
a&b == 0x21
a|b == 0x37
a^b == 0x16
~a == 0xda
&
&
&
&
&
&
&
&
0 0 1 0 0 0 0 1
22
Operadores de bits
Obtener los n bits a partir de la posición p del entero x
unsigned getbits(unsigned x, int p, int n) {
return (x >> (p+1-n)) & ~(~0 << n);
}
n
p
x
23

More Related Content

Similar to Curso - C. 02. C tipos y expresiones.pptx

TUTORIAL DE LENGUAJE C
TUTORIAL DE LENGUAJE CTUTORIAL DE LENGUAJE C
TUTORIAL DE LENGUAJE CJesus Agreda
 
Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.comFresyMetal
 
Clase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacionClase 11- fundamentos de la programacion
Clase 11- fundamentos de la programaciondiego MC
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++die_dex
 
ProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y CiclosProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y CiclosAndres Garcia
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)MarielaCuriel
 
Diapositivas curso programación orientada a objetos en Java
Diapositivas curso programación orientada a objetos en JavaDiapositivas curso programación orientada a objetos en Java
Diapositivas curso programación orientada a objetos en JavaJose Perez
 
Apuntadores
ApuntadoresApuntadores
Apuntadoresluisabn
 
Apuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cApuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cZalimanunezc
 
Lenguaje c diapositivas
Lenguaje c diapositivasLenguaje c diapositivas
Lenguaje c diapositivasstarduslex
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivasstarduslex
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivasstarduslex
 
Operadores y expresiones
Operadores y expresionesOperadores y expresiones
Operadores y expresionesJorge Ñauñay
 

Similar to Curso - C. 02. C tipos y expresiones.pptx (20)

TUTORIAL DE LENGUAJE C
TUTORIAL DE LENGUAJE CTUTORIAL DE LENGUAJE C
TUTORIAL DE LENGUAJE C
 
Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.com
 
Clase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacionClase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacion
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++
 
Introducción al lenguaje c
Introducción al lenguaje cIntroducción al lenguaje c
Introducción al lenguaje c
 
Introducción
IntroducciónIntroducción
Introducción
 
Introducción
IntroducciónIntroducción
Introducción
 
ProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y CiclosProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y Ciclos
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)
 
Ejercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectoresEjercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectores
 
Diapositivas curso programación orientada a objetos en Java
Diapositivas curso programación orientada a objetos en JavaDiapositivas curso programación orientada a objetos en Java
Diapositivas curso programación orientada a objetos en Java
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
 
Apuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cApuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje c
 
Tipos De Datos
Tipos De DatosTipos De Datos
Tipos De Datos
 
Lenguaje c diapositivas
Lenguaje c diapositivasLenguaje c diapositivas
Lenguaje c diapositivas
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
 
Punteros
PunterosPunteros
Punteros
 
Operadores y expresiones
Operadores y expresionesOperadores y expresiones
Operadores y expresiones
 

Recently uploaded

Ciclo de Refrigeracion aplicado a ToniCorp.pptx
Ciclo de Refrigeracion aplicado a ToniCorp.pptxCiclo de Refrigeracion aplicado a ToniCorp.pptx
Ciclo de Refrigeracion aplicado a ToniCorp.pptxUniversidad de Guayaquil
 
368165951-Procedimiento-de-Gruas-e-Izaje.doc
368165951-Procedimiento-de-Gruas-e-Izaje.doc368165951-Procedimiento-de-Gruas-e-Izaje.doc
368165951-Procedimiento-de-Gruas-e-Izaje.docangelmt2
 
Procedimeiento y secuencias para el diseño mecánico de ejes
Procedimeiento y secuencias para el diseño mecánico de ejesProcedimeiento y secuencias para el diseño mecánico de ejes
Procedimeiento y secuencias para el diseño mecánico de ejesRubén Cortes Zavala
 
Diagramas de Tiempo.pptpara electronica aplicada
Diagramas de Tiempo.pptpara electronica aplicadaDiagramas de Tiempo.pptpara electronica aplicada
Diagramas de Tiempo.pptpara electronica aplicadaSantiago Luis Gómez
 
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptxMETRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptxEdwardRodriguezPalom1
 
Embriologia-2 en ganado bovino lechero .ppt
Embriologia-2 en ganado bovino lechero .pptEmbriologia-2 en ganado bovino lechero .ppt
Embriologia-2 en ganado bovino lechero .pptsalazardiazalberto69
 
Morfología interna de insectos, respiración, circulación, nutrición, reproduc...
Morfología interna de insectos, respiración, circulación, nutrición, reproduc...Morfología interna de insectos, respiración, circulación, nutrición, reproduc...
Morfología interna de insectos, respiración, circulación, nutrición, reproduc...jacksyordoez
 
Anexos del Decreto Supremo N° 049-2002-MTC.pdf
Anexos del Decreto Supremo N° 049-2002-MTC.pdfAnexos del Decreto Supremo N° 049-2002-MTC.pdf
Anexos del Decreto Supremo N° 049-2002-MTC.pdfparizweldingcivil
 
bombeo cavidades progresivas en pozos Petróleros
bombeo cavidades progresivas en pozos Petrólerosbombeo cavidades progresivas en pozos Petróleros
bombeo cavidades progresivas en pozos PetrólerosEstefannyMedrano1
 
MANUAL QUImica CIENCIAS AGRARIAS de la universidad
MANUAL QUImica CIENCIAS AGRARIAS de la universidadMANUAL QUImica CIENCIAS AGRARIAS de la universidad
MANUAL QUImica CIENCIAS AGRARIAS de la universidadCesarCastilloHernand
 
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdfESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdfSegundo Silva Maguiña
 
Trabajo de cristalografia. año 2024 mes de mayo
Trabajo de cristalografia. año 2024 mes de mayoTrabajo de cristalografia. año 2024 mes de mayo
Trabajo de cristalografia. año 2024 mes de mayoAntonioCardenas58
 
2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf
2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf
2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdfAdolfo Acero Aguilar
 
Responsabilidad de padres con sus hijos (1).pptx
Responsabilidad de padres con sus hijos (1).pptxResponsabilidad de padres con sus hijos (1).pptx
Responsabilidad de padres con sus hijos (1).pptxROSARIODELPILARMERIN
 
CLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptx
CLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptxCLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptx
CLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptxLuisLobatoingaruca
 
Presentación de proyecto y resumen de conceptos (3).pdf
Presentación de proyecto y resumen de conceptos (3).pdfPresentación de proyecto y resumen de conceptos (3).pdf
Presentación de proyecto y resumen de conceptos (3).pdflisCuenca
 
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdfErnestoCano12
 

Recently uploaded (20)

ESTRATEGIA comercial de productos en mineria.pptx
ESTRATEGIA comercial de productos en mineria.pptxESTRATEGIA comercial de productos en mineria.pptx
ESTRATEGIA comercial de productos en mineria.pptx
 
Litio en México y su uso en baterías
Litio en México y su uso en bateríasLitio en México y su uso en baterías
Litio en México y su uso en baterías
 
Ciclo de Refrigeracion aplicado a ToniCorp.pptx
Ciclo de Refrigeracion aplicado a ToniCorp.pptxCiclo de Refrigeracion aplicado a ToniCorp.pptx
Ciclo de Refrigeracion aplicado a ToniCorp.pptx
 
368165951-Procedimiento-de-Gruas-e-Izaje.doc
368165951-Procedimiento-de-Gruas-e-Izaje.doc368165951-Procedimiento-de-Gruas-e-Izaje.doc
368165951-Procedimiento-de-Gruas-e-Izaje.doc
 
Procedimeiento y secuencias para el diseño mecánico de ejes
Procedimeiento y secuencias para el diseño mecánico de ejesProcedimeiento y secuencias para el diseño mecánico de ejes
Procedimeiento y secuencias para el diseño mecánico de ejes
 
Diagramas de Tiempo.pptpara electronica aplicada
Diagramas de Tiempo.pptpara electronica aplicadaDiagramas de Tiempo.pptpara electronica aplicada
Diagramas de Tiempo.pptpara electronica aplicada
 
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptxMETRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
METRADOS EN OBRAS DE PAVIMENTACION- ACTUALIZADA.pptx
 
Embriologia-2 en ganado bovino lechero .ppt
Embriologia-2 en ganado bovino lechero .pptEmbriologia-2 en ganado bovino lechero .ppt
Embriologia-2 en ganado bovino lechero .ppt
 
Morfología interna de insectos, respiración, circulación, nutrición, reproduc...
Morfología interna de insectos, respiración, circulación, nutrición, reproduc...Morfología interna de insectos, respiración, circulación, nutrición, reproduc...
Morfología interna de insectos, respiración, circulación, nutrición, reproduc...
 
Anexos del Decreto Supremo N° 049-2002-MTC.pdf
Anexos del Decreto Supremo N° 049-2002-MTC.pdfAnexos del Decreto Supremo N° 049-2002-MTC.pdf
Anexos del Decreto Supremo N° 049-2002-MTC.pdf
 
bombeo cavidades progresivas en pozos Petróleros
bombeo cavidades progresivas en pozos Petrólerosbombeo cavidades progresivas en pozos Petróleros
bombeo cavidades progresivas en pozos Petróleros
 
MANUAL QUImica CIENCIAS AGRARIAS de la universidad
MANUAL QUImica CIENCIAS AGRARIAS de la universidadMANUAL QUImica CIENCIAS AGRARIAS de la universidad
MANUAL QUImica CIENCIAS AGRARIAS de la universidad
 
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdfESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
ESFUERZO EN VIGAS SESIÓN 5 PROBLEMA RESUELTOS.pdf
 
Trabajo de cristalografia. año 2024 mes de mayo
Trabajo de cristalografia. año 2024 mes de mayoTrabajo de cristalografia. año 2024 mes de mayo
Trabajo de cristalografia. año 2024 mes de mayo
 
2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf
2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf
2021-MAYO-CAP-RL_SEGURIDAD-PARA-DELEGADOS_08.05.21-ENVIADO.pdf
 
50870516-hidroponia. descargado en novppt
50870516-hidroponia. descargado en novppt50870516-hidroponia. descargado en novppt
50870516-hidroponia. descargado en novppt
 
Responsabilidad de padres con sus hijos (1).pptx
Responsabilidad de padres con sus hijos (1).pptxResponsabilidad de padres con sus hijos (1).pptx
Responsabilidad de padres con sus hijos (1).pptx
 
CLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptx
CLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptxCLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptx
CLASES DE ARRANQUE DE UN MOTOR ELECTRICO.pptx
 
Presentación de proyecto y resumen de conceptos (3).pdf
Presentación de proyecto y resumen de conceptos (3).pdfPresentación de proyecto y resumen de conceptos (3).pdf
Presentación de proyecto y resumen de conceptos (3).pdf
 
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
 

Curso - C. 02. C tipos y expresiones.pptx

  • 1. Lenguaje C Tipos, operadores y expresiones Material basado en el libro The C Programming Language. Brian W. Kernighan, Dennis M. Ritchie. Prentice-Hall 1988. ISBN 0-13-110362-8 (paperback); ISBN 0-13-110370-9 1
  • 2. Nombres de variables ● Letras mayúsculas y minúsculas ● Guión bajo ○ Cuenta como letra ● Números ○ No como primera letra x1 windSpeed reactive_power No se debe comenzar por guión bajo. Convenio habitual: variables con minúsculas, constantes con mayúsculas. 2
  • 3. Tipos de datos Tipos básicos char int float double Calificadores short long long long signed unsigned short int sh; long int contador; int se suele omitir: short sh; long contador; 3
  • 4. Los límites están en: <limits.h> <float.h> sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long) 1 ≤ sizeof(char) 2 ≤ sizeof(short) ≤ sizeof(int) 4 ≤ sizeof(long) 8 ≤ sizeof(long long) sizeof(float) ≤ sizeof(double) ≤ sizeof(long double) Tipos de datos Tamaños #include <limits.h> … short s; int i; … if (i < SHRT_MAX) s = i; 4
  • 5. Límites de enteros <limits.h> Mínimo Máximo char signed char unsigned char CHAR_MIN SCHAR_MIN UCHAR_MIN CHAR_MAX SCHAR_MAX UCHAR_MAX (signed) short unsigned short SHRT_MIN USHRT_MIN SHRT_MAX USHRT_MAX (signed) int unsigned INT_MIN UINT_MIN INT_MAX UINT_MAX long unsigned long LONG_MIN ULONG_MIN LONG_MAX ULONG_MAX long long unsigned long long LLONG_MIN ULLONG_MIN LLONG_MAX ULLONG_MAX 5
  • 6. Límites de reales <float.h> Formato Mínimo Máximo float FLT_RADIX FLT_MANT_DIG FLT_EPSILON FLT_DIG FLT_MIN FLT_MIN_EXP FLT_MIN_10_EXP FLT_MAX FLT_MAX_EXP FLT_MAX_10_EXP double DBL_RADIX DBL_MANT_DIG DBL_EPSILON DBL_DIG DBL_MIN DBL_MIN_EXP DBL_MIN_10_EXP DBL_MAX DBL_MAX_EXP DBL_MAX_10_EXP long double LDBL_RADIX LDBL_MANT_DIG LDBL_EPSILON LDBL_DIG LDBL_MIN LDBL_MIN_EXP LDBL_MIN_10_EXP LDBL_MAX LDBL_MAX_EXP LDBL_MAX_10_EXP 6
  • 7. Constantes Ejemplos char signed char unsigned char '@', 'x2f', '013', 't' (signed) short unsigned short 1234 1234U, 1234u (signed) int unsigned long unsigned long 1234L, 1234l 1234UL, 1234ul long long unsigned long long 1234LL, 1234ll 1234ULL, 1234ull 7
  • 8. Constantes Ejemplos float 12.34f, 1234e-2F double 12.34, 1234e-2 long double 12.34l, 1234e-2L Debe aparecer punto o exponente o ambos. Ejemplos límite: .0, 1. 8
  • 9. Caracteres especiales a Campana Barra invertida b Retroceso ? Signo de interrogación f Form feed ' Comilla simple n Nueva línea " Comilla doble r Retorno de carro ooo Código octal t Tabulador horizontal xhh Código hexadecimal v Tabulador vertical 0 Terminador de cadenas 9
  • 10. Cadenas de texto "Soy una cadena" "" // cadena vacía "Soy una cadena" " muy larga" ● Son vectores de caracteres char str[5] = "Hola"; Siempre hay un caracter terminador ‘0’ al final ¡OJO! ‘x’ no es lo mismo que “x” 10
  • 11. Constantes simbólicas #define NOMBRE expresión_constante #define MAXLEN 10 enum Color { Rojo = 1, Verde = 2, Azul = 4, }; enum Mes { Ene, Feb, Mar, Abr,… }; char str[MAXLEN]; int c = Rojo + Verde; int mes = Feb; O bien indicando el valor de alguno: enum Mes { Ene = 1, Feb, Mar,… }; 11
  • 12. Declaraciones int lower, upper, step; char c, line[1000]; char esc = ''; int i = 0; const double e = 2.7182818284; const char msg[] = "warning"; int strlen(const char s[]) { … } ● Declarar antes de usar ● Es posible inicializar con valor ● Es posible calificar como const ○ Variable no va cambiarse ○ Argumento no se modifica 12
  • 13. Operadores Aritméticos + - * / % ++ -- De relación > >= < <= == != Lógicos ! && || De bits ~ | & ^ >> << De asignación = += -= *= /= %= ~= |= &= ^= ~= >>= <<= De arrays y punteros & * -> [] Especiales ?: , (tipo) sizeof 13
  • 14. Operadores aritméticos Binarios: + - * / % x % y Resto de dividir x entre y (solo enteros) x / y División entera o real según tipos de x e y Unarios: + - ++ -- Precedencia: unarios, * / %, + - Asociatividad: binarios de izquierda a derecha unarios de derecha a izquierda 14
  • 15. Op. de relación y lógicos Binarios: < <= > >= && || Unarios: ! Precedencia: !, aritméticos, relación, &&, || Asociatividad: binarios de izquierda a derecha unarios de derecha a izquierda 15
  • 16. Conversiones de tipo Cuando un operador tiene operandos de distintos tipos se convierten a un tipo común ● De forma automática hacia tipos más amplios sin pérdida de información ● Se prohíben expresiones sin sentido (e.g. float como índice de vector) ● Expresiones que pueden perder información generan advertencias pero no son ilegales int atoi(char s[]) { // convierte s a entero int i, n; n = 0; for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i) n = 10 * n + (s[i] - '0'); return n; } Conversión char → int 16
  • 17. Reglas de conversión implícita Si un operador binario tiene dos operandos de distinto tipo ● Si un operando es long double, convierte el otro a long double ● En caso contrario, si uno es double, convierte el otro double ● En caso contrario, si uno es float, convierte el otro float ● En caso contrario, convierte char y short a int ● Después, si uno es long long convierte el otro a long long ● Después, si uno es long convierte el otro a long int i; int i; char c; char c; i = c; c = i; c = i; i = c; No hay conversión automática float → double Enteros grandes a enteros pequeños se convierten truncando bits más significativos Puede perder información 17
  • 18. Reglas de conversión implícita Llamadas a función En ausencia de prototipo ● char y short de convierten a int ● float se convierte a double El ABI puede imponer más conversiones Si hay prototipo aplica reglas de conversión implícita double f(double x); int main() { printf("%lf", f(2)); } double f(double x) { return x*x + 2*x - 5; } Prototipo imprescindible para que funcione correctamente biblioteca independiente 18
  • 19. Conversión de tipos explícita Operador de coerción (type cast) (tipo) expresión ● Convierte expresión al tipo indicado ● Como si se hubiera asignado a una variable del tipo indicado 19
  • 20. Operadores ++ y -- Versión prefijo y postfijo ● Prefijo incrementa antes de que el valor se use ● Postfijo incrementa después de que el valor se use n = 5; n = 5; x = n++; x = ++n; Ejemplo: Concatenar cadenas void strcat(char s[], char t[]) { int i = 0, j = 0; while (s[i] != '0') i++; while ((s[i++] = t[j++]) != '0') ; } x == 6, n == 6 x == 5, n == 6 Busca final de s Copia t 20
  • 21. Ejercicios 1. Implementar la función int htoi(char str[]) que convierte una cadena que contiene un número hexadecimal en el entero correspondiente 2. Implementar la función void squeze(char str[], int c) que elimina todas las ocurrencias del caracter c en la cadena str. 21
  • 22. Operadores de bits & AND bit a bit | OR bit a bit ^ XOR bit a bit << Desplazamiento a la izquierda >> Desplazamiento a la derecha ~ NOT bit a bit (complemento a 1) 0 0 1 0 0 1 0 1 0 0 1 1 0 0 1 1 char a = 0x25; b = 0x33; a&b == 0x21 a|b == 0x37 a^b == 0x16 ~a == 0xda & & & & & & & & 0 0 1 0 0 0 0 1 22
  • 23. Operadores de bits Obtener los n bits a partir de la posición p del entero x unsigned getbits(unsigned x, int p, int n) { return (x >> (p+1-n)) & ~(~0 << n); } n p x 23