Ejercicio 07 — Lee un entero y clasificalo en rangos

Dificultad: rojo · Módulo 02 (Condicionales)

Enunciado

Lee un entero y clasificalo en rangos: < 0 “Negativo” == 0 “Cero” 1 a 9 “Un digito” 10 a 99 “Dos digitos” >= 100 “Tres o mas digitos”

Diagrama de flujo

Diagrama de flujo del ejercicio 07

Cómo se resuelve

El programa lee un entero y lo clasifica en cinco rangos (negativo, cero, un dígito, dos dígitos, tres o más) y, de paso, indica si es par o impar. Reúne todos los conceptos del módulo: operador ternario, encadenamiento if / else if y operadores lógicos.

  1. Paridad con operador ternario: const char *paridad = (n % 2 == 0) ? "par" : "impar";. El ternario condicion ? A : B es un if-else comprimido en una sola expresión que produce un valor; aquí ese valor es un puntero al texto "par" o "impar" que guardamos para imprimirlo luego.
  2. Clasificación por rangos con if / else if. Para los tramos intermedios necesitamos el operador lógico && (AND), que es verdadero solo si ambas comparaciones lo son: n >= 10 && n <= 99 describe exactamente “dos dígitos”.
  3. Al imprimir se combinan ambos resultados: printf("Clasificacion: %s (%s)\n", categoria, paridad).

Trampa habitual: escribir mal los rangos con &&. Un error clásico es intentar 10 <= n <= 99 como en matemáticas; en C eso no significa lo que parece (se evalúa por pasos y da un resultado sin sentido), hay que escribir siempre las dos comparaciones unidas con &&. Igual que en los ejercicios anteriores, el orden de las ramas importa: al comprobar primero n < 0 y n == 0, cuando llegas a los rangos de dígitos ya trabajas solo con positivos.

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 02: Condicionales
  Ejercicio 07 — PRACTICA (rellena los TODO)
  Enunciado: Lee un entero y clasificalo en rangos:
             < 0          -> "Negativo"
             == 0         -> "Cero"
             1 a 9        -> "Un digito"
             10 a 99      -> "Dos digitos"
             >= 100       -> "Tres o mas digitos"
  Dificultad: rojo
  Compilar: gcc -std=c11 -Wall ej07_practica.c -o ej07 && ./ej07
*/
 
#include <stdio.h>
 
int main(void) {
    int n;
 
    // TODO: pide el entero al usuario y leelo
 
    // PARTE A — operador ternario (practica)
    // TODO: usando el operador ternario (?:), asigna a un puntero a char
    //       el string "par" o "impar" segun n % 2 == 0
    //       Sintaxis: const char *paridad = (condicion) ? "par" : "impar";
 
    // PARTE B — clasificacion por rangos
    const char *categoria;
    // TODO: rellena la cadena de if / else if con cinco ramas:
    //   n < 0              -> categoria = "Negativo"
    //   n == 0             -> categoria = "Cero"
    //   n entre 1 y 9      -> categoria = "Un digito"    (usa &&)
    //   n entre 10 y 99    -> categoria = "Dos digitos"  (usa &&)
    //   resto              -> categoria = "Tres o mas digitos"
 
    // TODO: imprime "Clasificacion: <categoria> (<paridad>)"
 
    return 0;
}

Solución — cópiala y ejecútala

/*
  Curso de C — Modulo 02: Condicionales
  Ejercicio 07 — MODELO (resuelto)
  Enunciado: Lee un entero y clasificalo en rangos:
             < 0          -> "Negativo"
             == 0         -> "Cero"
             1 a 9        -> "Un digito"
             10 a 99      -> "Dos digitos"
             >= 100       -> "Tres o mas digitos"
  Dificultad: rojo
  Compilar: gcc -std=c11 -Wall ej07_modelo.c -o ej07 && ./ej07
*/
 
#include <stdio.h>
 
int main(void) {
    int n;
    printf("Introduce un entero: ");
    scanf("%d", &n);
 
    // Usamos operador ternario para ilustrar su sintaxis en el caso simple
    // (par/impar), y if-else encadenado para los rangos multiples.
 
    // Paridad como ejemplo de ternario (extra informativo):
    const char *paridad = (n % 2 == 0) ? "par" : "impar";
 
    // Clasificacion por rangos: necesitamos AND (&&) para rangos intermedios
    const char *categoria;
    if (n < 0) {
        categoria = "Negativo";
    } else if (n == 0) {
        categoria = "Cero";
    } else if (n >= 1 && n <= 9) {
        categoria = "Un digito";
    } else if (n >= 10 && n <= 99) {
        categoria = "Dos digitos";
    } else {
        // n >= 100
        categoria = "Tres o mas digitos";
    }
 
    printf("Clasificacion: %s (%s)\n", categoria, paridad);
 
    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