Programación en C/Expresiones
Vamos a tratar ahora de que el ordenador haga un poco de matemáticas para nosotros. Por ejemplo, que realice unas pocas sumas, restas multiplicaciones y divisiones.
#include <stdio.h>
#include <math.h>
int main()
{
int resultado;
resultado=5+2;
printf("Resultado de la suma: %i\n",resultado);
resultado=5-2;
printf("Resultado de la resta: %i\n",resultado);
resultado=5*2;
printf("Resultado de la multiplicación: %i\n",resultado);
resultado=5/2;
printf("Resultado de la división: %i\n",resultado);
return(0);
}
Después de grabarlo (por ejemplo, con el nombre ejemplo.c
), lo compilamos y ejecutamos, con (respectivamente):
$ gcc ejemplo.c $ ./a.out Resultado de la suma: 7 Resultado de la resta: 3 Resultado de la multiplicación: 10 Resultado de la división: 2 $
Fijémonos en la línea del principio de la función main
:
int resultado;
Esta línea lo que hace es reservar un trozo de memoria, del tamaño de un int
(normalmente 4 bytes), y asignarle el nombre resultado
, para poder después referirnos a él. A partir de este momento, podemos considerar que en nuestro programa existe una variable, que no tiene valor definido, pero a la que le podremos dar valor posteriormente.
Las líneas con printf()
ya las conocemos, pero hay algo en ellas que no habíamos visto antes. Esos %i
y la parte de resultado
son nuevas para nosotros.
La función printf()
no sólo sabe imprimir cadenas simples, como "Hola Mundo\n"
, sino también imprimir variables. Para ello, en el lugar de la cadena donde queremos que aparezca el valor de la variable, introducimos lo que se llama una cadena de conversión de printf()
. Estas cadenas siempre empiezan por %
, siendo %i
la cadena para imprimir un entero, como es en nuestro caso int resultado
. Finalmente, printf()
debe saber qué valor escribir, por eso le damos otro argumento (u otros), usando ,
como separador, que contienen las variables cuyos valores queremos mostrar.
En el resto del programa hemos visto cómo decirle al ordenador que ejecute una suma, una resta, una multiplicación y una división entera, con los operadores +
, -
, *
y /
. Es de notar que el resultado de una operación como estas entre números enteros será siempre otro entero, como se puede observar en la división, en la que no obtenemos un bonito decimal, sino un resultado entero. Además, hemos visto que el resultado de esas operaciones, que llamamos expresiones, puede ser asignado a una variable:
resultado = 7;
Esa asignación se hace mediante el operador de asignación: =
. Con él, ya conocemos cinco operadores.
Pero, como =
también es un operador, ¿cómo sabe el ordenador qué operador debe ejecutar primero? Y si es un operador, ¿por qué no da un resultado? ¿No crea una expresión?
Operadores | Precedencia |
---|---|
* /
|
Izq. a Der. |
+ -
|
Izq. a Der. |
=
|
Der. a Izq. |
Empezando por las últimas preguntas, el operador de asignación sí crea una expresión, como los operadores de suma, resta, multiplicación y división, y esa expresión tiene un resultado, que es el valor que obtiene el lado izquierdo al realizar la operación. En cuanto a saber qué se debe ejecutar primero, el ordenador tiene una lista de precedencia, según la cual siempre ejecuta primero las multiplicaciones y divisiones, de izquierda a derecha, a continuación las sumas y restas, de izquierda a derecha, y a continuación las asignaciones, de derecha a izquierda. Para más detalles acerca de la precedencia de los operadores ver el anexo de los operadores.
En cuanto a los caracteres de punto y coma, notamos aquí que una expresión también puede ser una sentencia por sí misma, sin necesidad de que haya ninguna función. De hecho, una sentencia puede no tener siquiera una expresión. La línea:
;
es una sentencia perfectamente válida, la sentencia vacía, que sera útil en puntos donde el lenguaje requiera una sentencia pero no sea necesaria para nuestro programa.