18/11/08
Programación 1 (03) Unidad IV: Expresiones Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes
Expresión Puede ser:
✫ Una variable: x
✫ Una constante: 3 ✫ Una combinación de operadores y operandos: (y + 1)/2
Prof. Flor Narciso
Programación 1 Semestre B-2008
2
1
18/11/08
Expresión Tipos de expresiones ✫ Aritmé'cas: Los operandos que intervienen en ella son numéricos, el resultado es numérico y los operadores son aritméQcos ✫ Lógicas: Su resultado es CIERTO ó FALSO. Se construyen mediante los operadores relacionales y lógicos
Prof. Flor Narciso
Programación 1 Semestre B-2008
3
Operadores aritméQcos en C Operación
Operador
Expresión algebráica
Suma
+
A+ 3
+
A+ 3
Resta
-
B - C
-
B - C
Producto
x
X x Y
*
X*Y
División
/
X/Y ó X Y
/
X/Y
%
R % S
Incremento
I + 1
++
I++ ó ++I
Decremento
I - 1
--
I- - ó - - I
Módulo
Prof. Flor Narciso
Programación 1 Semestre B-2008
Operador en Expresión en C C
4
2
18/11/08
Operadores aritméQcos en C Operación Módulo • Operador: % • Este operador calcula el resto del cociente entero • Se usa con variables enteras • Su divisor no puede ser cero
Prof. Flor Narciso
Programación 1 Semestre B-2008
5
Operadores aritméQcos en C Ejemplos 25 % 5 = 0 13 % 2 = 1 23 % 4 = 3
Prof. Flor Narciso
Programación 1 Semestre B-2008
6
3
18/11/08
Operadores aritméQcos en C Incremento (++) • La expresión a++; es equivalente a la expresión a = a + 1; • En una sola expresión se Qene: – Un operador asignación – El operador suma – Un valor literal: el valor 1
• Es un operador unario Se aplica a una sola variable
Prof. Flor Narciso
Programación 1 Semestre B-2008
7
Operadores aritméQcos en C Incremento (++) •
Para n = 2, la ejecución de la sentencia i = n++; /* post‐incremento */
asigna el valor 2 a i y después incrementa el valor de n a 3 i = 2 n = 3 •
La ejecución de la sentencia i = ++n; /*pre‐incremento */
incrementa el valor de n a 4 y después asigna este valor a i n = 4 i = 4 Prof. Flor Narciso
Programación 1 Semestre B-2008
8
4
18/11/08
Operadores aritméQcos en C Incremento (++) unsigned short int a, b = 2, c = 5; a = b + c++; ✩ El operador ++ está ubicado a la derecha de la variable c ✩ Primero se efectúa la suma y la asignación sobre a, que pasa a valer 7 ✩ Luego se incrementa la variable c, que pasa a valer 6 ✩ La variable b no modifica su valor
Prof. Flor Narciso
Programación 1 Semestre B-2008
9
Operadores aritméQcos en C Incremento (++) unsigned short int a, b = 2, c = 5; a = b + ++c; ✩ El operador ++ está ubicado a la izquierda de la variable c ✩ Primero se incrementa la variable c, que pasa a valer 6 ✩ Luego se realiza la suma y la asignación sobre a, que pasa a valer 8 ✩ La variable b no modifica su valor
Prof. Flor Narciso
Programación 1 Semestre B-2008
10
5
18/11/08
Operadores aritméQcos en C Decremento (‐‐) • La expresión a‐‐; es equivalente a la expresión a = a ‐ 1; • En uno sola expresión se Qene: – Un operador asignación – El operador resta – Un valor literal: el valor 1
• Es un operador unario: Se aplica a una sola variable
Prof. Flor Narciso
Programación 1 Semestre B-2008
11
Operadores aritméQcos en C Decremento (‐‐) •
Para n = 5, la ejecución de la sentencia i = n‐‐; /* post‐decremento */
asigna el valor 5 a i y después decrementa el valor de n a 4. i = 5 n = 4 •
La ejecución de la sentencia i = ‐‐n; /* pre‐decremento */
decrementa el valor de n a 3 y después asigna este valor a i. n = 3 i = 3
Prof. Flor Narciso
Programación 1 Semestre B-2008
12
6
18/11/08
Operadores aritméQcos en C • Los operadores +, ‐, *, /, se pueden usar con operandos (constante, variable o expresión) tanto enteros como reales • La división de enteros da como resultado un entero y trunca el resultado al mayor entero menor que el cociente. Es importante tener esto en cuenta cuando se trabaja con enteros 5/2 = 2 3/4 = 0 17/5 = 3 • Cuando la división se realiza entre variables de punto flotante, entonces el resultado es también de punto flotante
Prof. Flor Narciso
Programación 1 Semestre B-2008
13
Operadores aritméQcos en C ✩ Si ambos operandos son de Qpo entero entonces el resultado es de Qpo entero ✩ Si uno de los operandos o ambos operandos son de Qpo real entonces el resultado es de Qpo real ✩ Si la expresión evaluada da como resultado un valor de Qpo entero y la variable a la cual se le va a asignar este valor es de Qpo real, entonces el resultado será converQdo automáQcamente al Qpo real antes de realizar la asignación ✩ Si la expresión evaluada da como resultado un valor de Qpo real y la variable a la cual se le va a asignar este valor es de Qpo entero, entonces el resultado será converQdo automáQcamente al Qpo entero antes de realizar la asignación Prof. Flor Narciso
Programación 1 Semestre B-2008
14
7
18/11/08
Precedencia de los operadores aritméQcos en C ( ) Subexpresiones encerradas entre paréntesis se evalúan primero (mayor nivel de precedencia) ++ ‐‐ * / % + ‐ (menor nivel de precedencia)
Nota: La evaluación de los operadores con la misma prioridad se realiza de izquierda a derecha
Prof. Flor Narciso
Programación 1 Semestre B-2008
15
Expresiones aritméQcas Ejemplo: Evaluar la siguiente expresión aritméQca:
R1 = a + b R2 = R1 + c R3 = R2 + d R4 = R3 + e
(a + b + c + d + e) % 5
R5 = R4%5 ← Resultado
Prof. Flor Narciso
Programación 1 Semestre B-2008
16
8
18/11/08
Expresiones aritméQcas Ejemplo: Evaluar la expresión aritméQca para los valores:
(a + b + c + d + e)%5 a = 3, b = 2, c = 1, d = 8, e = 4
R1 = 3 + 2 = 5 R2 = 5 + 1 = 6 R3 = 6 + 8 = 14 R4 = 14 + 4 = 18 R5 = 18 % 5 = 3 Prof. Flor Narciso
Programación 1 Semestre B-2008
17
Expresiones aritméQcas Ejemplo: Evaluar la siguiente expresión aritméQca: a % 2 / b – c * a * y + 18 / c – 3 * h R1 = a % 2 R2 = R1 / b R3 = c * a R4 = R3 * y R5 = 18 / c R6 = 3 * h R7 = R2 – R4 R8 = R7 + R5 R9 = R8 – R6 ← Resultado
Prof. Flor Narciso
Programación 1 Semestre B-2008
18
9
18/11/08
Expresiones aritméQcas Ejemplo: Evaluar la siguiente expresión aritméQca: a * (b + c) + c * (d + e) Determine el resultado para los valores:
a = 3, b = 2, c = 1, d = 8, e = 4
Prof. Flor Narciso
Programación 1 Semestre B-2008
19
Expresiones aritméQcas Ejercicios
Suponiendo declaradas y asignadas las variables int i = 10, j = 7; Indique los valores de las siguientes expresiones: a) (3 * i ‐ 2 * j) % (2 * d ‐ c) b) 2 * ((i / 5) + (4 * (j ‐ 3)) % (i + j ‐2))
Prof. Flor Narciso
Programación 1 Semestre B-2008
20
10
18/11/08
Expresiones aritméQcas Convertir grados Fahrenheit a grados Centígrados Análisis E-P-S
Entradas: Temperatura en grados Fahrenheit (fahr ∈ R)
Proceso: Calcular la temperatura en grados Centígrados centi = (fahr - 32.0) × (5.0/9.0)
Salidas: Temperatura en grados centígrados (centi ∈ R)
Algoritmo
0. Inicio
1. Escribir (”Introduzca la temperatura Fahrenheit: ”)
2. Leer (fahr)
3. centi = (fahr - 32.0) × (5.0/9.0)
4. Escribir (”Temperatura equivalente en °C es “, centi)
5. Fin
Prof. Flor Narciso
Programación 1 Semestre B-2008
21
Expresiones aritméQcas Codificación
/* Convertir grados Fahrenheit a grados Centígrados */
#include <stdio.h>
int main()
{
const float MULT = 5.0/9.0, SUB = 32.0;
float fahr, centi;
printf(“Introduzca la temperatura Fahrenheit: ”);
scanf(“%f”, &fahr);
centi = (fahr - SUB) * MULT;
printf(“Temperatura equivalente en °C es %f”, centi);
return 0;
}
Prof. Flor Narciso
Programación 1 Semestre B-2008
22
11
18/11/08
Operadores compuestos en C Operador
Asignación
Significado
+=
x += y
x = x + y;
-=
x -= y
x = x - y;
*=
x *= y
x = x * y;
/=
x /= y
x = x / y;
%=
x %= y
x = x % y;
Prof. Flor Narciso
Programación 1 Semestre B-2008
23
Operadores compuestos en C Ejemplos
Prof. Flor Narciso
a += b;
a = a + b;
x -= y;
x = x - y;
pot *= 2;
pot = pot * 2;
x /= y + 1;
x = x/(y + 1);
suma %= 4;
suma = suma % 4;
Programación 1 Semestre B-2008
24
12
18/11/08
Sentencia de asignación múlQple A = B = C = D = 1 asigna a las variables A, B, C y D el valor de 1 Solamente para asignar el mismo valor a diferentes variables
Prof. Flor Narciso
Programación 1 Semestre B-2008
25
Recuerde !!!!! Cuatro maneras de asignar valores a las variables variable = valor constante
x = 3;
variable = variable
x = y;
variable = expresión Leer (variable)
Prof. Flor Narciso
x = (y + 1)/2; scanf(“%d”, &x);
Programación 1 Semestre B-2008
26
13
18/11/08
Ejercicios •
Evaluar cada una de las siguientes expresiones aritméQcas: a) A % B + C / D – 6 b) A + 2 * (3 + B) c) 3 * (A % (B / C)) + 5 d) 6 * 5 / 10 * 2 + 10 e) (6 * 5 )/ (10 * 2) + 10 f) (6 * 5) /( 10 * 2 + 10) g) (6 * 5) / (10 * (2 + 10)) h) A * B / C * D
Prof. Flor Narciso
Programación 1 Semestre B-2008
27
Ejercicios • •
Evaluar la expresión
4 / 2 * 3 / 6 + 6 / 2 / 1 / 5 % 2 / 4 * 2
Escribir las siguientes expresiones algebraicas como expresiones en C a) 4x ‐ 2y + 7 b) a + b c) 3x + 2y c ‐ d 2z d) x + y ‐ 3x e) y2 ‐ y1 x 5 x2 ‐ x1
Prof. Flor Narciso
Programación 1 Semestre B-2008
28
14
18/11/08
Ejercicios •
Si A = 4, B = 5 y C = 1, evaluar las siguientes expresiones
a) B * A ‐ B * B / 4 * C b) (A * B) / 3 * 3 c) (((B + C) / 2 * A + 10) * 3 * B) ‐ 6
•
Evaluar la siguiente expresión para A = 2 y B = 5 3 * A ‐ 4 * B / A % 2
Prof. Flor Narciso
Programación 1 Semestre B-2008
29
Ejercicios • Dadas las declaraciones: float w; int i, j = 2, k = 4; Determinar el valor de las variables i, w y k después de la ejecución de las siguientes sentencias de asignación: i = j / k; w = i / j; k = i % j; w = 8.0 / j;
Prof. Flor Narciso
Programación 1 Semestre B-2008
30
15
18/11/08
Ejercicios • Realizar el análisis E‐P‐S, diseño y codificación en C para resolver este problema. – Si para tres números enteros cualesquiera, a, b y c, se cumple que a2 + b2 = c2 entonces ellos consQtuyen una tripla Pitagórica. Existe un número infinito de tales triplas. A conQnuación se expone una manera de generar estas triplas: Considere dos números enteros m, y , n tal que m > n. Entonces se Qene que los tres números m2 ‐ n2, 2mn y m2 + n2 son una tripla Pitagórica
El programa debe leer los valores de m y n, tomando en consideración que m es mayor que n. Además, debe imprimir los valores correspondientes a la tripla Pitagórica una vez verificado que se cumple que a2 + b2 = c2
Prof. Flor Narciso
Programación 1 Semestre B-2008
31
Ejercicios • Realizar el análisis E‐P‐S, diseño y codificación en C para resolver los siguientes problemas: – Calcular el número total de hojas que Qene un árbol, si por ejemplo, Qene doscientos ochenta y cuatro ramas y sabiendo que cada rama Qene como promedio trescientas cuarenta y siete hojas – Un joyero vino de Siria para vender joyas en Bagdad. PromeQó que pagaría por el hospedaje 20 dinares si el dueño de la hostería vendía todas las joyas por 100 dinares; y 35 dinares si las vendía por 200 dinares. Al cabo de varios días, tras andar de aquí para allá, acabó vendiéndolas todas por 140 dinares. ¿ Cuánto debe pagar el joyero de acuerdo con el trato de hospedaje ?
Prof. Flor Narciso
Programación 1 Semestre B-2008
32
16
18/11/08
Ejercicios • Realizar el análisis E‐P‐S, diseño y codificación en C para resolver los siguientes problemas: – Calcular los números del 0 al 10 uQlizando cuatro cuatros y cualquiera de las operaciones aritméQcas. Por ejemplo 44 ‐ 44 = 0 – Calcular el promedio de cinco notas – Calcular el salario neto de un trabajador en función del número de horas trabajadas, precio de la hora de trabajo y, considerando unos descuentos, el sueldo bruto en concepto de impuestos (20%)
Prof. Flor Narciso
Programación 1 Semestre B-2008
33
Ejercicios • Realizar el análisis E‐P‐S, diseño y codificación en C para resolver los siguientes problemas: – Dado el peso de una persona en libras, calcular su peso en kilogramos y gramos – Leer cuatro números reales. Calcular y escribir su producto, suma y su media aritméQca – Leer el radio de un círculo y calcular e imprimir su superficie y la longitud de la circunferencia
Prof. Flor Narciso
Programación 1 Semestre B-2008
34
17
18/11/08
Ejercicios • Realizar el análisis E‐P‐S, diseño y codificación en C para resolver los siguientes problemas: – Si un cuerpo pesa a kp (kilopondios) en un lugar en el que la gravedad es g = 9.8 m/s2, calcular su masa – Una fuerza actúa sobre un cuerpo de n kg de masa, pasando la velocidad de éste de v0 a vf m/s en t segundos. Calcular la fuerza
Prof. Flor Narciso
Programación 1 Semestre B-2008
35
Expresión lógica • El resultado de la evaluación de la expresión es un valor lógico (cierto o falso) • Los operadores relacionales y los operadores lógicos crean expresiones que se evalúan como ciertas o falsas • En lenguaje C operan sobre operandos (constantes, variables, expresiones) de diferentes Qpos (numéricos, caracteres)
Prof. Flor Narciso
Programación 1 Semestre B-2008
36
18
18/11/08
Operadores relacionales en C
Prof. Flor Narciso
Programación 1 Semestre B-2008
37
Operadores relacionales en C Ejemplos a
b a==b a!=b a < b a<= b a > b a >=b
2
3 falso cierto cierto cierto falso falso
‘a’ ‘d’ falso cierto cierto cierto falso falso 4.5 4.5 cierto falso falso cierto falso cierto
Prof. Flor Narciso
Programación 1 Semestre B-2008
38
19
18/11/08
Precedencia de los operadores relacionales en C ()
Subexpresiones encerradas entre paréntesis se evalúan primero (mayor nivel de precedencia) < <= > >= == != (menor nivel de precedencia) Nota: La evaluación de las operadores con la misma prioridad se realiza de izquierda a derecha
Prof. Flor Narciso
Programación 1 Semestre B-2008
39
Expresiones lógicas en C
(a + b) < c
votos > electores
a != (x*x + b*x + c)
Expresión mixta!
(alto - bajo) == 2
Expresión mixta!
(horas*3600) >= (minutos*60 + segundos)
numero <= 2
Prof. Flor Narciso
Expresión mixta!
Programación 1 Semestre B-2008
Expresión mixta!
40
20
18/11/08
Expresiones lógicas Ejemplo: Evaluar la siguiente expresión lógica: x >= (y+z)
R1 = y + z R2 = x >= R1 ← Resultado
Para los valores x = 3, y = 4, z = 1 se Qene R1 = 4 + 1 = 5 R2 = 3 >= 5 = falso ← Resultado
Prof. Flor Narciso
Programación 1 Semestre B-2008
41
Expresiones lógicas Ejemplo: Evaluar la siguiente expresión lógica: num % 4 == 0
R1 = num % 4 R2 = R1 == 0
← Resultado
Para el valor num = 7 se Qene R1 = 7 % 4 = 3 R2 = 3 == 0 = falso ← Resultado
Prof. Flor Narciso
Programación 1 Semestre B-2008
42
21
18/11/08
Expresiones lógicas Ejemplo: Evaluar la siguiente expresión lógica: (a + b ‐ 1) < (x * y)
Prof. Flor Narciso
Programación 1 Semestre B-2008
43
Expresiones lógicas Ejemplo: Evaluar la siguiente expresión lógica: (a + b ‐ 1) < (x * y) R1 = a + b R2 = R1 ‐ 1 R3 = x * y R4 = R2 < R3 ← Resultado Para los valores a = 31, b = ‐1, x = 3, y = 2 se Qene R1 = 31 + (‐1) = 30 R2 = 30 ‐ 1 = 29 R3 = 3 * 2 = 6 R4 = 29 < 6 = falso ← Resultado
ProgramaciónProf. 1 Flor Narciso Semestre B-2008
44
22
18/11/08
Operadores lógicos en C Operan sobre operandos (constantes, variables, expresiones) de tipo lógico (cierto o falso) y evalúan a un valor de tipo lógico (cierto o falso) Operación Y-lógico (AND)
Operador algebraico ∧
Operador en C &&
Expresión en C a && b
O-lógico (OR)
∨
||
a || b
Negación (NOT)
¬
!
!a
Prof. Flor Narciso
Programación 1 Semestre B-2008
45
Operadores lógicos en C Ejemplos
a cierto cierto falso falso
Prof. Flor Narciso
b cierto falso cierto falso
a && b cierto falso falso falso
Programación 1 Semestre B-2008
a || b !a cierto falso cierto falso cierto cierto falso cierto
46
23
18/11/08
Operadores lógicos en C Ejemplos
!(p && q) || s
p && q && s
(a || b) && (c || d)
a > 5 && !(b < c) || 3 <= d
(op < min) || (op > max)
(edad >= 18) && (edad <= 60 + a)
!encontrado
Prof. Flor Narciso
Programación 1 Semestre B-2008
47
Precedencia de los operadores lógicos en C ( ) → Sub-expresiones encerradas entre paréntesis se evalúan primero (mayor nivel de precedencia) ! && || (menor nivel de precedencia)
Prof. Flor Narciso
Programación 1 Semestre B-2008
48
24
18/11/08
Precedencia y asociaQvidad de los operadores en C
Prof. Flor Narciso
Programación 1 Semestre B-2008
49
Expresiones lógicas Ejemplo: Evaluar la siguiente expresión lógica !(x < 5) && !(y >= 7) R1 = x < 5 R2 = y >= 7 R3 = !R2 R4 = !R1 R5 = R4 && R3 →Resultado Para los valores x = 1, y = -1 se tiene R1 = 1 < 5 = cierto R2 = -1 >= 7 falso R3 = !falso cierto R4 = !cierto falso R5 = falso && cierto = falso →Resultado
Prof. Flor Narciso
Programación 1 Semestre B-2008
50
25
18/11/08
Expresiones lógicas Ejemplo: Evaluar la siguiente expresión lógica !((i > 4) || (j <= 6)) R1 = i > 4 R2 = j <= 6 R3 = R1 || R2 R4 = !R3 → Resultado Para los valores i = 22 y j = 3 se tiene R1 = 22 > 4 R2 = 3 <= 6 R3 = cierto || cierto R4 = !cierto
Prof. Flor Narciso
cierto cierto cierto falso
Programación 1 Semestre B-2008
51
Expresiones lógicas Ejemplo: Evaluar la siguiente expresión lógica !(a + b == c) || (c != 0) && (b - c > = 19) R1 = R2 = R3 = R4 = R5 = R6 = R7 = R8 =
Prof. Flor Narciso
→ Resultado
Programación 1 Semestre B-2008
52
26
18/11/08
Expresiones lógicas Ejemplo: Evaluar la siguiente expresión lógica !(a + b == c) || (c != 0) && (b - c > = 19) R1 = a + b R2 = R1 == c R3 = c != 0 R4 = b - c R5 = R4 >= 19 R6 = !R2 R7 = R3 && R5 R8 = R6 || R7 → Resultado
Prof. Flor Narciso
Programación 1 Semestre B-2008
53
Ejercicios Evaluar cada una de las siguientes expresiones a) (b + (b * b ‐ 4 * a * c)) / (2 * a) <= 25 b) (x >= MINIMO) && (x <= MAXIMO) c) (contador < MAXIMO) && !encontrado d) (mes1 < mes2) || (mes1 == mes2) && (anyo1 <= anyo2) e) anyo%4 == 0 && anyo % 100 != 0 || anyo%400 == 0 f) (A ‐ 1) < B || A != (B ‐ C) || A >= C
Prof. Flor Narciso
Programación 1 Semestre B-2008
54
27
18/11/08
Ejercicios Suponiendo declaradas y asignadas las variables int i=8, j=5; double x=0.005, y=‐0.01; Indique los valores de las siguientes expresiones: a) (3 *i ‐2 *j) % (2 *i ‐j) b) 2 * ((i /5) + (4 * (j ‐3)) % (i + j ‐ 2)) c) ‐(i + j) / 2 d) i++; e) j‐‐; f) (x > y) && (i > 0)||(j < 5) g) (x > y) || (i > 0) && (j < 5)
Prof. Flor Narciso
Programación 1 Semestre B-2008
55
Ejecicios Si A = 1, B = ‐2, C = 3, y D = 4, determine cual de los siguientes pares de expresiones lógicas son ambas verdaderas: ( ) Exp1: ((A+C)>(B‐D)) && ((B+C)<(D‐A)) Exp2: (B+C > D) ( ) Exp1: (AD) Exp2: (B+C > D) ( ) Exp1: (A>B || CB || C
Prof. Flor Narciso
Programación 1 Semestre B-2008
56
28
18/11/08
Ejercicios Dadas las siguientes definiciones de constantes #define MIN 1
#define MAX 5 #define NUM1 5 #define NUM2 8 #define NUM3 ‐1
y la siguiente declaración de variable int num; Escriba las expresiones lógicas que sean verdaderas si a) El valor de num se encuentra en el rango definido por las constantes MIN y MAX. b) El valor de num es uno de los tres valores constantes NUM1, NUM2 o NUM3.
Prof. Flor Narciso
Programación 1 Semestre B-2008
57
29