HOWTO · C

El operador módulo en C

Este artículo presenta cómo utilizar el operador módulo en C

Este artículo demostrará múltiples métodos de cómo usar el operador módulo en C.

Usar el Operador Modulo % para Calcular el Resto en la División en C

El operador módulo % es uno de los operadores aritméticos binarios en el lenguaje C. Produce el resto después de la división de dos números dados. El operador módulo no puede ser aplicado a números de punto flotante como float o double. En el siguiente código de ejemplo, mostramos el caso más simple posible para usar el operador %, imprimiendo los resultados del módulo 9 del array int dada.

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  int arr[8] = {10, 24, 17, 35, 65, 89, 55, 77};

  for (int i = 0; i < 8; ++i) {
    printf("%d/%d yields the remainder of - %d\n", arr[i], 9, arr[i] % 9);
  }

  exit(EXIT_SUCCESS);
}

Producción :

10/9 yields the remainder of - 1
24/9 yields the remainder of - 6
17/9 yields the remainder of - 8
35/9 yields the remainder of - 8
65/9 yields the remainder of - 2
89/9 yields the remainder of - 8
55/9 yields the remainder of - 1
77/9 yields the remainder of - 5

Uso del operador % para implementar la función de comprobación del año bisiesto en C

Alternativamente, podemos utilizar el operador % para implementar funciones más complejas. El siguiente código de ejemplo demuestra la función booleana isLeapYear que comprueba si el año dado es bisiesto o no. Tenga en cuenta que un año se considera bisiesto si su valor es divisible por 4 pero no es divisible por 100. Además, si el valor del año es divisible por 400, es un año bisiesto.

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

bool isLeapYear(int year) {
  if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
    return true;
  else
    return false;
}

int main(void) {
  uint year = 2021;
  isLeapYear(year) ? printf("%d is leap\n", year)
                   : printf("%d is not leap\n", year);

  exit(EXIT_SUCCESS);
}

Producción :

2021 is not leap

Usar el Operador Modulo % para generar números aleatorios en el rango de enteros dado en C

Otra característica útil del operador módulo es limitar el piso superior de los números durante el proceso de generación de números aleatorios. Es decir, supongamos que tenemos una función que genera el número entero aleatorio. En ese caso, podemos tomar el resto de la división entre el número devuelto y el valor que necesitamos que sea el máximo (definido como macro MAX en el siguiente ejemplo). Tenga en cuenta que el uso de las funciones srand y rand para la generación de números aleatorios no es un método robusto, y las aplicaciones que requieran números aleatorios de calidad deben emplear otras facilidades.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define COUNT 10
#define MAX 100

int main(void) {
  srand(time(NULL));
  for (int i = 0; i < COUNT; i++) {
    printf("%d, ", rand() % MAX);
  }
  printf("\b\b  \n");

  exit(EXIT_SUCCESS);
}

Producción :

3, 76, 74, 93, 51, 65, 76, 31, 61, 97