Departamento de Informática Universidad Técnica Federico Santa María Tipos de Datos Programación de Computadores Profesor: Teddy Alfaro Tipos de Datos Simples Estándar • char – es un carácter (alfanumérico), ocupa 1 byte. • int – es un numero entero, ocupa 2 bytes. – [-32 768 , 32 767] • float – son números con decimales y/o exponentes, ocupa 4 bytes. – [3.4e-38 , 3.4e38] • double – son números con decimales y/o exponentes, ocupa 8 bytes. – [1.7e-308 , 1.7e308] • void – no posee valor, ocupa 0 bytes. 1 Modificadores de tipo • Se utiliza para alterar el significado del tipo base para que se ajuste más precisamente a las necesidades de cada momento. • Predecede al tipo simple. • Modificadores: signed unsigned long short Modificadores • Ejemplos de modificadores de tipo • • • • • • long int x; unsigned long int x; short int x; signed short int x; long long x unsigned long long x; • El modificaro de acceso const establece que cierta variable no puede ser modificada – Ejemplo • const int dia=13; 2 Tipo definido por el usuario • Tipo enumerado, principalmene utilizado para crear conjuntos • Formato enum nuevo_tipo {elemento0,elemento1,...,elementoN}; nuevo_tipo indentificador; • Ejemplo enum habil{lunes,martes,miercoles,jueves,viernes}; habil dia; enum moneda{peso, dolar, euro, libra} m; Operadores y Expresiones 3 Operadores • Los operadores son operaciones que se aplican a los operandos (variables, valores, constantes). Estos pueden ser unarios, binarios o n-arios. Para C existen los operadores: aritméticos, lógicos y relacionales. • Un conjunto de operadores y operandos conforman una expresión, la cual puede ser reducida a un valor. • Cuando en una expresión se utilizan mas de un operador, éstos se deben evaluar conforme a una prioridad establecida llamada orden de precedencia y de acuerdo a la compatibilidad con el tipo de dato. Operadores Aritméticos Operador + * / % ++ -- Acción Adición Substracción Multiplicación División Resto de división entera Incremento Decremento 4 Operadores Relacionales Operador Acción > >= < <= == != Mayor que Mayor que o igual Menor que Menor que o igual Igual No igual Operadores Lógicos Operador Acción && Y || O ! NO && Y 5 Tabla de Precedencia Operador de más alta prioridad ( ), !, ++, - - , *p, &p *, /, % Operadores unarios Mulitiplicación, división, resto +, - Adición y sustracción <<, >> Corrimientos binario <, <=, >, >= ==, != Operadores relacionales mayor-menor Operador de igualdad y desigualdad & And binario ^ Or exclusivo binario | Or binario && Op. Relacional Y || Op. Relacional O ?: Shorthand sin-sino con asignación =, +=, -=, *=, /=, %= prioridad shorthand Reglas de precedencia • Al reducir una expresión se debe seguir el orden de precendia de la tabla de precedencia. • El operador con más precedencia es el reducido primero • Si existen operadores con el mismo nivel de precedencia, la evaluación será de izquierda a derecha 6 Shorthand Shorthand Equivalente i++ o ++i i=i+1 i-- o --i i=i-1 i+=10 i=i+10 i*=10 i=i*10 i/=10 i=i/10 i%=10 i=i%10 Asignaciones • Es importante tener en cuanta que el signo ‘=‘ es utilizado para asignar un valor a la variable y ‘==‘ es utilizado para comparar dos variables. • Modo de uso: Variable_destino=var_1 operador var_2 operador var_3 ….. 7 Shorthand si-sino-asignación • Formato de utilización (condición)? Accion_verdadera: Accion_falso; • Ejemplo x=8; y=5; (x-y>0)? x=x-y, escribe(“verdadero”): x=y-x, escribe(“falso”); Conversión de tipo • En una expresión es posible que se convinen constantes y variables de diferente tipo. ¿el resultado de qué tipo será? • La regla es: el resultado es convertido a la variable de mayor tamaño. 8 Ejemplo de conversion char c; int i; float f; double d; no_se = (c*i) - (f*i) + (f*d); int float double float double Forzar conversión • Se puede forzar a la conversión de un tipo • Forma general (tipo)expresion • Ejemplo x = (int)3.5; /* convierte a entero el 3.5 */ x = (float) i/3; /* convierte a flotante a i*/ x = (int)’a’; /* convierte a ASCII el caracter*/ 9 Ejemplo de conversion int x, i=10; float f; 3 x= (int)3.5; x=(int) ‘a’; f= (float) (i/4); f= (float) i/4; f= i/4.0 97 2.000 2.500 2.500 Entrada/Salida • Para utilizar la entrada y salida de datos por teclado y pantalla respectivamente se debe incorporar la librería: #include <stdio.h> • Las instrucciones utilizadas para la salida de datos por pantalla es: printf() • Las instrucciones utilizadas para la entrada de datos por el teclado es: scanf() 10 printf( ) • Uso: printf(const char *cadena, {lista de_variables}; Tipo %c %do%i Signigicado Ejemplo Un carácter A Un número entero 392 %e Notación científica usando e 3.9265e2 %E Notación científica usando E 3.9265E2 %f Un número decimal (float o duble) 392.65 %g Utiliza el más corto de %e o %f 392.65 %G Utiliza el más corto de %E o %f 392.65 %o Número en base octal 610 %s Conjunto de caracteres Hola %u Para un entero sin signo 7235 %x Notación hexadecimal sin signo 7fa %X Igual a x pero con mayúsculas 7FA %p Dirección de un puntero B800:0000 %n Imprime nada printf( ) Código \b \f \n \r \t \" \' \0 \\ \v \a \o \x Significado Espacio atrás Salto de página Salto de línea Retorno de carro Tabulación horizontal Comillas dobles Comilla simple Nulo Barra invertida Tabulación vertical Alerta Constante octal Constante hexadecimal 11 Ejemplos de printf printf ("Caracteres: %c %c \n", 'a', 65); printf ("Decimales: %d %ld\n", 1977, 650000); printf ("Precedido de espacios: %10d \n", 1977); printf ("Precedido de ceros: %010d \n", 1977); printf (“distinas bases: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100); printf (“floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416); printf (“Truco de espacios: %*d \n", 5, 10); Caracteres: a A Decimales: 1977 650000 printf ("%s \n", "A string"); Precedido de espacios: 1977 Precedido de ceros: 0000001977 distintas bases: 100 64 144 0x64 0144 floats: 3.14 +3e+000 3.141600E+000 Truco de espacios: 10 A string scanf( ) • Uso: scanf(const char *cadena, {&lista de_variables}; Tipo %c %do%i Signigicado Ejemplo Un carácter A Un número entero 392 %e Notación científica usando e 3.9265e2 %E Notación científica usando E 3.9265E2 %f Un número decimal (float o duble) 392.65 %g Utiliza el más corto de %e o %f 392.65 %G Utiliza el más corto de %E o %f 392.65 %o Número en base octal 610 %s Conjunto de caracteres Hola %u Para un entero sin signo 7235 %x Notación hexadecimal sin signo 7fa %X Igual a x pero con mayúsculas 7FA %p Dirección de un puntero B800:0000 %n Imprime nada 12 Ejemplo I/O int x,y=1; float a,b=8.0; char letra='Z'; scanf("%d",&x); scanf("%f",&a); x+=y; a=b*a; printf("x=%d a=%f\n",x,a); printf("%d %d %d %d\n",x,y,x*y,x/y); Aclaración: función resto • En C la función resto es %. Es un operador binario y trabaja con opernando enteros. • Su forma a % b obtenemos resto donde resto = a – (a/b)*b • Ejemplo 11 % 3 = 2 3 % 11 = 3 11-(11/3)*3= 11-3*3=2 3-(3/11)*11= 3-0*11=3 13 Aclaración: valores lógicos y negación lógica • Para C, formalmente los valores verdadero y falso son 1 y 0 respectivamente. En la práctica para C un 0 o un 0.0 representan falso, y cualquier otro número es entendido como verdadero. • La negación lógica es ! , distinto de la negatividad aritmética - . • Ejemplos: int x; x= !0; x=!5.56; x=!(3*7); x= -(3*7); // resultado es 1, entendido como verdadero // resultado es 0, entendido como falso // resultado es 0, entendido como falso // resultado es –21 ( también podría ser verdadero) 14