Operadores en C - Operadores Aritméticos


El concepto de operador aritmético en el sentido matemático se traduce bien a su contrapartida informática. Un operador aritmético es un símbolo que indica al compilador el cálculo que deseamos realizar; ese cálculo afectará a uno o más valores, llamados operandos, y producirá un cierto resultado. Por ejemplo, el operador suma (+) admite dos operandos, los sumandos, y produce como resultado la suma de ambos. Los operadores aritméticos, junto con las constantes y variables numéricas, permiten formar expresiones análogas a las algebráicas habituales. Estas expresiones son traducidas por el compilador al código máquina correspondiente, que se ejecuta con objeto de calcular el valor de la expresión en cuestión. La lista de operadores ariméticos en C es la siguiente:


Nombre Símbolo Comentarios
Multiplicación * El tipo del resultado es el tipo del factor de mayor precisión; por ejemplo, si se multiplica un entero int por un float, el resultado es de tipo float Si se multiplican int, el resultado es de tipo int, etc.. Este proceso de promoción de tipos para evaluar la expresión tiene por objeto mantener en lo posible la información almacenada en el valor de mayor precisión empleado en ésa expresión.
División / El tipo del resultado es el tipo del operando de mayor precisión; por ejemplo, si se divide un entero int por un float, el resultado es de tipo float. La división de enteros produce un entero, que es el cociente entero de la división (sin decimales). La división de dos valores float o double produce, respectivamente, un valor float o double.
Módulo % Sólo es aplicable a variables enteras, produce el resto de la división entera.
Suma + El tipo del resultado es el tipo del sumando de mayor precisión. El operador suma admite valores enteros y reales. Este operador, a diferencia de lo que ocurre en otros lenguajes, no denota la concatenación de cadenas.
Resta - Su comportamiento es análogo al del operador suma. El tipo del resultado es el tipo del valor de mayor precisión. Como curiosidad, el operador - antepuesto a una variable numérica sirve para cambiar su signo, en el sentido matemático habitual. Se trata de un operador unario, esto es, de un operador que admite un único argumento.
Asignación = La forma general de una expresión de asignación simple es como sigue:
lvalue = rvalue;
en donde rvalue y lvalue son dos expresiones tales que el resultado obtenido al evaluar rvalue es compatible con la variable señalada por el resultado de evaluar lvalue. En el caso de una variable, el lvalue es la dirección de la misma. Los siguientes son ejemplos válidos de expresiones de asignación:
		x = 3;
		x = x + y;
		x = strcat(cad_1, cad_2);
		x = (y == 7);
La evaluación de este tipo de expresiones se realiza en varias fases:
  • Evaluación del rvalue.
  • Evaluación del lvalue.
  • Copia del valor obtenido al evaluar el rvalue en la variable cuya dirección es el resultado de evaluar el lvalue.
Las expresiones de asignación son, en sí, expresiones: al ser evaluadas, producen como resultado el valor del rvalue. Por tanto, tiene sentido la expresión de asignación compuesta:
x = y = z = t = 7;
que dará el valor 7 a las variables x, y, z y t. El operador de asignación tiene menor prioridad que todos los operadores aritméticos, con objeto de asegurar que antes de asignar un valor se calcule correctamente la expresión correspondiente.


Ejercicios propuestos

  1. Ejercicio 0301r01.-Construir un programa que lea tres números enteros del teclado y muestre su media en pantalla. Utilizar la función fscanf(). Utilizar el operador de redirección para hacer que el programa lea los números de un archivo de disco. ¿Cómo se modificaría el programa para que leyera los tres números de disco sin usar el operador de redirección?

  2. Ejercicio 0301r02.-Construir un programa que admita dos enteros a través de la línea de órdenes. A continuación, el programa solicitará un entero cuyo valor se encuentre entre los valores de los dos enteros anteriores.

  3. Ejercicio 0301r03.-Construir un programa que admita un número indeterminado de elementos de coma flotante a través del teclado y calcule su media. El programa dejará de admitir números y calculará la media cuando el usuario pulse 'q'. Pista: fscanf() produce como resultado el número de conversiones que ha efectuado. Si se pulsa 'q', no efectúa conversión alguna, luego devuelve un 0.

  4. Ejercicio 0301r03bis.-Construir un programa que admita un número indeterminado de elementos de coma flotante a través de la línea de órdenes y calcule su media.

  5. Ejercicio 0301r04.-Construir un programa que admita tres números de coma flotante a través de la línea de órdenes. Una vez leídos, el programa mostrará el volumen de un prisma que tuviera esas aristas. Pista: Consultar 0108.

  6. Ejercicio 0301r05.-Construir un programa que construya una lista formada por 1.000.000 de números de coma flotante. El programa debe construir la lista, escribirla en disco y leerla de nuevo. El programa debe leer y escribir los números uno a uno. Calcular el tiempo total invertido, empleando por ejemplo la utilidad time.

  7. Ejercicio 0301r05bis.-Construir un programa que construya una lista formada por 1.000.000 de números de coma flotante. El programa debe construir la lista, escribirla en disco y leerla de nuevo. El programa debe leer y escribir los números en bloque. Calcular el tiempo total invertido, empleando por ejemplo la utilidad time.

  8. Ejercicio 0301r06.-Construir un programa que admita un entero a través de la línea de órdenes. El programa debe mostrar todos los números primos menores que el número proporcionado.

  9. Ejercicio 0301r07.-Construir un programa que admita un número y un nombre de archivo a través de la línea de órdenes. El nombre de archivo, en caso de estar vacío, tomará un valor predeterminado. El programa debe almacenar en el archivo indicado todos los números primos menores que el número proporcionado a través de la línea de órdenes.

  10. Ejercicio 0301r08.-Un programa recibe una lista de números enteros, positivos y negativos. Se pide calcular la suma de estos números, detectando posibles errores de desbordamiento.