10 operadores y manejo de expresiones en c · expresiones condicionales; operadores relacionales y...
Post on 13-Dec-2020
30 Views
Preview:
TRANSCRIPT
Estructuras de datos (Prof. Edgardo A. Franco)
1
Tema 10: Operadores y manejo de expresiones en C
M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.comedfrancom@ipn.mx
@edfrancom edgardoadrianfrancom
Contenido• Operadores
• Precedencia de Operadores
• Operadores y expresiones aritméticas
• Expresiones condicionales; operadores relacionales y lógicos
• Operaciones para el manejo de bits
• La librería estándar <math.h>
• Funciones
• Constantes2
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Operadores• Son palabras o símbolos que implican una acción sobre
ciertas variables.
• Pueden operar de manera:• Unaria (con 1 variable)• Binaria (con 2 variables)• Ternaria (con 3 variables)
• Existen en C operadores:• Aritméticos• Relacionales• Lógicos• De Asignación• De Dirección• De Bits
3
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Precedencia de Operadores
4
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Operadores Tipo Asociatividad
( ) [ ] -> Alta prioridad Izquierda a derecha
! ~ ++ -- + - * & (tipo) sizeof Unarios Derecha a izquierda
* / % + - Aritméticos Izquierda a derecha
<< >> Corrimiento de bits Izquierda a derecha
< <= > >= == != Relacionales Izquierda a derecha
& ^ | Bits Izquierda a derecha
&& || Lógicos Izquierda a derecha
?: Condicional Derecha a izquierda
= += -= *= /= %= &= ^= |= <<= >>=
Asignación Derecha a izquierda
, Evaluación Izquierda a derecha
Operadores y expresiones aritméticas
5
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Operador Nombre Descripción
* Multiplicación 5*2 → 10
/ División 5/2 → 2
% Módulo 5%2 → 1
+ Suma 5+2 → 7
- Resta 5-2 → 3
(tipo de dato) “Cast” forzado (double)5 → 5.0
sizeof(tipo de dato) Tamaño de dato sizeof(int) → 4
Operador Abreviado No Abreviado
= a=2; a=2;
++ n++; n=n+1;
-- n--; n=n-1;
+= n+=2; n=n+2;
-= n-=2; n=n-2;
*= n*=2; n=n*2;
/= n/=2; n=n/2;
%= n%=2; n=n%2;6
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Operadores y expresiones de asignación
Expresiones• Son expresiones validas aquellas que utilicen de manera
adecuada algún tipo de operador, y el resultado de suevaluación dependerá del orden de los operadores en laexpresión, su prioridad y asociatividad.
Expresión en C Significado
a=a+5*b; a=a+(5*b)
x*=y+1; x=x*(y+1)
x=++n; x=n+1 y n=n+1
y=n--*5+n; y=((n-1)*5)+n y n=n-1
z=n+1*45+10.4E-10*6 z=n+(1*45)+(10.4E-10*6)
z=(n+1)*(45+10.4E-10)*6 z=(n+1)*(45+10.4E-10)*6
x+=x*(10.5E11+x); x=x+(x*10.5E11)+x
b=z=x=10.5; b=10.5 y z=10.5 y x=10.5
7
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• Son expresiones aritméticas invalidas lassiguientes.
Expresión en C Posible significado a dar
a=a+5*b=4; a=a+(5*b) y b=4
x*=y+1++; x=x*(y+2)
x=++n--; x=n+1 y n=n-1
y=n--*5++n; y=((n-1)*6)+n y n=n-1
z=n+1*45+10.4x10^-10*6 z=n+(1*45)+(10.4E-10*6)
z=(n+1)*(45+10.4E-10)*6=x
z=(n+1)*(45+10.4E-10)*6 y x=z
++x=x*(10.5E11+x++); x=x+1+x+(x*10.5E11)+x; 8
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Casting (Moldeado de variables)
• Debido a que el lenguaje C es un lenguajefuertemente tipificado, es necesario estarconsientes de las asignaciones que se realizan entredistintos tipos de datos.
• Aunque sintácticamente el lenguaje permite realizarasignaciones entre variables de distintos tipos dedatos es necesario realizar de manera conscienteestas asignaciones y apoyarse de la operación demodelado o cast.
9
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
(cast)• b=(int)a; //Antes de realizar la asignación a
"b" se moldea a "a" como entero.
• b=(unsigned int)k; //Antes de realizar la
asignación a "b" se moldea a "k" como entero
sin signo.
• c=(float)g; //Antes de realizar la asignación a
"c" se moldea a "g" como flotante.
• c=(char)j; //Antes de realizar la asignación a
"c" se moldea a "j" como char.
10
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Expresiones condicionales; operadores relacionales y lógicos
• Si se tienen expresiones entre operadores derelación, se puede decir que dichas expresionesson condicionales, las cuales a su vez puedenestar unidas mediante operadores lógicos paraobtener una condición múltiple.
• Los operadores de relación tienen la mismaprecedencia y esta esta por debajo de losoperadores aritméticos.
• Las expresiones condicionales son evaluadas deizquierda a derecha y si se encuentranoperadores lógicos son tratados en ese orden.
11
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Operadores Relacionales
Operador Nombre Descripción
== Igual a if (a==‘s’)
!= Diferente de if (a!=null)
> Mayor que if (a>0.5)
< Menor que if (a<2l)
>= Mayor o igual que if (a>=2f)
<= Menor o igual que if (a<=3) 12
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Operadores Lógicos
Operador Nombre Descripción
&& Y (AND) if ((a>3) && (a<9))
|| O (OR) if ((a==2) || (a==3))
! NEGADO (NOT)
if (!(a==3)) es igual a
if (a!=3)
◼ Importante: Cuando se evaluá una condicional, los valores que se obtienen son:
◼ Si es FALSA se obtiene cero.
◼ Si es VERDADERA se obtiene algo diferente de cero.13
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Ejemplo de condicionales; operadores relacionales y lógicos#include<stdio.h>
#include<math.h>
int main(void)
{
const float pi=3.1416;
float distancia,x1=10,y1=11,x2=20,y2=16;
//Cálculo de la distancia entre dos puntos
distancia=sqrt(pow((x2-x1),2)+pow((y2-y1),2));
if(distancia>0&&x2-x1<0&&y2-y1<0)
printf("\nEl punto P2(%.2f,%.2f) esta debajo de
P1(%.2f,%.2f)",x2,y2,x1,y1);
if(distancia>0&&x2-x1>0&&y2-y1>0)
printf("\nEl punto P2(%.2f,%.2f) esta por encima de
P1(%.2f,%.2f)",x2,y2,x1,y1);
if(distancia==0)
printf("\nEl punto P2 y P1 están en las mismas
coordenadas(%.2f,%.2f)",x2,y2);
return 0;
}14
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Operaciones para manejo de bits• El lenguaje C proporciona seis operadores para manejo
de bits; sólo pueden ser aplicados a variable integrales,esto es, char, short, int y long, con o sin signo.
• No se debe confundir el operador & con el operador &&, & es eloperador Y sobre bits, && es el operador lógico Y. Similarmentelos operadores | y ||.
• El operador unario ~ sólo requiere un argumento a la derechadel operador.
• Los operadores de desplazamiento, >> y <<, mueven todos losbits en una posición hacia la derecha o la izquierda undeterminado número de posiciones.
• Como los operadores desplazan bits en un sentido, lacomputadora trae ceros en el otro extremo. Se debe recordarque un desplazamiento no es una rotación: los bits desplazadosen un extremo no vuelven al otro. Se pierden y los ceros traídoslos reemplazan.
15
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Operadores de Bits
Operador Nombre Descripción
<< Corrimiento a la izquierda b=a>>2;
>> Corrimiento a la derecha b=a<<3;
& Y (AND) entre bits c=a&128;
| O (OR) entre bits c=a|0x0a;
~ Complemento A1 c=~a;
^ O exclusivo (XOR) c=^a;16
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Operaciones del manejo de bits
• El operador AND de bits (&) a menudo es usadopara enmascarar álgun conjunto de bits.
• El operador OR (|) es empleado para encenderbits.
• El operador OR exclusivo (^) pone uno en cadaposición donde sus operandos tienen bitsdiferentes.
• El operador unario (~) realiza el complementoA1; esto es convierte cada bit 1 en un bit 0 yviceversa. 17
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• Los operadores << y >> realizan corrimientos anivel de bits, ya sea a la izquierda o derecha.
• Una aplicación que tienen los operadores dedesplazamiento de bits es para realizarmultiplicaciones y divisiones rápidas con enteros.Como se ve en la siguiente tabla, donde undesplazamiento a la izquierda es multiplicar por 2y uno a la derecha dividir por 2.
• Los desplazamientos son mucho más rápidos quela multiplicación actual (*) o la división (/) pordos. Por lo tanto, si se quieren multiplicaciones odivisiones rápidas por 2 se usan desplazamientos. 18
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
char x Ejecución Valor de x
x = 7; 0 0 0 0 0 1 1 1 7
x << 1; 0 0 0 0 1 1 1 0 14
x << 3; 0 1 1 1 0 0 0 0 112
x << 2; 1 1 0 0 0 0 0 0 192
x >> 1; 0 1 1 0 0 0 0 0 96
x >> 2; 0 0 0 1 1 0 0 0 24
• Multiplicaciones y divisiones por 2 al realizarcorrimientos (<< y >>).
19
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Ejemplo: Operaciones del manejo de bits
#include<stdio.h>
int main(void)
{
int byte=0xFF;
printf("\nEl valor de byte es: %4X H",byte);
byte&=0x00;
printf("\nEl valor de byte es: %4X H",byte);
byte|=0xFF;
printf("\nEl valor de byte es: %4X H",byte);
byte>>=1;
printf("\nEl valor de byte es: %4X H",byte);
byte<<=2;
printf("\nEl valor de byte es: %4X H",byte);
return 0;
} 20
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Operadores de Asignación para bits
Operador Abreviado No Abreviado
<<= n<<=2; n=n<<2;
>>= n>>=2; n=n>>2;
&= n&=0x0a; n=n&0x0a;
|= n|=7; n=n|7;
^= n^=0x03; n=^0x03;
= n=0x7f; n=0x7f;
Nota:0x7f, 0x0a, 0x03 son un números hexadecimales.
21
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
La librería estándar <math.h>• math.h es un archivo de cabecera de la
biblioteca estándar del lenguaje deprogramación C diseñado para operacionesmatemáticas básicas.
• Muchas de sus funciones incluyen el uso denúmeros en coma flotante.
• Una nota importante: si se está programando enC/C++ bajo Linux, y se utiliza uno de loscompiladores nativos de este sistema operativo(gcc o g++), es necesario incluir, al compilar, laopción -lm, dado que, de lo contrario, elcompilador generará un error. 22
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• La biblioteca math.h contiene la definiciónde muchas funciones matemáticas útiles. Elsiguiente es un listado breve de algunasfunciones.
ceil(x) Redondea al entero máspequeño no menor que x.cos(x)Coseno de x.exp(x) ex.fabs(x)Valor absoluto de x.floor(x)Redondea al entero másgrande no mayor que x.log(x)Logaritmo natural de x.log10(x)Logaritmo base 10 de x.
pow(x,y) xy.sin(x) Seno de x.sqrt(x) Raíz cuadrada de x.tan(x)Tangente de x.tanh(x)Tangente hiperbólica de x.cosh(x)Coseno hiperbólico de x.sinh(x) Seno hiperbólico de x.fmod(x) Resto del punto flotante de x.
*Todas las funciones en las que participan ángulos toman y devuelven radianes.*Todas operan con parámetros de tipo double (también se soportan flotantes) y devuelven resultados de tipo double (pueden guardarse como flotantes). 23
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Constantes <math.h>• La biblioteca de matemáticas define varias
constantes. Siempre es aconsejable usar estasdefiniciones.
• M_E La base de los logaritmos naturales e.• M_LOG2E El logaritmo de e de base 2.• M_LOG10E El logaritmo de e de base 10.• M_LN2 El logaritmo natural de 2.• M_LN10 El logaritmo natural de 10.• M_PI pi• M_PI_2 pi/2• M_PI_4 pi/4• M_1_PI 1/pi• M_2_PI 2/pi• M_2_SQRTPI 2/sqrt(pi)• M_SQRT2 La raíz cuadrada positiva de 2• M_SQRT1_2 La raíz cuadrada positiva de 1/2
24
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Ejemplo empleando <math.h>#include<stdio.h>
#include<math.h>
int main(void)
{
const float pi=3.1416;
float distancia,x1=1.5,y1=-10,x2=2.5,y2=20;
//Mostrando la diferencia de exactitud entre pi y M_PI
printf("\nEl seno de pi es: %f",sin(pi));
printf("\nEl seno de M_PI es: %f",sin(M_PI));
//Cálculo de la distancia entre dos puntos
distancia=sqrt(pow((x2-x1),2)+pow((y2-y1),2));
printf("\nLa distancia entre P2(%.2f,%.2f) y P1(%.2f,%.2f)
es: %.4f",x2,y2,x1,y1,distancia);
return 0;
}
*Su compilación en Linux sería: gcc programa.c –lm –o programa 25
10
Op
erad
ore
s y
man
ejo
de
exp
resi
on
es e
n C
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
top related