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 ( ), -!, ++, - -, *p, &p *, /, % +, - <<, >> <, <=, >, >= ==,!= & ^ &&?: =, +=, -=, *=, /=, %= Operador de más alta prioridad 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 shorthand prioridad 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 i++ o ++i i-- o --i i+=10 i*=10 i/=10 i%=10 Equivalente i=i+1 i=i-1 i=i+10 i=i*10 i=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; x= (int)3.5; x=(int) a ; f= (float) (i/4); f= (float) i/4; f= i/4.0 3 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 % d o % i % e % E % f % g % G % o % s % u % x % X % p % n Signigicado Un carácter Un número entero Notación científica usando e Notación científica usando E Un número decimal (float o duble) Utiliza el más corto de %e o %f Utiliza el más corto de %E o %f Número en base octal Conjunto de caracteres Para un entero sin signo Notación hexadecimal sin signo Igual a x pero con mayúsculas Dirección de un puntero Imprime nada Ejemplo A 392 3.9265e2 3.9265E2 392.65 392.65 392.65 610 Hola 7235 7fa 7FA B800:0000 printf( ) Código Significado \b Espacio atrás \f Salto de página \n Salto de línea \r Retorno de carro \t Tabulación horizontal \" Comillas dobles \' Comilla simple \0 Nulo \\ Barra invertida \v Tabulación vertical \a Alerta \o Constante octal \x 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); printf ("%s \n", "A string"); Caracteres: a A Decimales: 1977 650000 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 % d o % i % e % E % f % g % G % o % s % u % x % X % p % n Signigicado Un carácter Un número entero Notación científica usando e Notación científica usando E Un número decimal (float o duble) Utiliza el más corto de %e o %f Utiliza el más corto de %E o %f Número en base octal Conjunto de caracteres Para un entero sin signo Notación hexadecimal sin signo Igual a x pero con mayúsculas Dirección de un puntero Imprime nada Ejemplo A 392 3.9265e2 3.9265E2 392.65 392.65 392.65 610 Hola 7235 7fa 7FA B800:0000 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 11-(11/3)*3= 11-3*3=2 3 % 11 = 3 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; // resultado es 1, entendido como verdadero x=!5.56; // resultado es 0, entendido como falso x=!(3*7); // resultado es 0, entendido como falso x= -(3*7); // resultado es 21 ( también podría ser verdadero) 14