Tema 4 Operadores y Expresiones Fundamentos de Informática Contenidos • • • • • • • Introducción Operador de asignación Operadores aritméticos Operadores monarios Operadores relacionales Operadores lógicos Funciones de biblioteca Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 2 1 Introducción Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 3 Introducción • OPERADOR: Entidades que actúan sobre los datos para modificarlos. 1. 2. 3. 4. 5. Operador de asignación Operadores aritméticos Operadores monarios Operadores relacionales Operadores lógicos • OPERANDOS: Datos sobre los que actúan los operadores. ‐ Variables, constantes,... • EXPRESIONES: Distintas formas de agrupar Operandos y Operadores. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 4 4 2 Operador de Asignación Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 5 Operador de asignación • Operador asignación simple (=) El formato de este operador es: identificador = expresión; Cuando la expresión y el operador sean de distinto tipo, el valor de la expresión de la derecha se convertirá automáticamente al tipo del identificador de la izquierda Ejemplos: a = 3; /* Guarda el valor 3 en la variable a */ x = y; /* Guarda el valor que tenga la variable y en la variable x */ suma = a + b; /*Guarda la suma de los valores de a y b en la variable suma */ area = longitud * anchura; /*Guarda la multiplicación de los valores de las variables longitud y anchura en la variable area */ Variable Un valor final Asigna los resultados de la derecha a la variable de la izquierda Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 6 Operador de asignación • Suponiendo i y j variables enteras y j=5 Expresión i = j i = j / 2 i = 2 * j / 2 i = 2 * (j / 2) Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Valor almacenado en i 5 2 5 4 Tema 4: Operadores y Expresiones 7 Operadores de asignación • Operador de asignación múltiple: identificador1 = identificador2 = ...... = expresion; Se asigna de derecha a izquierda Equivalente a: identificador2 = expresión; identificador1 = identificador2; Mejor no utilizarlo • Operadores de asignación compuestos: +=, ‐=, *=, /=, %= Por ejemplo: identificador += expresion2; Es lo mismo que: identificador = identificador + expresion2; Si plantea alguna duda, mejor no utilizarlo. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 8 3 Operadores Aritméticos Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 9 Operadores aritméticos • • • • Realizan operaciones con resultado numérico Sus operandos deben ser numéricos Tipos de operadores: • Operador suma (+) • Operador resta (‐) • Operador multiplicación (*) • Operador división (/) Divisor distinto de cero Si dividendo y divisor son: • Enteros: El resultado será un entero truncado. • Float: El resultado será un float. • Entero y float: El resultado será un float. • Operador resto de división entera (%) Ambos operadores deben ser enteros y el divisor no nulo Se conserva en el resultado el signo del primer operando Se utiliza mucho para saber si un número es múltiplo de otro (resto 0) El lenguaje C no dispone de operador para realizar potencias Utilizar la función pow() de la biblioteca math.h, pero no para el cuadrado. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 10 Operadores aritméticos Si a=10 b=3 (enteros) expresión a + b a ‐ b a * b a / b a % b resultado 13 7 30 3 1 Si a=‘P’ b=‘T’ ASCII ‘P’=80 ASCII ‘T’=84 ASCII ‘5’=53 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Si a=12.5 b=2.0 (reales) expresión a + b a ‐ b a * b a / b a % b resultado 14.5 10.5 25.0 6.25 TIPOS INCORRECTOS expresión resultado a 80 a + b 164 a + b + 5 169 a + b + ’5’ 217 Tema 4: Operadores y Expresiones 11 Operadores aritméticos Conversión sobre operandos que difieran en tipo: El resultado final se expresará con la mayor precisión posible y de forma consistente con los tipos de datos de los operandos. • Regla general (cuando ninguno de los operandos sea unsigned): Se promueve el tipo “inferior” al tipo “superior”, obteniendo un resultado que es de tipo “superior”. Si cualquier operando es de tipo long double Se convierte el otro operando a long double Si no: Si cualquier operando es de tipo double Se convierte el otro operando a double Si no: Si cualquier operando es de tipo float Se convierte el otro operando a float Si no: Si cualquier operando es de tipo long int Se convierte el otro operando a long int Si no: Se convierte char y short a int (aunque sean los dos del mismo tipo char o short) • Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 12 Operadores aritméticos Si i = 7 (entera) f = 5.5 (coma flotante double) c = ‘w’ (char) expresión resultado tipo i + f 12.5 doble precisión i + c 126 entero i + c – ‘0’ 78 entero (i + c) – (2 * f / 5) 123.8 doble precisión Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 13 Operadores aritméticos Conversión de tipos o "cast": Permite transformar el tipo de datos resultado de una expresión a un tipo de datos específico No modifica el tipo de datos original sino su valor dentro de la expresión. (tipo de datos) expresión Al aplicar la conversión de tipos se modifica el valor dentro de la expresión en la que se encuentra, no se modifica el tipo de datos original. Si i=7 (entero) f=8.5 (float) (i+f) % 4 : EXPRESIÓN NO VÁLIDA ( (int) (i+f) ) % 4 : EXPRESIÓN VÁLIDA utilizando la conversión • Orden de precedencia en los operadores aritméticos: Los operadores con mayor precedencia se evalúan antes que los de menor precedencia. Grupo 2 de precedencia Grupo 1 de precedencia * / % + ‐ • Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 14 4 Operadores Monarios Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 15 Operadores monarios • • Características: Con un único operando Mayor precedencia que los operadores aritméticos Tipos de operadores monarios: Operador signo (‐) • Cambia de signo el operando Operador incremento (++) • Incrementa en uno el operando • Puede ir delante o detrás del operando El incremento se realiza antes o después de utilizar el operando con otro fin Operador decremento (‐‐) • Decrementa en uno el operando • Puede ir delante o detrás del operando El incremento se realiza antes o después de utilizar el operando con otro fin Operador sizeof () • Devuelve el tamaño de su operando en bytes Operando puede ser una variable o un tipo de dato Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 16 Operadores monarios • • Si i=1 Dado: printf (“i = %d\n”, i); printf (“i = %d\n”, ++i); printf (“i = %d\n”, i++); printf(““i = %d\n”, i); i++; printf(““i = %d\n”, i); ++i; printf(““i = %d\n”, i); Si i=1 Dado: printf (“i = %d\n”, i); printf (“i = %d\n”, i++); printf (“i = %d\n”, i); Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI La salida por pantalla es: i = 1 i = 2 i = 2 i = 3; i = 4; i = 5; La salida por pantalla es: i = 1 i = 1 i = 2 Tema 4: Operadores y Expresiones 17 Operadores monarios • • • • Si se ha declarado: int i; char c; float x; double d; La salida del siguiente programa: printf (“Entero: %d\n”, sizeof(i)); ó printf(“Entero: %d\n”, sizeof i); printf (“\nComa flotante: %d\n”, sizeof(x)); printf (“\nDoble precision: %d\n” sizeof(d)); printf (“\nCaracter: %d\n”, sizeof (c)); Sería: Entero: 4 Coma flotante: 4 Doble precision: 8 Caracter: 1 Se podría haber utilizado también el tipo del dato: printf (“Entero: %d\n”, sizeof (int)); (no se puede usar printf(“Entero:%d”, sizeof int); pues es un error de compilación). printf (“Coma flotante: %d\n”, sizeof (float)); printf (“Doble precisión: %d\n” sizeof (double)); printf (“Carácter: %d\n”, sizeof (char)); Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 18 5 Operadores Relacionales Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 19 Operadores relacionales • Características: El resultado siempre es un valor lógico: VERDADERO (>=1) o FALSO (0). Los operadores se utilizan para formar expresiones lógicas Los operadores relacionales tienen menor precedencia que los operadores monarios y aritméticos Los operadores relacionales tienen mayor precedencia que los operadores de igualdad Asociatividad de izquierda a derecha dentro de una expresión Operador Relacional Función Operador de Igualdad Función < menor que == igual que <= menor o igual que != no igual que > mayor que >= mayor o igual que Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 20 Operadores relacionales • Si i=1, j=2, k=3 variables enteras expresión interpretación Valor i<j cierto 1 ó !=0 (i+j) >= k cierto 1 ó !=0 (j+k)>(i+5) falso 0 k!=3 falso 0 Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 21 6 Operadores Lógicos Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 22 Operadores lógicos • Características: Actúan sobre operandos que son expresiones lógicas Permiten combinar expresiones lógicas sencillas para generar expresiones lógicas más complejas Operadores lógicos de dos operandos: && AND lógico || OR lógico Operadores lógicos de un solo operando (monarios) ! Negación Cualquier valor no nulo se considera cierto. Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Operador && || Significado y o ! Negación p TABLAS DE VERDAD q p && q p || q !p Falso Falso Falso Falso Cierto Falso Cierto Falso Cierto Cierto Cierto Falso Falso Cierto Falso Cierto Cierto Cierto Cierto Falso Tema 4: Operadores y Expresiones 23 Operadores lógicos • Si i=7 (entero) f=5.5 (float) y c=‘w’ (char) (ASCII 119) expresión • interpretación Valor (i >= 6) && (c == ‘w’) cierto 1 (i >= 6) || (c == 119) cierto 1 (f < 11) && (i > 100) falso 0 (c != ‘p’) || ((i+f) <= 10) cierto 1 (i >= 6) || (c == 65) cierto 1 Ejercicios (5 == 5) || (6 == 7) (5 == 8) || (6 != 7) (8 >= 5) && (! (5<= 2)) Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 24 Tabla de precedencias Consejo: Utilizar paréntesis Categoría Monarios Operadores ‐, ++, ‐‐, !, sizeof(), (tipo) Multiplicación, división y resto aritméticos *, /, % suma y resta aritméticas +, ‐ operadores relacionales <, <=, >, >= operadores de igualdad ==, != AND lógico && OR lógico || operadores de asignación Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI + Prioritarios ‐ Prioritarios =, +=, ‐=, *=, /=, %= Tema 4: Operadores y Expresiones 25 7 Funciones de Biblioteca Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 26 Funciones de biblioteca Realizan operaciones y cálculos de uso frecuente • Las funciones de biblioteca no son parte del lenguaje C, pero las incluyen todos los compiladores • Están agrupadas en archivos de biblioteca separados, como por ejemplo: Entrada/salida (stdio.h) Funciones de uso matemático (math.h) Funciones de gestión de cadenas (string.h) • Deben incluirse dentro del programa con la directiva # include <stdio.h> # include <math.h> …… • Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 27 Funciones de biblioteca Función abs(i) cos(d) cosh(d) exp(d) fabs(d) getchar() log(d) pow(d1,d2) printf(....) putchar(c) rand() sin(d) sqrt(d) srand(u) scanf(....) tan(d) toascii(c) tolower(c) toupper(c) Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tipo de dato de retorno int double double double double int double double int int int double double void int double int int int Propósito Devuelve el valor absoluto de i Devuelve el coseno de d Devuelve el coseno hiperbólico de d Eleva e a la potencia d Devuelve el valor absoluto de d Introducir un carácter desde el dispositivo de entrada Devuelve el logaritmo natural de d Devuelve d1 elevado a la potencia d2 Manda datos al dispositivo de salida estándar Manda un carácter al dispositivo de salida estándar Devuelve un entero positivo aleatorio Devuelve el seno de d Devuelve la raíz cuadrada de d Inicializa el generador de números aleatorios Introduce datos del dispositivo de entrada estándar Devuelve la tangente de d Convierte el valor del argumento a ASCII Convierte una letra a minúscula Convierte una letra a mayúscula Tema 4: Operadores y Expresiones 28 Ejercicio 1 int main(void) { int ia; int ib; int ires; double da; double db; double dres; /* Inicializaciones */ ia = 1; ib = 3; da = 2.3; db = 3.7; ires = ia + (ib*2 + ia*3); /* Ejemplo 1 */ dres = ia + (ib*2 + ia*3); /* Ejemplo 2 */ dres = ia + da * ( ib/2.0 + ia/2.0); /* Ejemplo 3 */ ires = ia + da * (ib/2.0 + ia/2.0); /* Ejemplo 4 */ dres = ‐da * (ia + ib * (da + db/3.0)); /* Ejemplo 5 */ return 0; } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 29 Ejercicio 2 /* ... Este programa pasa euros a pesetas y viceversa */ // Directivas del precompilador #include <stdio.h> #define EUR 166.386 int main (void) { int pesetas; // pesetas, variable para guardar el valor en pesetas float euros; // euros, variable para guardar el valor en euros printf ("Introduzca una cantidad en euros"); scanf ("%f", &euros); // El valor 0.5 se utiliza para convertir el truncamiento en redondeo pesetas = euros * EUR + 0.5; printf ("%.2f euros equivalen a %d pesetas \n", euros, pesetas); printf ("Introduzca una cantidad en pesetas"); scanf ("%d", &pesetas); euros = pesetas / EUR; printf ("%d pesetas equivalen a %.2f euros \n", pesetas, euros); return 0; } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 30 30 Ejercicio 3 /* ... Este programa calcula el cociente y el resto de una división entera */ // Directivas del precompilador #include <stdio.h> // Programa principal Int main (void) { int numerador; int denominador; int cociente; int resto; printf (“\nIntroduzca un numero entero para el numerador: "); scanf ("%d", &numerador); printf (“\nIntroduza otro numero entero para el denominador: "); scanf ("%d", &denominador); cociente = numerador / denominador; resto = numerador % denominador; printf ("%d / %d = %d, resto %d", numerador, denominador, cociente, resto); return 0; } Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 31 31 Ejercicio 4 /* */ ... Este programa pasa una temperatura Celsius a Reamur, Fahrenheit y Kelvin // Directivas del precompilador #include <stdio.h> // Programa principal int main (void) { float celsius; float reamur; float fahrenheit; float kelvin; printf (“\n**** INICIO PROGRAMA CONVERSION DE TEMPERATURAS ****"); printf ("\n\nIntroduzca una temperatura en la escala Celsius (centigrada). "); scanf ("%f", &celsius); reamur = 0.8 * celsius; fahrenheit = ( 1.8 * celsius ) + 32; kelvin = celsius + 273; } printf ("\nEl valor de temperatura en la escala Reamur es...%.2f",reamur); printf ("\nEl valor de temperatura en la escala Fahrenheit es...%.2f",fahrenheit); printf ("\nEl valor de temperatura en la escala Kelvin es...%.2f",kelvin); return 0; Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Tema 4: Operadores y Expresiones 32 32 Escuela Técnica Superior de Ingeniería ICAI Alberto Aguilera 25 28015 Madrid Tel +34 91 542 28 00 Fax + 34 91 542 31 76 Iwww.icai.upcomillas.es www.upcomillas.es