Ejercicio 07 — Cociente y resto sin usar % para el resto

Dificultad: rojo · Módulo 01 (Variables, tipos y entrada/salida)

Enunciado

Cociente y resto sin usar % para el resto; detectar division por cero.

Diagrama de flujo

Diagrama de flujo del ejercicio 07

Cómo se resuelve

El ejercicio rojo del módulo: junta un cálculo con “truco” y la defensa ante una entrada peligrosa.

  1. Comprobar antes de dividir. Dividir un entero entre cero es un error grave en C (el programa revienta). Por eso, antes de calcular nada:
    if (divisor == 0) {
        printf("Error: división por cero.\n");
        return 1;
    }
    El return 1 sale del programa con un código de error distinto de 0, la convención con la que un programa le dice al sistema operativo “he terminado mal”. (El if lo verás a fondo en el módulo 02; aquí basta la forma if (condición) { ... }.)
  2. Cociente: dividendo / divisor. Entre enteros, / da la división entera (trunca hacia cero): 7 / 2 es 3, no 3.5.
  3. Resto sin usar %: en lugar del operador módulo, se aplica su definición: resto = dividendo - cociente * divisor. Con 7 y 2: 7 - 3*2 = 1. Es exactamente lo que haría 7 % 2.

La idea transferible: valida las entradas peligrosas antes de operar con ellas. Comprobar el divisor a cero es el primer ejemplo de programación defensiva, algo que harás toda tu vida.

Para practicar — cópialo en Dev-C++

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

/*
 * Curso de C — Modulo 01: Variables, tipos y entrada/salida
 * Ejercicio 07 — PRACTICA (rellena los TODO)
 * Enunciado: Cociente y resto sin usar % para el resto; detectar division por cero.
 * Dificultad: rojo
 * Compilar: gcc -std=c11 -Wall ej07_practica.c -o ej07 && ./ej07
 */
#include <stdio.h>
 
int main(void) {
    // TODO: declara dos enteros 'dividendo' y 'divisor', inicializados a 0
 
    // TODO: lee el dividendo del usuario
 
    // TODO: lee el divisor del usuario
 
    // TODO: comprueba si el divisor es 0.
    //       Si lo es, muestra "Error: división por cero.\n" y haz return 1.
    //       (el if lo veras en detalle en el modulo 02, pero la sintaxis es:
    //        if (condicion) { ... }  )
 
    // TODO: calcula el cociente usando division entera: dividendo / divisor
    //       Guarda el resultado en una variable int llamada 'cociente'
 
    // TODO: calcula el resto SIN usar el operador %
    //       Formula: resto = dividendo - cociente * divisor
    //       Guarda el resultado en una variable int llamada 'resto'
 
    // TODO: muestra "Cociente: %d\n" y "Resto: %d\n"
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 01: Variables, tipos y entrada/salida
 * Ejercicio 07 — MODELO (resuelto)
 * Enunciado: Cociente y resto sin usar % para el resto; detectar division por cero.
 * Dificultad: rojo
 * Compilar: gcc -std=c11 -Wall ej07_modelo.c -o ej07 && ./ej07
 */
#include <stdio.h>
 
int main(void) {
    int dividendo = 0, divisor = 0;
 
    printf("Dividendo: ");
    scanf("%d", &dividendo);
    printf("Divisor: ");
    scanf("%d", &divisor);
 
    // Comprobamos division por cero ANTES de calcular
    if (divisor == 0) {
        printf("Error: división por cero.\n");
        return 1;   // devolvemos 1 para indicar error al sistema operativo
    }
 
    // Cociente: division entera en C trunca hacia cero
    int cociente = dividendo / divisor;
 
    // Resto sin usar %: resto = dividendo - cociente * divisor
    // (equivalente matematico a la definicion de division euclidiana)
    int resto = dividendo - cociente * divisor;
 
    printf("Cociente: %d\n", cociente);
    printf("Resto: %d\n",    resto);
 
    return 0;
}

Cómo usarlo

Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.

Conexiones