Expresiones

Una expresión es una combinación de variables, llamadas a función y operadores que resultan en un valor simple. Como ya vimos en la parte anterior la inicialización de variables ó expresión de asignación, es la expresión más simple que puede existir:

                  x = 2;

En este caso se una asigna un valor entero a una variable x. A la parte izquierda de la expresión de asignación se le conoce como lvalue, es decir, valor izquierdo y rvalue al del lado derecho. De esta forma queda claro que el valor del lado derecho deberá ser una variable y el lado derecho será una variable, constante numérica o el resultado de una operación de manera que la operación se lleva a cabo de derecha a izquierda y nunca de otra forma.

 

Expresiones Aritméticas Las operaciones de suma (+), resta (-), multiplicación (*) y división (/) literalmente corresponden a sus respectivas operaciones matemáticas. A excepción de la operación modulo, que nos da el residuo de dos valores, representada por el operador %:

          x = (y + z) * 2

Existen además algunos operadores llamados de asignación compuesta que permiten modificar el valor de una variable llevando a cabo una operación en la que se ve involucrado el valor actual de esa variable. Los operadores de éste tipo son +=, -=, *=, /=, %=, y se emplean así:

          x += y       que equivale a la expresión                   x = x + y

Por ejemplo: Un programa que nos permita calcular el área de un cuadrado e imprima su resultado:

También existen los operadores de incremento y decremento, que reducen o incrementan una unidad al valor almacenado en la variable. Una de las características más interesantes de este operador es que puede ser usado de dos maneras, en prefijo y postfijo, esto quiere decir que el operador podrá aparecer respectivamente antes (++id) o después (id++) del identificador, y usados en una expresión simple realiza la misma operación en cualquiera de sus dos versiones, pero usado en conjunto con otras expresiones o sentencias tendrá un comportamiento diferente.

Observe el siguiente ejemplo que muestra su comportamiento:

 

Expresiones Relacionales Para realizar la comparación entre dos expresiones empleamos los operadores relacionales que nos indican algún tipo de relación entre dos entidades, ya sea de igualdad o desigualdad, y cuyo resultado de la operación siempre será un valor booleano (cierto/falso). A continuación se muestran los operadores relacionales disponibles en C, para el caso de x = 3, y = 1 y z = 2:

Expresiones lógicas Los operadores boléanos nos permiten construir expresiones más complejas en las que se encuentran involucradas condiciones formadas por las palabras “y”, “o” y “no”. Por ejemplo, es cierto el hecho de que “5 > 3 y 5 < 7”.

La expresión lógica “y” (conjunción) es representada por el operador &&, y es usado para combinar dos valores boléanos, y el resultado es también un valor booleano. Para éste caso el resultado será cierto si ambos valores son ciertos, en cualquier otro caso el resultado será falso. Por otro lado, la expresión “o” (disyunción) es representada por el operador ||, de manera que la expresión será cierta siempre y cuando alguno de los componentes de la expresión sea cierta. Finalmente la expresión lógica “no”, también conocida como negación, es un operador unario representado por el operador ! y se antepone al operando, el resultado de aplicar este operador es invertir el valor del operando, cambiando el valor de cierto a falso y viceversa.

Los operadores lógicos generan una interesante relación de resultados que suele ser representada en forma de tabla (tablas de verdad), es importante recordar que los operadores lógicos evaluaran la expresión relacional y le darán un valor de certeza o falsedad según sea el caso, por ejemplo:

Suponga que se requiere saber si un empleado cataloga para un incremento salarial, si su antigüedad es mayor a 10 años y cuenta con una edad mayor a 40 años, el operador lógico podría simplificar esta tarea, expresando la relación algorítmicamente:

Si antigüedad > 10 && edad > 40, entonces
     Recibe un incremento
Sino
     No recibe un incremento
fin

Las tablas de verdad nos podrían ayudar a visualizar el resultado de manera mas eficiente. En la tabla de verdad de la conjunción (and lógico), en caso de que alguno de los elementos en la expresión resulte falso, todo el enunciado será falso:

Suponga otro caso para el incremento salarial donde pretendemos ser mas flexibles y otorgar dicho incremento en caso de que cualquiera de los dos valores involucrados sea mayor al limite, es decir, incrementar el salario si la antigüedad es mayor a 10 años, o la edad es mayor a 40.

Si antigüedad > 10 || edad > 40, entonces
     Recibe un incremento
Sino
     No recibe un incremento
Fin

Nuevamente las tablas de verdad nos podrían ayudar a visualizar el resultado de manera mas eficiente. En la disyunción (or lógico), en caso de que alguno de los elementos en la expresión resulte cierto, todo el enunciado será cierto:

El operador de negación suele ser utilizado para invertir el resultado de una expresión lógica, de manera que lo que sea falso se convertirá en cierto y viceversa.

Operador Condicional Es un operador ternario que permite realizar operaciones de asignación de manera muy sencilla y eficiente, su sintaxis es la siguiente:

          <expresión-booleana> ? <expresión-1> : <expresión-2>

La expresión booleana es evaluada, de manera que, si el valor resultante es cierto la expresión-1 será asignada, en caso contrario la expresión-2 será seleccionada. Por ejemplo:

          valor = ( n % 4 == 0 ) ? ( n * 2 ) : ( n++ );

La sentencia anterior realiza lo siguiente; primero evalúa que el residuo de n entre 4 sea igual a cero ( n % 4 == 0 ), en caso de ser cierta la expresión booleana, el resultado de ( n * 2 ) es asignado a valor, en caso contrario n es asignado, y enseguida n se incrementa( n++ ). Cabe mencionar que los paréntesis en este ejemplo no son necesarios, pero facilitan la explicación.