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

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.
- Paridad con operador ternario:
const char *paridad = (n % 2 == 0) ? "par" : "impar";. El ternariocondicion ? A : Bes unif-elsecomprimido 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. - 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 <= 99describe exactamente “dos dígitos”. - 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.